正在显示
8 个修改的文件
包含
253 行增加
和
24 行删除
此 diff 太大无法显示。
| @@ -28,7 +28,7 @@ import MediaModule from 'apes/MediaModule'; | @@ -28,7 +28,7 @@ import MediaModule from 'apes/MediaModule'; | ||
| 28 | import UTF8 from 'utf-8'; | 28 | import UTF8 from 'utf-8'; |
| 29 | 29 | ||
| 30 | let loger = Loger.getLoger('McuClient'); | 30 | let loger = Loger.getLoger('McuClient'); |
| 31 | -let _sdkInfo = {"version": "v1.25.2.201705025", "author": "www.3mang.com"}; | 31 | +let _sdkInfo = {"version": "v1.27.10.201705026", "author": "www.3mang.com"}; |
| 32 | 32 | ||
| 33 | //APE | 33 | //APE |
| 34 | let _sass; | 34 | let _sass; |
| @@ -149,6 +149,10 @@ export default class MessageEntrance extends Emiter { | @@ -149,6 +149,10 @@ export default class MessageEntrance extends Emiter { | ||
| 149 | //chatApe | 149 | //chatApe |
| 150 | this.sendChatMsg = this._sendChatMsg.bind(this); | 150 | this.sendChatMsg = this._sendChatMsg.bind(this); |
| 151 | 151 | ||
| 152 | + //屏幕共享 | ||
| 153 | + this.publishScreenShare = this._publishScreenShare.bind(this); | ||
| 154 | + this.stopPublishScreenShare = this._stopPublishScreenShare.bind(this); | ||
| 155 | + | ||
| 152 | //videoApe | 156 | //videoApe |
| 153 | //this.getVideoPlayPath = this._getVideoPlayPath.bind(this); | 157 | //this.getVideoPlayPath = this._getVideoPlayPath.bind(this); |
| 154 | this.getVideoPublishPath = this._getVideoPublishPath.bind(this); | 158 | this.getVideoPublishPath = this._getVideoPublishPath.bind(this); |
| @@ -324,6 +328,7 @@ export default class MessageEntrance extends Emiter { | @@ -324,6 +328,7 @@ export default class MessageEntrance extends Emiter { | ||
| 324 | let data = {"nodeId": _param.nodeId}; | 328 | let data = {"nodeId": _param.nodeId}; |
| 325 | if (_video_ape) { | 329 | if (_video_ape) { |
| 326 | _video_ape.stopPublishVideo(data); | 330 | _video_ape.stopPublishVideo(data); |
| 331 | + _video_ape.stopPublishScreenShare(data); | ||
| 327 | } | 332 | } |
| 328 | if (_audio_ape) { | 333 | if (_audio_ape) { |
| 329 | _audio_ape.stopPublishAudio(data); | 334 | _audio_ape.stopPublishAudio(data); |
| @@ -555,7 +560,7 @@ export default class MessageEntrance extends Emiter { | @@ -555,7 +560,7 @@ export default class MessageEntrance extends Emiter { | ||
| 555 | GlobalConfig.MS_PLAY_HLS_IP =ipItem;//ip包含了端口 | 560 | GlobalConfig.MS_PLAY_HLS_IP =ipItem;//ip包含了端口 |
| 556 | GlobalConfig.MS_PLAY_HLS_PORT =""; | 561 | GlobalConfig.MS_PLAY_HLS_PORT =""; |
| 557 | loger.log('videoCDNAddr>初始->MSHls', GlobalConfig.MS_PLAY_HLS_IP ); | 562 | loger.log('videoCDNAddr>初始->MSHls', GlobalConfig.MS_PLAY_HLS_IP ); |
| 558 | - }else if(ipItem.indexOf('rtmppush')>=0){ | 563 | + }else if(ipItem.indexOf('rtmppull')>=0){ |
| 559 | //直播的时候rtmp拉流地址 | 564 | //直播的时候rtmp拉流地址 |
| 560 | GlobalConfig.MS_PLAY_RTMP_IP=ipItem;//ip包含了端口 | 565 | GlobalConfig.MS_PLAY_RTMP_IP=ipItem;//ip包含了端口 |
| 561 | GlobalConfig.MS_PLAY_RTMP_PORT =''; | 566 | GlobalConfig.MS_PLAY_RTMP_PORT =''; |
| @@ -1067,6 +1072,7 @@ export default class MessageEntrance extends Emiter { | @@ -1067,6 +1072,7 @@ export default class MessageEntrance extends Emiter { | ||
| 1067 | //停止推流 | 1072 | //停止推流 |
| 1068 | if (_video_ape) { | 1073 | if (_video_ape) { |
| 1069 | _video_ape.stopPublishVideo(); | 1074 | _video_ape.stopPublishVideo(); |
| 1075 | + _video_ape.stopPublishScreenShare(); | ||
| 1070 | } | 1076 | } |
| 1071 | if (_audio_ape) { | 1077 | if (_audio_ape) { |
| 1072 | _audio_ape.stopPublishAudio(); | 1078 | _audio_ape.stopPublishAudio(); |
| @@ -1123,6 +1129,19 @@ export default class MessageEntrance extends Emiter { | @@ -1123,6 +1129,19 @@ export default class MessageEntrance extends Emiter { | ||
| 1123 | } | 1129 | } |
| 1124 | } | 1130 | } |
| 1125 | 1131 | ||
| 1132 | + //屏幕共享 | ||
| 1133 | + //开始屏幕共享 | ||
| 1134 | + _publishScreenShare(_param){ | ||
| 1135 | + if(_video_ape){ | ||
| 1136 | + _video_ape.publishScreenShare(_param); | ||
| 1137 | + } | ||
| 1138 | + } | ||
| 1139 | + //停止屏幕共享 | ||
| 1140 | + _stopPublishScreenShare(_param){ | ||
| 1141 | + if(_video_ape){ | ||
| 1142 | + _video_ape.stopPublishScreenShare(_param); | ||
| 1143 | + } | ||
| 1144 | + } | ||
| 1126 | //VidoeApe | 1145 | //VidoeApe |
| 1127 | videoUpdate(_data) { | 1146 | videoUpdate(_data) { |
| 1128 | //视频同步的消息发送改变,需要通知ferApe模块中的用户更新状态 | 1147 | //视频同步的消息发送改变,需要通知ferApe模块中的用户更新状态 |
| @@ -61,6 +61,22 @@ MessageTypes.AUDIO_GET_PUBLISH_PATH= "audio_get_publish_path";//获å–音频推æ | @@ -61,6 +61,22 @@ MessageTypes.AUDIO_GET_PUBLISH_PATH= "audio_get_publish_path";//获å–音频推æ | ||
| 61 | MessageTypes.AUDIO_PUBLISH_RESULT= "audio_publish_result";//获取音频推流结果 | 61 | MessageTypes.AUDIO_PUBLISH_RESULT= "audio_publish_result";//获取音频推流结果 |
| 62 | 62 | ||
| 63 | 63 | ||
| 64 | +//屏幕共享 | ||
| 65 | +MessageTypes.SCREEN_SHARE_PLAY ="screen_share_play";// 屏幕共享播放视频 | ||
| 66 | +MessageTypes.SCREEN_SHARE_STOP ="screen_share_stop"; //屏幕共享停止视频 | ||
| 67 | +MessageTypes.SCREEN_SHARE_UPDATE ="screen_share_update";// // | ||
| 68 | +MessageTypes.SCREEN_SHARE_BROADCAST= "screen_share_broadcast";//'屏幕共享控制广播消息; | ||
| 69 | +MessageTypes.SCREEN_SHARE_GET_PUBLISH_PATH= "screen_share_get_publish_path";//获取屏幕共享推流地址 | ||
| 70 | +MessageTypes.SCREEN_SHARE_PUBLISH_RESULT= "screen_share_publish_result";//获取屏幕共享推流结果 | ||
| 71 | + | ||
| 72 | +//sdk中屏幕共享的事件监听 | ||
| 73 | +MessageTypes.PUBLISH_SCREEN_SHARE_SUCCESS= "publish_screen_share_success";//屏幕共享流发布成 | ||
| 74 | +MessageTypes.PUBLISH_SCREEN_SHARE_FAILE= "publish_screen_share_faile";//屏幕共享流发布失败 | ||
| 75 | +MessageTypes.PUBLISH_SCREEN_SHARE_CLOSE= "publish_screen_share_close";//屏幕共享流关闭 | ||
| 76 | +MessageTypes.PUBLISH_SCREEN_SHARE_DISCONNECT= "publish_screen_share_disconnect";//屏幕共享服务器没有连接 | ||
| 77 | +MessageTypes.PUBLISH_SCREEN_SHARE_CONNECTED= "publish_screen_share_connected";//获取屏幕共享服务器已经连接 | ||
| 78 | + | ||
| 79 | + | ||
| 64 | //文档模块事件定义 | 80 | //文档模块事件定义 |
| 65 | MessageTypes.DOC_DELETE="document_delete";//'document.delete';//删除文档 | 81 | MessageTypes.DOC_DELETE="document_delete";//'document.delete';//删除文档 |
| 66 | MessageTypes.DOC_UPDATE ="document_update";// 'document.update';//更新文档(添加、变更) | 82 | MessageTypes.DOC_UPDATE ="document_update";// 'document.update';//更新文档(添加、变更) |
| @@ -380,7 +380,12 @@ export default class Ape extends Emiter { | @@ -380,7 +380,12 @@ export default class Ape extends Emiter { | ||
| 380 | ); | 380 | ); |
| 381 | uniformPdu.data = appPdu.toArrayBuffer(); | 381 | uniformPdu.data = appPdu.toArrayBuffer(); |
| 382 | // Mcu发送 | 382 | // Mcu发送 |
| 383 | - this.mcu.send(uniformPdu); | 383 | + if(this.mcu){ |
| 384 | + this.mcu.send(uniformPdu); | ||
| 385 | + }else { | ||
| 386 | + loger.warn('MCU为空->无法发送消息',uniformPdu); | ||
| 387 | + } | ||
| 388 | + | ||
| 384 | } | 389 | } |
| 385 | 390 | ||
| 386 | sendChatUniform(appPdu, top) { | 391 | sendChatUniform(appPdu, top) { |
| @@ -109,6 +109,7 @@ ApeConsts.CHANNEL_STATUS_OPENING = 1;///< 已经占用成功 | @@ -109,6 +109,7 @@ ApeConsts.CHANNEL_STATUS_OPENING = 1;///< 已经占用成功 | ||
| 109 | ApeConsts.MEDIA_TYPE_DEFAULT=0;//没有类型 | 109 | ApeConsts.MEDIA_TYPE_DEFAULT=0;//没有类型 |
| 110 | ApeConsts.MEDIA_TYPE_VIDEO=1;//视频流(包含音频) | 110 | ApeConsts.MEDIA_TYPE_VIDEO=1;//视频流(包含音频) |
| 111 | ApeConsts.MEDIA_TYPE_AUDIO=2;//音频流 | 111 | ApeConsts.MEDIA_TYPE_AUDIO=2;//音频流 |
| 112 | +ApeConsts.MEDIA_TYPE_SHARE=3;//屏幕共享 | ||
| 112 | 113 | ||
| 113 | //return返回值状态 | 114 | //return返回值状态 |
| 114 | ApeConsts.RETURN_SUCCESS=0;//成功 | 115 | ApeConsts.RETURN_SUCCESS=0;//成功 |
| @@ -17,6 +17,7 @@ class MediaModule { | @@ -17,6 +17,7 @@ class MediaModule { | ||
| 17 | this.maxMediaChannel=0; | 17 | this.maxMediaChannel=0; |
| 18 | this.mediaType=ApeConsts.MEDIA_TYPE_DEFAULT; | 18 | this.mediaType=ApeConsts.MEDIA_TYPE_DEFAULT; |
| 19 | this.MEDIA_OBJ_TABLE_ID=0; | 19 | this.MEDIA_OBJ_TABLE_ID=0; |
| 20 | + this.SCREENSHARING_OBJ_TABLE_ID=ApeConsts.SCREENSHARING_OBJ_TABLE_ID; | ||
| 20 | } | 21 | } |
| 21 | 22 | ||
| 22 | //获取播流地址 | 23 | //获取播流地址 |
| @@ -129,7 +130,7 @@ class MediaModule { | @@ -129,7 +130,7 @@ class MediaModule { | ||
| 129 | getMediaPublishPathForInVisible(_param) { | 130 | getMediaPublishPathForInVisible(_param) { |
| 130 | let mediaLen=Object.keys(MediaModule.allMediaChannelsList={}).length; | 131 | let mediaLen=Object.keys(MediaModule.allMediaChannelsList={}).length; |
| 131 | let freeChannel=(this.MEDIA_OBJ_TABLE_ID-20-mediaLen)||GlobalConfig.nodeId; | 132 | let freeChannel=(this.MEDIA_OBJ_TABLE_ID-20-mediaLen)||GlobalConfig.nodeId; |
| 132 | - loger.log('getMediaPublishPathForInVisible->'+freeChannel+" mediaLen:"+mediaLen); | 133 | + loger.log('监课获取推流地址->'+freeChannel+" mediaLen:"+mediaLen); |
| 133 | //默认方式推流 | 134 | //默认方式推流 |
| 134 | let pubType="live"; | 135 | let pubType="live"; |
| 135 | //flash推流 | 136 | //flash推流 |
| @@ -165,6 +166,47 @@ class MediaModule { | @@ -165,6 +166,47 @@ class MediaModule { | ||
| 165 | }; | 166 | }; |
| 166 | } | 167 | } |
| 167 | 168 | ||
| 169 | + //桌面共享获取推流地址,频道号由外部传入 | ||
| 170 | + getMediaPublishPathForScreenShare(_shareChannel,_publishType) { | ||
| 171 | + | ||
| 172 | + let shareChannel=_shareChannel||this.SCREENSHARING_OBJ_TABLE_ID; | ||
| 173 | + loger.log('桌面共享获取推流地址->'+shareChannel); | ||
| 174 | + //默认方式推流 | ||
| 175 | + let pubType="flash"; | ||
| 176 | + //flash推流 | ||
| 177 | + if(_publishType=="live"){ | ||
| 178 | + pubType ="live"; | ||
| 179 | + } | ||
| 180 | + | ||
| 181 | + //端口,有端口就显示 ":xxx",没有端口就是"" | ||
| 182 | + let port = (GlobalConfig.MS_PUBLISH_PORT == "" || GlobalConfig.MS_PUBLISH_PORT == null) ? "":":" + GlobalConfig.MS_PUBLISH_PORT; | ||
| 183 | + //时间戳 | ||
| 184 | + let timestamp = EngineUtils.creatTimestamp(); | ||
| 185 | + | ||
| 186 | + let streamId=GlobalConfig.siteId+"_" | ||
| 187 | + + GlobalConfig.classId + "_"+GlobalConfig.userId | ||
| 188 | + +"_" + shareChannel + "_" + timestamp; | ||
| 189 | + | ||
| 190 | + //生成推流地址和推流数据(同步数据的时候用) | ||
| 191 | + let publishUrl = "rtmp://" + GlobalConfig.MS_PUBLISH_IP | ||
| 192 | + + port + "/"+pubType+"/" +streamId; | ||
| 193 | + | ||
| 194 | + publishUrl=publishUrl.replace("::",":");//如果ip和port之间有多的:需要去掉 | ||
| 195 | + /* this.needPublishMediaChannel[publishUrl]={ | ||
| 196 | + "channelId":shareChannel, | ||
| 197 | + "publishUrl":publishUrl, | ||
| 198 | + "streamId":streamId, | ||
| 199 | + "timestamp":timestamp, | ||
| 200 | + "nodeId":GlobalConfig.nodeId | ||
| 201 | + };*/ | ||
| 202 | + return {"code": ApeConsts.RETURN_SUCCESS, | ||
| 203 | + "data":"", | ||
| 204 | + "mediaId":shareChannel, | ||
| 205 | + "publishUrl": publishUrl, | ||
| 206 | + "streamId":streamId | ||
| 207 | + }; | ||
| 208 | + } | ||
| 209 | + | ||
| 168 | //获取当前空闲的channel,返回值为0代表没有空闲的,否则返回的就是空闲的channelId | 210 | //获取当前空闲的channel,返回值为0代表没有空闲的,否则返回的就是空闲的channelId |
| 169 | getFreeMediaChannel() { | 211 | getFreeMediaChannel() { |
| 170 | let counter = 0; | 212 | let counter = 0; |
| @@ -10,7 +10,7 @@ import MessageTypes from 'MessageTypes'; | @@ -10,7 +10,7 @@ import MessageTypes from 'MessageTypes'; | ||
| 10 | import GlobalConfig from 'GlobalConfig'; | 10 | import GlobalConfig from 'GlobalConfig'; |
| 11 | import EngineUtils from 'EngineUtils'; | 11 | import EngineUtils from 'EngineUtils'; |
| 12 | import MediaModule from "./MediaModule"; | 12 | import MediaModule from "./MediaModule"; |
| 13 | - | 13 | +import ShareApe from './ShareApe'; |
| 14 | let loger = Loger.getLoger('VideoApe'); | 14 | let loger = Loger.getLoger('VideoApe'); |
| 15 | 15 | ||
| 16 | class VideoApe extends Ape { | 16 | class VideoApe extends Ape { |
| @@ -25,6 +25,13 @@ class VideoApe extends Ape { | @@ -25,6 +25,13 @@ class VideoApe extends Ape { | ||
| 25 | this.mediaModule.MEDIA_OBJ_TABLE_ID=ApeConsts.VIDEO_OBJ_TABLE_ID; | 25 | this.mediaModule.MEDIA_OBJ_TABLE_ID=ApeConsts.VIDEO_OBJ_TABLE_ID; |
| 26 | this.mediaModule.mediaChannels={}; | 26 | this.mediaModule.mediaChannels={}; |
| 27 | this.mediaModule.mediaType=ApeConsts.MEDIA_TYPE_VIDEO; | 27 | this.mediaModule.mediaType=ApeConsts.MEDIA_TYPE_VIDEO; |
| 28 | + this.shareApe=new ShareApe(); | ||
| 29 | + this.shareApe.on(MessageTypes.PUBLISH_SCREEN_SHARE_SUCCESS,this.onPublishScreenShareSuccess.bind(this)); | ||
| 30 | + this.shareApe.on(MessageTypes.PUBLISH_SCREEN_SHARE_FAILE,this.onPublishScreenShareFaile.bind(this)); | ||
| 31 | + this.shareApe.on(MessageTypes.PUBLISH_SCREEN_SHARE_CLOSE,this.onPublishScreenShareClose.bind(this)); | ||
| 32 | + this.shareApe.on(MessageTypes.PUBLISH_SCREEN_SHARE_DISCONNECT,this.onPublishScreenShareDisconnect.bind(this)); | ||
| 33 | + this.shareApe.on(MessageTypes.PUBLISH_SCREEN_SHARE_CONNECTED,this.onPublishScreenShareConnected.bind(this)); | ||
| 34 | + | ||
| 28 | 35 | ||
| 29 | // Ape Models | 36 | // Ape Models |
| 30 | this.registerKey(this._session_id, this._session_name, this._session_tag, new ArrayBuffer); | 37 | this.registerKey(this._session_id, this._session_name, this._session_tag, new ArrayBuffer); |
| @@ -176,6 +183,117 @@ class VideoApe extends Ape { | @@ -176,6 +183,117 @@ class VideoApe extends Ape { | ||
| 176 | this._releaseNodeIdAllChannel(nodeId); | 183 | this._releaseNodeIdAllChannel(nodeId); |
| 177 | } | 184 | } |
| 178 | } | 185 | } |
| 186 | + | ||
| 187 | + //==========================屏幕共享========================================================================= | ||
| 188 | + //监听屏幕共享发布成功 | ||
| 189 | + onPublishScreenShareSuccess(){ | ||
| 190 | + loger.log('屏幕共享推流成功之后才能更新同步消息->'); | ||
| 191 | + //屏幕共享推流成功之后才能更新同步消息 | ||
| 192 | + let channelInfo=this.shareApe.getPublishChannelInfo(); | ||
| 193 | + this.sendTableUpdateHandler(channelInfo); | ||
| 194 | + this._emit( MessageTypes.PUBLISH_SCREEN_SHARE_SUCCESS,{"code": ApeConsts.RETURN_SUCCESS, "data":"桌面共享推流!","mediaId":channelInfo.channelId}); | ||
| 195 | + return {"code": ApeConsts.RETURN_SUCCESS, "data":"桌面共享推流!","mediaId":channelInfo.channelId}; | ||
| 196 | + } | ||
| 197 | + //屏幕共享连接打开 | ||
| 198 | + onPublishScreenShareFaile(){ | ||
| 199 | + loger.log('屏幕共享推流失败->'); | ||
| 200 | + this._emit(MessageTypes.PUBLISH_SCREEN_SHARE_FAILE); | ||
| 201 | + } | ||
| 202 | + //屏幕共享连接关闭 | ||
| 203 | + onPublishScreenShareClose(){ | ||
| 204 | + loger.log('屏幕共享推流关闭->'); | ||
| 205 | + this._emit(MessageTypes.PUBLISH_SCREEN_SHARE_CLOSE); | ||
| 206 | + } | ||
| 207 | + //屏幕共享连接失败 | ||
| 208 | + onPublishScreenShareDisconnect(){ | ||
| 209 | + loger.log('屏幕共享服务器连接失败->'); | ||
| 210 | + this._emit(MessageTypes.PUBLISH_SCREEN_SHARE_DISCONNECT); | ||
| 211 | + } | ||
| 212 | + //屏幕共享连接失败 | ||
| 213 | + onPublishScreenShareConnected(){ | ||
| 214 | + loger.log('屏幕共享服务器连接成功->'); | ||
| 215 | + this._emit(MessageTypes.PUBLISH_SCREEN_SHARE_CONNECTED); | ||
| 216 | + } | ||
| 217 | + //桌面共享推流 | ||
| 218 | + publishScreenShare(_param) { | ||
| 219 | + if(!this.mcu.connected){ | ||
| 220 | + loger.warn(GlobalConfig.getCurrentStatus()); | ||
| 221 | + this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"已经断开连接!","mediaId":0}); | ||
| 222 | + return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"}; | ||
| 223 | + } | ||
| 224 | + | ||
| 225 | + /* if (_param == null||_param.publishUrl == null) | ||
| 226 | + { | ||
| 227 | + loger.warn('桌面共享推流->参数错误', _param); | ||
| 228 | + this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); | ||
| 229 | + this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"桌面共享推流参数错误!","mediaId":0}); | ||
| 230 | + return {"code": ApeConsts.RETURN_FAILED, "data": "桌面共享推流参数错误"}; | ||
| 231 | + }*/ | ||
| 232 | + /* | ||
| 233 | + //根据推流的地址获取对应的频道信息 | ||
| 234 | + let needPublishChannelInfo=this.mediaModule.getNeedPublishMediaChannel(_param.publishUrl); | ||
| 235 | + if(needPublishChannelInfo==null){ | ||
| 236 | + loger.warn('桌面共享推流->推流数据已经无效', _param); | ||
| 237 | + this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"推流数据已经无效!","mediaId":0}); | ||
| 238 | + return {"code": ApeConsts.RETURN_FAILED, "data": "推流数据已经无效"}; | ||
| 239 | + }*/ | ||
| 240 | + | ||
| 241 | + /*//判断当前是否还有空闲的channle | ||
| 242 | + let freeChannel = this.mediaModule.getFreeMediaChannel(); | ||
| 243 | + if (freeChannel == 0) { | ||
| 244 | + loger.warn("推流->不能再打开更多的设备 "); | ||
| 245 | + this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"不能再打开更多的设备!","mediaId":0}); | ||
| 246 | + return {"code": ApeConsts.RETURN_FAILED, "data": "不能再打开更多的设备","mediaChannels":this.mediaModule.mediaChannels}; | ||
| 247 | + } | ||
| 248 | + | ||
| 249 | + | ||
| 250 | + //判断当前的频道是否已经占用 | ||
| 251 | + if(this.mediaModule.checkChannelIsOpening(needPublishChannelInfo.channelId)){ | ||
| 252 | + if(needPublishChannelInfo.nodeId==GlobalConfig.nodeId){ | ||
| 253 | + loger.warn(needPublishChannelInfo.channelId,"已经推送过消息,不需要再次推送"); | ||
| 254 | + this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId}); | ||
| 255 | + return {"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId}; | ||
| 256 | + }else { | ||
| 257 | + loger.warn(needPublishChannelInfo.channelId,"频道已经被占用"); | ||
| 258 | + this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaId":0}); | ||
| 259 | + return {"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaChannels":this.mediaModule.mediaChannels}; | ||
| 260 | + } | ||
| 261 | + }*/ | ||
| 262 | + | ||
| 263 | + /* let channelInfo=this.mediaModule.getDefaultChannelInfo(); | ||
| 264 | + channelInfo.owner=GlobalConfig.nodeId; | ||
| 265 | + channelInfo.status=ApeConsts.CHANNEL_STATUS_OPENING; | ||
| 266 | + channelInfo.channelId=needPublishChannelInfo.channelId; | ||
| 267 | + channelInfo.streamId=needPublishChannelInfo.streamId;//按规则拼接的流名称 | ||
| 268 | + channelInfo.timestamp=needPublishChannelInfo.timestamp;//时间戳 | ||
| 269 | + channelInfo.mediaType=ApeConsts.MEDIA_TYPE_SHARE;//类型为屏幕共享*/ | ||
| 270 | + | ||
| 271 | + let publishType='flash'; | ||
| 272 | + if(_param&&_param.type=='live'){ | ||
| 273 | + publishType='live'; | ||
| 274 | + } | ||
| 275 | + //获取屏幕共享推流的地址 | ||
| 276 | + let shareResult=this.mediaModule.getMediaPublishPathForScreenShare(this.shareApe.channelId,publishType); | ||
| 277 | + this.shareApe.publish(shareResult); | ||
| 278 | + } | ||
| 279 | + | ||
| 280 | + //停止桌面共享推流 | ||
| 281 | + stopPublishScreenShare(_param) { | ||
| 282 | + loger.log('停止桌面共享推流->',_param); | ||
| 283 | + //if(!this.mcu.connected){ | ||
| 284 | + // loger.warn(GlobalConfig.getCurrentStatus()); | ||
| 285 | + // return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"}; | ||
| 286 | + //} | ||
| 287 | + | ||
| 288 | + let channelInfo=this.shareApe.getDefaultChannelInfo(); | ||
| 289 | + channelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; | ||
| 290 | + this.sendTableUpdateHandler(channelInfo); | ||
| 291 | + | ||
| 292 | + this.shareApe.stopPublish(); | ||
| 293 | + } | ||
| 294 | + | ||
| 295 | + //=============================屏幕共享 end================================================= | ||
| 296 | + | ||
| 179 | //释放nodeId占用的指定的channelId频道 | 297 | //释放nodeId占用的指定的channelId频道 |
| 180 | _releaseChannelForNodeId(nodeId,channelId){ | 298 | _releaseChannelForNodeId(nodeId,channelId){ |
| 181 | loger.log(nodeId,"_releaseChannelForNodeId-->channelId",channelId); | 299 | loger.log(nodeId,"_releaseChannelForNodeId-->channelId",channelId); |
| @@ -352,7 +470,7 @@ class VideoApe extends Ape { | @@ -352,7 +470,7 @@ class VideoApe extends Ape { | ||
| 352 | tableUpdateHandler(owner, itemIdx, itemData,seek) { | 470 | tableUpdateHandler(owner, itemIdx, itemData,seek) { |
| 353 | // debugger; | 471 | // debugger; |
| 354 | let unpackChannelInfo = this.unPackPdu(owner, itemIdx, itemData); | 472 | let unpackChannelInfo = this.unPackPdu(owner, itemIdx, itemData); |
| 355 | - loger.log("tableUpdateHandler->channel",itemIdx,'status->',unpackChannelInfo.status,"seek->",seek); | 473 | + loger.log("tableUpdateHandler->channel",itemIdx,'mediaType',unpackChannelInfo.mediaType,'status->',unpackChannelInfo.status,"seek->",seek); |
| 356 | 474 | ||
| 357 | //****很重要******** | 475 | //****很重要******** |
| 358 | //如果owner的值为0,代表的是这个歌频道已经被释放了(mcu服务端对于占用channel的掉线用户,就是把owner设置为0) | 476 | //如果owner的值为0,代表的是这个歌频道已经被释放了(mcu服务端对于占用channel的掉线用户,就是把owner设置为0) |
| @@ -361,8 +479,10 @@ class VideoApe extends Ape { | @@ -361,8 +479,10 @@ class VideoApe extends Ape { | ||
| 361 | unpackChannelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; | 479 | unpackChannelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; |
| 362 | unpackChannelInfo.streamId=""; | 480 | unpackChannelInfo.streamId=""; |
| 363 | } | 481 | } |
| 364 | - | ||
| 365 | - this.mediaModule.mediaChannels[itemIdx] = unpackChannelInfo; | 482 | + //屏幕共享的流不保存 |
| 483 | + if(unpackChannelInfo.mediaType!=ApeConsts.MEDIA_TYPE_SHARE){ | ||
| 484 | + this.mediaModule.mediaChannels[itemIdx] = unpackChannelInfo; | ||
| 485 | + } | ||
| 366 | 486 | ||
| 367 | if(unpackChannelInfo&&unpackChannelInfo.fromNodeId!=GlobalConfig.nodeId){ | 487 | if(unpackChannelInfo&&unpackChannelInfo.fromNodeId!=GlobalConfig.nodeId){ |
| 368 | let receiveChannelInfo={}; | 488 | let receiveChannelInfo={}; |
| @@ -370,6 +490,7 @@ class VideoApe extends Ape { | @@ -370,6 +490,7 @@ class VideoApe extends Ape { | ||
| 370 | receiveChannelInfo.fromNodeId=unpackChannelInfo.fromNodeId; | 490 | receiveChannelInfo.fromNodeId=unpackChannelInfo.fromNodeId; |
| 371 | receiveChannelInfo.userName=unpackChannelInfo.userName||""; | 491 | receiveChannelInfo.userName=unpackChannelInfo.userName||""; |
| 372 | receiveChannelInfo.userRole=unpackChannelInfo.userRole||ApeConsts.normal; | 492 | receiveChannelInfo.userRole=unpackChannelInfo.userRole||ApeConsts.normal; |
| 493 | + receiveChannelInfo.mediaType=unpackChannelInfo.mediaType||ApeConsts.MEDIA_TYPE_DEFAULT; | ||
| 373 | //消息不是自己同步的,需要处理 | 494 | //消息不是自己同步的,需要处理 |
| 374 | if(unpackChannelInfo.status==ApeConsts.CHANNEL_STATUS_OPENING){ | 495 | if(unpackChannelInfo.status==ApeConsts.CHANNEL_STATUS_OPENING){ |
| 375 | //正在推流 | 496 | //正在推流 |
| @@ -392,13 +513,27 @@ class VideoApe extends Ape { | @@ -392,13 +513,27 @@ class VideoApe extends Ape { | ||
| 392 | if(replay.code==0){ | 513 | if(replay.code==0){ |
| 393 | receiveChannelInfo.replay=replay.playUrl; | 514 | receiveChannelInfo.replay=replay.playUrl; |
| 394 | } | 515 | } |
| 395 | - loger.log("VIDEO_PLAY",receiveChannelInfo); | ||
| 396 | - //广播播放视频的消息 | ||
| 397 | - this._emit(MessageTypes.VIDEO_PLAY, receiveChannelInfo); | 516 | + |
| 517 | + if(unpackChannelInfo.mediaType!=ApeConsts.MEDIA_TYPE_SHARE){ | ||
| 518 | + //广播播放视频的消息 | ||
| 519 | + loger.log("VIDEO_PLAY",receiveChannelInfo); | ||
| 520 | + this._emit(MessageTypes.VIDEO_PLAY, receiveChannelInfo); | ||
| 521 | + }else{ | ||
| 522 | + //停止播放屏幕共享 | ||
| 523 | + loger.log("SCREEN_SHARE_PLAY",receiveChannelInfo); | ||
| 524 | + this._emit(MessageTypes.SCREEN_SHARE_PLAY, receiveChannelInfo); | ||
| 525 | + } | ||
| 398 | }else { | 526 | }else { |
| 399 | - loger.log("VIDEO_STOP",receiveChannelInfo); | ||
| 400 | - //流已经停止 | ||
| 401 | - this._emit(MessageTypes.VIDEO_STOP, receiveChannelInfo); | 527 | + if(unpackChannelInfo.mediaType!=ApeConsts.MEDIA_TYPE_SHARE){ |
| 528 | + //停止播放视频 | ||
| 529 | + loger.log("VIDEO_STOP",receiveChannelInfo); | ||
| 530 | + this._emit(MessageTypes.VIDEO_STOP, receiveChannelInfo); | ||
| 531 | + }else{ | ||
| 532 | + //停止播放屏幕共享 | ||
| 533 | + loger.log("SCREEN_SHARE_STOP",receiveChannelInfo); | ||
| 534 | + this._emit(MessageTypes.SCREEN_SHARE_STOP, receiveChannelInfo); | ||
| 535 | + } | ||
| 536 | + | ||
| 402 | } | 537 | } |
| 403 | }else { | 538 | }else { |
| 404 | loger.warn("视频消息是自己发送的或者是视频消息无效,不需要处理,消息内容如下:"); | 539 | loger.warn("视频消息是自己发送的或者是视频消息无效,不需要处理,消息内容如下:"); |
| @@ -410,19 +545,29 @@ class VideoApe extends Ape { | @@ -410,19 +545,29 @@ class VideoApe extends Ape { | ||
| 410 | GlobalConfig.openCamera=0; | 545 | GlobalConfig.openCamera=0; |
| 411 | GlobalConfig.openMicrophones=0; | 546 | GlobalConfig.openMicrophones=0; |
| 412 | } | 547 | } |
| 413 | - this._emit(MessageTypes.USER_DEVICE_STATUS_CHAANGE,{ | ||
| 414 | - nodeId:GlobalConfig.nodeId, | ||
| 415 | - userRole:GlobalConfig.userRole, | ||
| 416 | - userName:GlobalConfig.userName, | ||
| 417 | - userId:GlobalConfig.userId, | ||
| 418 | - openCamera:GlobalConfig.openCamera, | ||
| 419 | - openMicrophones:GlobalConfig.openMicrophones | 548 | + |
| 549 | + //更新用户的摄像头和麦克风状态 | ||
| 550 | + if(unpackChannelInfo.mediaType!=ApeConsts.MEDIA_TYPE_SHARE) { | ||
| 551 | + //非屏幕共享的情况下才更新状态 | ||
| 552 | + this._emit(MessageTypes.USER_DEVICE_STATUS_CHAANGE, { | ||
| 553 | + nodeId: GlobalConfig.nodeId, | ||
| 554 | + userRole: GlobalConfig.userRole, | ||
| 555 | + userName: GlobalConfig.userName, | ||
| 556 | + userId: GlobalConfig.userId, | ||
| 557 | + openCamera: GlobalConfig.openCamera, | ||
| 558 | + openMicrophones: GlobalConfig.openMicrophones | ||
| 420 | }); | 559 | }); |
| 560 | + } | ||
| 561 | + } | ||
| 562 | + | ||
| 563 | + | ||
| 564 | + if(unpackChannelInfo.mediaType!=ApeConsts.MEDIA_TYPE_SHARE){ | ||
| 565 | + //非屏幕共享情况的处理 | ||
| 566 | + MediaModule.allMediaChannelsList[itemIdx]=unpackChannelInfo; | ||
| 567 | + console.log('MediaModule.allMediaChannelsList',MediaModule.allMediaChannelsList); | ||
| 568 | + this._emit(MessageTypes.VIDEO_UPDATE, unpackChannelInfo); | ||
| 421 | } | 569 | } |
| 422 | 570 | ||
| 423 | - MediaModule.allMediaChannelsList[itemIdx]=unpackChannelInfo; | ||
| 424 | - console.log('MediaModule.allMediaChannelsList',MediaModule.allMediaChannelsList); | ||
| 425 | - this._emit(MessageTypes.VIDEO_UPDATE, unpackChannelInfo); | ||
| 426 | } | 571 | } |
| 427 | 572 | ||
| 428 | ///////数据的封包和解包///////////////////////////////////////// | 573 | ///////数据的封包和解包///////////////////////////////////////// |
src/ss.js
0 → 100644
| 1 | +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.share=t():e.share=t()}(this,function(){return function(e){function t(n){if(_[n])return _[n].exports;var a=_[n]={exports:{},id:n,loaded:!1};return e[n].call(a.exports,a,a.exports,t),a.loaded=!0,a.exports}var _={};return t.m=e,t.c=_,t.p="",t(0)}([function(e,t,_){e.exports=_(2)},function(e,t){"use strict";function _(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var _=0;_<t.length;_++){var n=t[_];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,_,n){return _&&e(t.prototype,_),n&&e(t,n),t}}(),a=function(){function e(){_(this,e),this.MAPS={}}return n(e,[{key:"on",value:function(e,t){if(e&&t){var _=this.MAPS[e];if(!_)return this.MAPS[e]=[t];_.push(t)}}},{key:"off",value:function(e,t){if(e){var _=this.MAPS[e];if(_){if(t)return _.splice(_.indexOf(t),1);_.length=0}}}},{key:"emit",value:function(e,t){if(e){var _=this.MAPS["*"];_&&_.length&&_.forEach(function(_){_(e,t)});var n=this.MAPS[e];n&&n.length&&n.forEach(function(e){e(t)})}}}]),e}();t.default=a},function(e,t,_){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function a(e){var t,_,n,a;n=e.length,t=new Uint8Array(3*n);var r=0;for(_=0;_<n;_++)a=e.charCodeAt(_),a>=1&&a<=127?t[r++]=a:a>2047?(t[r++]=224|a>>12&15,t[r++]=128|a>>6&63,t[r++]=128|a>>0&63):(t[r++]=192|a>>6&31,t[r++]=128|a>>0&63);return new Uint8Array(t.buffer,0,r)}function r(e){var t,_,n,a,r,o;for(t="",n=e.length,_=0;_<n;)switch(a=e[_++],a>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:t+=String.fromCharCode(a);break;case 12:case 13:r=e[_++],t+=String.fromCharCode((31&a)<<6|63&r);break;case 14:r=e[_++],o=e[_++],t+=String.fromCharCode((15&a)<<12|(63&r)<<6|(63&o)<<0)}return t}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",_=new Object;if(_.data_len=0,_.data="",_.name=e,"mov_start"==e)_.type=1;else if("mov_stop"==e)_.type=2;else if("mov_pause"==e){if(_.type=3,pos=t,pos.length>0){_.data_len=4;var n=new ArrayBuffer(_.data_len),r=new Uint32Array(n,0,1);r[0]=parseInt(pos),_.data=new Uint8Array(n,0,4)}}else if("mov_resume"==e)_.type=4;else if("mov_seek"==e){if(_.type=5,pos=t,pos.length>0){_.data_len=4;var n=new ArrayBuffer(_.data_len),r=new Uint32Array(n,0,1);r[0]=parseInt(pos),_.data=new Uint8Array(n,0,4)}}else if("ss_start"==e)_.type=6,_.data=a(t),_.data_len=_.data.length;else if("ss_stop"==e)_.type=7;else if("ss_version"==e)_.type=14;else if("get_mic"==e)_.type=26;else{if("ds_start"==e){_.type=27,_.data_len=536;var n=new ArrayBuffer(_.data_len),o=new Uint32Array(n,0,6);coordstr=t;var i=coordstr.split(",");if(4!=i.length)return;o[0]=parseInt(i[0]),o[1]=parseInt(i[1]),o[2]=parseInt(i[2]),o[3]=parseInt(i[3]);var s=new Uint8Array(n,24,256);window_name=t;for(var S=a(window_name),E=0;E<S.length;E++)s[E]=S[E];o[4]=S.length,o[5]=0;new Uint8Array(n,280,256);return _.data=new Uint8Array(n,0,_.data_len),void A(_)}if("ds_stop"==e)_.type=28;else{if("aud_start"==e){_.type=29,_.data_len=520;var n=new ArrayBuffer(_.data_len),l=new Uint32Array(n,0,1),C=t;l[0]=C.length;var f=new Uint32Array(n,4,1);f[0]=0;for(var c=new Uint8Array(n,8,256),O=a(C),E=0;E<O.length;E++)c[E]=O[E];new Uint8Array(n,264,256);return _.data=new Uint8Array(n,0,_.data_len),void A(_)}if("aud_stop"==e)_.type=30;else if("get_cam"==e)_.type=41;else{if("cam_start"==e){_.type=42,_.data_len=520;var n=new ArrayBuffer(_.data_len),I=new Uint32Array(n,0,1),T=t;I[0]=T.length;var f=new Uint32Array(n,4,1);f[0]=0;for(var U=new Uint8Array(n,8,256),u=a(T),E=0;E<u.length;E++)U[E]=u[E];new Uint8Array(n,264,256);return _.data=new Uint8Array(n,0,_.data_len),void A(_)}"cam_stop"==e?_.type=43:"set_videoparam"==e?(_.type=46,_.data=a(t),_.data_len=_.data.length):"get_videoparam"==e?(_.type=47,_.data=a(t),_.data_len=_.data.length):"start_record"==e?(_.type=48,_.data=a(t),_.data_len=_.data.length):"stop_record"==e?(_.type=49,_.data=a(t),_.data_len=_.data.length):"start_push"==e?(_.type=50,_.data=a(t),_.data_len=_.data.length):"stop_push"==e?(_.type=51,_.data=a(t),_.data_len=_.data.length):"get_rtmp_port"==e?_.type=52:"set_mic_vol"==e?(_.type=53,_.data=a(t),_.data_len=_.data.length):"get_mic_vol"==e&&(_.type=54)}}}A(_)}function A(e){var t=8+e.data_len,_=new ArrayBuffer(t),n=new Uint16Array(_,0,1),a=new Uint8Array(_,2,1),r=new Uint32Array(_,4,1);if(n[0]=e.type,a[0]=0,r[0]=e.data_len,e.data_len>0)for(var o=new Uint8Array(_,8,e.data_len),A=0;A<e.data_len;A++)o[A]=e.data[A];R&&R.send(_)}function i(){try{R&&(R.close(),R=R.onopen=R.onclose=R.onerror=R.onmessage=null,C.emit(C.CLOSE))}catch(e){console.log(e)}}function s(){i()}function S(){R&&i(),R=new WebSocket("ws://"+p+":"+L),g=setTimeout(function(){clearTimeout(g),i()},1500),R.timeout=1500,R.binaryType="arraybuffer",R.onopen=function(){clearTimeout(g),o("get_rtmp_port"),o("get_mic"),o("get_cam"),o("get_mic_vol"),C.emit(C.OPEN)},R.onclose=function(){i()},R.onerror=function(){i()},R.onmessage=function(e){var t=e.data;if("string"==typeof e.data)console.log("on message [string] ignore.");else{var _=new DataView(t),n=_.getUint16(0,!0);console.log("onmessage code->",n);var a=(_.getUint8(2,!0),_.getUint32(4,!0));if(n>=0&&n<f.length){f[n]}if(0==n||6==n||8==n)console.log("mov_start,mov_pause,mov_seek success");else if(10==n){if(a>36){var o=new Uint32Array(t,8,8),A="width:"+o[0]+" height:"+o[1];A="framerate:"+o[2]+" duration:"+o[3],A="playpos:"+o[4]+" filesize:"+o[5],c=A;var i=o[6],s=new Uint8Array(t,40,i),S=r(s);c.filename=S,C.emit(C.MOVIE_INFO_CHANGE,c)}}else if(11==n)console.log("ss_start success"),C.emit(C.SS_START);else if(24<=n&&26>=n){if(a>=4){var E=_.getUint32(8,!0);O=E.toString(),C.emit(C.VERSION_INFO_CHANGE,O)}}else if(55==n)console.log("ds_start success");else if(59==n)console.log("as start success");else if(83==n){if(console.log("get camera sucess"),a>4){var l=_.getUint32(8,!0),R=12;I.length=0;for(var p=0;p<l;p++){var L=_.getUint32(R,!0);R+=4;var g=new Uint8Array(t,R,L-1);R+=L;var y=r(g);I.push(y)}C.emit(C.CAMERA_INFO_CHANGE,I)}}else if(53==n){if(a>4){var v=_.getUint32(8,!0),R=12;T.length=0;for(var p=0;p<v;p++){var M=_.getUint32(R,!0);R+=4;var P=new Uint8Array(t,R,M-1);R+=M;var y=r(P);T.push(y)}C.emit(C.MIC_INFO_CHANGE,T)}}else if(85==n)console.log("cam_share success");else if(95==n){console.log("get_videoparam success");var N=new Uint8Array(t,8,t.byteLength-8-1),y=r(N);U=y,C.emit(C.VIDEO_INFO_CHANGE,U)}else if(105==n){console.log("get_rtmp_port_success");var N=new Uint8Array(t,8,t.byteLength-8-1),y=r(N);u=y,C.emit(C.RTMP_PORT_CHANGE,u)}else if(109==n){console.log("get_mic_vol success");var N=new Uint8Array(t,8,t.byteLength-8-1),y=r(N);d=y,C.emit(C.MIC_VOL_CHANGE,d)}else if(111<=n&&114>=n){var N=new Uint8Array(t,8,t.byteLength-8),V=r(N);console.log("url->",V)}else if(13==n)C.emit(C.SS_STOP);else{var N=new Uint8Array(t,8,t.byteLength-8),y=r(N);console.log("data ->",y)}}}}Object.defineProperty(t,"__esModule",{value:!0});var E=_(1),l=n(E),C=new l.default,f=["MOV_START_SUC","MOV_START_FAIL","MOV_STOP_SUC","MOV_STOP_FAIL","MOV_PAUSE_SUC","MOV_PAUSE_FAIL","MOV_RESUME_SUC","MOV_RESUME_FAIL","MOV_SEEK_SUC","MOV_SEEK_FAIL","MOV_PROPERTY","SS_START_SUC","SS_START_FAIL","SS_STOP_SUC","SS_STOP_FAIL","REC_START_SUC","REC_START_FAIL","REC_STOP_SUC","REC_STOP_FAIL","REC_PAUSE_SUC","REC_PAUSE_FAIL","REC_RESUME_SUC","REC_RESUME_FAIL","MOV_PLAY_FINISH","MOV_VERSION","SS_VERSION","REC_VERSION","MOV_SELECT_FILE_CANCEL","QAV_LOGIN_SUC","QAV_LOGIN_FAIL","QAV_LOGOUT_SUC","QAV_LOGOUT_FAIL","QAV_ENTERROOM_SUC","QAV_ENTERROOM_FAIL","QAV_LEAVEROOM_SUC","QAV_LEAVEROOM_FAIL","QAV_OPEN_MIC_SUC","QAV_OPEN_MIC_FAIL","QAV_OPEN_MIC_NODEV","QAV_CLOSE_MIC_SUC","QAV_CLOSE_MIC_FAIL","QAV_CLOSE_MIC_NODEV","QAV_OPEN_PLAYER_SUC","QAV_OPEN_PLAYER_FAIL","QAV_OPEN_PLAYER_NODEV","QAV_CLOSE_PLAYER_SUC","QAV_CLOSE_PLAYER_FAIL","QAV_CLOSE_PLAYER_NODEV","QAV_MUTE_AUDIO_SUC","QAV_MUTE_AUDIO_FAIL","QAV_UNMUTE_AUDIO_SUC","QAV_UNMUTE_AUDIO_FAIL","REC_SAVE_FILE_CANCEL","GET_MIC_SUC","GET_MIC_FAIL","DS_START_SUC","DS_START_FAIL","DS_STOP_SUC","DS_STOP_FAIL","AUD_START_SUC","AUD_START_FAIL","AUD_STOP_SUC","AUD_STOP_FAIL","AUD_DATA","SS_DATA","MOV_DATA","PEN_START_SUC","PEN_START_FAIL","PEN_STOP_SUC","PEN_STOP_FAIL","PEN_VERSION","QAV_DEVICE_SUC","QAV_DEVICE_FAIL","CBD_QUERY_SUC","CBD_QUERY_FAIL","CBD_GET_SUC","CBD_GET_FAIL","FILE_GET_SUC","FILE_GET_FAIL","FILE_SET_SUC","FILE_SET_FAIL","RESTART_SUC","RESTART_FAIL","GET_CAM_SUC","GET_CAM_FAIL","CAM_START_SUC","CAM_START_FAIL","CAM_STOP_SUC","CAM_STOP_FAIL","SWITCH_SCENE_SUC","SWITCH_SCENE_FAIL","PUSH_STREAM_FAIL","SHOW_UI_SUC","SET_VIDEO_PARAM_SUC","SET_VIDEO_PARAM_FAIL","GET_VIDEO_PARAM_SUC","GET_VIDEO_PARAM_FAIL","START_RECORD_SUC","START_RECORD_FAIL","STOP_RECORD_SUC","STOP_RECORD_FAIL","START_PUSH_SUC","START_PUSH_FAIL","STOP_PUSH_SUC","STOP_PUSH_FAIL","GET_RTMP_PORT_SUC","GET_RTMP_PORT_FAIL","SET_MIC_VOL_SUC","SET_MIC_VOL_FAIL","GET_MIC_VOL_SUC","GET_MIC_VOL_FAIL","RTMP_CONNECTING","RTMP_CONNECT_SUC","RTMP_CONNECT_FAIL","RTMP_CONNECT_CLOSED"],c=null,O="",I=[],T=[],U="",u="",d="",R=null,p="127.0.0.1",L=8090,g=0;C.infos={movieInfo:c,versionInfo:O,cameraInfo:I,micInfo:T,videoInfo:U,rtmpPort:u,micVol:d},C.MOVIE_INFO_CHANGE="MOVIE_INFO_CHANGE",C.VERSION_INFO_CHANGE="VERSION_INFO_CHANGE",C.CAMERA_INFO_CHANGE="CAMERA_INFO_CHANGE",C.MIC_INFO_CHANGE="MIC_INFO_CHANGE",C.VIDEO_INFO_CHANGE="VIDEO_INFO_CHANGE",C.RTMP_PORT_CHANGE="RTMP_PORT_CHANGE",C.MIC_VOL_CHANGE="MIC_VOL_CHANGE",C.SS_START="SS_START",C.SS_STOP="SS_STOP",C.OPEN="OPEN",C.CLOSE="CLOSE",C.ERROR="ERROR",C.getRTMPPort=function(){o("get_rtmp_port")},C.getMicInfo=function(){o("get_mic")},C.getCamInfo=function(){o("get_cam")},C.getMicVol=function(){o("get_mic_vol")},C.start=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"127.0.0.1",t=arguments[1];p=e,L=t,S()},C.stop=function(){s()},C.startShareScreen=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";o("ss_start",e)},C.stopShareScreen=function(){o("ss_stop")},t.default=C}])}); |
-
请 注册 或 登录 后发表评论