李勇

1.修复录制回放消息和视频对应;2.默认禁用底层日志输出

@@ -62,7 +62,7 @@ export default class MessageEntrance extends Emiter { @@ -62,7 +62,7 @@ export default class MessageEntrance extends Emiter {
62 constructor() { 62 constructor() {
63 super(); 63 super();
64 //sdk 信息 64 //sdk 信息
65 - GlobalConfig.sdkVersion = "v2.20.0.20171021"; 65 + GlobalConfig.sdkVersion = "v2.20.5.20171023";
66 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); 66 loger.warn("sdkVersion:" + GlobalConfig.sdkVersion);
67 67
68 //设置 68 //设置
@@ -2010,6 +2010,7 @@ export default class MessageEntrance extends Emiter { @@ -2010,6 +2010,7 @@ export default class MessageEntrance extends Emiter {
2010 } 2010 }
2011 if (_video_ape) { 2011 if (_video_ape) {
2012 //if(_data.status==WebRtcApe.RECORD_STATUS_1&&!_data.publishUrl){ 2012 //if(_data.status==WebRtcApe.RECORD_STATUS_1&&!_data.publishUrl){
  2013 + loger.log("webRtc推流状态发生改变->发送同步消息",_data);
2013 if(_data.status==WebRtcApe.RECORD_STATUS_1){ 2014 if(_data.status==WebRtcApe.RECORD_STATUS_1){
2014 let publishData=this._getVideoPublishPath(); 2015 let publishData=this._getVideoPublishPath();
2015 let publishUrl=""; 2016 let publishUrl="";
@@ -89,7 +89,7 @@ class Loger { @@ -89,7 +89,7 @@ class Loger {
89 } 89 }
90 } 90 }
91 91
92 -Loger.IS_DEBUG = true; 92 +Loger.IS_DEBUG = false;
93 Loger.LOG = 3; 93 Loger.LOG = 3;
94 Loger.WARN = 2; 94 Loger.WARN = 2;
95 Loger.ERROR = 1; 95 Loger.ERROR = 1;
@@ -50,6 +50,9 @@ class RecordPlayBackParse extends Emiter { @@ -50,6 +50,9 @@ class RecordPlayBackParse extends Emiter {
50 this._musicShareApeMssages={};//伴音媒体共享 50 this._musicShareApeMssages={};//伴音媒体共享
51 this._timerCounter = new TimerCounter();//计时器 51 this._timerCounter = new TimerCounter();//计时器
52 this._timerCounter.addTimerCallBack(this._timerCounterUptate.bind(this), 1); 52 this._timerCounter.addTimerCallBack(this._timerCounterUptate.bind(this), 1);
  53 +
  54 + this.agoTiemstampMessages={};//ago推流时间戳消息数据集合
  55 + this.agoAllMedias={};//ago录制的文件集合
53 } 56 }
54 57
55 //method--------------------内部--------------------------------------------- 58 //method--------------------内部---------------------------------------------
@@ -303,6 +306,7 @@ class RecordPlayBackParse extends Emiter { @@ -303,6 +306,7 @@ class RecordPlayBackParse extends Emiter {
303 //解析录制的rec数据 306 //解析录制的rec数据
304 this.isLoadTxRecordInfo=true; 307 this.isLoadTxRecordInfo=true;
305 if(this.isLoadTxRecordInfo&&this.isLoadAgoRecordInfo&&this.isgetRecordFileURLFromAgo){ 308 if(this.isLoadTxRecordInfo&&this.isLoadAgoRecordInfo&&this.isgetRecordFileURLFromAgo){
  309 + this.matchingVideoUrlFromTime(this.agoTiemstampMessages,this.agoAllMedias);
306 this.parseArrayBuf(); 310 this.parseArrayBuf();
307 } 311 }
308 }); 312 });
@@ -310,6 +314,7 @@ class RecordPlayBackParse extends Emiter { @@ -310,6 +314,7 @@ class RecordPlayBackParse extends Emiter {
310 this.isLoadAgoRecordInfo=true; 314 this.isLoadAgoRecordInfo=true;
311 //解析录制的rec数据 315 //解析录制的rec数据
312 if(this.isLoadTxRecordInfo&&this.isLoadAgoRecordInfo&&this.isgetRecordFileURLFromAgo){ 316 if(this.isLoadTxRecordInfo&&this.isLoadAgoRecordInfo&&this.isgetRecordFileURLFromAgo){
  317 + this.matchingVideoUrlFromTime(this.agoTiemstampMessages,this.agoAllMedias);
313 this.parseArrayBuf(); 318 this.parseArrayBuf();
314 } 319 }
315 }); 320 });
@@ -317,11 +322,70 @@ class RecordPlayBackParse extends Emiter { @@ -317,11 +322,70 @@ class RecordPlayBackParse extends Emiter {
317 this.isgetRecordFileURLFromAgo=true; 322 this.isgetRecordFileURLFromAgo=true;
318 //解析录制的rec数据 323 //解析录制的rec数据
319 if(this.isLoadTxRecordInfo&&this.isLoadAgoRecordInfo&&this.isgetRecordFileURLFromAgo){ 324 if(this.isLoadTxRecordInfo&&this.isLoadAgoRecordInfo&&this.isgetRecordFileURLFromAgo){
  325 + this.matchingVideoUrlFromTime(this.agoTiemstampMessages,this.agoAllMedias);
320 this.parseArrayBuf(); 326 this.parseArrayBuf();
321 } 327 }
322 }) 328 })
323 } 329 }
324 } 330 }
  331 + //时间戳转换为UTC 时间字符串
  332 + timestampToUTCTime(_timestamp){
  333 + var date=new Date(_timestamp);
  334 + var y=""+date.getFullYear();
  335 + var month=""+(date.getMonth()+1);
  336 + var d=""+date.getDate();
  337 + var h=""+(date.getHours()-8);//GMT 转UTC 减8
  338 + var minutes=""+date.getMinutes();
  339 + var s=""+date.getSeconds();
  340 + if (month.length<2){
  341 + month="0"+month;
  342 + }
  343 + if (d.length<2){
  344 + d="0"+d;
  345 + }
  346 + if (h.length<2){
  347 + h="0"+h;
  348 + }
  349 + if (minutes.length<2){
  350 + minutes="0"+minutes;
  351 + }
  352 + if (s.length<2){
  353 + s="0"+s;
  354 + }
  355 + var tiemStr=y+month+d+h+minutes+s;
  356 + //console.log(_timestamp,tiemStr,date);
  357 + return tiemStr
  358 + }
  359 + //匹配时间戳和录制的视频地址
  360 + matchingVideoUrlFromTime(_tiemstampMessages,_allMedias){
  361 + if(!_tiemstampMessages||!_allMedias){
  362 + console.log("没有数据无法解析匹配",_tiemstampMessages,_allMedias)
  363 + return;
  364 + }
  365 + let finelMediaInfo={};
  366 + let tItem;
  367 + for(let j in _tiemstampMessages){
  368 + tItem=_tiemstampMessages[j];
  369 + let videoUrl="";
  370 + if(_allMedias[tItem.uid+"_"+tItem.createTimeUTC]){
  371 + videoUrl=_allMedias[tItem.uid+"_"+tItem.createTimeUTC];
  372 + //console.log(tItem.uid+"_"+tItem.createTimeUTC,videoUrl);
  373 + }else {
  374 + let t=parseInt(tItem.createTimeUTC);
  375 + console.log(tItem.uid+"_"+t,"没有数据->查找最近的数据");
  376 + videoUrl=_allMedias[tItem.uid+"_"+(t-1)];
  377 + if(!videoUrl){
  378 + videoUrl=_allMedias[tItem.uid+"_"+(t+1)];
  379 + }
  380 + }
  381 + //console.log(tItem.uid+"_"+t+" "+videoUrl);
  382 + tItem.video_url=videoUrl;
  383 + finelMediaInfo[tItem.timestamp]=tItem;
  384 + MediaModule.streams[tItem.stream_id]=tItem.video_url;
  385 + }
  386 + console.log("finelMediaInfo",finelMediaInfo);
  387 + }
  388 +
