李勇

音视频模块增加对音视频断线重连之后重复发送音视频推流成功消息的处理;如果自己已经推送过流消息就不再推送

此 diff 太大无法显示。
@@ -27,7 +27,7 @@ import Server from "config/Server"; @@ -27,7 +27,7 @@ import Server from "config/Server";
27 import UTF8 from 'utf-8'; 27 import UTF8 from 'utf-8';
28 28
29 let loger = Loger.getLoger('McuClient'); 29 let loger = Loger.getLoger('McuClient');
30 -let _sdkInfo = {"version": "v1.9.16.20170420", "author": "www.3mang.com"}; 30 +let _sdkInfo = {"version": "v1.9.17.20170421", "author": "www.3mang.com"};
31 31
32 //APE 32 //APE
33 let _sass; 33 let _sass;
@@ -97,9 +97,17 @@ class AudioApe extends Ape { @@ -97,9 +97,17 @@ class AudioApe extends Ape {
97 97
98 //判断当前的频道是否已经占用 98 //判断当前的频道是否已经占用
99 if(this.mediaModule.checkChannelIsOpening(needPublishChannelInfo.channelId)){ 99 if(this.mediaModule.checkChannelIsOpening(needPublishChannelInfo.channelId)){
100 - loger.warn(needPublishChannelInfo.channelId,"频道已经被占用");  
101 - this._emit( MessageTypes.AUDIO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaId":0});  
102 - return {"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!"}; 100 + if(needPublishChannelInfo.nodeId==GlobalConfig.nodeId){
  101 + loger.warn(needPublishChannelInfo.channelId,"已经推送过消息,不需要再次推送!");
  102 + this._emit( MessageTypes.AUDIO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId});
  103 + return {"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId};
  104 + }else {
  105 + loger.warn(needPublishChannelInfo.channelId,"频道已经被占用");
  106 + this._emit( MessageTypes.AUDIO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaId":0});
  107 + return {"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!"};
  108 + }
  109 +
  110 +
103 } 111 }
104 112
105 let channelInfo=this.mediaModule.getDefaultChannelInfo(); 113 let channelInfo=this.mediaModule.getDefaultChannelInfo();
@@ -146,7 +154,7 @@ class AudioApe extends Ape { @@ -146,7 +154,7 @@ class AudioApe extends Ape {
146 154
147 //释放nodeId占用的指定的channelId频道 155 //释放nodeId占用的指定的channelId频道
148 _releaseChannelForNodeId(nodeId,channelId){ 156 _releaseChannelForNodeId(nodeId,channelId){
149 - loger.log(nodeId,"_releaseChannelForNodeId-->channelId",channelId); 157 + loger.log(nodeId,"释放占用的频道-->",channelId);
150 let channelInfo=this.mediaModule.mediaChannels[channelId]; 158 let channelInfo=this.mediaModule.mediaChannels[channelId];
151 if(channelInfo&&channelInfo.status==ApeConsts.CHANNEL_STATUS_OPENING){ 159 if(channelInfo&&channelInfo.status==ApeConsts.CHANNEL_STATUS_OPENING){
152 if(channelInfo.fromNodeId==nodeId){ 160 if(channelInfo.fromNodeId==nodeId){
@@ -160,7 +168,7 @@ class AudioApe extends Ape { @@ -160,7 +168,7 @@ class AudioApe extends Ape {
160 loger.warn(channelId,"不属于nodeId",nodeId,"不能释放",channelInfo); 168 loger.warn(channelId,"不属于nodeId",nodeId,"不能释放",channelInfo);
161 } 169 }
162 }else { 170 }else {
163 - loger.warn(nodeId,"要释放的channel不存在或者已经释放-->channelId",channelInfo); 171 + loger.warn(nodeId,"要释放的频道不存在或者已经释放-->channelId",channelInfo);
164 } 172 }
165 } 173 }
166 //释放nodeId占用的所有频道 174 //释放nodeId占用的所有频道
@@ -174,7 +182,7 @@ class AudioApe extends Ape { @@ -174,7 +182,7 @@ class AudioApe extends Ape {
174 182
175 let openingChannel = this.mediaModule.getOpeningMediaChannel(nodeId); 183 let openingChannel = this.mediaModule.getOpeningMediaChannel(nodeId);
176 if (openingChannel == 0) { 184 if (openingChannel == 0) {
177 - loger.warn(nodeId,"没有占用channel不需要处理"); 185 + loger.warn(nodeId,"没有占用频道不需要处理");
178 return {"code": ApeConsts.RETURN_FAILED, "data": "没有占用channel不需要处理"}; 186 return {"code": ApeConsts.RETURN_FAILED, "data": "没有占用channel不需要处理"};
179 } 187 }
180 188
@@ -190,13 +198,13 @@ class AudioApe extends Ape { @@ -190,13 +198,13 @@ class AudioApe extends Ape {
190 }.bind(this),800); 198 }.bind(this),800);
191 } 199 }
192 sendAudioBroadcastMsg(_param) { 200 sendAudioBroadcastMsg(_param) {
193 - loger.log('sendAudioBroadcastMsg',_param); 201 +
194 if(!this.mcu.connected){ 202 if(!this.mcu.connected){
195 loger.warn(GlobalConfig.getCurrentStatus()); 203 loger.warn(GlobalConfig.getCurrentStatus());
196 return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"}; 204 return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"};
197 } 205 }
198 if (this._classInfo === null || EngineUtils.isEmptyObject(this._classInfo)) { 206 if (this._classInfo === null || EngineUtils.isEmptyObject(this._classInfo)) {
199 - loger.log('sendAudioBroadcastMsg.McuClient还未初始化数据!'); 207 + loger.log('音频模块广播->失败->还未初始化数据!');
200 if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) { 208 if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) {
201 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN); 209 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
202 return {"code": ApeConsts.RETURN_FAILED, "data": "sendAudioBroadcastMsg.McuClient还未初始化数据"}; 210 return {"code": ApeConsts.RETURN_FAILED, "data": "sendAudioBroadcastMsg.McuClient还未初始化数据"};
@@ -204,18 +212,17 @@ class AudioApe extends Ape { @@ -204,18 +212,17 @@ class AudioApe extends Ape {
204 return {"code": ApeConsts.RETURN_FAILED, "data": "sendAudioBroadcastMsg.McuClient还未初始化数据"}; 212 return {"code": ApeConsts.RETURN_FAILED, "data": "sendAudioBroadcastMsg.McuClient还未初始化数据"};
205 } 213 }
206 if (_param == null) { 214 if (_param == null) {
207 - loger.warn('sendAudioBroadcastMsg,参数错误', _param); 215 + loger.warn('音频模块广播->失败->,参数错误', _param);
208 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG); 216 this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
209 return {"code": ApeConsts.RETURN_FAILED, "data": "sendAudioBroadcastMsg,参数错误"}; 217 return {"code": ApeConsts.RETURN_FAILED, "data": "sendAudioBroadcastMsg,参数错误"};
210 } 218 }
211 // to, message 219 // to, message
212 - loger.log('发送Audio消息.', _param);  
213 - 220 + loger.log('音频模块广播->',_param);
214 if (_param.actionType != null && _param.actionType == ApeConsts.MEDIA_ACTION_OPEN_CAMERA) { 221 if (_param.actionType != null && _param.actionType == ApeConsts.MEDIA_ACTION_OPEN_CAMERA) {
215 //判断当前开启的视频数量是否已经是最大值,如果已经是最大值,不能再开启 222 //判断当前开启的视频数量是否已经是最大值,如果已经是最大值,不能再开启
216 let freeChannel = this.mediaModule.getFreeMediaChannel(); 223 let freeChannel = this.mediaModule.getFreeMediaChannel();
217 if (freeChannel == 0) { 224 if (freeChannel == 0) {
218 - loger.warn('sendAudioBroadcastMsg,不能再打开更多的设备', _param); 225 + loger.warn('不能再打开更多的设备', _param);
219 return {"code": ApeConsts.RETURN_FAILED, "data": "不能再打开更多的设备","mediaChannels":this.mediaModule.mediaChannels}; 226 return {"code": ApeConsts.RETURN_FAILED, "data": "不能再打开更多的设备","mediaChannels":this.mediaModule.mediaChannels};
220 } 227 }
221 } 228 }
@@ -233,21 +240,21 @@ class AudioApe extends Ape { @@ -233,21 +240,21 @@ class AudioApe extends Ape {
233 240
234 if (!audioSendPdu.isPublic && 0 != audioSendPdu.toNodeId) { 241 if (!audioSendPdu.isPublic && 0 != audioSendPdu.toNodeId) {
235 //发送给制定的人 242 //发送给制定的人
236 - loger.log('发送私聊消息.'); 243 + //loger.log('发送私聊消息.');
237 this.send(audioSendPdu); 244 this.send(audioSendPdu);
238 } else { 245 } else {
239 //发送给所有人 246 //发送给所有人
240 - loger.log('发送公聊消息.'); 247 + //loger.log('音频模块广播->.');
241 this.sendChatUniform(audioSendPdu); 248 this.sendChatUniform(audioSendPdu);
242 } 249 }
243 return {"code": ApeConsts.RETURN_SUCCESS, "data": ""}; 250 return {"code": ApeConsts.RETURN_SUCCESS, "data": ""};
244 } 251 }
245 252
246 sendTableUpdateHandler(_channelInfo) { 253 sendTableUpdateHandler(_channelInfo) {
247 - loger.log("audio,sendTableUpdateHandler "); 254 + //loger.log("audio,sendTableUpdateHandler ");
248 let updateModelPdu = this.packPdu(_channelInfo, _channelInfo.channelId); 255 let updateModelPdu = this.packPdu(_channelInfo, _channelInfo.channelId);
249 if(updateModelPdu==null){ 256 if(updateModelPdu==null){
250 - loger.warn("sendTableUpdateHandler error,updateModelPdu=null"); 257 + loger.warn("音频模块更新数据-> 失败->数据无效",_channelInfo);
251 return; 258 return;
252 } 259 }
253 260
@@ -275,7 +282,7 @@ class AudioApe extends Ape { @@ -275,7 +282,7 @@ class AudioApe extends Ape {
275 adapterPdu.type = pdu.RCPDU_REG_ADAPTER; 282 adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
276 adapterPdu.item.push(adapterItemPdu); 283 adapterPdu.item.push(adapterItemPdu);
277 284
278 - loger.log("发送更新AUDIO.itemIdx=" + tableItemPdu.itemIdx); 285 + loger.log("音频模块更新数据->itemIdx=" + tableItemPdu.itemIdx);
279 this.sendUniform(adapterPdu, true); 286 this.sendUniform(adapterPdu, true);
280 } 287 }
281 288
@@ -101,7 +101,8 @@ class MediaModule { @@ -101,7 +101,8 @@ class MediaModule {
101 "channelId":freeChannel, 101 "channelId":freeChannel,
102 "publishUrl":publishUrl, 102 "publishUrl":publishUrl,
103 "streamId":streamId, 103 "streamId":streamId,
104 - "timestamp":timestamp 104 + "timestamp":timestamp,
  105 + "nodeId":GlobalConfig.nodeId
105 }; 106 };
106 return {"code": ApeConsts.RETURN_SUCCESS, 107 return {"code": ApeConsts.RETURN_SUCCESS,
107 "data":"", 108 "data":"",
@@ -98,9 +98,15 @@ class VideoApe extends Ape { @@ -98,9 +98,15 @@ class VideoApe extends Ape {
98 98
99 //判断当前的频道是否已经占用 99 //判断当前的频道是否已经占用
100 if(this.mediaModule.checkChannelIsOpening(needPublishChannelInfo.channelId)){ 100 if(this.mediaModule.checkChannelIsOpening(needPublishChannelInfo.channelId)){
101 - loger.warn(needPublishChannelInfo.channelId,"频道已经被占用");  
102 - this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaId":0});  
103 - return {"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaChannels":this.mediaModule.mediaChannels}; 101 + if(needPublishChannelInfo.nodeId==GlobalConfig.nodeId){
  102 + loger.warn(needPublishChannelInfo.channelId,"已经推送过消息,不需要再次推送");
  103 + this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId});
  104 + return {"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId};
  105 + }else {
  106 + loger.warn(needPublishChannelInfo.channelId,"频道已经被占用");
  107 + this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaId":0});
  108 + return {"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaChannels":this.mediaModule.mediaChannels};
  109 + }
104 } 110 }
105 111
106 let channelInfo=this.mediaModule.getDefaultChannelInfo(); 112 let channelInfo=this.mediaModule.getDefaultChannelInfo();