李勇

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

此 diff 太大无法显示。
... ... @@ -27,7 +27,7 @@ import Server from "config/Server";
import UTF8 from 'utf-8';
let loger = Loger.getLoger('McuClient');
let _sdkInfo = {"version": "v1.9.16.20170420", "author": "www.3mang.com"};
let _sdkInfo = {"version": "v1.9.17.20170421", "author": "www.3mang.com"};
//APE
let _sass;
... ...
... ... @@ -97,9 +97,17 @@ class AudioApe extends Ape {
//判断当前的频道是否已经占用
if(this.mediaModule.checkChannelIsOpening(needPublishChannelInfo.channelId)){
loger.warn(needPublishChannelInfo.channelId,"频道已经被占用");
this._emit( MessageTypes.AUDIO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaId":0});
return {"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!"};
if(needPublishChannelInfo.nodeId==GlobalConfig.nodeId){
loger.warn(needPublishChannelInfo.channelId,"已经推送过消息,不需要再次推送!");
this._emit( MessageTypes.AUDIO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId});
return {"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId};
}else {
loger.warn(needPublishChannelInfo.channelId,"频道已经被占用");
this._emit( MessageTypes.AUDIO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaId":0});
return {"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!"};
}
}
let channelInfo=this.mediaModule.getDefaultChannelInfo();
... ... @@ -146,7 +154,7 @@ class AudioApe extends Ape {
//释放nodeId占用的指定的channelId频道
_releaseChannelForNodeId(nodeId,channelId){
loger.log(nodeId,"_releaseChannelForNodeId-->channelId",channelId);
loger.log(nodeId,"释放占用的频道-->",channelId);
let channelInfo=this.mediaModule.mediaChannels[channelId];
if(channelInfo&&channelInfo.status==ApeConsts.CHANNEL_STATUS_OPENING){
if(channelInfo.fromNodeId==nodeId){
... ... @@ -160,7 +168,7 @@ class AudioApe extends Ape {
loger.warn(channelId,"不属于nodeId",nodeId,"不能释放",channelInfo);
}
}else {
loger.warn(nodeId,"要释放的channel不存在或者已经释放-->channelId",channelInfo);
loger.warn(nodeId,"要释放的频道不存在或者已经释放-->channelId",channelInfo);
}
}
//释放nodeId占用的所有频道
... ... @@ -174,7 +182,7 @@ class AudioApe extends Ape {
let openingChannel = this.mediaModule.getOpeningMediaChannel(nodeId);
if (openingChannel == 0) {
loger.warn(nodeId,"没有占用channel不需要处理");
loger.warn(nodeId,"没有占用频道不需要处理");
return {"code": ApeConsts.RETURN_FAILED, "data": "没有占用channel不需要处理"};
}
... ... @@ -190,13 +198,13 @@ class AudioApe extends Ape {
}.bind(this),800);
}
sendAudioBroadcastMsg(_param) {
loger.log('sendAudioBroadcastMsg',_param);
if(!this.mcu.connected){
loger.warn(GlobalConfig.getCurrentStatus());
return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"};
}
if (this._classInfo === null || EngineUtils.isEmptyObject(this._classInfo)) {
loger.log('sendAudioBroadcastMsg.McuClient还未初始化数据!');
loger.log('音频模块广播->失败->还未初始化数据!');
if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) {
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
return {"code": ApeConsts.RETURN_FAILED, "data": "sendAudioBroadcastMsg.McuClient还未初始化数据"};
... ... @@ -204,18 +212,17 @@ class AudioApe extends Ape {
return {"code": ApeConsts.RETURN_FAILED, "data": "sendAudioBroadcastMsg.McuClient还未初始化数据"};
}
if (_param == null) {
loger.warn('sendAudioBroadcastMsg,参数错误', _param);
loger.warn('音频模块广播->失败->,参数错误', _param);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return {"code": ApeConsts.RETURN_FAILED, "data": "sendAudioBroadcastMsg,参数错误"};
}
// to, message
loger.log('发送Audio消息.', _param);
loger.log('音频模块广播->',_param);
if (_param.actionType != null && _param.actionType == ApeConsts.MEDIA_ACTION_OPEN_CAMERA) {
//判断当前开启的视频数量是否已经是最大值,如果已经是最大值,不能再开启
let freeChannel = this.mediaModule.getFreeMediaChannel();
if (freeChannel == 0) {
loger.warn('sendAudioBroadcastMsg,不能再打开更多的设备', _param);
loger.warn('不能再打开更多的设备', _param);
return {"code": ApeConsts.RETURN_FAILED, "data": "不能再打开更多的设备","mediaChannels":this.mediaModule.mediaChannels};
}
}
... ... @@ -233,21 +240,21 @@ class AudioApe extends Ape {
if (!audioSendPdu.isPublic && 0 != audioSendPdu.toNodeId) {
//发送给制定的人
loger.log('发送私聊消息.');
//loger.log('发送私聊消息.');
this.send(audioSendPdu);
} else {
//发送给所有人
loger.log('发送公聊消息.');
//loger.log('音频模块广播->.');
this.sendChatUniform(audioSendPdu);
}
return {"code": ApeConsts.RETURN_SUCCESS, "data": ""};
}
sendTableUpdateHandler(_channelInfo) {
loger.log("audio,sendTableUpdateHandler ");
//loger.log("audio,sendTableUpdateHandler ");
let updateModelPdu = this.packPdu(_channelInfo, _channelInfo.channelId);
if(updateModelPdu==null){
loger.warn("sendTableUpdateHandler error,updateModelPdu=null");
loger.warn("音频模块更新数据-> 失败->数据无效",_channelInfo);
return;
}
... ... @@ -275,7 +282,7 @@ class AudioApe extends Ape {
adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
adapterPdu.item.push(adapterItemPdu);
loger.log("发送更新AUDIO.itemIdx=" + tableItemPdu.itemIdx);
loger.log("音频模块更新数据->itemIdx=" + tableItemPdu.itemIdx);
this.sendUniform(adapterPdu, true);
}
... ...
... ... @@ -101,7 +101,8 @@ class MediaModule {
"channelId":freeChannel,
"publishUrl":publishUrl,
"streamId":streamId,
"timestamp":timestamp
"timestamp":timestamp,
"nodeId":GlobalConfig.nodeId
};
return {"code": ApeConsts.RETURN_SUCCESS,
"data":"",
... ...
... ... @@ -98,9 +98,15 @@ class VideoApe extends Ape {
//判断当前的频道是否已经占用
if(this.mediaModule.checkChannelIsOpening(needPublishChannelInfo.channelId)){
loger.warn(needPublishChannelInfo.channelId,"频道已经被占用");
this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaId":0});
return {"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaChannels":this.mediaModule.mediaChannels};
if(needPublishChannelInfo.nodeId==GlobalConfig.nodeId){
loger.warn(needPublishChannelInfo.channelId,"已经推送过消息,不需要再次推送");
this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId});
return {"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId};
}else {
loger.warn(needPublishChannelInfo.channelId,"频道已经被占用");
this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaId":0});
return {"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaChannels":this.mediaModule.mediaChannels};
}
}
let channelInfo=this.mediaModule.getDefaultChannelInfo();
... ...