正在显示
2 个修改的文件
包含
147 行增加
和
123 行删除
| @@ -35,7 +35,7 @@ import QuestionApe from 'apes/QuestionApe'; | @@ -35,7 +35,7 @@ import QuestionApe from 'apes/QuestionApe'; | ||
| 35 | import UTF8 from 'utf-8'; | 35 | import UTF8 from 'utf-8'; |
| 36 | 36 | ||
| 37 | let loger = Loger.getLoger('McuClient'); | 37 | let loger = Loger.getLoger('McuClient'); |
| 38 | -let _sdkInfo = {"version": "v1.59.0.20170729", "author": "www.3mang.com"}; | 38 | +let _sdkInfo = {"version": "v1.60.0.20170729", "author": "www.3mang.com"}; |
| 39 | 39 | ||
| 40 | //APE | 40 | //APE |
| 41 | let _sass; | 41 | let _sass; |
| @@ -907,6 +907,21 @@ export default class MessageEntrance extends Emiter { | @@ -907,6 +907,21 @@ export default class MessageEntrance extends Emiter { | ||
| 907 | loger.warn('HLS拉流地址->HLS->', GlobalConfig.MS_PLAY_HLS_IP, GlobalConfig.MS_PLAY_HLS_PORT); | 907 | loger.warn('HLS拉流地址->HLS->', GlobalConfig.MS_PLAY_HLS_IP, GlobalConfig.MS_PLAY_HLS_PORT); |
| 908 | loger.warn('HLS录制回放拉流地址->HLS->', GlobalConfig.RS_RECORD_PLAY_IP, GlobalConfig.RS_RECORD_PLAY_PORT); | 908 | loger.warn('HLS录制回放拉流地址->HLS->', GlobalConfig.RS_RECORD_PLAY_IP, GlobalConfig.RS_RECORD_PLAY_PORT); |
| 909 | 909 | ||
| 910 | + if(!GlobalConfig.MS_PUBLISH_IP){ | ||
| 911 | + loger.error("推流MS地址地址无效"); | ||
| 912 | + } | ||
| 913 | + if(!GlobalConfig.MS_PLAY_RTMP_IP){ | ||
| 914 | + loger.warn("RTMP拉流地址无效->使用推流地址作为RTMP拉流地址"); | ||
| 915 | + GlobalConfig.MS_PLAY_RTMP_IP=GlobalConfig.MS_PUBLISH_IP; | ||
| 916 | + GlobalConfig.MS_PLAY_RTMP_PORT=GlobalConfig.MS_PUBLISH_PORT | ||
| 917 | + } | ||
| 918 | + | ||
| 919 | + if(!GlobalConfig.MS_PLAY_HLS_IP){ | ||
| 920 | + loger.warn("HLS拉流地址无效->使用HLS回放地址作为HLS拉流地址"); | ||
| 921 | + GlobalConfig.MS_PLAY_HLS_IP=GlobalConfig.MS_PLAY_HLS_PORT; | ||
| 922 | + GlobalConfig.RS_RECORD_PLAY_IP=GlobalConfig.RS_RECORD_PLAY_PORT | ||
| 923 | + } | ||
| 924 | + | ||
| 910 | if (_mcu) { | 925 | if (_mcu) { |
| 911 | _mcu.joinMCU(GlobalConfig.getClassInfo()); | 926 | _mcu.joinMCU(GlobalConfig.getClassInfo()); |
| 912 | } | 927 | } |
| @@ -12,38 +12,40 @@ let loger = Loger.getLoger('MediaModule'); | @@ -12,38 +12,40 @@ let loger = Loger.getLoger('MediaModule'); | ||
| 12 | 12 | ||
| 13 | class MediaModule { | 13 | class MediaModule { |
| 14 | constructor() { | 14 | constructor() { |
| 15 | - this.needPublishMediaChannel={};//记录准备推流的频道信息 | 15 | + this.needPublishMediaChannel = {};//记录准备推流的频道信息 |
| 16 | this.mediaChannels = {}; | 16 | this.mediaChannels = {}; |
| 17 | - this.maxMediaChannel=0; | ||
| 18 | - this.mediaType=ApeConsts.MEDIA_TYPE_DEFAULT; | ||
| 19 | - this.MEDIA_OBJ_TABLE_ID=0; | ||
| 20 | - this.SCREENSHARING_OBJ_TABLE_ID=ApeConsts.SCREENSHARING_OBJ_TABLE_ID; | 17 | + this.maxMediaChannel = 0; |
| 18 | + this.mediaType = ApeConsts.MEDIA_TYPE_DEFAULT; | ||
| 19 | + this.MEDIA_OBJ_TABLE_ID = 0; | ||
| 20 | + this.SCREENSHARING_OBJ_TABLE_ID = ApeConsts.SCREENSHARING_OBJ_TABLE_ID; | ||
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | //获取播流地址 | 23 | //获取播流地址 |
| 24 | getMediaPlayPath(_param) { | 24 | getMediaPlayPath(_param) { |
| 25 | loger.log('获取播放地址->'); | 25 | loger.log('获取播放地址->'); |
| 26 | - if (_param == null||_param.streamId == null) | ||
| 27 | - { | 26 | + if (_param == null || _param.streamId == null) { |
| 28 | loger.warn('获取播放地址->参数错误', _param); | 27 | loger.warn('获取播放地址->参数错误', _param); |
| 29 | //this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); | 28 | //this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); |
| 30 | return {"code": ApeConsts.RETURN_FAILED, "data": ""}; | 29 | return {"code": ApeConsts.RETURN_FAILED, "data": ""}; |
| 31 | } | 30 | } |
| 32 | 31 | ||
| 33 | let path = ""; | 32 | let path = ""; |
| 34 | - let port=""; | ||
| 35 | - let fileName=''; | 33 | + let port = ""; |
| 34 | + let fileName = ''; | ||
| 36 | if (_param.type == "m3u8") { | 35 | if (_param.type == "m3u8") { |
| 37 | //M3U8 | 36 | //M3U8 |
| 37 | + if (!GlobalConfig.MS_PLAY_HLS_IP) { | ||
| 38 | + loger.error("HLS拉流地址地址无效"); | ||
| 39 | + } | ||
| 38 | //http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/index.m3u8 | 40 | //http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/index.m3u8 |
| 39 | - if(GlobalConfig.siteId==GlobalConfig.siteId_letv){ | 41 | + if (GlobalConfig.siteId == GlobalConfig.siteId_letv) { |
| 40 | //乐视的hls地址规则 | 42 | //乐视的hls地址规则 |
| 41 | - fileName='desc.m3u8'; | ||
| 42 | - }else { | 43 | + fileName = 'desc.m3u8'; |
| 44 | + } else { | ||
| 43 | //fileName='index.m3u8'; | 45 | //fileName='index.m3u8'; |
| 44 | - fileName='playlist.m3u8'; | 46 | + fileName = 'playlist.m3u8'; |
| 45 | } | 47 | } |
| 46 | - port = (GlobalConfig.MS_PLAY_HLS_PORT == "" || GlobalConfig.MS_PLAY_HLS_PORT == null) ? "":":" + GlobalConfig.MS_PLAY_HLS_PORT; | 48 | + port = (GlobalConfig.MS_PLAY_HLS_PORT == "" || GlobalConfig.MS_PLAY_HLS_PORT == null) ? "" : ":" + GlobalConfig.MS_PLAY_HLS_PORT; |
| 47 | path = "http://" + GlobalConfig.MS_PLAY_HLS_IP | 49 | path = "http://" + GlobalConfig.MS_PLAY_HLS_IP |
| 48 | + port + "/live/" | 50 | + port + "/live/" |
| 49 | + _param.streamId | 51 | + _param.streamId |
| @@ -53,35 +55,37 @@ class MediaModule { | @@ -53,35 +55,37 @@ class MediaModule { | ||
| 53 | 55 | ||
| 54 | } else { | 56 | } else { |
| 55 | //RTMP | 57 | //RTMP |
| 56 | - port = (GlobalConfig.MS_PLAY_RTMP_PORT == "" || GlobalConfig.MS_PLAY_RTMP_PORT == null) ? "":":" + GlobalConfig.MS_PLAY_RTMP_PORT; | 58 | + if (!GlobalConfig.MS_PLAY_RTMP_IP) { |
| 59 | + loger.error("RTMP拉流地址地址无效"); | ||
| 60 | + } | ||
| 61 | + port = (GlobalConfig.MS_PLAY_RTMP_PORT == "" || GlobalConfig.MS_PLAY_RTMP_PORT == null) ? "" : ":" + GlobalConfig.MS_PLAY_RTMP_PORT; | ||
| 57 | path = "rtmp://" + GlobalConfig.MS_PLAY_RTMP_IP | 62 | path = "rtmp://" + GlobalConfig.MS_PLAY_RTMP_IP |
| 58 | + port + "/live/" | 63 | + port + "/live/" |
| 59 | + _param.streamId; | 64 | + _param.streamId; |
| 60 | } | 65 | } |
| 61 | 66 | ||
| 62 | 67 | ||
| 63 | - path=path.replace("::",":");//如果ip和port之间有多的:需要去掉 | ||
| 64 | - return {"code": ApeConsts.RETURN_SUCCESS, "data": "","playUrl": path}; | 68 | + path = path.replace("::", ":");//如果ip和port之间有多的:需要去掉 |
| 69 | + return {"code": ApeConsts.RETURN_SUCCESS, "data": "", "playUrl": path}; | ||
| 65 | } | 70 | } |
| 66 | 71 | ||
| 67 | 72 | ||
| 68 | //获取录制回放时点播的地址,只有m3u8 | 73 | //获取录制回放时点播的地址,只有m3u8 |
| 69 | getMediaRecordPlaybackPath(_param) { | 74 | getMediaRecordPlaybackPath(_param) { |
| 70 | loger.log('获取录制回放时点播的地址->m3u8'); | 75 | loger.log('获取录制回放时点播的地址->m3u8'); |
| 71 | - if (_param == null||_param.streamId == null) | ||
| 72 | - { | 76 | + if (_param == null || _param.streamId == null) { |
| 73 | loger.warn('获取录制回放时点播的地址->参数错误', _param); | 77 | loger.warn('获取录制回放时点播的地址->参数错误', _param); |
| 74 | return {"code": ApeConsts.RETURN_FAILED, "data": ""}; | 78 | return {"code": ApeConsts.RETURN_FAILED, "data": ""}; |
| 75 | } | 79 | } |
| 76 | //M3U8 http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/total.m3u8 | 80 | //M3U8 http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/total.m3u8 |
| 77 | - let port = (GlobalConfig.RS_RECORD_PLAY_PORT == "" || GlobalConfig.RS_RECORD_PLAY_PORT == null) ? "":":" + GlobalConfig.RS_RECORD_PLAY_PORT; | 81 | + let port = (GlobalConfig.RS_RECORD_PLAY_PORT == "" || GlobalConfig.RS_RECORD_PLAY_PORT == null) ? "" : ":" + GlobalConfig.RS_RECORD_PLAY_PORT; |
| 78 | let path = "http://" + GlobalConfig.RS_RECORD_PLAY_IP | 82 | let path = "http://" + GlobalConfig.RS_RECORD_PLAY_IP |
| 79 | + port + "/live/" | 83 | + port + "/live/" |
| 80 | + _param.streamId | 84 | + _param.streamId |
| 81 | + "/total.m3u8"; | 85 | + "/total.m3u8"; |
| 82 | 86 | ||
| 83 | - path=path.replace("::",":");//如果ip和port之间有多的:需要去掉 | ||
| 84 | - return {"code": ApeConsts.RETURN_SUCCESS, "data": "","playUrl": path}; | 87 | + path = path.replace("::", ":");//如果ip和port之间有多的:需要去掉 |
| 88 | + return {"code": ApeConsts.RETURN_SUCCESS, "data": "", "playUrl": path}; | ||
| 85 | } | 89 | } |
| 86 | 90 | ||
| 87 | //获取推流地址 | 91 | //获取推流地址 |
| @@ -90,115 +94,118 @@ class MediaModule { | @@ -90,115 +94,118 @@ class MediaModule { | ||
| 90 | //判断当前开启的视频数量是否已经是最大值,如果已经是最大值,不能再开启 | 94 | //判断当前开启的视频数量是否已经是最大值,如果已经是最大值,不能再开启 |
| 91 | let freeChannel = this.getFreeMediaChannel(); | 95 | let freeChannel = this.getFreeMediaChannel(); |
| 92 | if (freeChannel == 0) { | 96 | if (freeChannel == 0) { |
| 93 | - return {"code":ApeConsts.RETURN_FAILED, "data": "不能再打开更多的设备","mediaChannels":this.mediaChannels}; | 97 | + return {"code": ApeConsts.RETURN_FAILED, "data": "不能再打开更多的设备", "mediaChannels": this.mediaChannels}; |
| 94 | } | 98 | } |
| 95 | 99 | ||
| 96 | //默认方式推流 | 100 | //默认方式推流 |
| 97 | - let pubType="live"; | ||
| 98 | - ////flash推流 | ||
| 99 | - //if(_param&&_param.type=="flash"){ | ||
| 100 | - // pubType ="flash"; | ||
| 101 | - //} | 101 | + let pubType = "live"; |
| 102 | + | ||
| 103 | + if (!GlobalConfig.MS_PUBLISH_IP) { | ||
| 104 | + loger.error("MS推流地址地址无效"); | ||
| 105 | + } | ||
| 102 | 106 | ||
| 103 | //端口,有端口就显示 ":xxx",没有端口就是"" | 107 | //端口,有端口就显示 ":xxx",没有端口就是"" |
| 104 | - let port = (GlobalConfig.MS_PUBLISH_PORT == "" || GlobalConfig.MS_PUBLISH_PORT == null) ? "":":" + GlobalConfig.MS_PUBLISH_PORT; | 108 | + let port = (GlobalConfig.MS_PUBLISH_PORT == "" || GlobalConfig.MS_PUBLISH_PORT == null) ? "" : ":" + GlobalConfig.MS_PUBLISH_PORT; |
| 105 | //时间戳 | 109 | //时间戳 |
| 106 | let timestamp = EngineUtils.creatTimestamp(); | 110 | let timestamp = EngineUtils.creatTimestamp(); |
| 107 | 111 | ||
| 108 | - let streamId=GlobalConfig.siteId+"_" | ||
| 109 | - + GlobalConfig.classId + "_"+GlobalConfig.userId | ||
| 110 | - +"_" + freeChannel + "_" + timestamp; | 112 | + let streamId = GlobalConfig.siteId + "_" |
| 113 | + + GlobalConfig.classId + "_" + GlobalConfig.userId | ||
| 114 | + + "_" + freeChannel + "_" + timestamp; | ||
| 111 | 115 | ||
| 112 | //生成推流地址和推流数据(同步数据的时候用) | 116 | //生成推流地址和推流数据(同步数据的时候用) |
| 113 | let publishUrl = "rtmp://" + GlobalConfig.MS_PUBLISH_IP | 117 | let publishUrl = "rtmp://" + GlobalConfig.MS_PUBLISH_IP |
| 114 | - + port + "/"+pubType+"/" +streamId; | 118 | + + port + "/" + pubType + "/" + streamId; |
| 115 | 119 | ||
| 116 | - publishUrl=publishUrl.replace("::",":");//如果ip和port之间有多的:需要去掉 | ||
| 117 | - this.needPublishMediaChannel[publishUrl]={ | ||
| 118 | - "channelId":freeChannel, | ||
| 119 | - "publishUrl":publishUrl, | ||
| 120 | - "streamId":streamId, | ||
| 121 | - "timestamp":timestamp, | ||
| 122 | - "nodeId":GlobalConfig.nodeId | 120 | + publishUrl = publishUrl.replace("::", ":");//如果ip和port之间有多的:需要去掉 |
| 121 | + this.needPublishMediaChannel[publishUrl] = { | ||
| 122 | + "channelId": freeChannel, | ||
| 123 | + "publishUrl": publishUrl, | ||
| 124 | + "streamId": streamId, | ||
| 125 | + "timestamp": timestamp, | ||
| 126 | + "nodeId": GlobalConfig.nodeId | ||
| 123 | }; | 127 | }; |
| 124 | - return {"code": ApeConsts.RETURN_SUCCESS, | ||
| 125 | - "data":"", | ||
| 126 | - "mediaId":freeChannel, | ||
| 127 | - "userId":GlobalConfig.userId, | ||
| 128 | - "userName":GlobalConfig.userName, | ||
| 129 | - "userRole":GlobalConfig.userRole, | 128 | + return { |
| 129 | + "code": ApeConsts.RETURN_SUCCESS, | ||
| 130 | + "data": "", | ||
| 131 | + "mediaId": freeChannel, | ||
| 132 | + "userId": GlobalConfig.userId, | ||
| 133 | + "userName": GlobalConfig.userName, | ||
| 134 | + "userRole": GlobalConfig.userRole, | ||
| 130 | "publishUrl": publishUrl | 135 | "publishUrl": publishUrl |
| 131 | }; | 136 | }; |
| 132 | } | 137 | } |
| 138 | + | ||
| 133 | //监课获取推流地址 | 139 | //监课获取推流地址 |
| 134 | getMediaPublishPathForInVisible(_param) { | 140 | getMediaPublishPathForInVisible(_param) { |
| 135 | - let mediaLen=Object.keys(MediaModule.allMediaChannelsList).length; | ||
| 136 | - let freeChannel=(this.MEDIA_OBJ_TABLE_ID-20-mediaLen)||GlobalConfig.nodeId; | ||
| 137 | - loger.log('监课获取推流地址->'+freeChannel+" mediaLen:"+mediaLen); | 141 | + let mediaLen = Object.keys(MediaModule.allMediaChannelsList).length; |
| 142 | + let freeChannel = (this.MEDIA_OBJ_TABLE_ID - 20 - mediaLen) || GlobalConfig.nodeId; | ||
| 143 | + loger.log('监课获取推流地址->' + freeChannel + " mediaLen:" + mediaLen); | ||
| 138 | //默认方式推流 | 144 | //默认方式推流 |
| 139 | - let pubType="live"; | 145 | + let pubType = "live"; |
| 140 | ////flash推流 | 146 | ////flash推流 |
| 141 | //if(_param&&_param.type=="flash"){ | 147 | //if(_param&&_param.type=="flash"){ |
| 142 | // pubType ="flash"; | 148 | // pubType ="flash"; |
| 143 | //} | 149 | //} |
| 144 | 150 | ||
| 145 | //端口,有端口就显示 ":xxx",没有端口就是"" | 151 | //端口,有端口就显示 ":xxx",没有端口就是"" |
| 146 | - let port = (GlobalConfig.MS_PUBLISH_PORT == "" || GlobalConfig.MS_PUBLISH_PORT == null) ? "":":" + GlobalConfig.MS_PUBLISH_PORT; | 152 | + let port = (GlobalConfig.MS_PUBLISH_PORT == "" || GlobalConfig.MS_PUBLISH_PORT == null) ? "" : ":" + GlobalConfig.MS_PUBLISH_PORT; |
| 147 | //时间戳 | 153 | //时间戳 |
| 148 | let timestamp = EngineUtils.creatTimestamp(); | 154 | let timestamp = EngineUtils.creatTimestamp(); |
| 149 | 155 | ||
| 150 | - let streamId=GlobalConfig.siteId+"_" | ||
| 151 | - + GlobalConfig.classId + "_"+GlobalConfig.userId | ||
| 152 | - +"_" + freeChannel + "_" + timestamp; | 156 | + let streamId = GlobalConfig.siteId + "_" |
| 157 | + + GlobalConfig.classId + "_" + GlobalConfig.userId | ||
| 158 | + + "_" + freeChannel + "_" + timestamp; | ||
| 153 | 159 | ||
| 154 | //生成推流地址和推流数据(同步数据的时候用) | 160 | //生成推流地址和推流数据(同步数据的时候用) |
| 155 | let publishUrl = "rtmp://" + GlobalConfig.MS_PUBLISH_IP | 161 | let publishUrl = "rtmp://" + GlobalConfig.MS_PUBLISH_IP |
| 156 | - + port + "/"+pubType+"/" +streamId; | 162 | + + port + "/" + pubType + "/" + streamId; |
| 157 | 163 | ||
| 158 | - publishUrl=publishUrl.replace("::",":");//如果ip和port之间有多的:需要去掉 | ||
| 159 | - this.needPublishMediaChannel[publishUrl]={ | ||
| 160 | - "channelId":freeChannel, | ||
| 161 | - "publishUrl":publishUrl, | ||
| 162 | - "streamId":streamId, | ||
| 163 | - "timestamp":timestamp, | ||
| 164 | - "nodeId":GlobalConfig.nodeId | 164 | + publishUrl = publishUrl.replace("::", ":");//如果ip和port之间有多的:需要去掉 |
| 165 | + this.needPublishMediaChannel[publishUrl] = { | ||
| 166 | + "channelId": freeChannel, | ||
| 167 | + "publishUrl": publishUrl, | ||
| 168 | + "streamId": streamId, | ||
| 169 | + "timestamp": timestamp, | ||
| 170 | + "nodeId": GlobalConfig.nodeId | ||
| 165 | }; | 171 | }; |
| 166 | - return {"code": ApeConsts.RETURN_SUCCESS, | ||
| 167 | - "data":"", | ||
| 168 | - "userId":GlobalConfig.userId, | ||
| 169 | - "userName":GlobalConfig.userName, | ||
| 170 | - "userRole":GlobalConfig.userRole, | ||
| 171 | - "mediaId":freeChannel, | 172 | + return { |
| 173 | + "code": ApeConsts.RETURN_SUCCESS, | ||
| 174 | + "data": "", | ||
| 175 | + "userId": GlobalConfig.userId, | ||
| 176 | + "userName": GlobalConfig.userName, | ||
| 177 | + "userRole": GlobalConfig.userRole, | ||
| 178 | + "mediaId": freeChannel, | ||
| 172 | "publishUrl": publishUrl | 179 | "publishUrl": publishUrl |
| 173 | }; | 180 | }; |
| 174 | } | 181 | } |
| 175 | 182 | ||
| 176 | //桌面共享获取推流地址,频道号由外部传入 | 183 | //桌面共享获取推流地址,频道号由外部传入 |
| 177 | - getMediaPublishPathForScreenShare(_shareChannel,_publishType) { | 184 | + getMediaPublishPathForScreenShare(_shareChannel, _publishType) { |
| 178 | 185 | ||
| 179 | - let shareChannel=_shareChannel||this.SCREENSHARING_OBJ_TABLE_ID; | ||
| 180 | - loger.log('桌面共享获取推流地址->'+shareChannel); | 186 | + let shareChannel = _shareChannel || this.SCREENSHARING_OBJ_TABLE_ID; |
| 187 | + loger.log('桌面共享获取推流地址->' + shareChannel); | ||
| 181 | //默认方式推流 | 188 | //默认方式推流 |
| 182 | - let pubType="live";//统一使用live 20170615 | 189 | + let pubType = "live";//统一使用live 20170615 |
| 183 | /*//flash推流 | 190 | /*//flash推流 |
| 184 | if(_publishType=="live"){ | 191 | if(_publishType=="live"){ |
| 185 | pubType ="live"; | 192 | pubType ="live"; |
| 186 | }*/ | 193 | }*/ |
| 187 | 194 | ||
| 188 | //端口,有端口就显示 ":xxx",没有端口就是"" | 195 | //端口,有端口就显示 ":xxx",没有端口就是"" |
| 189 | - let port = (GlobalConfig.MS_PUBLISH_PORT == "" || GlobalConfig.MS_PUBLISH_PORT == null) ? "":":" + GlobalConfig.MS_PUBLISH_PORT; | 196 | + let port = (GlobalConfig.MS_PUBLISH_PORT == "" || GlobalConfig.MS_PUBLISH_PORT == null) ? "" : ":" + GlobalConfig.MS_PUBLISH_PORT; |
| 190 | //时间戳 | 197 | //时间戳 |
| 191 | let timestamp = EngineUtils.creatTimestamp(); | 198 | let timestamp = EngineUtils.creatTimestamp(); |
| 192 | 199 | ||
| 193 | - let streamId=GlobalConfig.siteId+"_" | ||
| 194 | - + GlobalConfig.classId + "_"+GlobalConfig.userId | ||
| 195 | - +"_" + shareChannel + "_" + timestamp; | 200 | + let streamId = GlobalConfig.siteId + "_" |
| 201 | + + GlobalConfig.classId + "_" + GlobalConfig.userId | ||
| 202 | + + "_" + shareChannel + "_" + timestamp; | ||
| 196 | 203 | ||
| 197 | //生成推流地址和推流数据(同步数据的时候用) | 204 | //生成推流地址和推流数据(同步数据的时候用) |
| 198 | let publishUrl = "rtmp://" + GlobalConfig.MS_PUBLISH_IP | 205 | let publishUrl = "rtmp://" + GlobalConfig.MS_PUBLISH_IP |
| 199 | - + port + "/"+pubType+"/" +streamId; | 206 | + + port + "/" + pubType + "/" + streamId; |
| 200 | 207 | ||
| 201 | - publishUrl=publishUrl.replace("::",":");//如果ip和port之间有多的:需要去掉 | 208 | + publishUrl = publishUrl.replace("::", ":");//如果ip和port之间有多的:需要去掉 |
| 202 | /* this.needPublishMediaChannel[publishUrl]={ | 209 | /* this.needPublishMediaChannel[publishUrl]={ |
| 203 | "channelId":shareChannel, | 210 | "channelId":shareChannel, |
| 204 | "publishUrl":publishUrl, | 211 | "publishUrl":publishUrl, |
| @@ -206,14 +213,15 @@ class MediaModule { | @@ -206,14 +213,15 @@ class MediaModule { | ||
| 206 | "timestamp":timestamp, | 213 | "timestamp":timestamp, |
| 207 | "nodeId":GlobalConfig.nodeId | 214 | "nodeId":GlobalConfig.nodeId |
| 208 | };*/ | 215 | };*/ |
| 209 | - return {"code": ApeConsts.RETURN_SUCCESS, | ||
| 210 | - "data":"", | ||
| 211 | - "mediaId":shareChannel, | ||
| 212 | - "userId":GlobalConfig.userId, | ||
| 213 | - "userName":GlobalConfig.userName, | ||
| 214 | - "userRole":GlobalConfig.userRole, | 216 | + return { |
| 217 | + "code": ApeConsts.RETURN_SUCCESS, | ||
| 218 | + "data": "", | ||
| 219 | + "mediaId": shareChannel, | ||
| 220 | + "userId": GlobalConfig.userId, | ||
| 221 | + "userName": GlobalConfig.userName, | ||
| 222 | + "userRole": GlobalConfig.userRole, | ||
| 215 | "publishUrl": publishUrl, | 223 | "publishUrl": publishUrl, |
| 216 | - "streamId":streamId | 224 | + "streamId": streamId |
| 217 | }; | 225 | }; |
| 218 | } | 226 | } |
| 219 | 227 | ||
| @@ -223,12 +231,12 @@ class MediaModule { | @@ -223,12 +231,12 @@ class MediaModule { | ||
| 223 | for (let key in this.mediaChannels) { | 231 | for (let key in this.mediaChannels) { |
| 224 | let item = this.mediaChannels[key]; | 232 | let item = this.mediaChannels[key]; |
| 225 | if (item && item.status == ApeConsts.CHANNEL_STATUS_RELEASED) { | 233 | if (item && item.status == ApeConsts.CHANNEL_STATUS_RELEASED) { |
| 226 | - loger.log("已获取空闲的通道->channelId:"+item.channelId); | 234 | + loger.log("已获取空闲的通道->channelId:" + item.channelId); |
| 227 | return item.channelId; | 235 | return item.channelId; |
| 228 | } | 236 | } |
| 229 | counter++; | 237 | counter++; |
| 230 | } | 238 | } |
| 231 | - loger.log("获取空闲的通道","mediaChannels",this.mediaChannels,"counter:",counter); | 239 | + loger.log("获取空闲的通道", "mediaChannels", this.mediaChannels, "counter:", counter); |
| 232 | //loger.log(this.mediaChannels); | 240 | //loger.log(this.mediaChannels); |
| 233 | if (counter < this.maxMediaChannel) { | 241 | if (counter < this.maxMediaChannel) { |
| 234 | return this.MEDIA_OBJ_TABLE_ID + (counter); | 242 | return this.MEDIA_OBJ_TABLE_ID + (counter); |
| @@ -237,21 +245,21 @@ class MediaModule { | @@ -237,21 +245,21 @@ class MediaModule { | ||
| 237 | } | 245 | } |
| 238 | 246 | ||
| 239 | //获取准备推流的频道信息 | 247 | //获取准备推流的频道信息 |
| 240 | - getNeedPublishMediaChannel(_publishUrl){ | 248 | + getNeedPublishMediaChannel(_publishUrl) { |
| 241 | return this.needPublishMediaChannel[_publishUrl]; | 249 | return this.needPublishMediaChannel[_publishUrl]; |
| 242 | } | 250 | } |
| 243 | 251 | ||
| 244 | //获取当前属于nodeId的已经打开的的channel,返回值为0代表没有打开的,否则返回的就是打开的channelId | 252 | //获取当前属于nodeId的已经打开的的channel,返回值为0代表没有打开的,否则返回的就是打开的channelId |
| 245 | - getOpeningMediaChannelForNodeId(_nodeId){ | ||
| 246 | - loger.log("getOpeningMediaChannel","nodeId",_nodeId,"mediaChannels:",this.mediaChannels); | ||
| 247 | - let channelInfo={}; | ||
| 248 | - channelInfo.channelId=0; | ||
| 249 | - if(_nodeId==null||_nodeId==0){ | 253 | + getOpeningMediaChannelForNodeId(_nodeId) { |
| 254 | + loger.log("getOpeningMediaChannel", "nodeId", _nodeId, "mediaChannels:", this.mediaChannels); | ||
| 255 | + let channelInfo = {}; | ||
| 256 | + channelInfo.channelId = 0; | ||
| 257 | + if (_nodeId == null || _nodeId == 0) { | ||
| 250 | return channelInfo; | 258 | return channelInfo; |
| 251 | } | 259 | } |
| 252 | for (let key in this.mediaChannels) { | 260 | for (let key in this.mediaChannels) { |
| 253 | let item = this.mediaChannels[key]; | 261 | let item = this.mediaChannels[key]; |
| 254 | - if (item && item.status == ApeConsts.CHANNEL_STATUS_OPENING&&item.fromNodeId==_nodeId) { | 262 | + if (item && item.status == ApeConsts.CHANNEL_STATUS_OPENING && item.fromNodeId == _nodeId) { |
| 255 | return item; | 263 | return item; |
| 256 | } | 264 | } |
| 257 | } | 265 | } |
| @@ -259,51 +267,52 @@ class MediaModule { | @@ -259,51 +267,52 @@ class MediaModule { | ||
| 259 | } | 267 | } |
| 260 | 268 | ||
| 261 | //检查频道是否已经被占用 | 269 | //检查频道是否已经被占用 |
| 262 | - checkChannelIsOpening(_channelId){ | ||
| 263 | - if(_channelId==null){ | ||
| 264 | - loger.warn("checkChannelIsOpening error,channel=",_channelId); | 270 | + checkChannelIsOpening(_channelId) { |
| 271 | + if (_channelId == null) { | ||
| 272 | + loger.warn("checkChannelIsOpening error,channel=", _channelId); | ||
| 265 | return true; | 273 | return true; |
| 266 | } | 274 | } |
| 267 | - let channelInfo=this.mediaChannels[_channelId]; | ||
| 268 | - if(channelInfo==null||channelInfo.status==ApeConsts.CHANNEL_STATUS_RELEASED){ | 275 | + let channelInfo = this.mediaChannels[_channelId]; |
| 276 | + if (channelInfo == null || channelInfo.status == ApeConsts.CHANNEL_STATUS_RELEASED) { | ||
| 269 | return false; | 277 | return false; |
| 270 | } | 278 | } |
| 271 | return true; | 279 | return true; |
| 272 | } | 280 | } |
| 273 | 281 | ||
| 274 | //获取当前所有频道的信息 | 282 | //获取当前所有频道的信息 |
| 275 | - getAllMediaChannelInfo(){ | ||
| 276 | - let channels=[]; | ||
| 277 | - for (let key in this.mediaChannels){ | ||
| 278 | - let channel=this.mediaChannels[key]; | ||
| 279 | - if(channel){ | ||
| 280 | - channels.push({"mediaId":channel.channelId,"status":channel.status,"fromNodeId":channel.fromNodeId}); | 283 | + getAllMediaChannelInfo() { |
| 284 | + let channels = []; | ||
| 285 | + for (let key in this.mediaChannels) { | ||
| 286 | + let channel = this.mediaChannels[key]; | ||
| 287 | + if (channel) { | ||
| 288 | + channels.push({"mediaId": channel.channelId, "status": channel.status, "fromNodeId": channel.fromNodeId}); | ||
| 281 | } | 289 | } |
| 282 | } | 290 | } |
| 283 | - if(channels.length<this.maxMediaChannel){ | ||
| 284 | - for (let i=channels.length;i<this.maxMediaChannel;i++){ | ||
| 285 | - let channelId=this.MEDIA_OBJ_TABLE_ID + (i); | ||
| 286 | - channels.push({"mediaId":channelId,"status":ApeConsts.CHANNEL_STATUS_RELEASED,"fromNodeId":0}); | 291 | + if (channels.length < this.maxMediaChannel) { |
| 292 | + for (let i = channels.length; i < this.maxMediaChannel; i++) { | ||
| 293 | + let channelId = this.MEDIA_OBJ_TABLE_ID + (i); | ||
| 294 | + channels.push({"mediaId": channelId, "status": ApeConsts.CHANNEL_STATUS_RELEASED, "fromNodeId": 0}); | ||
| 287 | } | 295 | } |
| 288 | } | 296 | } |
| 289 | return channels; | 297 | return channels; |
| 290 | } | 298 | } |
| 299 | + | ||
| 291 | //获取默认的频道信息 | 300 | //获取默认的频道信息 |
| 292 | - getDefaultChannelInfo(){ | ||
| 293 | - let channelInfo={}; | ||
| 294 | - channelInfo.owner=0;//这个很重要,释放的时候必须设置为0,占用的时候设置为自己的nodeId | ||
| 295 | - channelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; | ||
| 296 | - channelInfo.fromNodeId=GlobalConfig.nodeId; | ||
| 297 | - channelInfo.channelId=0;//channelId不能为0 | ||
| 298 | - channelInfo.streamId=""; | ||
| 299 | - channelInfo.classId=GlobalConfig.classId; | ||
| 300 | - channelInfo.siteId=GlobalConfig.siteId; | ||
| 301 | - channelInfo.toNodeId=0; | ||
| 302 | - channelInfo.userId=GlobalConfig.userId; | ||
| 303 | - channelInfo.mediaType=this.mediaType||ApeConsts.MEDIA_TYPE_DEFAULT; | 301 | + getDefaultChannelInfo() { |
| 302 | + let channelInfo = {}; | ||
| 303 | + channelInfo.owner = 0;//这个很重要,释放的时候必须设置为0,占用的时候设置为自己的nodeId | ||
| 304 | + channelInfo.status = ApeConsts.CHANNEL_STATUS_RELEASED; | ||
| 305 | + channelInfo.fromNodeId = GlobalConfig.nodeId; | ||
| 306 | + channelInfo.channelId = 0;//channelId不能为0 | ||
| 307 | + channelInfo.streamId = ""; | ||
| 308 | + channelInfo.classId = GlobalConfig.classId; | ||
| 309 | + channelInfo.siteId = GlobalConfig.siteId; | ||
| 310 | + channelInfo.toNodeId = 0; | ||
| 311 | + channelInfo.userId = GlobalConfig.userId; | ||
| 312 | + channelInfo.mediaType = this.mediaType || ApeConsts.MEDIA_TYPE_DEFAULT; | ||
| 304 | return channelInfo; | 313 | return channelInfo; |
| 305 | } | 314 | } |
| 306 | } | 315 | } |
| 307 | -MediaModule.allMediaChannelsList={};//当前已经创建的所有音视频通道(包含释放或未未释放的) | 316 | +MediaModule.allMediaChannelsList = {};//当前已经创建的所有音视频通道(包含释放或未未释放的) |
| 308 | export default MediaModule; | 317 | export default MediaModule; |
| 309 | 318 |
-
请 注册 或 登录 后发表评论