325 //获取媒体录制的地址信息-时间戳流名称和文件地址对应 389 //获取媒体录制的地址信息-时间戳流名称和文件地址对应
326 getRecordFileURLFromAgo(_callback){ 390 getRecordFileURLFromAgo(_callback){
327 if(!GlobalConfig.getRecordFileURLAgoInterfaces){ 391 if(!GlobalConfig.getRecordFileURLAgoInterfaces){
@@ -354,7 +418,7 @@ class RecordPlayBackParse extends Emiter { @@ -354,7 +418,7 @@ class RecordPlayBackParse extends Emiter {
354 } 418 }
355 }) 419 })
356 .then(ret => { 420 .then(ret => {
357 - loger.log('AGOR-获取媒体录制地址信息-完成',ret); 421 + loger.log('AGOR-获取媒体录制地址信息-完成');
358 /* {"code": 200, 422 /* {"code": 200,
359 "returnData":{ 423 "returnData":{
360 "data":{ 424 "data":{
@@ -408,6 +472,21 @@ class RecordPlayBackParse extends Emiter { @@ -408,6 +472,21 @@ class RecordPlayBackParse extends Emiter {
408 }) 472 })
409 .then(ret => { 473 .then(ret => {
410 loger.log('AG-获取媒体录制信息-完成',ret); 474 loger.log('AG-获取媒体录制信息-完成',ret);
  475 + //console.log("getRecordInfo success",ret);
  476 + if(ret&&ret.returnData&&ret.returnData.data){
  477 + let dataArr=ret.returnData.data;
  478 + for (let i=0;i<dataArr.length;i++){
  479 + let item=dataArr[i];
  480 + if(item.status==1){
  481 + //console.log(JSON.stringify(item));
  482 + let time=parseInt(item.createTime);
  483 + item.createTimeUTC=this.timestampToUTCTime(time);
  484 + item.stream_id=item.channel+"_"+item.userId+"_"+item.timestamp;
  485 + this.agoTiemstampMessages[item.timestamp]=item;
  486 + }
  487 + }
  488 + }
  489 + console.log("agoTiemstampMessages", this.agoTiemstampMessages);
411 if(_callback){ 490 if(_callback){
412 _callback(); 491 _callback();
413 } 492 }
@@ -497,7 +576,7 @@ class RecordPlayBackParse extends Emiter { @@ -497,7 +576,7 @@ class RecordPlayBackParse extends Emiter {
497 loger.log("AGOR-外部录制的视频数据无效"); 576 loger.log("AGOR-外部录制的视频数据无效");
498 return; 577 return;
499 } 578 }
500 - let backFile=_data.backFile; 579 + /* let backFile=_data.backFile;
501 if(!backFile){ 580 if(!backFile){
502 loger.log("AGOR-外部录制的视频数据无效->backFile"); 581 loger.log("AGOR-外部录制的视频数据无效->backFile");
503 return; 582 return;
@@ -518,7 +597,30 @@ class RecordPlayBackParse extends Emiter { @@ -518,7 +597,30 @@ class RecordPlayBackParse extends Emiter {
518 } 597 }
519 } 598 }
520 } 599 }
521 - console.log("AGO MediaModule.streams", MediaModule.streams); 600 + console.log("AGO MediaModule.streams", MediaModule.streams);*/
  601 + if(!_data.fschannefiles) return;
  602 + let items=_data.fschannefiles;
  603 + //console.log(JSON.stringify(items));
  604 + for(let k=0;k<items.length;k++) {
  605 +
  606 + let item=items[k];
  607 +// if(item.indexOf(".aac")>=0||item.indexOf(".webm")>=0){
  608 +// console.log(item)
  609 +// }
  610 + //console.log("item.indexOf ts",item.indexOf(".ts"))
  611 + // if(item.indexOf(".m3u8")>=0&&item.indexOf(".ts")<0&&item.indexOf(".m3u8.swp")<0){
  612 + let indexStr=".m3u8";
  613 + if(item.lastIndexOf(indexStr)+indexStr.length==item.length){
  614 + //http://networkschool.xuedianyun.com:8899/20171021/markettest_188409305_030739/555257911_20171021031224730.mp4
  615 + //http://networkschool.xuedianyun.com:8899/20171021/markettest_1785982263_080003/572805001_20171021080041402_av.m3u8
  616 + let itemUrl=_data.channefiles+"/"+item;
  617 + //console.log(item,itemUrl);
  618 + item=item.substr(0,item.length-11);
  619 + this.agoAllMedias[item]=itemUrl;
  620 + }
  621 +
  622 + }
  623 + console.log("agoAllMedias",this.agoAllMedias);
522 } 624 }
523 625
524 //解析TXY录制的视频数据,数组[] 626 //解析TXY录制的视频数据,数组[]
@@ -647,7 +647,7 @@ class ConferApe extends Ape { @@ -647,7 +647,7 @@ class ConferApe extends Ape {
647 let adapterPdu = new pdu['RCAdapterPdu']; 647 let adapterPdu = new pdu['RCAdapterPdu'];
648 adapterPdu.type = pdu.RCPDU_REG_ADAPTER; 648 adapterPdu.type = pdu.RCPDU_REG_ADAPTER;
649 adapterPdu.item.push(adapterItemPdu); 649 adapterPdu.item.push(adapterItemPdu);
650 - loger.log('发送更新课堂信息->'); 650 + //loger.log('发送更新课堂信息->');
651 this.sendUniform(adapterPdu, true); 651 this.sendUniform(adapterPdu, true);
652 } 652 }
653 653