ucservice 1.4.8 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ucservice.common.js +918 -182
- package/dist/ucservice.common.js.gz +0 -0
- package/dist/ucservice.common.js.map +1 -1
- package/dist/ucservice.umd.js +918 -182
- package/dist/ucservice.umd.js.gz +0 -0
- package/dist/ucservice.umd.js.map +1 -1
- package/dist/ucservice.umd.min.js +2 -2
- package/dist/ucservice.umd.min.js.gz +0 -0
- package/dist/ucservice.umd.min.js.map +1 -1
- package/index.js +13 -0
- package/package.json +1 -1
- package/src/net_url/meet_url.js +19 -0
- package/src/scooper-video-new.js +3695 -0
- package/src/scooper.video.js +757 -174
package/dist/ucservice.common.js
CHANGED
|
@@ -12113,6 +12113,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
12113
12113
|
}
|
|
12114
12114
|
|
|
12115
12115
|
return e.returnValue;
|
|
12116
|
+
},
|
|
12117
|
+
|
|
12118
|
+
/**
|
|
12119
|
+
* 清空事件
|
|
12120
|
+
*/
|
|
12121
|
+
removeAllListeners: function () {
|
|
12122
|
+
this._listeners = {};
|
|
12116
12123
|
}
|
|
12117
12124
|
};
|
|
12118
12125
|
let videoListener = new Listener();
|
|
@@ -12455,17 +12462,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
12455
12462
|
windowNums: num
|
|
12456
12463
|
});
|
|
12457
12464
|
me._opts.windows = num;
|
|
12458
|
-
me._opts.extra = extra;
|
|
12459
|
-
|
|
12460
|
-
let videoLi = document.getElementById('videoRef').querySelectorAll('li');
|
|
12461
|
-
me.VIDEO_DATA.forEach((item, index) => {
|
|
12462
|
-
let tel = item.video;
|
|
12463
|
-
|
|
12464
|
-
if (!tel && item.id) {
|
|
12465
|
-
videoLi[index].querySelector('video').style = '';
|
|
12466
|
-
videoLi[index].querySelector('.rotate-btn').setAttribute('rotate-index', 0);
|
|
12467
|
-
}
|
|
12468
|
-
});
|
|
12465
|
+
me._opts.extra = extra;
|
|
12469
12466
|
},
|
|
12470
12467
|
|
|
12471
12468
|
/**
|
|
@@ -12763,21 +12760,21 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
12763
12760
|
* 添加事件
|
|
12764
12761
|
*/
|
|
12765
12762
|
addListener: function (type, handler, key) {
|
|
12766
|
-
videoListener.addListener(type, handler, key);
|
|
12763
|
+
this.videoListener.addListener(type, handler, key);
|
|
12767
12764
|
},
|
|
12768
12765
|
|
|
12769
12766
|
/**
|
|
12770
12767
|
* 删除事件
|
|
12771
12768
|
*/
|
|
12772
12769
|
removeListener: function (type, handler) {
|
|
12773
|
-
videoListener.removeListener(type, handler);
|
|
12770
|
+
this.videoListener.removeListener(type, handler);
|
|
12774
12771
|
},
|
|
12775
12772
|
|
|
12776
12773
|
/**
|
|
12777
12774
|
* 派发事件
|
|
12778
12775
|
*/
|
|
12779
12776
|
dispatch: function (e, options) {
|
|
12780
|
-
videoListener.dispatch(e, options);
|
|
12777
|
+
this.videoListener.dispatch(e, options);
|
|
12781
12778
|
},
|
|
12782
12779
|
|
|
12783
12780
|
/**
|
|
@@ -13173,11 +13170,14 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13173
13170
|
function VideoWebRtc($dom, opts) {
|
|
13174
13171
|
let _self = this;
|
|
13175
13172
|
|
|
13173
|
+
_self.videoListener = new Listener();
|
|
13174
|
+
|
|
13176
13175
|
if (!opts) {
|
|
13177
13176
|
console.error('VideoWebRtc的参数opts不能为空');
|
|
13178
13177
|
return;
|
|
13179
13178
|
}
|
|
13180
13179
|
|
|
13180
|
+
_self.configOpt = opts && opts.configOpt || 3;
|
|
13181
13181
|
hasMediaDevices(); //检测声卡设备为异步方法,耗时在几十毫秒左右,因此需要做延迟
|
|
13182
13182
|
//默认检查次数为40 间隔为20ms
|
|
13183
13183
|
|
|
@@ -13218,6 +13218,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13218
13218
|
// console.info('该视频正在播放');
|
|
13219
13219
|
// return false;
|
|
13220
13220
|
// }
|
|
13221
|
+
// 启用播放队列时,当前位置正在关闭上一个视频,则加入播放队列
|
|
13222
|
+
|
|
13223
|
+
if (me.waitPlayQueueSwitch && me.VIDEO_DATA[index].isClosing) {
|
|
13224
|
+
me._addWaitingVideo(index, video, id, opts);
|
|
13225
|
+
|
|
13226
|
+
return;
|
|
13227
|
+
}
|
|
13221
13228
|
|
|
13222
13229
|
console.log("play >>> " + "video=" + video + "; id=" + id + "; index=" + index);
|
|
13223
13230
|
me.dispatch('beforeplay', {
|
|
@@ -13316,7 +13323,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13316
13323
|
*/
|
|
13317
13324
|
playInChoice: function (video, id, opts) {
|
|
13318
13325
|
let me = this;
|
|
13319
|
-
let selView = $(
|
|
13326
|
+
let selView = $(me.selector + ' li.sel');
|
|
13320
13327
|
|
|
13321
13328
|
if (selView.length) {
|
|
13322
13329
|
if (me.VIDEO_DATA[selView.index()].playing) {
|
|
@@ -13373,6 +13380,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13373
13380
|
this.VIDEO_DATA[index].close();
|
|
13374
13381
|
|
|
13375
13382
|
if (!isSave) {
|
|
13383
|
+
this.VIDEO_DATA[index].closeType = 'close';
|
|
13376
13384
|
this.dispatch('afterclose', this.VIDEO_DATA[index]);
|
|
13377
13385
|
}
|
|
13378
13386
|
},
|
|
@@ -13399,6 +13407,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13399
13407
|
me.close(videoData[i].index);
|
|
13400
13408
|
|
|
13401
13409
|
if (!isSave) {
|
|
13410
|
+
videoData[i].closeType = 'close';
|
|
13402
13411
|
me.dispatch('afterclose', videoData[i]);
|
|
13403
13412
|
}
|
|
13404
13413
|
}
|
|
@@ -13409,13 +13418,17 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13409
13418
|
* 关闭所有视频
|
|
13410
13419
|
*/
|
|
13411
13420
|
closeAll: function (isSave) {
|
|
13412
|
-
let me = this;
|
|
13421
|
+
let me = this; // 清除所有等待播放队列
|
|
13422
|
+
|
|
13423
|
+
me._removeAllWaitingVideo();
|
|
13424
|
+
|
|
13413
13425
|
let openVideos = [];
|
|
13414
13426
|
|
|
13415
13427
|
for (let i = me._opts.windowsBeginIndex; i < me._opts.windowsBeginIndex + me._opts.windowsNum; i++) {
|
|
13416
|
-
if
|
|
13417
|
-
|
|
13418
|
-
}
|
|
13428
|
+
// if(me.VIDEO_DATA[i].playing){
|
|
13429
|
+
// me.close(i, isSave)
|
|
13430
|
+
// }
|
|
13431
|
+
me.close(i, isSave);
|
|
13419
13432
|
} // if(!openVideos.length) return;
|
|
13420
13433
|
//
|
|
13421
13434
|
// //适当延时进行关闭
|
|
@@ -13455,9 +13468,9 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13455
13468
|
me.setChoiceWindow(me._getMinIndexFreeWindow());
|
|
13456
13469
|
}
|
|
13457
13470
|
|
|
13458
|
-
$(
|
|
13471
|
+
$(me.selector + ' .video-main').removeClass("mode-" + me._opts.windows).addClass("mode-" + num);
|
|
13459
13472
|
|
|
13460
|
-
let _li = $(
|
|
13473
|
+
let _li = $(me.selector + ' li').hide();
|
|
13461
13474
|
|
|
13462
13475
|
me._opts.windows = num;
|
|
13463
13476
|
|
|
@@ -13469,12 +13482,26 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13469
13482
|
this.dispatch('screenchange', {
|
|
13470
13483
|
windowNums: num,
|
|
13471
13484
|
flag: me._opts.flag
|
|
13485
|
+
}); //设置旋转了的视频样式
|
|
13486
|
+
|
|
13487
|
+
let videoLi = document.getElementById('videoRef').querySelectorAll('li');
|
|
13488
|
+
me.VIDEO_DATA.forEach((item, index) => {
|
|
13489
|
+
let tel = item.video;
|
|
13490
|
+
|
|
13491
|
+
if (!tel && item.id) {
|
|
13492
|
+
videoLi[index].querySelector('video').style = '';
|
|
13493
|
+
videoLi[index].querySelector('.rotate-btn').setAttribute('rotate-index', 0);
|
|
13494
|
+
}
|
|
13472
13495
|
}); //设置旋转视频的样式
|
|
13473
13496
|
|
|
13474
13497
|
for (let k = 0; k < _li.length; k++) {
|
|
13475
13498
|
let rotateIndex = _li.eq(k).find('button[name=rotateVideo]').attr('rotate-index');
|
|
13476
13499
|
|
|
13477
|
-
if (rotateIndex != 0 && rotateIndex != 2)
|
|
13500
|
+
if (rotateIndex != 0 && rotateIndex != 2) {
|
|
13501
|
+
setTimeout(() => {
|
|
13502
|
+
me.videoRotateSize(_li.eq(k)[0], rotateIndex);
|
|
13503
|
+
}, 200);
|
|
13504
|
+
}
|
|
13478
13505
|
}
|
|
13479
13506
|
},
|
|
13480
13507
|
|
|
@@ -13503,7 +13530,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13503
13530
|
me.saveList();
|
|
13504
13531
|
this._polltimer = new PollTimer(function (firstRun) {
|
|
13505
13532
|
me.closeAll();
|
|
13506
|
-
|
|
13533
|
+
|
|
13534
|
+
if (firstRun) {
|
|
13507
13535
|
for (let i = 0; i < windowNum; i++) {
|
|
13508
13536
|
if (nowNum == maxNum) {
|
|
13509
13537
|
nowNum = 0;
|
|
@@ -13517,10 +13545,23 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13517
13545
|
nowNum++;
|
|
13518
13546
|
}
|
|
13519
13547
|
|
|
13520
|
-
|
|
13521
|
-
|
|
13522
|
-
|
|
13523
|
-
|
|
13548
|
+
me.dispatch('startpoll', array);
|
|
13549
|
+
} else {
|
|
13550
|
+
wait(1500).then(function () {
|
|
13551
|
+
for (let i = 0; i < windowNum; i++) {
|
|
13552
|
+
if (nowNum == maxNum) {
|
|
13553
|
+
nowNum = 0;
|
|
13554
|
+
|
|
13555
|
+
if (maxNum < windowNum) {
|
|
13556
|
+
break;
|
|
13557
|
+
}
|
|
13558
|
+
}
|
|
13559
|
+
|
|
13560
|
+
me.playByOrder(array[nowNum].video, array[nowNum].id, array[nowNum].opts);
|
|
13561
|
+
nowNum++;
|
|
13562
|
+
}
|
|
13563
|
+
});
|
|
13564
|
+
}
|
|
13524
13565
|
}, time);
|
|
13525
13566
|
},
|
|
13526
13567
|
|
|
@@ -13643,10 +13684,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13643
13684
|
*/
|
|
13644
13685
|
getInChoiceVideo: function () {
|
|
13645
13686
|
let me = this;
|
|
13646
|
-
let selView = $(
|
|
13687
|
+
let selView = $(me.selector + ' li.sel');
|
|
13647
13688
|
|
|
13648
|
-
if (selView.length && me.VIDEO_DATA[selView.index
|
|
13649
|
-
return me.VIDEO_DATA[selView.index
|
|
13689
|
+
if (selView.length && me.VIDEO_DATA[selView.attr("index")].video) {
|
|
13690
|
+
return me.VIDEO_DATA[selView.attr("index")];
|
|
13650
13691
|
}
|
|
13651
13692
|
|
|
13652
13693
|
return undefined;
|
|
@@ -13682,10 +13723,23 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13682
13723
|
|
|
13683
13724
|
let canvasObj = document.getElementById('myCanvas');
|
|
13684
13725
|
let videoObj = dataObj.tagBox.get(0);
|
|
13685
|
-
|
|
13686
|
-
|
|
13726
|
+
|
|
13727
|
+
if (videoObj == undefined) {
|
|
13728
|
+
return;
|
|
13729
|
+
} // 取流中 取视频框尺寸
|
|
13730
|
+
// 播放中 取视频画面尺寸
|
|
13731
|
+
|
|
13732
|
+
|
|
13733
|
+
if (dataObj.tagBox.parent().find(".stream-loading").length != 0) {
|
|
13734
|
+
canvasObj.width = dataObj.tagBox.width();
|
|
13735
|
+
canvasObj.height = dataObj.tagBox.height();
|
|
13736
|
+
} else {
|
|
13737
|
+
canvasObj.width = videoObj.videoWidth;
|
|
13738
|
+
canvasObj.height = videoObj.videoHeight;
|
|
13739
|
+
}
|
|
13740
|
+
|
|
13687
13741
|
let ctx = canvasObj.getContext("2d");
|
|
13688
|
-
ctx.drawImage(videoObj, 0, 0,
|
|
13742
|
+
ctx.drawImage(videoObj, 0, 0, videoObj.videoWidth, videoObj.videoHeight);
|
|
13689
13743
|
let dataUrl = canvasObj.toDataURL('image/jpeg');
|
|
13690
13744
|
callback ? callback(dataUrl) : null;
|
|
13691
13745
|
},
|
|
@@ -13732,8 +13786,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13732
13786
|
|
|
13733
13787
|
if (index < 0) {
|
|
13734
13788
|
console.error('窗口编号获取失败!');
|
|
13735
|
-
}
|
|
13789
|
+
} //保存对讲号码
|
|
13790
|
+
|
|
13736
13791
|
|
|
13792
|
+
window.pocNo = pocNo;
|
|
13737
13793
|
return me.VIDEO_DATA[index].pocCall("open_poccall", pocNo, centerTel);
|
|
13738
13794
|
},
|
|
13739
13795
|
|
|
@@ -13757,6 +13813,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13757
13813
|
}
|
|
13758
13814
|
|
|
13759
13815
|
me.VIDEO_DATA[index].stream = null;
|
|
13816
|
+
window.pocNo = null;
|
|
13760
13817
|
return me.VIDEO_DATA[index].pocCall("close_poccall", pocNo, centerTel);
|
|
13761
13818
|
},
|
|
13762
13819
|
|
|
@@ -13791,21 +13848,28 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13791
13848
|
* 添加事件
|
|
13792
13849
|
*/
|
|
13793
13850
|
addListener: function (type, handler, key) {
|
|
13794
|
-
videoListener.addListener(type, handler, key);
|
|
13851
|
+
this.videoListener.addListener(type, handler, key);
|
|
13795
13852
|
},
|
|
13796
13853
|
|
|
13797
13854
|
/**
|
|
13798
13855
|
* 删除事件
|
|
13799
13856
|
*/
|
|
13800
13857
|
removeListener: function (type, handler) {
|
|
13801
|
-
videoListener.removeListener(type, handler);
|
|
13858
|
+
this.videoListener.removeListener(type, handler);
|
|
13802
13859
|
},
|
|
13803
13860
|
|
|
13804
13861
|
/**
|
|
13805
13862
|
* 派发事件
|
|
13806
13863
|
*/
|
|
13807
13864
|
dispatch: function (e, options) {
|
|
13808
|
-
videoListener.dispatch(e, options);
|
|
13865
|
+
this.videoListener.dispatch(e, options);
|
|
13866
|
+
},
|
|
13867
|
+
|
|
13868
|
+
/**
|
|
13869
|
+
* 清空事件
|
|
13870
|
+
*/
|
|
13871
|
+
removeAllListeners: function () {
|
|
13872
|
+
this.videoListener.removeAllListeners();
|
|
13809
13873
|
},
|
|
13810
13874
|
|
|
13811
13875
|
/**
|
|
@@ -13816,7 +13880,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13816
13880
|
index = index || me._opts.windowsBeginIndex;
|
|
13817
13881
|
|
|
13818
13882
|
for (; index < me._opts.windowsBeginIndex + me._opts.windows; index++) {
|
|
13819
|
-
if (!me.VIDEO_DATA[index].playing) {
|
|
13883
|
+
if (!me.VIDEO_DATA[index].playing && !me.VIDEO_DATA[index].isWaiting) {
|
|
13820
13884
|
return index;
|
|
13821
13885
|
}
|
|
13822
13886
|
}
|
|
@@ -13829,7 +13893,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13829
13893
|
*/
|
|
13830
13894
|
_getChoiceWindow: function () {
|
|
13831
13895
|
let me = this;
|
|
13832
|
-
let selView = $(
|
|
13896
|
+
let selView = $(me.selector + ' li.sel');
|
|
13833
13897
|
|
|
13834
13898
|
if (selView.length) {
|
|
13835
13899
|
return selView.index();
|
|
@@ -13862,13 +13926,40 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13862
13926
|
_clickWindow: function () {
|
|
13863
13927
|
let me = this; //视频窗口选中
|
|
13864
13928
|
|
|
13865
|
-
$(
|
|
13866
|
-
$(
|
|
13929
|
+
$(me.selector + ' li').click(function () {
|
|
13930
|
+
$(me.selector + ' li').removeClass("sel");
|
|
13867
13931
|
$(this).addClass("sel"); //如果视频正在播放则分发点击消息
|
|
13868
13932
|
|
|
13869
13933
|
if (me.getInChoiceVideo()) {
|
|
13870
13934
|
me.dispatch('click', me.getInChoiceVideo());
|
|
13871
13935
|
}
|
|
13936
|
+
}); // 设置视频窗可拖拽
|
|
13937
|
+
|
|
13938
|
+
let src = null;
|
|
13939
|
+
$(me.selector + ' li').bind("dragstart", function (ev) {
|
|
13940
|
+
src = $(this);
|
|
13941
|
+
});
|
|
13942
|
+
$(me.selector + ' li').bind("dragover", function (ev) {
|
|
13943
|
+
ev.preventDefault();
|
|
13944
|
+
});
|
|
13945
|
+
$(me.selector + ' li').bind("drop", function (ev) {
|
|
13946
|
+
ev.preventDefault();
|
|
13947
|
+
|
|
13948
|
+
if (src.prop("outerHTML") === $(this).prop("outerHTML")) {
|
|
13949
|
+
return;
|
|
13950
|
+
}
|
|
13951
|
+
|
|
13952
|
+
let target = $(this);
|
|
13953
|
+
let srcIndex = src.index();
|
|
13954
|
+
let targetIndex = target.index();
|
|
13955
|
+
|
|
13956
|
+
if (srcIndex > targetIndex) {
|
|
13957
|
+
src.insertBefore(target);
|
|
13958
|
+
target.insertAfter($(me.selector + ' .video-main li.screen').eq(srcIndex));
|
|
13959
|
+
} else {
|
|
13960
|
+
src.insertAfter(target);
|
|
13961
|
+
target.insertBefore($(me.selector + ' .video-main li.screen').eq(srcIndex));
|
|
13962
|
+
}
|
|
13872
13963
|
});
|
|
13873
13964
|
},
|
|
13874
13965
|
|
|
@@ -13899,7 +13990,15 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13899
13990
|
conf: {},
|
|
13900
13991
|
pollInterval: 10,
|
|
13901
13992
|
windowsNum: 16,
|
|
13902
|
-
isVideoTag: true
|
|
13993
|
+
isVideoTag: true,
|
|
13994
|
+
//true生成video标签 false生产audio标签 默认true
|
|
13995
|
+
showVideoInfo: 1,
|
|
13996
|
+
//显示分辨率、码率等信息,1-显示左下角 2-显示左上角,为0时控制_showVideoInfo函数处理,默认1
|
|
13997
|
+
waitPlayQueueSwitch: false,
|
|
13998
|
+
//播放队列开关,默认false
|
|
13999
|
+
defaultBusinessType: 0,
|
|
14000
|
+
// 配置的默认业务类型 0:调度主线 1:勤指
|
|
14001
|
+
videoTipTimeOut: 5 // 超时无首屏检测时间
|
|
13903
14002
|
|
|
13904
14003
|
};
|
|
13905
14004
|
$.extend(me._opts, opts);
|
|
@@ -13926,24 +14025,33 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13926
14025
|
} //获取起始的窗口位置
|
|
13927
14026
|
|
|
13928
14027
|
|
|
13929
|
-
me._opts.windowsBeginIndex =
|
|
14028
|
+
me._opts.windowsBeginIndex = 0; // 对讲号码初始化
|
|
13930
14029
|
|
|
13931
|
-
|
|
14030
|
+
window.pocNo = 0; // 播放队列开关 默认打开
|
|
13932
14031
|
|
|
13933
|
-
me.
|
|
14032
|
+
me.waitPlayQueueSwitch = opts.waitPlayQueueSwitch == undefined ? false : opts.waitPlayQueueSwitch; //是否提示
|
|
13934
14033
|
|
|
13935
|
-
me._opts.
|
|
14034
|
+
me._opts.showPrompt === false && (showPrompt = false); // 勤指业务下 设备检测
|
|
14035
|
+
|
|
14036
|
+
me._opts.defaultBusinessType == 1 && me._checkDevices(); //初始化界面
|
|
14037
|
+
|
|
14038
|
+
me._opts.isVideoTag ? me._initVideoView($dom, me._opts.showVideoInfo) : me._initAudioView($dom); //初始化Janus
|
|
13936
14039
|
|
|
13937
14040
|
me._initJanus(); //初始化按钮点击事件
|
|
13938
14041
|
|
|
13939
14042
|
|
|
13940
|
-
me._initBtnEvent();
|
|
14043
|
+
me._initBtnEvent(); // 初始化事件监听
|
|
14044
|
+
|
|
13941
14045
|
|
|
14046
|
+
me._initEventListen(); //设置鼠标点击选中窗口
|
|
13942
14047
|
|
|
13943
|
-
me._clickWindow(); //显示视频信息:名称、分辨率、码率、丢包率
|
|
13944
14048
|
|
|
14049
|
+
me._clickWindow();
|
|
13945
14050
|
|
|
13946
|
-
me.
|
|
14051
|
+
if (me._opts.showVideoInfo != 0) {
|
|
14052
|
+
//显示视频信息:名称、分辨率、码率、丢包率
|
|
14053
|
+
me._showVideoInfo();
|
|
14054
|
+
} //双击某个视频全屏
|
|
13947
14055
|
|
|
13948
14056
|
|
|
13949
14057
|
me._dbClickFullScreen();
|
|
@@ -14057,35 +14165,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14057
14165
|
* 初始化按钮点击事件
|
|
14058
14166
|
*/
|
|
14059
14167
|
_initBtnEvent: function () {
|
|
14060
|
-
let me = this;
|
|
14061
|
-
|
|
14062
|
-
var src = null;
|
|
14063
|
-
$(me.selector + ' li').bind("dragstart", function (ev) {
|
|
14064
|
-
src = $(this);
|
|
14065
|
-
});
|
|
14066
|
-
$(me.selector + ' li').bind("dragover", function (ev) {
|
|
14067
|
-
ev.preventDefault();
|
|
14068
|
-
});
|
|
14069
|
-
$(me.selector + ' li').bind("drop", function (ev) {
|
|
14070
|
-
ev.preventDefault();
|
|
14071
|
-
|
|
14072
|
-
if (src.prop("outerHTML") === $(this).prop("outerHTML")) {
|
|
14073
|
-
return;
|
|
14074
|
-
}
|
|
14075
|
-
|
|
14076
|
-
var target = $(this);
|
|
14077
|
-
var srcIndex = src.index();
|
|
14078
|
-
var targetIndex = target.index();
|
|
14079
|
-
|
|
14080
|
-
if (srcIndex > targetIndex) {
|
|
14081
|
-
src.insertBefore(target);
|
|
14082
|
-
target.insertAfter($(me.selector + ' .video-main li.screen').eq(srcIndex));
|
|
14083
|
-
} else {
|
|
14084
|
-
src.insertAfter(target);
|
|
14085
|
-
target.insertBefore($(me.selector + ' .video-main li.screen').eq(srcIndex));
|
|
14086
|
-
}
|
|
14087
|
-
});
|
|
14088
|
-
let videoFlagObj = $('[video-flag="' + me._opts.windowsBeginIndex + '"]'); //锁定视频事件
|
|
14168
|
+
let me = this;
|
|
14169
|
+
let videoFlagObj = $(me.selector + ' .video-main'); //锁定视频事件
|
|
14089
14170
|
|
|
14090
14171
|
videoFlagObj.find("button[name='lockVideo']").click(function () {
|
|
14091
14172
|
let index = Number($(this).parent().parent().attr("index"));
|
|
@@ -14101,7 +14182,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14101
14182
|
} else {
|
|
14102
14183
|
me.VIDEO_DATA[index].isLockVideo = true;
|
|
14103
14184
|
$(this).attr('class', 'lock-video-btn');
|
|
14104
|
-
}
|
|
14185
|
+
} //jquery方式阻止默认事件 & 冒泡事件
|
|
14186
|
+
|
|
14187
|
+
|
|
14188
|
+
return false;
|
|
14105
14189
|
});
|
|
14106
14190
|
videoFlagObj.find('button[name=rotateVideo]').click(function () {
|
|
14107
14191
|
let rotateIndex = Number($(this).attr("rotate-index"));
|
|
@@ -14109,13 +14193,17 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14109
14193
|
rotateIndex %= 4;
|
|
14110
14194
|
$(this).attr("rotate-index", rotateIndex);
|
|
14111
14195
|
let li = $(this).parent().parent()[0];
|
|
14112
|
-
me.videoRotateSize(li, rotateIndex);
|
|
14196
|
+
me.videoRotateSize(li, rotateIndex); //jquery方式阻止默认事件 & 冒泡事件
|
|
14197
|
+
|
|
14198
|
+
return false;
|
|
14113
14199
|
}); //接收音频事件
|
|
14114
14200
|
|
|
14115
14201
|
videoFlagObj.find("button[name='recvAudio']").click(function () {
|
|
14116
14202
|
let _self = this;
|
|
14117
14203
|
|
|
14118
|
-
let index = Number($(this).parent().parent().attr("index"));
|
|
14204
|
+
let index = Number($(this).parent().parent().attr("index")); // 优先当前窗口参数设置的业务类型 其次配置的默认业务类型
|
|
14205
|
+
|
|
14206
|
+
let businessType = me.VIDEO_DATA[index].opts.businessType == undefined ? me._opts.defaultBusinessType : me.VIDEO_DATA[index].opts.businessType;
|
|
14119
14207
|
|
|
14120
14208
|
if (!me.VIDEO_DATA[index].playing) {
|
|
14121
14209
|
promptAlarm('请选择播放的视频源!');
|
|
@@ -14126,65 +14214,113 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14126
14214
|
//发送停止播放音频的请求
|
|
14127
14215
|
me.VIDEO_DATA[index].operateAudio("stop_audio");
|
|
14128
14216
|
$(this).attr('class', 'unrecv-audio-btn');
|
|
14129
|
-
me.VIDEO_DATA[index].tagBox.muted
|
|
14217
|
+
me.VIDEO_DATA[index].tagBox.prop("muted", true);
|
|
14130
14218
|
} else {
|
|
14131
|
-
|
|
14132
|
-
|
|
14219
|
+
if (businessType == 0) {
|
|
14220
|
+
//发送前先关闭其它音频通道(包括接收和发送音频)
|
|
14221
|
+
let lis = $($(_self).parent().parent().parent()).children();
|
|
14133
14222
|
|
|
14134
|
-
|
|
14135
|
-
|
|
14223
|
+
for (let i = 0; i < lis.length; i++) {
|
|
14224
|
+
let btnIndex = Number($(lis[i]).attr("index"));
|
|
14136
14225
|
|
|
14137
|
-
|
|
14138
|
-
|
|
14139
|
-
|
|
14226
|
+
if (index == btnIndex) {
|
|
14227
|
+
continue;
|
|
14228
|
+
}
|
|
14140
14229
|
|
|
14141
|
-
|
|
14142
|
-
|
|
14230
|
+
let recvBtn = $($(lis[i]).find("button[name='recvAudio']")[0]);
|
|
14231
|
+
let sendBtn = $($(lis[i]).find("button[name='sendAudio']")[0]);
|
|
14143
14232
|
|
|
14144
|
-
|
|
14145
|
-
|
|
14146
|
-
|
|
14233
|
+
if (recvBtn.attr("class") == 'recv-audio-btn') {
|
|
14234
|
+
if (me.VIDEO_DATA[btnIndex].playing) {
|
|
14235
|
+
recvBtn.click();
|
|
14236
|
+
}
|
|
14147
14237
|
}
|
|
14148
|
-
}
|
|
14149
14238
|
|
|
14150
|
-
|
|
14151
|
-
|
|
14152
|
-
|
|
14239
|
+
if (sendBtn.attr("class") == 'send-audio-btn') {
|
|
14240
|
+
if (me.VIDEO_DATA[btnIndex].playing) {
|
|
14241
|
+
sendBtn.click();
|
|
14242
|
+
}
|
|
14153
14243
|
}
|
|
14154
|
-
}
|
|
14155
|
-
} //发送播放音频的请求
|
|
14244
|
+
} //发送播放音频的请求
|
|
14156
14245
|
|
|
14157
14246
|
|
|
14158
|
-
|
|
14159
|
-
|
|
14247
|
+
$(_self).attr('class', 'recv-audio-btn');
|
|
14248
|
+
setTimeout(function () {
|
|
14249
|
+
if (!me.VIDEO_DATA[index].isClosing) {
|
|
14250
|
+
me.VIDEO_DATA[index].operateAudio("recv_audio");
|
|
14251
|
+
me.VIDEO_DATA[index].tagBox.prop("muted", false);
|
|
14252
|
+
}
|
|
14253
|
+
}, 1000);
|
|
14254
|
+
} else if (businessType == 1) {
|
|
14255
|
+
// poc新模式支持回传多个音频,因此不关闭
|
|
14256
|
+
//发送播放音频的请求
|
|
14257
|
+
$(_self).attr('class', 'recv-audio-btn');
|
|
14160
14258
|
me.VIDEO_DATA[index].operateAudio("recv_audio");
|
|
14161
|
-
me.VIDEO_DATA[index].tagBox.muted
|
|
14162
|
-
}
|
|
14259
|
+
me.VIDEO_DATA[index].tagBox.prop("muted", false);
|
|
14260
|
+
}
|
|
14163
14261
|
}
|
|
14164
14262
|
}); //发送音频事件
|
|
14165
14263
|
|
|
14166
14264
|
videoFlagObj.find("button[name='sendAudio']").click(function () {
|
|
14167
|
-
let index = Number($(this).parent().parent().attr("index"));
|
|
14265
|
+
let index = Number($(this).parent().parent().attr("index")); // 优先当前窗口参数设置的业务类型 其次配置的默认业务类型 最后默认调度业务
|
|
14266
|
+
|
|
14267
|
+
let businessType = me.VIDEO_DATA[index].opts.businessType == undefined ? me._opts.defaultBusinessType : me.VIDEO_DATA[index].opts.businessType;
|
|
14168
14268
|
|
|
14169
14269
|
if (!me.VIDEO_DATA[index].playing) {
|
|
14170
14270
|
promptAlarm('请选择播放的视频源!');
|
|
14171
14271
|
return;
|
|
14172
14272
|
}
|
|
14173
14273
|
|
|
14174
|
-
if (
|
|
14175
|
-
|
|
14176
|
-
$(this).attr('class'
|
|
14177
|
-
|
|
14178
|
-
|
|
14179
|
-
|
|
14180
|
-
|
|
14181
|
-
|
|
14182
|
-
|
|
14274
|
+
if (businessType == 0) {
|
|
14275
|
+
// 主线业务
|
|
14276
|
+
if ($(this).attr('class') == 'send-audio-btn') {
|
|
14277
|
+
me.VIDEO_DATA[index].operateAudio("unsend_audio");
|
|
14278
|
+
$(this).attr('class', 'unsend-audio-btn');
|
|
14279
|
+
me.VIDEO_DATA[index].stream.getAudioTracks()[0].enabled = false;
|
|
14280
|
+
} else {
|
|
14281
|
+
me.VIDEO_DATA[index].operateAudio("send_audio");
|
|
14282
|
+
$(this).attr('class', 'send-audio-btn');
|
|
14283
|
+
me.VIDEO_DATA[index].stream.getAudioTracks()[0].enabled = true;
|
|
14284
|
+
}
|
|
14285
|
+
} else if (businessType == 1) {
|
|
14286
|
+
// 勤指业务
|
|
14287
|
+
if ($(this).attr('class') == 'send-audio-btn') {
|
|
14288
|
+
$(this).attr('class', 'unsend-audio-btn'); //关闭点对点对讲
|
|
14289
|
+
|
|
14290
|
+
me.VIDEO_DATA[index].ptopPoc("close_ptop_poc", window.pocNo);
|
|
14291
|
+
} else {
|
|
14292
|
+
$(this).attr('class', 'send-audio-btn'); //发起点对点对讲
|
|
14293
|
+
|
|
14294
|
+
me.VIDEO_DATA[index].ptopPoc("open_ptop_poc", window.pocNo);
|
|
14295
|
+
}
|
|
14296
|
+
} //jquery方式阻止默认事件 & 冒泡事件
|
|
14297
|
+
|
|
14298
|
+
|
|
14299
|
+
return false;
|
|
14183
14300
|
}); //关闭视频事件
|
|
14184
14301
|
|
|
14185
14302
|
videoFlagObj.find("button[name='closeVideo']").click(function () {
|
|
14186
14303
|
let index = Number($(this).parent().parent().attr("index"));
|
|
14187
|
-
me.close(index);
|
|
14304
|
+
me.close(index); //jquery方式阻止默认事件 & 冒泡事件
|
|
14305
|
+
|
|
14306
|
+
return false;
|
|
14307
|
+
});
|
|
14308
|
+
},
|
|
14309
|
+
|
|
14310
|
+
/**
|
|
14311
|
+
* 初始化事件监听
|
|
14312
|
+
*/
|
|
14313
|
+
_initEventListen: function () {
|
|
14314
|
+
let _self = this; // 打开视频 {index, video, id, opts} index(视频窗口编号,从0开始) video(视频设备id,即devId) id(标识,空的话使用设备id) opts(其他参数)
|
|
14315
|
+
|
|
14316
|
+
|
|
14317
|
+
_self.addListener('openVideo', function (e) {
|
|
14318
|
+
_self.play(e.index, e.video, e.id, e.opts);
|
|
14319
|
+
}); // janus通知后台已关闭视频
|
|
14320
|
+
|
|
14321
|
+
|
|
14322
|
+
_self.addListener('notifyCloseVideo', function (e) {
|
|
14323
|
+
_self._notifyWaitingVideo(e.index);
|
|
14188
14324
|
});
|
|
14189
14325
|
},
|
|
14190
14326
|
|
|
@@ -14193,7 +14329,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14193
14329
|
*/
|
|
14194
14330
|
_dbClickFullScreen: function () {
|
|
14195
14331
|
let me = this;
|
|
14196
|
-
$(
|
|
14332
|
+
$(me.selector + ' .video-main').find('.video-box').on("dblclick", function () {
|
|
14197
14333
|
me._fullScreenEvent(this);
|
|
14198
14334
|
});
|
|
14199
14335
|
},
|
|
@@ -14228,10 +14364,20 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14228
14364
|
let me = this;
|
|
14229
14365
|
|
|
14230
14366
|
function clock() {
|
|
14367
|
+
if (!me.VIDEO_DATA || !me.VIDEO_DATA.length) return;
|
|
14368
|
+
|
|
14231
14369
|
for (let i = 0; i < me.VIDEO_DATA.length; i++) {
|
|
14232
14370
|
if (me.VIDEO_DATA[i].playing) {
|
|
14233
|
-
let number = Number(i) + Number(1);
|
|
14234
|
-
|
|
14371
|
+
let number = Number(i) + Number(1); //获取视频video标签
|
|
14372
|
+
|
|
14373
|
+
let $videoList = $(me.selector + " .video-main #video-" + number);
|
|
14374
|
+
|
|
14375
|
+
if (!$videoList.length) {
|
|
14376
|
+
console.error("can not find dom by id [video-" + number + "]");
|
|
14377
|
+
continue;
|
|
14378
|
+
}
|
|
14379
|
+
|
|
14380
|
+
let videoObj = $videoList[0];
|
|
14235
14381
|
if (!videoObj) continue;
|
|
14236
14382
|
let width = videoObj.videoWidth;
|
|
14237
14383
|
let height = videoObj.videoHeight; //码率
|
|
@@ -14246,6 +14392,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14246
14392
|
|
|
14247
14393
|
me._setPacketsLostRate(i, config, me);
|
|
14248
14394
|
|
|
14395
|
+
me._setFrameDecoded(i, config, me);
|
|
14396
|
+
|
|
14249
14397
|
let resolution = width + "×" + height;
|
|
14250
14398
|
|
|
14251
14399
|
switch (height + '') {
|
|
@@ -14267,11 +14415,26 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14267
14415
|
|
|
14268
14416
|
default:
|
|
14269
14417
|
break;
|
|
14418
|
+
} //获取文案显示dom元素
|
|
14419
|
+
|
|
14420
|
+
|
|
14421
|
+
let $videoInfoList = $(me.selector + " .video-main #info-" + number);
|
|
14422
|
+
|
|
14423
|
+
if (!$videoInfoList.length) {
|
|
14424
|
+
console.error("can not find dom by id [info-" + number + "]");
|
|
14425
|
+
continue;
|
|
14270
14426
|
}
|
|
14271
14427
|
|
|
14272
|
-
let videoInfoObj =
|
|
14428
|
+
let videoInfoObj = $videoInfoList[0];
|
|
14273
14429
|
let videoName = me.VIDEO_DATA[i].opts && me.VIDEO_DATA[i].opts.name ? me.VIDEO_DATA[i].opts.name : me.VIDEO_DATA[i].video;
|
|
14274
|
-
videoInfoObj.innerHTML = videoName + ' ' + resolution + '<br>丢包率:' + me.VIDEO_DATA[i].packetsLostRate + ' ' + bitrate.replace("kbits/sec", "kbps");
|
|
14430
|
+
videoInfoObj.innerHTML = videoName + ' ' + resolution + '<br>丢包率:' + me.VIDEO_DATA[i].packetsLostRate + ' ' + bitrate.replace("kbits/sec", "kbps"); //根据视频框大小自动计算 显示文案的文字大小
|
|
14431
|
+
|
|
14432
|
+
let fontHeightSize = $(me.selector + " .video-main #video-" + number).height() / 15;
|
|
14433
|
+
let fontWidthSize = $(me.selector + " .video-main #video-" + number).width() / 18; //长和宽 除以 15, 取小的值做文字大小样式
|
|
14434
|
+
|
|
14435
|
+
let fontSize = fontHeightSize < fontWidthSize ? fontHeightSize : fontWidthSize;
|
|
14436
|
+
fontSize = !fontSize || fontSize > 20 ? 20 : fontSize;
|
|
14437
|
+
$("#info-" + number).css("font-size", fontSize + "px");
|
|
14275
14438
|
}
|
|
14276
14439
|
}
|
|
14277
14440
|
} //已存在则清除
|
|
@@ -14334,17 +14497,175 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14334
14497
|
}
|
|
14335
14498
|
},
|
|
14336
14499
|
|
|
14500
|
+
/**
|
|
14501
|
+
* 设置当前网络信号提示
|
|
14502
|
+
* @param index 当前打开视频的索引
|
|
14503
|
+
* @param config
|
|
14504
|
+
* @param me
|
|
14505
|
+
* @private
|
|
14506
|
+
*/
|
|
14507
|
+
_setFrameDecoded: function (index, config, me) {
|
|
14508
|
+
if (config.pc !== null && typeof config.pc !== 'undefined' && config.pc.getStats) {
|
|
14509
|
+
config.pc.getStats().then(function (stats) {
|
|
14510
|
+
stats.forEach(function (res) {
|
|
14511
|
+
if (res) {
|
|
14512
|
+
let inStats = false; // Check if these are statistics on incoming media
|
|
14513
|
+
|
|
14514
|
+
if ((res.mediaType === 'video' || res.id.toLowerCase().indexOf('video') > -1) && res.type === 'inbound-rtp' && res.id.indexOf('rtcp') < 0) {
|
|
14515
|
+
// New stats
|
|
14516
|
+
inStats = true;
|
|
14517
|
+
} else if (res.type === 'ssrc' && res.bytesReceived && (res.googCodecName === 'VP8' || res.googCodecName === '')) {
|
|
14518
|
+
// Older Chromer versions
|
|
14519
|
+
inStats = true;
|
|
14520
|
+
} // Parse stats now
|
|
14521
|
+
|
|
14522
|
+
|
|
14523
|
+
if (inStats) {
|
|
14524
|
+
if (res.hasOwnProperty('framesDecoded')) {
|
|
14525
|
+
if (res.framesDecoded <= 1) return;
|
|
14526
|
+
|
|
14527
|
+
if (typeof me.VIDEO_DATA[index].framesDecodedCount === 'undefined') {
|
|
14528
|
+
me.VIDEO_DATA[index].framesDecodedCount = 0;
|
|
14529
|
+
}
|
|
14530
|
+
|
|
14531
|
+
if (typeof me.VIDEO_DATA[index].framesDecodedLast === 'undefined') {
|
|
14532
|
+
me.VIDEO_DATA[index].framesDecodedLast = res.framesDecoded;
|
|
14533
|
+
}
|
|
14534
|
+
|
|
14535
|
+
if (res.framesDecoded > me.VIDEO_DATA[index].framesDecodedLast) {
|
|
14536
|
+
if (typeof me.VIDEO_DATA[index].tipDom !== 'undefined' && me.VIDEO_DATA[index].tipDom.style.display === 'block') {
|
|
14537
|
+
me.VIDEO_DATA[index].tipDom.style.display = 'none';
|
|
14538
|
+
}
|
|
14539
|
+
}
|
|
14540
|
+
|
|
14541
|
+
me.VIDEO_DATA[index].framesDecodedCount++; // 定时检测
|
|
14542
|
+
|
|
14543
|
+
if (me.VIDEO_DATA[index].framesDecodedCount === me.configOpt) {
|
|
14544
|
+
if (res.framesDecoded - me.VIDEO_DATA[index].framesDecodedLast === 0) {
|
|
14545
|
+
// 卡顿
|
|
14546
|
+
if (typeof me.VIDEO_DATA[index].tipDom === 'undefined') {
|
|
14547
|
+
var numIndex = index + 1;
|
|
14548
|
+
me.VIDEO_DATA[index].tipDom = document.getElementById('frame-decoded-' + numIndex);
|
|
14549
|
+
}
|
|
14550
|
+
|
|
14551
|
+
me.VIDEO_DATA[index].tipDom.style.display = 'block';
|
|
14552
|
+
}
|
|
14553
|
+
|
|
14554
|
+
me.VIDEO_DATA[index].framesDecodedCount = 0;
|
|
14555
|
+
me.VIDEO_DATA[index].framesDecodedLast = res.framesDecoded;
|
|
14556
|
+
} else {
|
|
14557
|
+
me.VIDEO_DATA[index].framesDecodedLast = res.framesDecoded;
|
|
14558
|
+
}
|
|
14559
|
+
}
|
|
14560
|
+
}
|
|
14561
|
+
}
|
|
14562
|
+
});
|
|
14563
|
+
});
|
|
14564
|
+
}
|
|
14565
|
+
},
|
|
14566
|
+
|
|
14567
|
+
/**
|
|
14568
|
+
* 设备可用性检查(扬声器、麦克风、分辨率、浏览器类型)
|
|
14569
|
+
* 1. 未检测(status == undefined)询问进入检测界面
|
|
14570
|
+
* 2. 检测完成按相应结果给予相应提示
|
|
14571
|
+
* 3. 拒绝检测按所有检测通过处理
|
|
14572
|
+
* 4. 程序自行检测,并将是否加载声卡结果放入window对象
|
|
14573
|
+
* @private
|
|
14574
|
+
*/
|
|
14575
|
+
_checkDevices: function () {
|
|
14576
|
+
let me = this;
|
|
14577
|
+
let tipCountKey = "DEVICES_CHECK_TIP_COUNT";
|
|
14578
|
+
let statusKey = "DEVICES_CHECK_STATUS";
|
|
14579
|
+
let checkCompleted = "completed";
|
|
14580
|
+
let checkRejected = "rejected";
|
|
14581
|
+
let microResultKey = "MICRO_RESULT";
|
|
14582
|
+
let speakerResultKey = "SPEAKER_RESULT";
|
|
14583
|
+
let screenResultKey = "SCREEN_RESULT";
|
|
14584
|
+
let resultPass = "pass";
|
|
14585
|
+
let resultNotPass = "not pass";
|
|
14586
|
+
let tipCount = sessionStorage.getItem(tipCountKey);
|
|
14587
|
+
let status = localStorage.getItem(statusKey);
|
|
14588
|
+
|
|
14589
|
+
if ((tipCount == undefined || tipCount == "0") && status == undefined) {
|
|
14590
|
+
sessionStorage.setItem(tipCountKey, "1"); //弹窗讯问是否进入检测界面
|
|
14591
|
+
|
|
14592
|
+
if (confirm("您还没有检测硬件设备,是否先进行检测?")) {
|
|
14593
|
+
window.open("/scooper-video/new/checkDevices");
|
|
14594
|
+
} else {
|
|
14595
|
+
localStorage.setItem(statusKey, checkRejected);
|
|
14596
|
+
}
|
|
14597
|
+
|
|
14598
|
+
return;
|
|
14599
|
+
}
|
|
14600
|
+
|
|
14601
|
+
if (status == checkCompleted) {
|
|
14602
|
+
let microResult = localStorage.getItem(microResultKey) == undefined ? resultPass : localStorage.getItem(microResultKey);
|
|
14603
|
+
let speakerResult = localStorage.getItem(speakerResultKey) == undefined ? resultPass : localStorage.getItem(speakerResultKey);
|
|
14604
|
+
let screenResult = localStorage.getItem(screenResultKey) == undefined ? resultPass : localStorage.getItem(screenResultKey);
|
|
14605
|
+
let msg = "";
|
|
14606
|
+
|
|
14607
|
+
if (speakerResult == resultNotPass) {
|
|
14608
|
+
msg += "检测到扬声器异常,可能影响系统某些功能的使用!";
|
|
14609
|
+
console.error(msg);
|
|
14610
|
+
}
|
|
14611
|
+
|
|
14612
|
+
if (microResult == resultNotPass) {
|
|
14613
|
+
msg += "检测到麦克风异常,可能影响系统某些功能的使用!";
|
|
14614
|
+
console.error(msg);
|
|
14615
|
+
}
|
|
14616
|
+
|
|
14617
|
+
if (screenResult === resultNotPass) {
|
|
14618
|
+
msg += "您的屏幕分辨率过低,可能导致页面布局混乱!"; //提示消息
|
|
14619
|
+
|
|
14620
|
+
promptAlarm(msg);
|
|
14621
|
+
}
|
|
14622
|
+
|
|
14623
|
+
let userAgent = navigator.userAgent;
|
|
14624
|
+
|
|
14625
|
+
if (userAgent.toLowerCase().indexOf("chrome") < 0 && userAgent.toLowerCase().indexOf("firefox") < 0 && userAgent.toLowerCase().indexOf("edge") < 0) {
|
|
14626
|
+
msg += "当前浏览器下部分功能可能存在兼容问题,建议使用谷歌浏览器!";
|
|
14627
|
+
promptAlarm(msg);
|
|
14628
|
+
}
|
|
14629
|
+
|
|
14630
|
+
if (msg != "") {
|
|
14631
|
+
//提示并派发消息
|
|
14632
|
+
// promptAlarm(msg);
|
|
14633
|
+
//防止外部未监听消息就派发事件
|
|
14634
|
+
setTimeout(function () {
|
|
14635
|
+
me.videoListener.dispatch('msginfo', {
|
|
14636
|
+
'msg': msg
|
|
14637
|
+
});
|
|
14638
|
+
}, 3000);
|
|
14639
|
+
}
|
|
14640
|
+
}
|
|
14641
|
+
},
|
|
14642
|
+
|
|
14337
14643
|
/**
|
|
14338
14644
|
* 视频界面的初始化,在传过来的dom中创建界面
|
|
14339
14645
|
*/
|
|
14340
|
-
_initVideoView: function ($dom) {
|
|
14646
|
+
_initVideoView: function ($dom, infoPosition) {
|
|
14341
14647
|
let me = this;
|
|
14342
|
-
let
|
|
14648
|
+
let position;
|
|
14649
|
+
|
|
14650
|
+
switch (infoPosition) {
|
|
14651
|
+
case 1:
|
|
14652
|
+
position = "info-bottom";
|
|
14653
|
+
break;
|
|
14654
|
+
|
|
14655
|
+
case 2:
|
|
14656
|
+
position = "info-top";
|
|
14657
|
+
break;
|
|
14658
|
+
|
|
14659
|
+
default:
|
|
14660
|
+
position = "info-bottom";
|
|
14661
|
+
}
|
|
14662
|
+
|
|
14663
|
+
let objClass = (me._opts.windowsNum == 1 ? 'video-main video-main-full mode-' : 'video-main mode-') + me._opts.windows;
|
|
14343
14664
|
let videoHtml = '<ul class="' + objClass + '" id="video-main-web-rtc" video-flag="' + me._opts.windowsBeginIndex + '">';
|
|
14344
14665
|
let index = me._opts.windowsBeginIndex + 1;
|
|
14345
14666
|
|
|
14346
14667
|
for (let i = index; i < index + me._opts.windowsNum; i++) {
|
|
14347
|
-
videoHtml += '<li class="screen-' + i + '" index="' + (i - 1) + '" draggable="true"><video class="video-box" id="video-' + i + '" autoplay ></video>' + '<div class="info
|
|
14668
|
+
videoHtml += '<li class="screen screen-' + i + '" index="' + (i - 1) + '" draggable="true"><video muted class="video-box" id="video-' + i + '" autoplay ></video>' + '<div class="hide info ' + position + '" id="info-' + i + '"></div>' + '<div class="hide frame-decoded" id="frame-decoded-' + i + '"style="position:absolute;float:left;color:#fff;width:67%;z-index:1;top:135px;left:180px">网络信号不佳</div>' + '<div class="operate-btn">'; //videoHtml +='<button type="button" class="unlock-video-btn hide" name="lockVideo"></button>';
|
|
14348
14669
|
|
|
14349
14670
|
checkUserMediaAvailable() && (videoHtml += '<button type="button" class="rotate-btn hide" name="rotateVideo" rotate-index="0" title="视频旋转"></button><button type="button" class="unsend-audio-btn hide" name="sendAudio"></button>');
|
|
14350
14671
|
videoHtml += '<button type="button" class="unrecv-audio-btn hide" name="recvAudio"></button>' + '<button type="button" class="close-btn hide" name="closeVideo"></button>' + '</div>' + '</li>';
|
|
@@ -14360,7 +14681,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14360
14681
|
*/
|
|
14361
14682
|
_initAudioView: function ($dom) {
|
|
14362
14683
|
let me = this;
|
|
14363
|
-
let objClass = (me._opts.windowsNum == 1 ? 'video-main-full mode-' : 'video-main mode-') + me._opts.windows;
|
|
14684
|
+
let objClass = (me._opts.windowsNum == 1 ? 'video-main video-main-full mode-' : 'video-main mode-') + me._opts.windows;
|
|
14364
14685
|
let videoHtml = '<ul class="' + objClass + '" id="video-main-web-rtc" video-flag="' + me._opts.windowsBeginIndex + '">';
|
|
14365
14686
|
let index = me._opts.windowsBeginIndex + 1;
|
|
14366
14687
|
|
|
@@ -14410,6 +14731,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14410
14731
|
console.error('Janus服务连接失败:' + error);
|
|
14411
14732
|
me.closeAll();
|
|
14412
14733
|
|
|
14734
|
+
me._removeAllWaitingVideo();
|
|
14735
|
+
|
|
14413
14736
|
me._initJanus();
|
|
14414
14737
|
},
|
|
14415
14738
|
destroyed: function () {
|
|
@@ -14420,6 +14743,19 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14420
14743
|
});
|
|
14421
14744
|
},
|
|
14422
14745
|
|
|
14746
|
+
/**
|
|
14747
|
+
* 销毁所有
|
|
14748
|
+
*/
|
|
14749
|
+
destory: function () {
|
|
14750
|
+
var me = this;
|
|
14751
|
+
me.destoryJanus();
|
|
14752
|
+
$(me.selector).empty();
|
|
14753
|
+
me.videoListener = null;
|
|
14754
|
+
me.VIDEO_DATA = null;
|
|
14755
|
+
me.selector = null; //destoryJanus会触发回调,需要使用到opts
|
|
14756
|
+
// me._opts = null;
|
|
14757
|
+
},
|
|
14758
|
+
|
|
14423
14759
|
/**
|
|
14424
14760
|
* 销毁:Janus销毁、资源释放
|
|
14425
14761
|
*/
|
|
@@ -14428,14 +14764,17 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14428
14764
|
|
|
14429
14765
|
me._opts.janus.destroy({
|
|
14430
14766
|
success: function () {
|
|
14431
|
-
window.windowsSum = 0;
|
|
14432
|
-
|
|
14767
|
+
// window.windowsSum = 0;
|
|
14768
|
+
//userToken = null;
|
|
14433
14769
|
registered = false;
|
|
14434
14770
|
},
|
|
14435
14771
|
asyncRequest: true,
|
|
14436
14772
|
notifyDestroyed: true
|
|
14437
14773
|
});
|
|
14774
|
+
|
|
14775
|
+
me.removeAllListeners();
|
|
14438
14776
|
},
|
|
14777
|
+
reLoginJanusItvIndex: -1,
|
|
14439
14778
|
|
|
14440
14779
|
/**
|
|
14441
14780
|
* 初始化插件、登陆,初始化窗口
|
|
@@ -14495,13 +14834,43 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14495
14834
|
|
|
14496
14835
|
if (event === 'registration_failed') {
|
|
14497
14836
|
promptFailed("janus登陆失败: " + result["code"] + " " + result["reason"]);
|
|
14837
|
+
|
|
14838
|
+
if (me.reLoginJanusItvIndex == -1) {
|
|
14839
|
+
me.reLoginJanusItvIndex = setInterval(function () {
|
|
14840
|
+
console.log("尝试重新登陆janus!");
|
|
14841
|
+
|
|
14842
|
+
me._initJanus(janus);
|
|
14843
|
+
}, 5000);
|
|
14844
|
+
}
|
|
14845
|
+
|
|
14846
|
+
return;
|
|
14847
|
+
}
|
|
14848
|
+
|
|
14849
|
+
if (event === 'video_server_closed') {
|
|
14850
|
+
if (me.reLoginJanusItvIndex == -1) {
|
|
14851
|
+
me.reLoginJanusItvIndex = setInterval(function () {
|
|
14852
|
+
console.log("尝试重新登陆janus!");
|
|
14853
|
+
|
|
14854
|
+
me._initJanus(janus);
|
|
14855
|
+
}, 5000);
|
|
14856
|
+
}
|
|
14857
|
+
|
|
14498
14858
|
return;
|
|
14499
14859
|
}
|
|
14500
14860
|
|
|
14501
14861
|
if (event === 'registered') {
|
|
14502
14862
|
let userToken = result["userToken"];
|
|
14503
14863
|
console.log('janus登陆成功');
|
|
14504
|
-
registered = true;
|
|
14864
|
+
registered = true;
|
|
14865
|
+
|
|
14866
|
+
if (me.reLoginJanusItvIndex != -1) {
|
|
14867
|
+
clearInterval(me.reLoginJanusItvIndex);
|
|
14868
|
+
me.reLoginJanusItvIndex = -1;
|
|
14869
|
+
} //生成主界面
|
|
14870
|
+
//相对序号,用于标识当前janus连接初始化的序号窗口
|
|
14871
|
+
|
|
14872
|
+
|
|
14873
|
+
let relativeIndex = 0;
|
|
14505
14874
|
|
|
14506
14875
|
for (let i = me._opts.windowsBeginIndex; i < me._opts.windowsBeginIndex + me._opts.windowsNum; i++) {
|
|
14507
14876
|
me.VIDEO_DATA[i] = new SVideo({
|
|
@@ -14509,42 +14878,254 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14509
14878
|
janus: janus,
|
|
14510
14879
|
userToken: userToken,
|
|
14511
14880
|
windowsNum: me._opts.windowsNum,
|
|
14881
|
+
relativeIndex: relativeIndex++,
|
|
14512
14882
|
flag: me._opts.flag,
|
|
14513
14883
|
isVideoTag: me._opts.isVideoTag,
|
|
14514
|
-
janusPlugin: me._opts.conf.janusPlugin
|
|
14515
|
-
|
|
14884
|
+
janusPlugin: me._opts.conf.janusPlugin,
|
|
14885
|
+
videoTipTimeOut: me._opts.videoTipTimeOut,
|
|
14886
|
+
parentSelector: me.selector
|
|
14887
|
+
}, me.videoListener);
|
|
14516
14888
|
}
|
|
14517
14889
|
}
|
|
14518
14890
|
}
|
|
14519
14891
|
}
|
|
14520
14892
|
});
|
|
14893
|
+
},
|
|
14894
|
+
|
|
14895
|
+
/* ----------------------------- 播放队列 --------------------------- */
|
|
14896
|
+
// 记录等待中的视频
|
|
14897
|
+
WAITING_DATA: [],
|
|
14898
|
+
// 播放队列开关 默认关闭
|
|
14899
|
+
waitPlayQueueSwitch: false,
|
|
14900
|
+
|
|
14901
|
+
/**
|
|
14902
|
+
* 添加等待视频数据
|
|
14903
|
+
* 同一位置再次打开,则覆盖上一次的
|
|
14904
|
+
* 参数:index(视频窗口编号,从0开始) video(视频设备id,即devId) id(标识,空的话使用设备id) opts(其他参数)
|
|
14905
|
+
*/
|
|
14906
|
+
_addWaitingVideo: function (index, video, id, opts) {
|
|
14907
|
+
let _self = this;
|
|
14908
|
+
|
|
14909
|
+
let isOverride = false;
|
|
14910
|
+
$.each(_self.WAITING_DATA, function (i, obj) {
|
|
14911
|
+
if (obj.index == index) {
|
|
14912
|
+
console.log("播放队列中 index = " + index + ", video = " + obj.video + " 替换为 video = " + video);
|
|
14913
|
+
_self.WAITING_DATA[i] = {
|
|
14914
|
+
index: index,
|
|
14915
|
+
video: video,
|
|
14916
|
+
id: id,
|
|
14917
|
+
opts: opts
|
|
14918
|
+
};
|
|
14919
|
+
isOverride = true;
|
|
14920
|
+
return false;
|
|
14921
|
+
}
|
|
14922
|
+
});
|
|
14923
|
+
|
|
14924
|
+
if (!isOverride) {
|
|
14925
|
+
_self.WAITING_DATA.push({
|
|
14926
|
+
index: index,
|
|
14927
|
+
video: video,
|
|
14928
|
+
id: id,
|
|
14929
|
+
opts: opts
|
|
14930
|
+
});
|
|
14931
|
+
|
|
14932
|
+
console.log("index = " + index + ", video = " + video + " 加入播放队列");
|
|
14933
|
+
}
|
|
14934
|
+
|
|
14935
|
+
_self.VIDEO_DATA[index].isWaiting = true;
|
|
14936
|
+
},
|
|
14937
|
+
|
|
14938
|
+
/**
|
|
14939
|
+
* 删除等待视频数据
|
|
14940
|
+
*/
|
|
14941
|
+
_removeWaitingVideo: function (index, video) {
|
|
14942
|
+
let _self = this;
|
|
14943
|
+
|
|
14944
|
+
$.each(_self.WAITING_DATA, function (i, obj) {
|
|
14945
|
+
if (obj.index == index && obj.video == video) {
|
|
14946
|
+
_self.WAITING_DATA.splice(i, 1);
|
|
14947
|
+
|
|
14948
|
+
_self.VIDEO_DATA[index].isWaiting = false;
|
|
14949
|
+
console.log("index = " + index + ", video = " + video + " 从播放队列移除");
|
|
14950
|
+
return false;
|
|
14951
|
+
}
|
|
14952
|
+
});
|
|
14953
|
+
},
|
|
14954
|
+
|
|
14955
|
+
/**
|
|
14956
|
+
* 删除所有等待播放视频的数据
|
|
14957
|
+
*/
|
|
14958
|
+
_removeAllWaitingVideo: function () {
|
|
14959
|
+
let _self = this;
|
|
14960
|
+
|
|
14961
|
+
_self.WAITING_DATA = [];
|
|
14962
|
+
let index = _self._opts.windowsBeginIndex;
|
|
14963
|
+
|
|
14964
|
+
for (; index < _self._opts.windowsBeginIndex + _self._opts.windows; index++) {
|
|
14965
|
+
_self.VIDEO_DATA[index].isWaiting = false;
|
|
14966
|
+
}
|
|
14967
|
+
},
|
|
14968
|
+
|
|
14969
|
+
/**
|
|
14970
|
+
* 上一个视频关闭后,如果该位置由等待视频,通知打开新视频
|
|
14971
|
+
* @param index
|
|
14972
|
+
*/
|
|
14973
|
+
_notifyWaitingVideo: function (index) {
|
|
14974
|
+
let _self = this;
|
|
14975
|
+
|
|
14976
|
+
$.each(_self.WAITING_DATA, function (i, obj) {
|
|
14977
|
+
if (obj.index == index) {
|
|
14978
|
+
_self.play(obj.index, obj.video, obj.id, obj.opts);
|
|
14979
|
+
|
|
14980
|
+
_self._removeWaitingVideo(obj.index, obj.video);
|
|
14981
|
+
|
|
14982
|
+
return false;
|
|
14983
|
+
}
|
|
14984
|
+
});
|
|
14521
14985
|
}
|
|
14522
14986
|
};
|
|
14523
|
-
let
|
|
14524
|
-
|
|
14525
|
-
|
|
14526
|
-
|
|
14527
|
-
|
|
14528
|
-
|
|
14529
|
-
|
|
14530
|
-
|
|
14531
|
-
|
|
14532
|
-
|
|
14533
|
-
|
|
14534
|
-
|
|
14535
|
-
|
|
14536
|
-
|
|
14537
|
-
|
|
14538
|
-
|
|
14539
|
-
|
|
14540
|
-
|
|
14541
|
-
|
|
14542
|
-
|
|
14543
|
-
|
|
14544
|
-
|
|
14545
|
-
|
|
14987
|
+
let CONST_CODE = {
|
|
14988
|
+
//打开失败错误码,面板显示,不做浮窗提示框显示
|
|
14989
|
+
VIDEO_CODE: {
|
|
14990
|
+
2002: "打开失败,未找到该ID的视频源",
|
|
14991
|
+
2003: "打开失败,请确认视频服务版本",
|
|
14992
|
+
3001: "打开失败,未接收到引流包,请检查端口映射",
|
|
14993
|
+
3002: "",
|
|
14994
|
+
3003: "打开失败,对方拒绝视频请求",
|
|
14995
|
+
4001: "打开失败,视频流中断",
|
|
14996
|
+
4002: "打开失败,终端挂机或超时未接听",
|
|
14997
|
+
7000: "打开失败,无法连接视频设备",
|
|
14998
|
+
7001: "打开失败,无法连接视频设备",
|
|
14999
|
+
7002: "打开失败,无法连接视频设备"
|
|
15000
|
+
},
|
|
15001
|
+
OTHER_CODE: {
|
|
15002
|
+
453: "videoServer连接失败,错误码453",
|
|
15003
|
+
454: "视频窗口已被占用,请选择其它窗口打开或停止播放",
|
|
15004
|
+
455: "操作失败,该段时间无视频录像",
|
|
15005
|
+
499: "操作异常,错误码499",
|
|
15006
|
+
440: "操作异常,错误码440",
|
|
15007
|
+
441: "操作异常,错误码441",
|
|
15008
|
+
442: "操作异常,错误码442",
|
|
15009
|
+
443: "操作异常,错误码443",
|
|
15010
|
+
444: "操作异常,错误码444",
|
|
15011
|
+
445: "操作异常,错误码445",
|
|
15012
|
+
446: "操作异常,错误码446",
|
|
15013
|
+
447: "操作异常,错误码447",
|
|
15014
|
+
448: "操作异常,错误码448",
|
|
15015
|
+
449: "操作异常,错误码449",
|
|
15016
|
+
450: "操作异常,错误码450",
|
|
15017
|
+
451: "操作异常,错误码451",
|
|
15018
|
+
452: "操作异常,错误码452",
|
|
15019
|
+
456: "设备已处于对讲状态或不支持对讲",
|
|
15020
|
+
6001: "录像失败"
|
|
15021
|
+
},
|
|
15022
|
+
FAILED_CODE: {
|
|
15023
|
+
1001: "账号或密码错误",
|
|
15024
|
+
1002: "该帐号已连接",
|
|
15025
|
+
1004: "没有鉴权",
|
|
15026
|
+
2001: "未携带token或token错误",
|
|
15027
|
+
2002: "视频源id不存在",
|
|
15028
|
+
2003: "操作指令非法(该账号不允许执行这个指令,或者不支持该指令)",
|
|
15029
|
+
3001: "nat通道未建立",
|
|
15030
|
+
3002: "该视频流已在传输",
|
|
15031
|
+
3003: "无法获取远端视频流",
|
|
15032
|
+
4001: "视频流异常断开连接",
|
|
15033
|
+
4002: "获取视频失败",
|
|
15034
|
+
5000: "内部错误",
|
|
15035
|
+
8001: "该设备不支持云台操作",
|
|
15036
|
+
453: "videoServer连接失败",
|
|
15037
|
+
454: "录像回放窗口已占用,请先停止播放",
|
|
15038
|
+
455: "无视频录像,操作失败",
|
|
15039
|
+
5001: "呼叫异常断开",
|
|
15040
|
+
5002: "禁止修改分辨率",
|
|
15041
|
+
401: "禁止修改分辨率",
|
|
15042
|
+
4003: "音频重置",
|
|
15043
|
+
4004: "音频被占用",
|
|
15044
|
+
4005: "客户端已打开对讲",
|
|
15045
|
+
4006: "终端离开云眼音频",
|
|
15046
|
+
4008: "终端拒绝打开视频",
|
|
15047
|
+
6001: "录像失败",
|
|
15048
|
+
499: "内部创建失败",
|
|
15049
|
+
440: "请求消息内容为空",
|
|
15050
|
+
441: "json格式错误",
|
|
15051
|
+
442: "无效的请求",
|
|
15052
|
+
443: "消息内容缺失",
|
|
15053
|
+
444: "消息缺少参数",
|
|
15054
|
+
445: "账户已登陆",
|
|
15055
|
+
446: "收到的videoserver消息有误",
|
|
15056
|
+
447: "消息参数错误",
|
|
15057
|
+
448: "SDP创建失败",
|
|
15058
|
+
449: "未使用",
|
|
15059
|
+
450: "创建端口失败",
|
|
15060
|
+
451: "SDP创建失败",
|
|
15061
|
+
452: "未使用加密的RTP",
|
|
15062
|
+
456: "对讲未打开",
|
|
15063
|
+
7000: "URL账号密码错误(RTSP)",
|
|
15064
|
+
7001: "URL地址不通(RTSP)",
|
|
15065
|
+
7002: "URL格式错误(RTSP)"
|
|
15066
|
+
},
|
|
15067
|
+
STATUS_CODE_ARR: ['5002', '4003', '4004', '4005', '4006']
|
|
14546
15068
|
};
|
|
14547
|
-
|
|
15069
|
+
/**
|
|
15070
|
+
* 显示播放错误内容, 4002特殊处理
|
|
15071
|
+
* @param videoObj 视频对象
|
|
15072
|
+
* @param code 状态码(包含错误码)
|
|
15073
|
+
* @param isShowReplayBtn 是否显示重新播放按钮
|
|
15074
|
+
* @param video 打开错误的视频Id
|
|
15075
|
+
*/
|
|
15076
|
+
|
|
15077
|
+
function showResult(videoObj, code, isShowReplayBtn, video) {
|
|
15078
|
+
let videoDom = videoObj.tagBox.parent();
|
|
15079
|
+
videoDom.addClass("result");
|
|
15080
|
+
videoDom.find('.operate-btn .close-btn').show();
|
|
15081
|
+
|
|
15082
|
+
if (CONST_CODE.FAILED_CODE[code] && code != "4002") {
|
|
15083
|
+
let resultHtml = "<div class='real-result'>错误码" + code + ": " + CONST_CODE.FAILED_CODE[code] + "</div>";
|
|
15084
|
+
videoDom.append(resultHtml);
|
|
15085
|
+
}
|
|
15086
|
+
|
|
15087
|
+
let resultHtml = "<div class='result'><div class='result-tip'>" + CONST_CODE.VIDEO_CODE[code] + "</div>";
|
|
15088
|
+
|
|
15089
|
+
if (isShowReplayBtn && code != "4002") {
|
|
15090
|
+
resultHtml += "<div class='result-replay'><span id='replay-" + videoObj.index + "' class='replay'>点击重试</span></div>";
|
|
15091
|
+
}
|
|
15092
|
+
|
|
15093
|
+
resultHtml += "</div>";
|
|
15094
|
+
videoDom.append(resultHtml);
|
|
15095
|
+
|
|
15096
|
+
if (isShowReplayBtn && code != "4002") {
|
|
15097
|
+
$("#replay-" + videoObj.index).unbind("click").click(function () {
|
|
15098
|
+
videoObj.videoListener.dispatch("openVideo", {
|
|
15099
|
+
index: videoObj.index,
|
|
15100
|
+
video: video,
|
|
15101
|
+
id: videoObj.id,
|
|
15102
|
+
opts: videoObj.opts
|
|
15103
|
+
});
|
|
15104
|
+
});
|
|
15105
|
+
}
|
|
15106
|
+
|
|
15107
|
+
if (code == "4002") {
|
|
15108
|
+
setTimeout(function () {
|
|
15109
|
+
clearResult(videoDom);
|
|
15110
|
+
}, 5000);
|
|
15111
|
+
}
|
|
15112
|
+
}
|
|
15113
|
+
/**
|
|
15114
|
+
* 清除显示内容 videoDom: 视频Dom对象
|
|
15115
|
+
*/
|
|
15116
|
+
|
|
15117
|
+
|
|
15118
|
+
function clearResult(videoDom, videoObj) {
|
|
15119
|
+
videoDom.removeClass("result");
|
|
15120
|
+
videoDom.find(".real-result").remove();
|
|
15121
|
+
videoDom.find(".result").remove();
|
|
15122
|
+
|
|
15123
|
+
if (!videoObj || !videoObj.playing) {
|
|
15124
|
+
// bug id 18654: 增加是否正在播放判断
|
|
15125
|
+
videoDom.find('.operate-btn .close-btn').hide();
|
|
15126
|
+
}
|
|
15127
|
+
} //window.VIDEO_DATA = [];//记录视频各分屏的状态
|
|
15128
|
+
|
|
14548
15129
|
|
|
14549
15130
|
window.windowsSum = 0; //当前页面的视频总数,可能有多个VideoWebRtc对象
|
|
14550
15131
|
//let userToken = null;
|
|
@@ -14552,16 +15133,27 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14552
15133
|
let registered = false;
|
|
14553
15134
|
let recordAvBusinessId = null;
|
|
14554
15135
|
|
|
14555
|
-
function SVideo(opts) {
|
|
15136
|
+
function SVideo(opts, videoListener) {
|
|
14556
15137
|
this.janus = opts.janus;
|
|
14557
15138
|
this.userToken = opts.userToken;
|
|
14558
15139
|
this.sipcall = null;
|
|
14559
15140
|
this.index = opts.index;
|
|
14560
|
-
this.tagBox = opts.isVideoTag ? $('#video-' + (this.index + 1)) : $('#audio-' + (this.index + 1));
|
|
15141
|
+
this.relativeIndex = opts.relativeIndex; // this.tagBox = opts.isVideoTag ? $('#video-' + (this.index + 1)) : $('#audio-' + (this.index + 1));
|
|
15142
|
+
|
|
15143
|
+
this.tagBox = opts.isVideoTag ? $(opts.parentSelector + ' #video-' + (this.index + 1)) : $('#audio-' + (this.index + 1));
|
|
14561
15144
|
this.windowsNum = opts.windowsNum;
|
|
14562
15145
|
this.flag = opts.flag;
|
|
14563
15146
|
this.isVideoTag = opts.isVideoTag;
|
|
14564
15147
|
this.janusPlugin = opts.janusPlugin;
|
|
15148
|
+
this.isClosing = false; // 当前分屏是否正在关闭视频
|
|
15149
|
+
|
|
15150
|
+
this.isWaiting = false; // 当前分屏是否有视频在等待播放
|
|
15151
|
+
|
|
15152
|
+
this.playSucTimeOutIndex = -1; // 超时提示定时器index
|
|
15153
|
+
|
|
15154
|
+
this.videoTipTimeOut = opts.videoTipTimeOut; // 超时无首屏时间
|
|
15155
|
+
|
|
15156
|
+
this.videoListener = videoListener;
|
|
14565
15157
|
this.init();
|
|
14566
15158
|
}
|
|
14567
15159
|
/**
|
|
@@ -14582,8 +15174,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14582
15174
|
console.log("视频插件初始化成功:" + self.index);
|
|
14583
15175
|
self.sipcall = pluginHandle;
|
|
14584
15176
|
|
|
14585
|
-
if (self.
|
|
14586
|
-
videoListener.dispatch('initsucc', self);
|
|
15177
|
+
if (self.relativeIndex + 1 >= self.windowsNum) {
|
|
15178
|
+
self.videoListener.dispatch('initsucc', self);
|
|
14587
15179
|
}
|
|
14588
15180
|
},
|
|
14589
15181
|
error: function (error) {
|
|
@@ -14597,11 +15189,20 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14597
15189
|
promptFailed("请先登陆");
|
|
14598
15190
|
}
|
|
14599
15191
|
|
|
15192
|
+
let video = self.video;
|
|
15193
|
+
|
|
14600
15194
|
if (msg.error_code) {
|
|
14601
|
-
console.error(msg.error_code +
|
|
14602
|
-
|
|
14603
|
-
|
|
14604
|
-
|
|
15195
|
+
console.error("错误码:" + msg.error_code + " " + CONST_CODE.FAILED_CODE[msg.error_code]);
|
|
15196
|
+
|
|
15197
|
+
if (CONST_CODE.VIDEO_CODE[msg.error_code]) {
|
|
15198
|
+
showResult(self, msg.error_code, true, video);
|
|
15199
|
+
} else {
|
|
15200
|
+
promptFailed(CONST_CODE.OTHER_CODE[msg.error_code] || CONST_CODE.FAILED_CODE[msg.error_code] || '错误码:' + msg.error_code);
|
|
15201
|
+
}
|
|
15202
|
+
|
|
15203
|
+
self.videoListener.dispatch('msginfo', {
|
|
15204
|
+
'code': msg.error_code,
|
|
15205
|
+
'msg': CONST_CODE.OTHER_CODE[msg.error_code] || CONST_CODE.FAILED_CODE[msg.error_code] || '错误码:' + msg.error_code
|
|
14605
15206
|
});
|
|
14606
15207
|
return false;
|
|
14607
15208
|
}
|
|
@@ -14611,23 +15212,32 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14611
15212
|
|
|
14612
15213
|
if (result.error_code && result.error_code != 0) {
|
|
14613
15214
|
//videoListener.dispatch('afterclose', self);
|
|
14614
|
-
if (!STATUS_CODE_ARR.includes(result.error_code + '')) {
|
|
15215
|
+
if (!CONST_CODE.STATUS_CODE_ARR.includes(result.error_code + '')) {
|
|
14615
15216
|
//videoListener.dispatch('afterclose', self);
|
|
14616
15217
|
//播放失败 关闭视频
|
|
14617
|
-
let video = self.video;
|
|
14618
15218
|
self.close('err');
|
|
14619
15219
|
|
|
14620
15220
|
if (self.isLockVideo) {
|
|
14621
|
-
|
|
15221
|
+
setTimeout(function () {
|
|
15222
|
+
self.play(video);
|
|
15223
|
+
}, 1500);
|
|
14622
15224
|
} else {
|
|
14623
|
-
|
|
15225
|
+
self.closeType = 'error';
|
|
15226
|
+
self.videoListener.dispatch('afterclose', self);
|
|
14624
15227
|
}
|
|
14625
15228
|
}
|
|
14626
15229
|
|
|
14627
|
-
videoListener.dispatch('msginfo', {
|
|
14628
|
-
'
|
|
15230
|
+
self.videoListener.dispatch('msginfo', {
|
|
15231
|
+
'code': result.error_code,
|
|
15232
|
+
'msg': CONST_CODE.OTHER_CODE[result.error_code] || CONST_CODE.FAILED_CODE[result.error_code] || '错误码:' + result.error_code
|
|
14629
15233
|
});
|
|
14630
|
-
|
|
15234
|
+
|
|
15235
|
+
if (CONST_CODE.VIDEO_CODE[result.error_code]) {
|
|
15236
|
+
showResult(self, result.error_code, true, video);
|
|
15237
|
+
} else {
|
|
15238
|
+
promptFailed(CONST_CODE.OTHER_CODE[result.error_code] || CONST_CODE.FAILED_CODE[result.error_code] || '错误码:' + result.error_code);
|
|
15239
|
+
}
|
|
15240
|
+
|
|
14631
15241
|
self.tagBox.parent().find('.recv-audio-btn').attr("class", "unrecv-audio-btn");
|
|
14632
15242
|
self.tagBox.parent().find('.send-audio-btn').attr("class", "unsend-audio-btn");
|
|
14633
15243
|
} //事件响应
|
|
@@ -14660,17 +15270,19 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14660
15270
|
});
|
|
14661
15271
|
},
|
|
14662
15272
|
error: function (error) {
|
|
14663
|
-
console.error(error);
|
|
14664
|
-
|
|
14665
|
-
"request": "decline",
|
|
14666
|
-
"code": 480
|
|
14667
|
-
};
|
|
14668
|
-
self.sipcall.send({
|
|
14669
|
-
"message": body
|
|
14670
|
-
});
|
|
15273
|
+
console.error(error); // let body = { "request": "decline", "code": 480 };
|
|
15274
|
+
// self.sipcall.send({"message": body});
|
|
14671
15275
|
}
|
|
14672
15276
|
});
|
|
14673
15277
|
break;
|
|
15278
|
+
|
|
15279
|
+
case 'accepted':
|
|
15280
|
+
self.playSucTimeOutIndex = setTimeout(function () {
|
|
15281
|
+
let _li = self.tagBox.parent();
|
|
15282
|
+
|
|
15283
|
+
_li.append('<div class="video-tip">网络环境较差,可能无法正常加载视频</div>');
|
|
15284
|
+
}, self.videoTipTimeOut * 1000);
|
|
15285
|
+
break;
|
|
14674
15286
|
//呼叫失败
|
|
14675
15287
|
|
|
14676
15288
|
case 'callfaild':
|
|
@@ -14689,7 +15301,16 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14689
15301
|
case 'start_av_record':
|
|
14690
15302
|
if (result && result.filename) {
|
|
14691
15303
|
self.videoFileName = result.filename;
|
|
14692
|
-
videoListener.dispatch('
|
|
15304
|
+
self.videoListener.dispatch('startRecordVideo', self);
|
|
15305
|
+
console.log('录像地址:' + result.filename);
|
|
15306
|
+
}
|
|
15307
|
+
|
|
15308
|
+
break;
|
|
15309
|
+
|
|
15310
|
+
case 'stop_av_record':
|
|
15311
|
+
if (result && result.filename) {
|
|
15312
|
+
self.videoFileName = result.filename;
|
|
15313
|
+
self.videoListener.dispatch('stopRecordVideo', self);
|
|
14693
15314
|
console.log('录像地址:' + result.filename);
|
|
14694
15315
|
}
|
|
14695
15316
|
|
|
@@ -14699,10 +15320,17 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14699
15320
|
case 'ser_notify_resolution':
|
|
14700
15321
|
if (result && result.resolution) {
|
|
14701
15322
|
self.resolution = result.resolution;
|
|
14702
|
-
videoListener.dispatch('notifyresolution', self);
|
|
15323
|
+
self.videoListener.dispatch('notifyresolution', self);
|
|
14703
15324
|
console.log('接收notifyresolution:' + result.resolution); //promptAlarm('当前分辨率:' + result.resolution);
|
|
14704
15325
|
}
|
|
14705
15326
|
|
|
15327
|
+
break;
|
|
15328
|
+
|
|
15329
|
+
case 'change_resolution':
|
|
15330
|
+
if (result) {
|
|
15331
|
+
self.videoListener.dispatch('notifyResolutionChange', self);
|
|
15332
|
+
}
|
|
15333
|
+
|
|
14706
15334
|
break;
|
|
14707
15335
|
//建立预呼叫响应
|
|
14708
15336
|
|
|
@@ -14739,9 +15367,38 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14739
15367
|
break;
|
|
14740
15368
|
|
|
14741
15369
|
case 'ser_stop_audio':
|
|
15370
|
+
self.tagBox.parent().find('.recv-audio-btn').attr("class", "unrecv-audio-btn");
|
|
14742
15371
|
console.log('音频异常关闭!');
|
|
14743
15372
|
break;
|
|
14744
15373
|
|
|
15374
|
+
case 'close_down_audio':
|
|
15375
|
+
self.tagBox.parent().find('.send-audio-btn').attr("class", "unsend-audio-btn");
|
|
15376
|
+
promptSuccess("通话时间到");
|
|
15377
|
+
console.log('通话时间到!');
|
|
15378
|
+
break;
|
|
15379
|
+
|
|
15380
|
+
case 'ser_notify_dispatch_close_ptop_poc':
|
|
15381
|
+
self.tagBox.parent().find('.send-audio-btn').attr("class", "unsend-audio-btn");
|
|
15382
|
+
console.log('调度通知点对点对讲关闭!');
|
|
15383
|
+
break;
|
|
15384
|
+
|
|
15385
|
+
case 'ser_close_ptop_poc':
|
|
15386
|
+
self.tagBox.parent().find('.send-audio-btn').attr("class", "unsend-audio-btn");
|
|
15387
|
+
console.log('点对点对讲关闭!');
|
|
15388
|
+
break;
|
|
15389
|
+
|
|
15390
|
+
case 'ser_open_ptop_poc':
|
|
15391
|
+
self.tagBox.parent().find('.unsend-audio-btn').attr("class", "send-audio-btn");
|
|
15392
|
+
console.log('点对点对讲打开!');
|
|
15393
|
+
break;
|
|
15394
|
+
// 视频关闭通知
|
|
15395
|
+
|
|
15396
|
+
case 'ser_close_video':
|
|
15397
|
+
console.log('视频框 ' + self.index + ' 视频已关闭');
|
|
15398
|
+
self.isClosing = false;
|
|
15399
|
+
self.videoListener.dispatch('notifyCloseVideo', self);
|
|
15400
|
+
break;
|
|
15401
|
+
|
|
14745
15402
|
default:
|
|
14746
15403
|
console.log('event:' + event);
|
|
14747
15404
|
break;
|
|
@@ -14789,7 +15446,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14789
15446
|
|
|
14790
15447
|
self.tagBox.bind("canplay play playing", function () {
|
|
14791
15448
|
if (self.video) {
|
|
14792
|
-
if (self.tagBox.is(':visible')) return;
|
|
15449
|
+
if (self.tagBox.is(':visible')) return; // 清除播放监测定时任务,清除内容
|
|
15450
|
+
|
|
15451
|
+
self.playSucTimeOutIndex > 0 && clearTimeout(self.playSucTimeOutIndex);
|
|
15452
|
+
self.tagBox.parent().find(".video-tip").remove();
|
|
14793
15453
|
console.log('分屏=' + (self.index + 1) + ', ' + self.video + ' 播放成功');
|
|
14794
15454
|
promptSuccess('分屏' + (self.index + 1) + ' 播放成功');
|
|
14795
15455
|
self.tagBox.show(); //self.tagBox.parent().removeClass("loading").find(".stream-loading").remove();
|
|
@@ -14838,13 +15498,21 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14838
15498
|
"message": body
|
|
14839
15499
|
});
|
|
14840
15500
|
this.video = video;
|
|
15501
|
+
this.isClosing = false;
|
|
14841
15502
|
this.playing = true;
|
|
14842
15503
|
this.packetsLostRate = '0.00%';
|
|
14843
15504
|
this.packetsLostSum = 0;
|
|
14844
|
-
this.packetsReceivedSum = 0;
|
|
15505
|
+
this.packetsReceivedSum = 0;
|
|
15506
|
+
let numIndex = this.index + 1;
|
|
15507
|
+
let framesDecodedDom = document.getElementById("frame-decoded-" + numIndex);
|
|
15508
|
+
framesDecodedDom.style.display = 'none';
|
|
15509
|
+
this.framesDecodedLast = undefined;
|
|
15510
|
+
this.framesDecodedCount = 0; //loading
|
|
14845
15511
|
|
|
14846
15512
|
let _li = this.tagBox.parent();
|
|
14847
15513
|
|
|
15514
|
+
clearResult(_li, this);
|
|
15515
|
+
|
|
14848
15516
|
if (!_li.hasClass("loading")) {
|
|
14849
15517
|
_li.addClass("loading").append('<div class="stream-loading">等待数据流传送...</div>');
|
|
14850
15518
|
}
|
|
@@ -14857,8 +15525,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14857
15525
|
if (!type) {
|
|
14858
15526
|
this.isLockVideo = false;
|
|
14859
15527
|
this.tagBox.parent().find('.lock-video-btn').attr("class", "unlock-video-btn");
|
|
14860
|
-
}
|
|
15528
|
+
} //清除结果提示内容
|
|
15529
|
+
|
|
14861
15530
|
|
|
15531
|
+
clearResult(this.tagBox.parent(), this); //let reqType = type ? type : "hangup";
|
|
14862
15532
|
|
|
14863
15533
|
if (!this.playing) return;
|
|
14864
15534
|
let _hangup = {
|
|
@@ -14872,6 +15542,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14872
15542
|
});
|
|
14873
15543
|
this.sipcall.hangup();
|
|
14874
15544
|
this.tagBox.hide();
|
|
15545
|
+
this.isClosing = true;
|
|
14875
15546
|
this.playing = false;
|
|
14876
15547
|
this.video = null;
|
|
14877
15548
|
this.packetsLostRate = '0.00%';
|
|
@@ -14886,7 +15557,15 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14886
15557
|
|
|
14887
15558
|
this.tagBox.parent().removeClass("loading").find(".stream-loading").remove(); //清除object-fit
|
|
14888
15559
|
|
|
14889
|
-
this.tagBox.css('object-fit', '');
|
|
15560
|
+
this.tagBox.css('object-fit', ''); // 清除内容提示
|
|
15561
|
+
|
|
15562
|
+
this.playSucTimeOutIndex > 0 && clearTimeout(this.playSucTimeOutIndex);
|
|
15563
|
+
this.tagBox.parent().find(".video-tip").remove();
|
|
15564
|
+
var numIndex = Number(this.index) + 1;
|
|
15565
|
+
var framesDecodedDom = document.getElementById("frame-decoded-" + numIndex);
|
|
15566
|
+
framesDecodedDom.style.display = 'none';
|
|
15567
|
+
this.framesDecodedLast = undefined;
|
|
15568
|
+
this.framesDecodedCount = 0;
|
|
14890
15569
|
},
|
|
14891
15570
|
|
|
14892
15571
|
/**
|
|
@@ -14991,6 +15670,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14991
15670
|
|
|
14992
15671
|
let _li = this.tagBox.parent();
|
|
14993
15672
|
|
|
15673
|
+
clearResult(_li, this);
|
|
15674
|
+
|
|
14994
15675
|
if (!_li.hasClass("loading")) {
|
|
14995
15676
|
_li.addClass("loading").append('<div class="stream-loading">等待数据流传送...</div>');
|
|
14996
15677
|
}
|
|
@@ -15135,6 +15816,26 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
15135
15816
|
"message": body
|
|
15136
15817
|
});
|
|
15137
15818
|
console.log("预呼叫操作=" + requestType + ", 对讲号码=" + pocNo + ",调度中心号码=" + centerTel);
|
|
15819
|
+
},
|
|
15820
|
+
|
|
15821
|
+
/**
|
|
15822
|
+
* 点对点对讲
|
|
15823
|
+
* requstType: open_ptop_poc(开启) close_poc_poc(关闭)
|
|
15824
|
+
* pocno
|
|
15825
|
+
*/
|
|
15826
|
+
ptopPoc: function (requestType, pocNo) {
|
|
15827
|
+
let self = this;
|
|
15828
|
+
let body = {
|
|
15829
|
+
request: requestType,
|
|
15830
|
+
pocno: pocNo,
|
|
15831
|
+
playseq: self.index,
|
|
15832
|
+
pocmember: self.video,
|
|
15833
|
+
userToken: self.userToken
|
|
15834
|
+
};
|
|
15835
|
+
self.sipcall.send({
|
|
15836
|
+
"message": body
|
|
15837
|
+
});
|
|
15838
|
+
console.log("点对点对讲操作=" + requestType + ", 主叫号码=" + pocNo + ",被叫号码=" + self.video);
|
|
15138
15839
|
}
|
|
15139
15840
|
};
|
|
15140
15841
|
return isIE() ? VideoOcx : VideoWebRtc;
|
|
@@ -28885,6 +29586,27 @@ let meet = {
|
|
|
28885
29586
|
data: {}
|
|
28886
29587
|
}
|
|
28887
29588
|
},
|
|
29589
|
+
|
|
29590
|
+
/**
|
|
29591
|
+
* 设置主持人
|
|
29592
|
+
*/
|
|
29593
|
+
setMeetChairmanNet: {
|
|
29594
|
+
url: '/dispatch-web/api/meet/setMeetChairman',
|
|
29595
|
+
method: 'POST',
|
|
29596
|
+
requestParam: {
|
|
29597
|
+
token: '',
|
|
29598
|
+
meetId: '',
|
|
29599
|
+
tel: ''
|
|
29600
|
+
},
|
|
29601
|
+
responseParam: {
|
|
29602
|
+
code: '',
|
|
29603
|
+
//返回结果状态码
|
|
29604
|
+
message: '',
|
|
29605
|
+
systemTime: '',
|
|
29606
|
+
//yyyy-MM-dd HH:mm:ss
|
|
29607
|
+
data: {}
|
|
29608
|
+
}
|
|
29609
|
+
},
|
|
28888
29610
|
joinVideoMemberNet: {
|
|
28889
29611
|
//成员加入会场(视频)
|
|
28890
29612
|
|
|
@@ -31487,6 +32209,20 @@ const meetOp = sip => {
|
|
|
31487
32209
|
}, '', net.method);
|
|
31488
32210
|
});
|
|
31489
32211
|
},
|
|
32212
|
+
setChairman: function (param) {
|
|
32213
|
+
let net = meet_url.setMeetChairmanNet;
|
|
32214
|
+
return new Promise((resolve, reject) => {
|
|
32215
|
+
loadJson(server_ + net.url, { ...param
|
|
32216
|
+
}, function (ret) {
|
|
32217
|
+
if (ret.code == 0) {
|
|
32218
|
+
resolve(ret);
|
|
32219
|
+
} else {
|
|
32220
|
+
console.log("设置会场主持人失败", ret.code);
|
|
32221
|
+
reject(ret.code);
|
|
32222
|
+
}
|
|
32223
|
+
}, '', net.method);
|
|
32224
|
+
});
|
|
32225
|
+
},
|
|
31490
32226
|
end: function (param) {
|
|
31491
32227
|
let net = meet_url.endMeetNet;
|
|
31492
32228
|
return new Promise((resolve, reject) => {
|