From bc18eb2400d08075153898ee37243646e8fc7fec Mon Sep 17 00:00:00 2001 From: liyong <liyong@3mang.com> Date: Mon, 13 Mar 2017 20:45:51 +0800 Subject: [PATCH] 1.音视频模块增加streamId,和最新版的sdk兼容 --- src/apes/AudioApe.js | 19 +++++++++++++++++-- src/apes/VideoApe.js | 20 +++++++++++++++++++- src/pdus/pro.js | 2 ++ 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/apes/AudioApe.js b/src/apes/AudioApe.js index 6eb02f2..b0122b8 100644 --- a/src/apes/AudioApe.js +++ b/src/apes/AudioApe.js @@ -86,6 +86,7 @@ class AudioApe extends Ape { } let channelInfo={}; + channelInfo.owner=GlobalConfig.nodeId; channelInfo.status=ApeConsts.CHANNEL_STATUS_OPENING; channelInfo.fromNodeId=GlobalConfig.nodeId; channelInfo.channelId=_param.channelId;//freeChannel @@ -95,6 +96,10 @@ class AudioApe extends Ape { channelInfo.toNodeId=0; channelInfo.userId=_param.userId; channelInfo.mediaType=ApeConsts.MEDIA_TYPE_AUDIO; + channelInfo.streamId=GlobalConfig.siteId+"_" + + GlobalConfig.classId + "_"+_param.userId + +"_" + _param.channelId + "_" + _param.timestamp; + this.sendTableUpdateHandler(channelInfo); return {"code": ApeConsts.RETURN_SUCCESS, "data":"推流成功!"} } @@ -121,6 +126,7 @@ class AudioApe extends Ape { } let channelInfo={}; + channelInfo.owner=0; channelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; channelInfo.fromNodeId=0; channelInfo.channelId=openingChannel; @@ -128,6 +134,7 @@ class AudioApe extends Ape { channelInfo.classId=GlobalConfig.classId; channelInfo.toNodeId=0; channelInfo.mediaType=ApeConsts.MEDIA_TYPE_DEFAULT; + channelInfo.streamId=""; this.sendTableUpdateHandler(channelInfo); } @@ -194,7 +201,8 @@ class AudioApe extends Ape { let tableItemPdu = new pdu['RCRegistryTableItemPdu']; tableItemPdu.itemIdx = _channelInfo.channelId; - tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定 + //tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定 + tableItemPdu.owner = _channelInfo.owner;//0收到flash的是这个值,MCU做了了用户掉线处理,30秒之后会清理owner为0 tableItemPdu.itemData = updateModelPdu.toArrayBuffer(); //insert @@ -245,7 +253,13 @@ class AudioApe extends Ape { tableUpdateHandler(owner, itemIdx, itemData) { // debugger; let updateChannelInfo = this.unPackPdu(owner, itemIdx, itemData); - + //****很重要******** + //如果owner的值为0,代表的是这个歌频道已经被释放了(mcu服务端对于占用channel的掉线用户,就是把owner设置为0) + if(owner==0){ + loger.log("释放占用的频道,channel",itemIdx); + updateChannelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; + updateChannelInfo.streamId=""; + } this.mediaModule.mediaChannels[itemIdx] = updateChannelInfo; this._emit(MessageTypes.AUDIO_UPDATE, updateChannelInfo); @@ -271,6 +285,7 @@ class AudioApe extends Ape { packPduModel.timestamp =_param.timestamp||EngineUtils.creatTimestamp(); packPduModel.fromNodeId = GlobalConfig.nodeId; packPduModel.toNodeId = 0; + packPduModel.streamId=_param.streamId; console.log("packPdu",packPduModel); return packPduModel; } diff --git a/src/apes/VideoApe.js b/src/apes/VideoApe.js index 05bfb33..34eaeab 100644 --- a/src/apes/VideoApe.js +++ b/src/apes/VideoApe.js @@ -89,6 +89,7 @@ class VideoApe extends Ape { } let channelInfo={}; + channelInfo.owner=GlobalConfig.nodeId; channelInfo.status=ApeConsts.CHANNEL_STATUS_OPENING; channelInfo.fromNodeId=GlobalConfig.nodeId; channelInfo.channelId=_param.channelId;//freeChannel @@ -98,6 +99,10 @@ class VideoApe extends Ape { channelInfo.toNodeId=0; channelInfo.userId=_param.userId; channelInfo.mediaType=ApeConsts.MEDIA_TYPE_VIDEO; + channelInfo.streamId=GlobalConfig.siteId+"_" + + GlobalConfig.classId + "_"+_param.userId + +"_" + _param.channelId + "_" + _param.timestamp; + this.sendTableUpdateHandler(channelInfo); return {"code": ApeConsts.RETURN_SUCCESS, "data":"推流成功!"} } @@ -125,6 +130,7 @@ class VideoApe extends Ape { } let channelInfo={}; + channelInfo.owner=0; channelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; channelInfo.fromNodeId=0; channelInfo.channelId=openingChannel; @@ -132,6 +138,7 @@ class VideoApe extends Ape { channelInfo.classId=GlobalConfig.classId; channelInfo.toNodeId=0; channelInfo.mediaType=ApeConsts.MEDIA_TYPE_DEFAULT; + channelInfo.streamId=""; this.sendTableUpdateHandler(channelInfo); } @@ -215,7 +222,8 @@ class VideoApe extends Ape { let tableItemPdu = new pdu['RCRegistryTableItemPdu']; tableItemPdu.itemIdx = _channelInfo.channelId;//tableItemPdu.itemIdx=ApeConsts.VIDEO_OBJ_TABLE_ID+2; - tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定 + //tableItemPdu.owner = 0;//收到flash的是这个值,不清楚先写固定 + tableItemPdu.owner = _channelInfo.owner;//0收到flash的是这个值,MCU做了了用户掉线处理,30秒之后会清理owner为0 tableItemPdu.itemData = updateModelPdu.toArrayBuffer(); //insert @@ -265,8 +273,17 @@ class VideoApe extends Ape { } tableUpdateHandler(owner, itemIdx, itemData) { + // debugger; let videoChannelInfo = this.unPackPdu(owner, itemIdx, itemData); + //****很重要******** + //如果owner的值为0,代表的是这个歌频道已经被释放了(mcu服务端对于占用channel的掉线用户,就是把owner设置为0) + if(owner==0){ + loger.log("释放占用的频道,channel",itemIdx); + videoChannelInfo.status=ApeConsts.CHANNEL_STATUS_RELEASED; + videoChannelInfo.streamId=""; + } + this.mediaModule.mediaChannels[itemIdx] = videoChannelInfo; this._emit(MessageTypes.VIDEO_UPDATE, videoChannelInfo); } @@ -291,6 +308,7 @@ class VideoApe extends Ape { packPduModel.timestamp =_param.timestamp||EngineUtils.creatTimestamp(); packPduModel.fromNodeId = GlobalConfig.nodeId; packPduModel.toNodeId = 0; + packPduModel.streamId=_param.streamId||""; console.log("packPdu",packPduModel); return packPduModel; } diff --git a/src/pdus/pro.js b/src/pdus/pro.js index b712184..a8d55e1 100644 --- a/src/pdus/pro.js +++ b/src/pdus/pro.js @@ -776,6 +776,7 @@ message RCAudioChannelInfoPdu { optional uint32 class_id = 7;//课堂号 optional string site_id = 8;//站点号 optional string user_id = 9;//用户的userId + optional string stream_id = 10;//流名称 } message RCVideoChannelInfoPdu { @@ -788,6 +789,7 @@ message RCVideoChannelInfoPdu { optional uint32 class_id = 7;//课堂号 optional string site_id = 8;//站点号 optional string user_id = 9;//用户的userId + optional string stream_id = 10;//流名称 } message RCVideoChannelInfoRecordPdu { -- libgit2 0.24.0