diff --git a/src/EngineEntrance.js b/src/EngineEntrance.js
index 337154c..2ec445e 100644
--- a/src/EngineEntrance.js
+++ b/src/EngineEntrance.js
@@ -62,7 +62,7 @@ export default class MessageEntrance extends Emiter {
constructor() {
super();
//sdk 信息
- GlobalConfig.sdkVersion = "v2.12.6.20170925";
+ GlobalConfig.sdkVersion = "v2.12.8.20170926";
loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
//设置
diff --git a/src/apes/VideoApe.js b/src/apes/VideoApe.js
index eb6bd6e..6bfb464 100644
--- a/src/apes/VideoApe.js
+++ b/src/apes/VideoApe.js
@@ -389,7 +389,6 @@ class VideoApe extends Ape {
}
// to, message
loger.log('视频模块广播消息.', _param);
-
//如果是控制开启摄像头推流,需要判断是否还有空闲频道
if (_param.actionType != null && _param.actionType == ApeConsts.MEDIA_ACTION_OPEN_CAMERA) {
//判断当前开启的视频数量是否已经是最大值,如果已经是最大值,不能再开启
@@ -466,9 +465,8 @@ class VideoApe extends Ape {
}
/////收到消息处理//////////////////////////////////////////////////
-
// 视频消息处理,内部处理,不需要告诉应用层
- receiveVideoCommandHandler(_data) {
+ receiveVideoCommandHandler(_data,seek) {
let videoReceivePdu = pdu['RCVideoSendDataRequestPdu'].decode(_data);
if (videoReceivePdu == null) {
loger.warn("视频控制消息处理,收到的消息为null,不做处理");
@@ -484,13 +482,56 @@ class VideoApe extends Ape {
dataObj = videoReceivePdu.data;
}
videoReceivePdu.data = dataObj;
- //判断接收者的id,如果不是0,并且也不是自己的nodeId,那么消息不做处理
- if (videoReceivePdu.toNodeId != 0 && videoReceivePdu.toNodeId != GlobalConfig.nodeId) {
- loger.log('视频消息不处理 toNodeId=', videoReceivePdu.toNodeId, "my nodeId=", GlobalConfig.nodeId);
- } else {
- loger.log('视频控制消息处理 .', videoReceivePdu);
- this._emit(MessageTypes.VIDEO_BROADCAST, videoReceivePdu);
+ if(GlobalConfig.isRecordPlayBack){
+ //录制回放的处理
+ if (videoReceivePdu.toNodeId!=0){
+ //只处理发送给所有人的消息,发给指定人的消息不处理
+ return;
+ }
+ let data=videoReceivePdu.data;
+ if(!data) return;
+ /* "data": {
+ "appId": "eb253cc7b40c4a8b82f0a5b6f93c2ce0",
+ "channel": "markettest_1880101695",
+ "channelKey": "",
+ "uid": 886346081,
+ "status": 1,
+ "userId": "user_338621",
+ "userName": "user_338621",
+ "userRole": "normal",
+ "timestamp": 1505886364100,
+ "recordTimestamp": 27
+ }*/
+ switch (videoReceivePdu.actionType){
+ case ApeConsts.MEDIA_ACTION_PUBLISH_STATUS:
+ //webRtc的推流和停止推流的消息
+ let videoInfo={};
+ let videoData=data;
+ videoData.streamId=data.channel+"_"+data.userId+"_"+data.uid+"_"+(parseInt(parseInt(data.timestamp)/1000));
+ if(data.status==1){
+ loger.log("播放文件->", "userName",data.userName,"uid",data.uid,"时间:"+new Date(1505886364100).toString());
+ videoInfo=this.packVideoInfoAndSendToClient(videoData,seek);
+ this._emit(MessageTypes.VIDEO_PLAY, videoInfo);
+ }else if(data.status==0){
+ loger.log("停止播放文件->", "userName",data.userName,"uid",data.uid,"时间:"+new Date(1505886364100).toString());
+ videoInfo=this.packVideoInfoAndSendToClient(videoData,seek);
+ this._emit(MessageTypes.VIDEO_STOP, videoInfo);
+ }
+ break;
+ default:
+ break
+ }
+
+ }else {
+ //判断接收者的id,如果不是0,并且也不是自己的nodeId,那么消息不做处理
+ if (videoReceivePdu.toNodeId != 0 && videoReceivePdu.toNodeId != GlobalConfig.nodeId) {
+ loger.log('视频消息不处理 toNodeId=', videoReceivePdu.toNodeId, "my nodeId=", GlobalConfig.nodeId);
+ } else {
+ loger.log('视频控制消息处理 .', videoReceivePdu);
+ this._emit(MessageTypes.VIDEO_BROADCAST, videoReceivePdu);
+ }
}
+
}
//切换了MS,重新更新一下当前正在播放的流地址
changeMediaMs(){
@@ -609,6 +650,45 @@ class VideoApe extends Ape {
}
+ /*
+ * 组织视频数据发送给客户端
+ * */
+ packVideoInfoAndSendToClient(_param,seek){
+ let mediaChannelInfo = {};
+ mediaChannelInfo.mediaId = _param.channelId;
+ mediaChannelInfo.fromNodeId = _param.fromNodeId;
+ mediaChannelInfo.userName = _param.userName || "";
+ mediaChannelInfo.userRole = _param.userRole || ApeConsts.normal;
+ mediaChannelInfo.mediaType = _param.mediaType || ApeConsts.MEDIA_TYPE_DEFAULT;
+ mediaChannelInfo.screenWidth = _param.screenWidth || GlobalConfig.screenWidth;
+ mediaChannelInfo.screenHeight = _param.screenHeight || GlobalConfig.screenHeight;
+ mediaChannelInfo.deviceType = _param.deviceType || 0;
+ mediaChannelInfo.optionJsonData = _param.optionJsonData || "";
+ mediaChannelInfo.m3u8Url = "";
+ mediaChannelInfo.rtmpUrl = "";
+ mediaChannelInfo.replay = "";
+ mediaChannelInfo.seek = seek || 0;//这个是录制回放时使用的seek
+ //消息不是自己同步的,需要处理
+ if (_param.status == ApeConsts.CHANNEL_STATUS_OPENING) {
+ let m3u8Stream = this.mediaModule.getMediaPlayPath({"type": "m3u8", "streamId": _param.streamId});
+ let rtmpStream = this.mediaModule.getMediaPlayPath({"type": "rtmp", "streamId": _param.streamId});
+ let replay = this.mediaModule.getMediaRecordPlaybackPath({
+ "type": "m3u8",
+ "streamId": _param.streamId
+ });
+ if (m3u8Stream.code == 0) {
+ mediaChannelInfo.m3u8Url = m3u8Stream.playUrl;
+ }
+ if (rtmpStream.code == 0) {
+ mediaChannelInfo.rtmpUrl = rtmpStream.playUrl;
+ }
+ if (replay.code == 0) {
+ mediaChannelInfo.replay = replay.playUrl;
+ }
+ }
+ return mediaChannelInfo;
+ }
+
//更新媒体文件模块的录制信息,每次开启录制的时候需要把当前媒体文件的信息更新一次
updaterRecordApeStatus(_param) {
loger.warn("录制状态发送改变->更新当前的状态->", this.mediaModule.mediaChannels);