李勇

修改录制文件和录制消息匹配规则,录制消息的来源来自MCU录制的rec文件,不再从nodeJs获取,有些数据丢失;更换了录制回放的文件地址

... ... @@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter {
super();
this.lastClassActiveTime=0;//最后一次课堂激活的时间戳
//sdk 信息
GlobalConfig.sdkVersion = "v2.29.5.20171114";
GlobalConfig.sdkVersion = "v2.30.2.20171117";
loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
console.log("sdkVersion:" + GlobalConfig.sdkVersion);
//设置
... ...
... ... @@ -10,7 +10,7 @@ import EngineUtils from 'EngineUtils';
// 日志对象
const loger = Loger.getLoger('RecordInfoParse');
const loger = Loger.getLoger('RecordInfoMatch');
class RecordInfoMatch extends Emiter {
constructor() {
super();
... ... @@ -24,10 +24,18 @@ class RecordInfoMatch extends Emiter {
this.unMatchUid = {};//没有匹配到的uid
}
start() {
let serverIp = GlobalConfig.recordFileSever || "123.56.73.119:8080";
start(_recordMessagesList) {
this.recordMessagesList=_recordMessagesList;
let serverIp = GlobalConfig.recordFileSever || "playbak.xuedianyun.com:8080";
this.filePath = `${GlobalConfig.locationProtocol + serverIp}`;
this.getRecordInfo(()=> {
if(GlobalConfig.locationProtocol=="https://"){
this.filePath=this.filePath.replace(":8080","");
}
//this.getRecordInfo(()=> {
this.parseRecordMessage(_recordMessagesList,()=> {
console.log("JSON数据列表",this.jsonPathList);
let requestLen = Object.keys(this.jsonPathList).length;
let currentLen = 0;
let fileNameArr;
... ... @@ -53,7 +61,7 @@ class RecordInfoMatch extends Emiter {
}
//筛除一些重复流地址,会出现多录制的情况,保留一个即可
this.m3u8jsonDataList[fileNameArr[0]][stream] = {
video_url: this.filePath + "/" + i + "/" + k + "/" + j,
video_url: this.filePath + "/samples/" + i + "/" + k + "/" + j,
creatDate: i,
folder: k,
stream: j,
... ... @@ -102,7 +110,8 @@ class RecordInfoMatch extends Emiter {
})
.then(ret => {
loger.log('AG-获取媒体录制信息-完成');
for (let i = 0; i < ret.returnData.data.length; i++) {
this.parseRecordMessage(ret.returnData.data,_callback);
/* for (let i = 0; i < ret.returnData.data.length; i++) {
let item = ret.returnData.data[i];
if (item.status == 1) {
this.streamInfoLen++;
... ... @@ -126,7 +135,7 @@ class RecordInfoMatch extends Emiter {
}
if (_callback) {
_callback();
}
}*/
})
.catch(err => {
loger.error(`AG-获取媒体录制信息-异常.状态码:${err}`);
... ... @@ -136,6 +145,38 @@ class RecordInfoMatch extends Emiter {
});
}
parseRecordMessage(_data,_callback){
if(!_data||_data.length<1){
console.log("录制消息数据无效",_data)
return;
}
for (let i = 0; i <_data.length; i++) {
let item =_data[i];
if (item.status == 1) {
this.streamInfoLen++;
//console.log(JSON.stringify(item));
delete item.appId;
delete item.id;
let time = parseInt(item.createTime);
let timeInfo = this.timestampToUTCTime(time);
//return {yymmddhhmmss:yymmddhhmmss,yymmdd:yymmdd}
item.seek = 0;
item.createTimeUTC = timeInfo.yymmddhhmmss;
item.creatDate = timeInfo.yymmdd;
this.jsonPathList [timeInfo.yymmdd] = this.filePath + "/samples/" + timeInfo.yymmdd + "/json/" + item.channel + ".json";
item.stream_id = item.channel + "_" + item.userId + "_" + item.timestamp;
if (!this.recordMessages[item.uid]) {
this.recordMessages[item.uid] = {};
}
this.recordMessages[item.uid][item.timestamp] = item;
}
}
if (_callback) {
_callback();
}
}
getRecordFileJSON(path, _callback) {
let url = path + "?t=" + new Date().getTime();
/* $.ajax(
... ...
... ... @@ -39,6 +39,7 @@ class RecordPlayBackParse extends Emiter {
this.isgetRecordFileURLFromAgo = false;//是否已经加载AGO的录制文件地址数据
this._apes = {};
this.videoPublishMessages=[];//记录推流控制的消息
this._videoApeBroadcastMssages = {};//视频模块的广播消息
this.mediaChannleList = {};
this._conferApeMssages = {};//会议数据
... ... @@ -229,8 +230,9 @@ class RecordPlayBackParse extends Emiter {
}
}
console.warn("最终匹配完成的视频流数据", MediaModule.streams);
//解析课堂录制的rec文件
this.parseArrayBuf();
this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, {"recordPlaybackMaxTime": this._recordPlaybackMaxTime});
////解析课堂录制的rec文件
//this.parseArrayBuf();
}
//保存各个模块的MCU原始数据
... ... @@ -353,8 +355,9 @@ class RecordPlayBackParse extends Emiter {
}
})*/
this.getMediaRecrodInfoFromTx(()=> {
//AGO启动录制消息和文件匹配
this.recordInfoMatch.start();
/*//AGO启动录制消息和文件匹配
this.recordInfoMatch.start();*/
this.parseArrayBuf();
});
}
... ... @@ -771,7 +774,12 @@ class RecordPlayBackParse extends Emiter {
console.log('聊天数据', this._chatApeMssages);
console.log('视频模块广播消息', this._videoApeBroadcastMssages);
loger.log("录制回放数据解析完成,录制回放的总时间长为->", this._recordPlaybackMaxTime, "recordTimestamp:" + GlobalConfig.recordTimestamp);
this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, {"recordPlaybackMaxTime": this._recordPlaybackMaxTime});
console.log('videoPublishMessages', this.videoPublishMessages);
//AGO启动录制消息和文件匹配
this.recordInfoMatch.start(this.videoPublishMessages);
//this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, {"recordPlaybackMaxTime": this._recordPlaybackMaxTime});
}
//根据时间查找数据
... ... @@ -1078,6 +1086,10 @@ class RecordPlayBackParse extends Emiter {
timestamp: timestamp
};
//this._videoApeBroadcastMssages[timestamp]={parseData:videoReceivePdu,byteData:data,timestamp: timestamp};
if(videoReceivePdu&&videoReceivePdu.data){
videoReceivePdu.data.createTime=videoReceivePdu.data.timestamp;
}
this.videoPublishMessages.push(videoReceivePdu.data);
}
} catch (err) {
... ...