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.umd.js
CHANGED
|
@@ -12122,6 +12122,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
12122
12122
|
}
|
|
12123
12123
|
|
|
12124
12124
|
return e.returnValue;
|
|
12125
|
+
},
|
|
12126
|
+
|
|
12127
|
+
/**
|
|
12128
|
+
* 清空事件
|
|
12129
|
+
*/
|
|
12130
|
+
removeAllListeners: function () {
|
|
12131
|
+
this._listeners = {};
|
|
12125
12132
|
}
|
|
12126
12133
|
};
|
|
12127
12134
|
let videoListener = new Listener();
|
|
@@ -12464,17 +12471,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
12464
12471
|
windowNums: num
|
|
12465
12472
|
});
|
|
12466
12473
|
me._opts.windows = num;
|
|
12467
|
-
me._opts.extra = extra;
|
|
12468
|
-
|
|
12469
|
-
let videoLi = document.getElementById('videoRef').querySelectorAll('li');
|
|
12470
|
-
me.VIDEO_DATA.forEach((item, index) => {
|
|
12471
|
-
let tel = item.video;
|
|
12472
|
-
|
|
12473
|
-
if (!tel && item.id) {
|
|
12474
|
-
videoLi[index].querySelector('video').style = '';
|
|
12475
|
-
videoLi[index].querySelector('.rotate-btn').setAttribute('rotate-index', 0);
|
|
12476
|
-
}
|
|
12477
|
-
});
|
|
12474
|
+
me._opts.extra = extra;
|
|
12478
12475
|
},
|
|
12479
12476
|
|
|
12480
12477
|
/**
|
|
@@ -12772,21 +12769,21 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
12772
12769
|
* 添加事件
|
|
12773
12770
|
*/
|
|
12774
12771
|
addListener: function (type, handler, key) {
|
|
12775
|
-
videoListener.addListener(type, handler, key);
|
|
12772
|
+
this.videoListener.addListener(type, handler, key);
|
|
12776
12773
|
},
|
|
12777
12774
|
|
|
12778
12775
|
/**
|
|
12779
12776
|
* 删除事件
|
|
12780
12777
|
*/
|
|
12781
12778
|
removeListener: function (type, handler) {
|
|
12782
|
-
videoListener.removeListener(type, handler);
|
|
12779
|
+
this.videoListener.removeListener(type, handler);
|
|
12783
12780
|
},
|
|
12784
12781
|
|
|
12785
12782
|
/**
|
|
12786
12783
|
* 派发事件
|
|
12787
12784
|
*/
|
|
12788
12785
|
dispatch: function (e, options) {
|
|
12789
|
-
videoListener.dispatch(e, options);
|
|
12786
|
+
this.videoListener.dispatch(e, options);
|
|
12790
12787
|
},
|
|
12791
12788
|
|
|
12792
12789
|
/**
|
|
@@ -13182,11 +13179,14 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13182
13179
|
function VideoWebRtc($dom, opts) {
|
|
13183
13180
|
let _self = this;
|
|
13184
13181
|
|
|
13182
|
+
_self.videoListener = new Listener();
|
|
13183
|
+
|
|
13185
13184
|
if (!opts) {
|
|
13186
13185
|
console.error('VideoWebRtc的参数opts不能为空');
|
|
13187
13186
|
return;
|
|
13188
13187
|
}
|
|
13189
13188
|
|
|
13189
|
+
_self.configOpt = opts && opts.configOpt || 3;
|
|
13190
13190
|
hasMediaDevices(); //检测声卡设备为异步方法,耗时在几十毫秒左右,因此需要做延迟
|
|
13191
13191
|
//默认检查次数为40 间隔为20ms
|
|
13192
13192
|
|
|
@@ -13227,6 +13227,13 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13227
13227
|
// console.info('该视频正在播放');
|
|
13228
13228
|
// return false;
|
|
13229
13229
|
// }
|
|
13230
|
+
// 启用播放队列时,当前位置正在关闭上一个视频,则加入播放队列
|
|
13231
|
+
|
|
13232
|
+
if (me.waitPlayQueueSwitch && me.VIDEO_DATA[index].isClosing) {
|
|
13233
|
+
me._addWaitingVideo(index, video, id, opts);
|
|
13234
|
+
|
|
13235
|
+
return;
|
|
13236
|
+
}
|
|
13230
13237
|
|
|
13231
13238
|
console.log("play >>> " + "video=" + video + "; id=" + id + "; index=" + index);
|
|
13232
13239
|
me.dispatch('beforeplay', {
|
|
@@ -13325,7 +13332,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13325
13332
|
*/
|
|
13326
13333
|
playInChoice: function (video, id, opts) {
|
|
13327
13334
|
let me = this;
|
|
13328
|
-
let selView = $(
|
|
13335
|
+
let selView = $(me.selector + ' li.sel');
|
|
13329
13336
|
|
|
13330
13337
|
if (selView.length) {
|
|
13331
13338
|
if (me.VIDEO_DATA[selView.index()].playing) {
|
|
@@ -13382,6 +13389,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13382
13389
|
this.VIDEO_DATA[index].close();
|
|
13383
13390
|
|
|
13384
13391
|
if (!isSave) {
|
|
13392
|
+
this.VIDEO_DATA[index].closeType = 'close';
|
|
13385
13393
|
this.dispatch('afterclose', this.VIDEO_DATA[index]);
|
|
13386
13394
|
}
|
|
13387
13395
|
},
|
|
@@ -13408,6 +13416,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13408
13416
|
me.close(videoData[i].index);
|
|
13409
13417
|
|
|
13410
13418
|
if (!isSave) {
|
|
13419
|
+
videoData[i].closeType = 'close';
|
|
13411
13420
|
me.dispatch('afterclose', videoData[i]);
|
|
13412
13421
|
}
|
|
13413
13422
|
}
|
|
@@ -13418,13 +13427,17 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13418
13427
|
* 关闭所有视频
|
|
13419
13428
|
*/
|
|
13420
13429
|
closeAll: function (isSave) {
|
|
13421
|
-
let me = this;
|
|
13430
|
+
let me = this; // 清除所有等待播放队列
|
|
13431
|
+
|
|
13432
|
+
me._removeAllWaitingVideo();
|
|
13433
|
+
|
|
13422
13434
|
let openVideos = [];
|
|
13423
13435
|
|
|
13424
13436
|
for (let i = me._opts.windowsBeginIndex; i < me._opts.windowsBeginIndex + me._opts.windowsNum; i++) {
|
|
13425
|
-
if
|
|
13426
|
-
|
|
13427
|
-
}
|
|
13437
|
+
// if(me.VIDEO_DATA[i].playing){
|
|
13438
|
+
// me.close(i, isSave)
|
|
13439
|
+
// }
|
|
13440
|
+
me.close(i, isSave);
|
|
13428
13441
|
} // if(!openVideos.length) return;
|
|
13429
13442
|
//
|
|
13430
13443
|
// //适当延时进行关闭
|
|
@@ -13464,9 +13477,9 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13464
13477
|
me.setChoiceWindow(me._getMinIndexFreeWindow());
|
|
13465
13478
|
}
|
|
13466
13479
|
|
|
13467
|
-
$(
|
|
13480
|
+
$(me.selector + ' .video-main').removeClass("mode-" + me._opts.windows).addClass("mode-" + num);
|
|
13468
13481
|
|
|
13469
|
-
let _li = $(
|
|
13482
|
+
let _li = $(me.selector + ' li').hide();
|
|
13470
13483
|
|
|
13471
13484
|
me._opts.windows = num;
|
|
13472
13485
|
|
|
@@ -13478,12 +13491,26 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13478
13491
|
this.dispatch('screenchange', {
|
|
13479
13492
|
windowNums: num,
|
|
13480
13493
|
flag: me._opts.flag
|
|
13494
|
+
}); //设置旋转了的视频样式
|
|
13495
|
+
|
|
13496
|
+
let videoLi = document.getElementById('videoRef').querySelectorAll('li');
|
|
13497
|
+
me.VIDEO_DATA.forEach((item, index) => {
|
|
13498
|
+
let tel = item.video;
|
|
13499
|
+
|
|
13500
|
+
if (!tel && item.id) {
|
|
13501
|
+
videoLi[index].querySelector('video').style = '';
|
|
13502
|
+
videoLi[index].querySelector('.rotate-btn').setAttribute('rotate-index', 0);
|
|
13503
|
+
}
|
|
13481
13504
|
}); //设置旋转视频的样式
|
|
13482
13505
|
|
|
13483
13506
|
for (let k = 0; k < _li.length; k++) {
|
|
13484
13507
|
let rotateIndex = _li.eq(k).find('button[name=rotateVideo]').attr('rotate-index');
|
|
13485
13508
|
|
|
13486
|
-
if (rotateIndex != 0 && rotateIndex != 2)
|
|
13509
|
+
if (rotateIndex != 0 && rotateIndex != 2) {
|
|
13510
|
+
setTimeout(() => {
|
|
13511
|
+
me.videoRotateSize(_li.eq(k)[0], rotateIndex);
|
|
13512
|
+
}, 200);
|
|
13513
|
+
}
|
|
13487
13514
|
}
|
|
13488
13515
|
},
|
|
13489
13516
|
|
|
@@ -13512,7 +13539,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13512
13539
|
me.saveList();
|
|
13513
13540
|
this._polltimer = new PollTimer(function (firstRun) {
|
|
13514
13541
|
me.closeAll();
|
|
13515
|
-
|
|
13542
|
+
|
|
13543
|
+
if (firstRun) {
|
|
13516
13544
|
for (let i = 0; i < windowNum; i++) {
|
|
13517
13545
|
if (nowNum == maxNum) {
|
|
13518
13546
|
nowNum = 0;
|
|
@@ -13526,10 +13554,23 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13526
13554
|
nowNum++;
|
|
13527
13555
|
}
|
|
13528
13556
|
|
|
13529
|
-
|
|
13530
|
-
|
|
13531
|
-
|
|
13532
|
-
|
|
13557
|
+
me.dispatch('startpoll', array);
|
|
13558
|
+
} else {
|
|
13559
|
+
wait(1500).then(function () {
|
|
13560
|
+
for (let i = 0; i < windowNum; i++) {
|
|
13561
|
+
if (nowNum == maxNum) {
|
|
13562
|
+
nowNum = 0;
|
|
13563
|
+
|
|
13564
|
+
if (maxNum < windowNum) {
|
|
13565
|
+
break;
|
|
13566
|
+
}
|
|
13567
|
+
}
|
|
13568
|
+
|
|
13569
|
+
me.playByOrder(array[nowNum].video, array[nowNum].id, array[nowNum].opts);
|
|
13570
|
+
nowNum++;
|
|
13571
|
+
}
|
|
13572
|
+
});
|
|
13573
|
+
}
|
|
13533
13574
|
}, time);
|
|
13534
13575
|
},
|
|
13535
13576
|
|
|
@@ -13652,10 +13693,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13652
13693
|
*/
|
|
13653
13694
|
getInChoiceVideo: function () {
|
|
13654
13695
|
let me = this;
|
|
13655
|
-
let selView = $(
|
|
13696
|
+
let selView = $(me.selector + ' li.sel');
|
|
13656
13697
|
|
|
13657
|
-
if (selView.length && me.VIDEO_DATA[selView.index
|
|
13658
|
-
return me.VIDEO_DATA[selView.index
|
|
13698
|
+
if (selView.length && me.VIDEO_DATA[selView.attr("index")].video) {
|
|
13699
|
+
return me.VIDEO_DATA[selView.attr("index")];
|
|
13659
13700
|
}
|
|
13660
13701
|
|
|
13661
13702
|
return undefined;
|
|
@@ -13691,10 +13732,23 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13691
13732
|
|
|
13692
13733
|
let canvasObj = document.getElementById('myCanvas');
|
|
13693
13734
|
let videoObj = dataObj.tagBox.get(0);
|
|
13694
|
-
|
|
13695
|
-
|
|
13735
|
+
|
|
13736
|
+
if (videoObj == undefined) {
|
|
13737
|
+
return;
|
|
13738
|
+
} // 取流中 取视频框尺寸
|
|
13739
|
+
// 播放中 取视频画面尺寸
|
|
13740
|
+
|
|
13741
|
+
|
|
13742
|
+
if (dataObj.tagBox.parent().find(".stream-loading").length != 0) {
|
|
13743
|
+
canvasObj.width = dataObj.tagBox.width();
|
|
13744
|
+
canvasObj.height = dataObj.tagBox.height();
|
|
13745
|
+
} else {
|
|
13746
|
+
canvasObj.width = videoObj.videoWidth;
|
|
13747
|
+
canvasObj.height = videoObj.videoHeight;
|
|
13748
|
+
}
|
|
13749
|
+
|
|
13696
13750
|
let ctx = canvasObj.getContext("2d");
|
|
13697
|
-
ctx.drawImage(videoObj, 0, 0,
|
|
13751
|
+
ctx.drawImage(videoObj, 0, 0, videoObj.videoWidth, videoObj.videoHeight);
|
|
13698
13752
|
let dataUrl = canvasObj.toDataURL('image/jpeg');
|
|
13699
13753
|
callback ? callback(dataUrl) : null;
|
|
13700
13754
|
},
|
|
@@ -13741,8 +13795,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13741
13795
|
|
|
13742
13796
|
if (index < 0) {
|
|
13743
13797
|
console.error('窗口编号获取失败!');
|
|
13744
|
-
}
|
|
13798
|
+
} //保存对讲号码
|
|
13799
|
+
|
|
13745
13800
|
|
|
13801
|
+
window.pocNo = pocNo;
|
|
13746
13802
|
return me.VIDEO_DATA[index].pocCall("open_poccall", pocNo, centerTel);
|
|
13747
13803
|
},
|
|
13748
13804
|
|
|
@@ -13766,6 +13822,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13766
13822
|
}
|
|
13767
13823
|
|
|
13768
13824
|
me.VIDEO_DATA[index].stream = null;
|
|
13825
|
+
window.pocNo = null;
|
|
13769
13826
|
return me.VIDEO_DATA[index].pocCall("close_poccall", pocNo, centerTel);
|
|
13770
13827
|
},
|
|
13771
13828
|
|
|
@@ -13800,21 +13857,28 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13800
13857
|
* 添加事件
|
|
13801
13858
|
*/
|
|
13802
13859
|
addListener: function (type, handler, key) {
|
|
13803
|
-
videoListener.addListener(type, handler, key);
|
|
13860
|
+
this.videoListener.addListener(type, handler, key);
|
|
13804
13861
|
},
|
|
13805
13862
|
|
|
13806
13863
|
/**
|
|
13807
13864
|
* 删除事件
|
|
13808
13865
|
*/
|
|
13809
13866
|
removeListener: function (type, handler) {
|
|
13810
|
-
videoListener.removeListener(type, handler);
|
|
13867
|
+
this.videoListener.removeListener(type, handler);
|
|
13811
13868
|
},
|
|
13812
13869
|
|
|
13813
13870
|
/**
|
|
13814
13871
|
* 派发事件
|
|
13815
13872
|
*/
|
|
13816
13873
|
dispatch: function (e, options) {
|
|
13817
|
-
videoListener.dispatch(e, options);
|
|
13874
|
+
this.videoListener.dispatch(e, options);
|
|
13875
|
+
},
|
|
13876
|
+
|
|
13877
|
+
/**
|
|
13878
|
+
* 清空事件
|
|
13879
|
+
*/
|
|
13880
|
+
removeAllListeners: function () {
|
|
13881
|
+
this.videoListener.removeAllListeners();
|
|
13818
13882
|
},
|
|
13819
13883
|
|
|
13820
13884
|
/**
|
|
@@ -13825,7 +13889,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13825
13889
|
index = index || me._opts.windowsBeginIndex;
|
|
13826
13890
|
|
|
13827
13891
|
for (; index < me._opts.windowsBeginIndex + me._opts.windows; index++) {
|
|
13828
|
-
if (!me.VIDEO_DATA[index].playing) {
|
|
13892
|
+
if (!me.VIDEO_DATA[index].playing && !me.VIDEO_DATA[index].isWaiting) {
|
|
13829
13893
|
return index;
|
|
13830
13894
|
}
|
|
13831
13895
|
}
|
|
@@ -13838,7 +13902,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13838
13902
|
*/
|
|
13839
13903
|
_getChoiceWindow: function () {
|
|
13840
13904
|
let me = this;
|
|
13841
|
-
let selView = $(
|
|
13905
|
+
let selView = $(me.selector + ' li.sel');
|
|
13842
13906
|
|
|
13843
13907
|
if (selView.length) {
|
|
13844
13908
|
return selView.index();
|
|
@@ -13871,13 +13935,40 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13871
13935
|
_clickWindow: function () {
|
|
13872
13936
|
let me = this; //视频窗口选中
|
|
13873
13937
|
|
|
13874
|
-
$(
|
|
13875
|
-
$(
|
|
13938
|
+
$(me.selector + ' li').click(function () {
|
|
13939
|
+
$(me.selector + ' li').removeClass("sel");
|
|
13876
13940
|
$(this).addClass("sel"); //如果视频正在播放则分发点击消息
|
|
13877
13941
|
|
|
13878
13942
|
if (me.getInChoiceVideo()) {
|
|
13879
13943
|
me.dispatch('click', me.getInChoiceVideo());
|
|
13880
13944
|
}
|
|
13945
|
+
}); // 设置视频窗可拖拽
|
|
13946
|
+
|
|
13947
|
+
let src = null;
|
|
13948
|
+
$(me.selector + ' li').bind("dragstart", function (ev) {
|
|
13949
|
+
src = $(this);
|
|
13950
|
+
});
|
|
13951
|
+
$(me.selector + ' li').bind("dragover", function (ev) {
|
|
13952
|
+
ev.preventDefault();
|
|
13953
|
+
});
|
|
13954
|
+
$(me.selector + ' li').bind("drop", function (ev) {
|
|
13955
|
+
ev.preventDefault();
|
|
13956
|
+
|
|
13957
|
+
if (src.prop("outerHTML") === $(this).prop("outerHTML")) {
|
|
13958
|
+
return;
|
|
13959
|
+
}
|
|
13960
|
+
|
|
13961
|
+
let target = $(this);
|
|
13962
|
+
let srcIndex = src.index();
|
|
13963
|
+
let targetIndex = target.index();
|
|
13964
|
+
|
|
13965
|
+
if (srcIndex > targetIndex) {
|
|
13966
|
+
src.insertBefore(target);
|
|
13967
|
+
target.insertAfter($(me.selector + ' .video-main li.screen').eq(srcIndex));
|
|
13968
|
+
} else {
|
|
13969
|
+
src.insertAfter(target);
|
|
13970
|
+
target.insertBefore($(me.selector + ' .video-main li.screen').eq(srcIndex));
|
|
13971
|
+
}
|
|
13881
13972
|
});
|
|
13882
13973
|
},
|
|
13883
13974
|
|
|
@@ -13908,7 +13999,15 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13908
13999
|
conf: {},
|
|
13909
14000
|
pollInterval: 10,
|
|
13910
14001
|
windowsNum: 16,
|
|
13911
|
-
isVideoTag: true
|
|
14002
|
+
isVideoTag: true,
|
|
14003
|
+
//true生成video标签 false生产audio标签 默认true
|
|
14004
|
+
showVideoInfo: 1,
|
|
14005
|
+
//显示分辨率、码率等信息,1-显示左下角 2-显示左上角,为0时控制_showVideoInfo函数处理,默认1
|
|
14006
|
+
waitPlayQueueSwitch: false,
|
|
14007
|
+
//播放队列开关,默认false
|
|
14008
|
+
defaultBusinessType: 0,
|
|
14009
|
+
// 配置的默认业务类型 0:调度主线 1:勤指
|
|
14010
|
+
videoTipTimeOut: 5 // 超时无首屏检测时间
|
|
13912
14011
|
|
|
13913
14012
|
};
|
|
13914
14013
|
$.extend(me._opts, opts);
|
|
@@ -13935,24 +14034,33 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
13935
14034
|
} //获取起始的窗口位置
|
|
13936
14035
|
|
|
13937
14036
|
|
|
13938
|
-
me._opts.windowsBeginIndex =
|
|
14037
|
+
me._opts.windowsBeginIndex = 0; // 对讲号码初始化
|
|
13939
14038
|
|
|
13940
|
-
|
|
14039
|
+
window.pocNo = 0; // 播放队列开关 默认打开
|
|
13941
14040
|
|
|
13942
|
-
me.
|
|
14041
|
+
me.waitPlayQueueSwitch = opts.waitPlayQueueSwitch == undefined ? false : opts.waitPlayQueueSwitch; //是否提示
|
|
13943
14042
|
|
|
13944
|
-
me._opts.
|
|
14043
|
+
me._opts.showPrompt === false && (showPrompt = false); // 勤指业务下 设备检测
|
|
14044
|
+
|
|
14045
|
+
me._opts.defaultBusinessType == 1 && me._checkDevices(); //初始化界面
|
|
14046
|
+
|
|
14047
|
+
me._opts.isVideoTag ? me._initVideoView($dom, me._opts.showVideoInfo) : me._initAudioView($dom); //初始化Janus
|
|
13945
14048
|
|
|
13946
14049
|
me._initJanus(); //初始化按钮点击事件
|
|
13947
14050
|
|
|
13948
14051
|
|
|
13949
|
-
me._initBtnEvent();
|
|
14052
|
+
me._initBtnEvent(); // 初始化事件监听
|
|
14053
|
+
|
|
13950
14054
|
|
|
14055
|
+
me._initEventListen(); //设置鼠标点击选中窗口
|
|
13951
14056
|
|
|
13952
|
-
me._clickWindow(); //显示视频信息:名称、分辨率、码率、丢包率
|
|
13953
14057
|
|
|
14058
|
+
me._clickWindow();
|
|
13954
14059
|
|
|
13955
|
-
me.
|
|
14060
|
+
if (me._opts.showVideoInfo != 0) {
|
|
14061
|
+
//显示视频信息:名称、分辨率、码率、丢包率
|
|
14062
|
+
me._showVideoInfo();
|
|
14063
|
+
} //双击某个视频全屏
|
|
13956
14064
|
|
|
13957
14065
|
|
|
13958
14066
|
me._dbClickFullScreen();
|
|
@@ -14066,35 +14174,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14066
14174
|
* 初始化按钮点击事件
|
|
14067
14175
|
*/
|
|
14068
14176
|
_initBtnEvent: function () {
|
|
14069
|
-
let me = this;
|
|
14070
|
-
|
|
14071
|
-
var src = null;
|
|
14072
|
-
$(me.selector + ' li').bind("dragstart", function (ev) {
|
|
14073
|
-
src = $(this);
|
|
14074
|
-
});
|
|
14075
|
-
$(me.selector + ' li').bind("dragover", function (ev) {
|
|
14076
|
-
ev.preventDefault();
|
|
14077
|
-
});
|
|
14078
|
-
$(me.selector + ' li').bind("drop", function (ev) {
|
|
14079
|
-
ev.preventDefault();
|
|
14080
|
-
|
|
14081
|
-
if (src.prop("outerHTML") === $(this).prop("outerHTML")) {
|
|
14082
|
-
return;
|
|
14083
|
-
}
|
|
14084
|
-
|
|
14085
|
-
var target = $(this);
|
|
14086
|
-
var srcIndex = src.index();
|
|
14087
|
-
var targetIndex = target.index();
|
|
14088
|
-
|
|
14089
|
-
if (srcIndex > targetIndex) {
|
|
14090
|
-
src.insertBefore(target);
|
|
14091
|
-
target.insertAfter($(me.selector + ' .video-main li.screen').eq(srcIndex));
|
|
14092
|
-
} else {
|
|
14093
|
-
src.insertAfter(target);
|
|
14094
|
-
target.insertBefore($(me.selector + ' .video-main li.screen').eq(srcIndex));
|
|
14095
|
-
}
|
|
14096
|
-
});
|
|
14097
|
-
let videoFlagObj = $('[video-flag="' + me._opts.windowsBeginIndex + '"]'); //锁定视频事件
|
|
14177
|
+
let me = this;
|
|
14178
|
+
let videoFlagObj = $(me.selector + ' .video-main'); //锁定视频事件
|
|
14098
14179
|
|
|
14099
14180
|
videoFlagObj.find("button[name='lockVideo']").click(function () {
|
|
14100
14181
|
let index = Number($(this).parent().parent().attr("index"));
|
|
@@ -14110,7 +14191,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14110
14191
|
} else {
|
|
14111
14192
|
me.VIDEO_DATA[index].isLockVideo = true;
|
|
14112
14193
|
$(this).attr('class', 'lock-video-btn');
|
|
14113
|
-
}
|
|
14194
|
+
} //jquery方式阻止默认事件 & 冒泡事件
|
|
14195
|
+
|
|
14196
|
+
|
|
14197
|
+
return false;
|
|
14114
14198
|
});
|
|
14115
14199
|
videoFlagObj.find('button[name=rotateVideo]').click(function () {
|
|
14116
14200
|
let rotateIndex = Number($(this).attr("rotate-index"));
|
|
@@ -14118,13 +14202,17 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14118
14202
|
rotateIndex %= 4;
|
|
14119
14203
|
$(this).attr("rotate-index", rotateIndex);
|
|
14120
14204
|
let li = $(this).parent().parent()[0];
|
|
14121
|
-
me.videoRotateSize(li, rotateIndex);
|
|
14205
|
+
me.videoRotateSize(li, rotateIndex); //jquery方式阻止默认事件 & 冒泡事件
|
|
14206
|
+
|
|
14207
|
+
return false;
|
|
14122
14208
|
}); //接收音频事件
|
|
14123
14209
|
|
|
14124
14210
|
videoFlagObj.find("button[name='recvAudio']").click(function () {
|
|
14125
14211
|
let _self = this;
|
|
14126
14212
|
|
|
14127
|
-
let index = Number($(this).parent().parent().attr("index"));
|
|
14213
|
+
let index = Number($(this).parent().parent().attr("index")); // 优先当前窗口参数设置的业务类型 其次配置的默认业务类型
|
|
14214
|
+
|
|
14215
|
+
let businessType = me.VIDEO_DATA[index].opts.businessType == undefined ? me._opts.defaultBusinessType : me.VIDEO_DATA[index].opts.businessType;
|
|
14128
14216
|
|
|
14129
14217
|
if (!me.VIDEO_DATA[index].playing) {
|
|
14130
14218
|
promptAlarm('请选择播放的视频源!');
|
|
@@ -14135,65 +14223,113 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14135
14223
|
//发送停止播放音频的请求
|
|
14136
14224
|
me.VIDEO_DATA[index].operateAudio("stop_audio");
|
|
14137
14225
|
$(this).attr('class', 'unrecv-audio-btn');
|
|
14138
|
-
me.VIDEO_DATA[index].tagBox.muted
|
|
14226
|
+
me.VIDEO_DATA[index].tagBox.prop("muted", true);
|
|
14139
14227
|
} else {
|
|
14140
|
-
|
|
14141
|
-
|
|
14228
|
+
if (businessType == 0) {
|
|
14229
|
+
//发送前先关闭其它音频通道(包括接收和发送音频)
|
|
14230
|
+
let lis = $($(_self).parent().parent().parent()).children();
|
|
14142
14231
|
|
|
14143
|
-
|
|
14144
|
-
|
|
14232
|
+
for (let i = 0; i < lis.length; i++) {
|
|
14233
|
+
let btnIndex = Number($(lis[i]).attr("index"));
|
|
14145
14234
|
|
|
14146
|
-
|
|
14147
|
-
|
|
14148
|
-
|
|
14235
|
+
if (index == btnIndex) {
|
|
14236
|
+
continue;
|
|
14237
|
+
}
|
|
14149
14238
|
|
|
14150
|
-
|
|
14151
|
-
|
|
14239
|
+
let recvBtn = $($(lis[i]).find("button[name='recvAudio']")[0]);
|
|
14240
|
+
let sendBtn = $($(lis[i]).find("button[name='sendAudio']")[0]);
|
|
14152
14241
|
|
|
14153
|
-
|
|
14154
|
-
|
|
14155
|
-
|
|
14242
|
+
if (recvBtn.attr("class") == 'recv-audio-btn') {
|
|
14243
|
+
if (me.VIDEO_DATA[btnIndex].playing) {
|
|
14244
|
+
recvBtn.click();
|
|
14245
|
+
}
|
|
14156
14246
|
}
|
|
14157
|
-
}
|
|
14158
14247
|
|
|
14159
|
-
|
|
14160
|
-
|
|
14161
|
-
|
|
14248
|
+
if (sendBtn.attr("class") == 'send-audio-btn') {
|
|
14249
|
+
if (me.VIDEO_DATA[btnIndex].playing) {
|
|
14250
|
+
sendBtn.click();
|
|
14251
|
+
}
|
|
14162
14252
|
}
|
|
14163
|
-
}
|
|
14164
|
-
} //发送播放音频的请求
|
|
14253
|
+
} //发送播放音频的请求
|
|
14165
14254
|
|
|
14166
14255
|
|
|
14167
|
-
|
|
14168
|
-
|
|
14256
|
+
$(_self).attr('class', 'recv-audio-btn');
|
|
14257
|
+
setTimeout(function () {
|
|
14258
|
+
if (!me.VIDEO_DATA[index].isClosing) {
|
|
14259
|
+
me.VIDEO_DATA[index].operateAudio("recv_audio");
|
|
14260
|
+
me.VIDEO_DATA[index].tagBox.prop("muted", false);
|
|
14261
|
+
}
|
|
14262
|
+
}, 1000);
|
|
14263
|
+
} else if (businessType == 1) {
|
|
14264
|
+
// poc新模式支持回传多个音频,因此不关闭
|
|
14265
|
+
//发送播放音频的请求
|
|
14266
|
+
$(_self).attr('class', 'recv-audio-btn');
|
|
14169
14267
|
me.VIDEO_DATA[index].operateAudio("recv_audio");
|
|
14170
|
-
me.VIDEO_DATA[index].tagBox.muted
|
|
14171
|
-
}
|
|
14268
|
+
me.VIDEO_DATA[index].tagBox.prop("muted", false);
|
|
14269
|
+
}
|
|
14172
14270
|
}
|
|
14173
14271
|
}); //发送音频事件
|
|
14174
14272
|
|
|
14175
14273
|
videoFlagObj.find("button[name='sendAudio']").click(function () {
|
|
14176
|
-
let index = Number($(this).parent().parent().attr("index"));
|
|
14274
|
+
let index = Number($(this).parent().parent().attr("index")); // 优先当前窗口参数设置的业务类型 其次配置的默认业务类型 最后默认调度业务
|
|
14275
|
+
|
|
14276
|
+
let businessType = me.VIDEO_DATA[index].opts.businessType == undefined ? me._opts.defaultBusinessType : me.VIDEO_DATA[index].opts.businessType;
|
|
14177
14277
|
|
|
14178
14278
|
if (!me.VIDEO_DATA[index].playing) {
|
|
14179
14279
|
promptAlarm('请选择播放的视频源!');
|
|
14180
14280
|
return;
|
|
14181
14281
|
}
|
|
14182
14282
|
|
|
14183
|
-
if (
|
|
14184
|
-
|
|
14185
|
-
$(this).attr('class'
|
|
14186
|
-
|
|
14187
|
-
|
|
14188
|
-
|
|
14189
|
-
|
|
14190
|
-
|
|
14191
|
-
|
|
14283
|
+
if (businessType == 0) {
|
|
14284
|
+
// 主线业务
|
|
14285
|
+
if ($(this).attr('class') == 'send-audio-btn') {
|
|
14286
|
+
me.VIDEO_DATA[index].operateAudio("unsend_audio");
|
|
14287
|
+
$(this).attr('class', 'unsend-audio-btn');
|
|
14288
|
+
me.VIDEO_DATA[index].stream.getAudioTracks()[0].enabled = false;
|
|
14289
|
+
} else {
|
|
14290
|
+
me.VIDEO_DATA[index].operateAudio("send_audio");
|
|
14291
|
+
$(this).attr('class', 'send-audio-btn');
|
|
14292
|
+
me.VIDEO_DATA[index].stream.getAudioTracks()[0].enabled = true;
|
|
14293
|
+
}
|
|
14294
|
+
} else if (businessType == 1) {
|
|
14295
|
+
// 勤指业务
|
|
14296
|
+
if ($(this).attr('class') == 'send-audio-btn') {
|
|
14297
|
+
$(this).attr('class', 'unsend-audio-btn'); //关闭点对点对讲
|
|
14298
|
+
|
|
14299
|
+
me.VIDEO_DATA[index].ptopPoc("close_ptop_poc", window.pocNo);
|
|
14300
|
+
} else {
|
|
14301
|
+
$(this).attr('class', 'send-audio-btn'); //发起点对点对讲
|
|
14302
|
+
|
|
14303
|
+
me.VIDEO_DATA[index].ptopPoc("open_ptop_poc", window.pocNo);
|
|
14304
|
+
}
|
|
14305
|
+
} //jquery方式阻止默认事件 & 冒泡事件
|
|
14306
|
+
|
|
14307
|
+
|
|
14308
|
+
return false;
|
|
14192
14309
|
}); //关闭视频事件
|
|
14193
14310
|
|
|
14194
14311
|
videoFlagObj.find("button[name='closeVideo']").click(function () {
|
|
14195
14312
|
let index = Number($(this).parent().parent().attr("index"));
|
|
14196
|
-
me.close(index);
|
|
14313
|
+
me.close(index); //jquery方式阻止默认事件 & 冒泡事件
|
|
14314
|
+
|
|
14315
|
+
return false;
|
|
14316
|
+
});
|
|
14317
|
+
},
|
|
14318
|
+
|
|
14319
|
+
/**
|
|
14320
|
+
* 初始化事件监听
|
|
14321
|
+
*/
|
|
14322
|
+
_initEventListen: function () {
|
|
14323
|
+
let _self = this; // 打开视频 {index, video, id, opts} index(视频窗口编号,从0开始) video(视频设备id,即devId) id(标识,空的话使用设备id) opts(其他参数)
|
|
14324
|
+
|
|
14325
|
+
|
|
14326
|
+
_self.addListener('openVideo', function (e) {
|
|
14327
|
+
_self.play(e.index, e.video, e.id, e.opts);
|
|
14328
|
+
}); // janus通知后台已关闭视频
|
|
14329
|
+
|
|
14330
|
+
|
|
14331
|
+
_self.addListener('notifyCloseVideo', function (e) {
|
|
14332
|
+
_self._notifyWaitingVideo(e.index);
|
|
14197
14333
|
});
|
|
14198
14334
|
},
|
|
14199
14335
|
|
|
@@ -14202,7 +14338,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14202
14338
|
*/
|
|
14203
14339
|
_dbClickFullScreen: function () {
|
|
14204
14340
|
let me = this;
|
|
14205
|
-
$(
|
|
14341
|
+
$(me.selector + ' .video-main').find('.video-box').on("dblclick", function () {
|
|
14206
14342
|
me._fullScreenEvent(this);
|
|
14207
14343
|
});
|
|
14208
14344
|
},
|
|
@@ -14237,10 +14373,20 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14237
14373
|
let me = this;
|
|
14238
14374
|
|
|
14239
14375
|
function clock() {
|
|
14376
|
+
if (!me.VIDEO_DATA || !me.VIDEO_DATA.length) return;
|
|
14377
|
+
|
|
14240
14378
|
for (let i = 0; i < me.VIDEO_DATA.length; i++) {
|
|
14241
14379
|
if (me.VIDEO_DATA[i].playing) {
|
|
14242
|
-
let number = Number(i) + Number(1);
|
|
14243
|
-
|
|
14380
|
+
let number = Number(i) + Number(1); //获取视频video标签
|
|
14381
|
+
|
|
14382
|
+
let $videoList = $(me.selector + " .video-main #video-" + number);
|
|
14383
|
+
|
|
14384
|
+
if (!$videoList.length) {
|
|
14385
|
+
console.error("can not find dom by id [video-" + number + "]");
|
|
14386
|
+
continue;
|
|
14387
|
+
}
|
|
14388
|
+
|
|
14389
|
+
let videoObj = $videoList[0];
|
|
14244
14390
|
if (!videoObj) continue;
|
|
14245
14391
|
let width = videoObj.videoWidth;
|
|
14246
14392
|
let height = videoObj.videoHeight; //码率
|
|
@@ -14255,6 +14401,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14255
14401
|
|
|
14256
14402
|
me._setPacketsLostRate(i, config, me);
|
|
14257
14403
|
|
|
14404
|
+
me._setFrameDecoded(i, config, me);
|
|
14405
|
+
|
|
14258
14406
|
let resolution = width + "×" + height;
|
|
14259
14407
|
|
|
14260
14408
|
switch (height + '') {
|
|
@@ -14276,11 +14424,26 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14276
14424
|
|
|
14277
14425
|
default:
|
|
14278
14426
|
break;
|
|
14427
|
+
} //获取文案显示dom元素
|
|
14428
|
+
|
|
14429
|
+
|
|
14430
|
+
let $videoInfoList = $(me.selector + " .video-main #info-" + number);
|
|
14431
|
+
|
|
14432
|
+
if (!$videoInfoList.length) {
|
|
14433
|
+
console.error("can not find dom by id [info-" + number + "]");
|
|
14434
|
+
continue;
|
|
14279
14435
|
}
|
|
14280
14436
|
|
|
14281
|
-
let videoInfoObj =
|
|
14437
|
+
let videoInfoObj = $videoInfoList[0];
|
|
14282
14438
|
let videoName = me.VIDEO_DATA[i].opts && me.VIDEO_DATA[i].opts.name ? me.VIDEO_DATA[i].opts.name : me.VIDEO_DATA[i].video;
|
|
14283
|
-
videoInfoObj.innerHTML = videoName + ' ' + resolution + '<br>丢包率:' + me.VIDEO_DATA[i].packetsLostRate + ' ' + bitrate.replace("kbits/sec", "kbps");
|
|
14439
|
+
videoInfoObj.innerHTML = videoName + ' ' + resolution + '<br>丢包率:' + me.VIDEO_DATA[i].packetsLostRate + ' ' + bitrate.replace("kbits/sec", "kbps"); //根据视频框大小自动计算 显示文案的文字大小
|
|
14440
|
+
|
|
14441
|
+
let fontHeightSize = $(me.selector + " .video-main #video-" + number).height() / 15;
|
|
14442
|
+
let fontWidthSize = $(me.selector + " .video-main #video-" + number).width() / 18; //长和宽 除以 15, 取小的值做文字大小样式
|
|
14443
|
+
|
|
14444
|
+
let fontSize = fontHeightSize < fontWidthSize ? fontHeightSize : fontWidthSize;
|
|
14445
|
+
fontSize = !fontSize || fontSize > 20 ? 20 : fontSize;
|
|
14446
|
+
$("#info-" + number).css("font-size", fontSize + "px");
|
|
14284
14447
|
}
|
|
14285
14448
|
}
|
|
14286
14449
|
} //已存在则清除
|
|
@@ -14343,17 +14506,175 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14343
14506
|
}
|
|
14344
14507
|
},
|
|
14345
14508
|
|
|
14509
|
+
/**
|
|
14510
|
+
* 设置当前网络信号提示
|
|
14511
|
+
* @param index 当前打开视频的索引
|
|
14512
|
+
* @param config
|
|
14513
|
+
* @param me
|
|
14514
|
+
* @private
|
|
14515
|
+
*/
|
|
14516
|
+
_setFrameDecoded: function (index, config, me) {
|
|
14517
|
+
if (config.pc !== null && typeof config.pc !== 'undefined' && config.pc.getStats) {
|
|
14518
|
+
config.pc.getStats().then(function (stats) {
|
|
14519
|
+
stats.forEach(function (res) {
|
|
14520
|
+
if (res) {
|
|
14521
|
+
let inStats = false; // Check if these are statistics on incoming media
|
|
14522
|
+
|
|
14523
|
+
if ((res.mediaType === 'video' || res.id.toLowerCase().indexOf('video') > -1) && res.type === 'inbound-rtp' && res.id.indexOf('rtcp') < 0) {
|
|
14524
|
+
// New stats
|
|
14525
|
+
inStats = true;
|
|
14526
|
+
} else if (res.type === 'ssrc' && res.bytesReceived && (res.googCodecName === 'VP8' || res.googCodecName === '')) {
|
|
14527
|
+
// Older Chromer versions
|
|
14528
|
+
inStats = true;
|
|
14529
|
+
} // Parse stats now
|
|
14530
|
+
|
|
14531
|
+
|
|
14532
|
+
if (inStats) {
|
|
14533
|
+
if (res.hasOwnProperty('framesDecoded')) {
|
|
14534
|
+
if (res.framesDecoded <= 1) return;
|
|
14535
|
+
|
|
14536
|
+
if (typeof me.VIDEO_DATA[index].framesDecodedCount === 'undefined') {
|
|
14537
|
+
me.VIDEO_DATA[index].framesDecodedCount = 0;
|
|
14538
|
+
}
|
|
14539
|
+
|
|
14540
|
+
if (typeof me.VIDEO_DATA[index].framesDecodedLast === 'undefined') {
|
|
14541
|
+
me.VIDEO_DATA[index].framesDecodedLast = res.framesDecoded;
|
|
14542
|
+
}
|
|
14543
|
+
|
|
14544
|
+
if (res.framesDecoded > me.VIDEO_DATA[index].framesDecodedLast) {
|
|
14545
|
+
if (typeof me.VIDEO_DATA[index].tipDom !== 'undefined' && me.VIDEO_DATA[index].tipDom.style.display === 'block') {
|
|
14546
|
+
me.VIDEO_DATA[index].tipDom.style.display = 'none';
|
|
14547
|
+
}
|
|
14548
|
+
}
|
|
14549
|
+
|
|
14550
|
+
me.VIDEO_DATA[index].framesDecodedCount++; // 定时检测
|
|
14551
|
+
|
|
14552
|
+
if (me.VIDEO_DATA[index].framesDecodedCount === me.configOpt) {
|
|
14553
|
+
if (res.framesDecoded - me.VIDEO_DATA[index].framesDecodedLast === 0) {
|
|
14554
|
+
// 卡顿
|
|
14555
|
+
if (typeof me.VIDEO_DATA[index].tipDom === 'undefined') {
|
|
14556
|
+
var numIndex = index + 1;
|
|
14557
|
+
me.VIDEO_DATA[index].tipDom = document.getElementById('frame-decoded-' + numIndex);
|
|
14558
|
+
}
|
|
14559
|
+
|
|
14560
|
+
me.VIDEO_DATA[index].tipDom.style.display = 'block';
|
|
14561
|
+
}
|
|
14562
|
+
|
|
14563
|
+
me.VIDEO_DATA[index].framesDecodedCount = 0;
|
|
14564
|
+
me.VIDEO_DATA[index].framesDecodedLast = res.framesDecoded;
|
|
14565
|
+
} else {
|
|
14566
|
+
me.VIDEO_DATA[index].framesDecodedLast = res.framesDecoded;
|
|
14567
|
+
}
|
|
14568
|
+
}
|
|
14569
|
+
}
|
|
14570
|
+
}
|
|
14571
|
+
});
|
|
14572
|
+
});
|
|
14573
|
+
}
|
|
14574
|
+
},
|
|
14575
|
+
|
|
14576
|
+
/**
|
|
14577
|
+
* 设备可用性检查(扬声器、麦克风、分辨率、浏览器类型)
|
|
14578
|
+
* 1. 未检测(status == undefined)询问进入检测界面
|
|
14579
|
+
* 2. 检测完成按相应结果给予相应提示
|
|
14580
|
+
* 3. 拒绝检测按所有检测通过处理
|
|
14581
|
+
* 4. 程序自行检测,并将是否加载声卡结果放入window对象
|
|
14582
|
+
* @private
|
|
14583
|
+
*/
|
|
14584
|
+
_checkDevices: function () {
|
|
14585
|
+
let me = this;
|
|
14586
|
+
let tipCountKey = "DEVICES_CHECK_TIP_COUNT";
|
|
14587
|
+
let statusKey = "DEVICES_CHECK_STATUS";
|
|
14588
|
+
let checkCompleted = "completed";
|
|
14589
|
+
let checkRejected = "rejected";
|
|
14590
|
+
let microResultKey = "MICRO_RESULT";
|
|
14591
|
+
let speakerResultKey = "SPEAKER_RESULT";
|
|
14592
|
+
let screenResultKey = "SCREEN_RESULT";
|
|
14593
|
+
let resultPass = "pass";
|
|
14594
|
+
let resultNotPass = "not pass";
|
|
14595
|
+
let tipCount = sessionStorage.getItem(tipCountKey);
|
|
14596
|
+
let status = localStorage.getItem(statusKey);
|
|
14597
|
+
|
|
14598
|
+
if ((tipCount == undefined || tipCount == "0") && status == undefined) {
|
|
14599
|
+
sessionStorage.setItem(tipCountKey, "1"); //弹窗讯问是否进入检测界面
|
|
14600
|
+
|
|
14601
|
+
if (confirm("您还没有检测硬件设备,是否先进行检测?")) {
|
|
14602
|
+
window.open("/scooper-video/new/checkDevices");
|
|
14603
|
+
} else {
|
|
14604
|
+
localStorage.setItem(statusKey, checkRejected);
|
|
14605
|
+
}
|
|
14606
|
+
|
|
14607
|
+
return;
|
|
14608
|
+
}
|
|
14609
|
+
|
|
14610
|
+
if (status == checkCompleted) {
|
|
14611
|
+
let microResult = localStorage.getItem(microResultKey) == undefined ? resultPass : localStorage.getItem(microResultKey);
|
|
14612
|
+
let speakerResult = localStorage.getItem(speakerResultKey) == undefined ? resultPass : localStorage.getItem(speakerResultKey);
|
|
14613
|
+
let screenResult = localStorage.getItem(screenResultKey) == undefined ? resultPass : localStorage.getItem(screenResultKey);
|
|
14614
|
+
let msg = "";
|
|
14615
|
+
|
|
14616
|
+
if (speakerResult == resultNotPass) {
|
|
14617
|
+
msg += "检测到扬声器异常,可能影响系统某些功能的使用!";
|
|
14618
|
+
console.error(msg);
|
|
14619
|
+
}
|
|
14620
|
+
|
|
14621
|
+
if (microResult == resultNotPass) {
|
|
14622
|
+
msg += "检测到麦克风异常,可能影响系统某些功能的使用!";
|
|
14623
|
+
console.error(msg);
|
|
14624
|
+
}
|
|
14625
|
+
|
|
14626
|
+
if (screenResult === resultNotPass) {
|
|
14627
|
+
msg += "您的屏幕分辨率过低,可能导致页面布局混乱!"; //提示消息
|
|
14628
|
+
|
|
14629
|
+
promptAlarm(msg);
|
|
14630
|
+
}
|
|
14631
|
+
|
|
14632
|
+
let userAgent = navigator.userAgent;
|
|
14633
|
+
|
|
14634
|
+
if (userAgent.toLowerCase().indexOf("chrome") < 0 && userAgent.toLowerCase().indexOf("firefox") < 0 && userAgent.toLowerCase().indexOf("edge") < 0) {
|
|
14635
|
+
msg += "当前浏览器下部分功能可能存在兼容问题,建议使用谷歌浏览器!";
|
|
14636
|
+
promptAlarm(msg);
|
|
14637
|
+
}
|
|
14638
|
+
|
|
14639
|
+
if (msg != "") {
|
|
14640
|
+
//提示并派发消息
|
|
14641
|
+
// promptAlarm(msg);
|
|
14642
|
+
//防止外部未监听消息就派发事件
|
|
14643
|
+
setTimeout(function () {
|
|
14644
|
+
me.videoListener.dispatch('msginfo', {
|
|
14645
|
+
'msg': msg
|
|
14646
|
+
});
|
|
14647
|
+
}, 3000);
|
|
14648
|
+
}
|
|
14649
|
+
}
|
|
14650
|
+
},
|
|
14651
|
+
|
|
14346
14652
|
/**
|
|
14347
14653
|
* 视频界面的初始化,在传过来的dom中创建界面
|
|
14348
14654
|
*/
|
|
14349
|
-
_initVideoView: function ($dom) {
|
|
14655
|
+
_initVideoView: function ($dom, infoPosition) {
|
|
14350
14656
|
let me = this;
|
|
14351
|
-
let
|
|
14657
|
+
let position;
|
|
14658
|
+
|
|
14659
|
+
switch (infoPosition) {
|
|
14660
|
+
case 1:
|
|
14661
|
+
position = "info-bottom";
|
|
14662
|
+
break;
|
|
14663
|
+
|
|
14664
|
+
case 2:
|
|
14665
|
+
position = "info-top";
|
|
14666
|
+
break;
|
|
14667
|
+
|
|
14668
|
+
default:
|
|
14669
|
+
position = "info-bottom";
|
|
14670
|
+
}
|
|
14671
|
+
|
|
14672
|
+
let objClass = (me._opts.windowsNum == 1 ? 'video-main video-main-full mode-' : 'video-main mode-') + me._opts.windows;
|
|
14352
14673
|
let videoHtml = '<ul class="' + objClass + '" id="video-main-web-rtc" video-flag="' + me._opts.windowsBeginIndex + '">';
|
|
14353
14674
|
let index = me._opts.windowsBeginIndex + 1;
|
|
14354
14675
|
|
|
14355
14676
|
for (let i = index; i < index + me._opts.windowsNum; i++) {
|
|
14356
|
-
videoHtml += '<li class="screen-' + i + '" index="' + (i - 1) + '" draggable="true"><video class="video-box" id="video-' + i + '" autoplay ></video>' + '<div class="info
|
|
14677
|
+
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>';
|
|
14357
14678
|
|
|
14358
14679
|
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>');
|
|
14359
14680
|
videoHtml += '<button type="button" class="unrecv-audio-btn hide" name="recvAudio"></button>' + '<button type="button" class="close-btn hide" name="closeVideo"></button>' + '</div>' + '</li>';
|
|
@@ -14369,7 +14690,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14369
14690
|
*/
|
|
14370
14691
|
_initAudioView: function ($dom) {
|
|
14371
14692
|
let me = this;
|
|
14372
|
-
let objClass = (me._opts.windowsNum == 1 ? 'video-main-full mode-' : 'video-main mode-') + me._opts.windows;
|
|
14693
|
+
let objClass = (me._opts.windowsNum == 1 ? 'video-main video-main-full mode-' : 'video-main mode-') + me._opts.windows;
|
|
14373
14694
|
let videoHtml = '<ul class="' + objClass + '" id="video-main-web-rtc" video-flag="' + me._opts.windowsBeginIndex + '">';
|
|
14374
14695
|
let index = me._opts.windowsBeginIndex + 1;
|
|
14375
14696
|
|
|
@@ -14419,6 +14740,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14419
14740
|
console.error('Janus服务连接失败:' + error);
|
|
14420
14741
|
me.closeAll();
|
|
14421
14742
|
|
|
14743
|
+
me._removeAllWaitingVideo();
|
|
14744
|
+
|
|
14422
14745
|
me._initJanus();
|
|
14423
14746
|
},
|
|
14424
14747
|
destroyed: function () {
|
|
@@ -14429,6 +14752,19 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14429
14752
|
});
|
|
14430
14753
|
},
|
|
14431
14754
|
|
|
14755
|
+
/**
|
|
14756
|
+
* 销毁所有
|
|
14757
|
+
*/
|
|
14758
|
+
destory: function () {
|
|
14759
|
+
var me = this;
|
|
14760
|
+
me.destoryJanus();
|
|
14761
|
+
$(me.selector).empty();
|
|
14762
|
+
me.videoListener = null;
|
|
14763
|
+
me.VIDEO_DATA = null;
|
|
14764
|
+
me.selector = null; //destoryJanus会触发回调,需要使用到opts
|
|
14765
|
+
// me._opts = null;
|
|
14766
|
+
},
|
|
14767
|
+
|
|
14432
14768
|
/**
|
|
14433
14769
|
* 销毁:Janus销毁、资源释放
|
|
14434
14770
|
*/
|
|
@@ -14437,14 +14773,17 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14437
14773
|
|
|
14438
14774
|
me._opts.janus.destroy({
|
|
14439
14775
|
success: function () {
|
|
14440
|
-
window.windowsSum = 0;
|
|
14441
|
-
|
|
14776
|
+
// window.windowsSum = 0;
|
|
14777
|
+
//userToken = null;
|
|
14442
14778
|
registered = false;
|
|
14443
14779
|
},
|
|
14444
14780
|
asyncRequest: true,
|
|
14445
14781
|
notifyDestroyed: true
|
|
14446
14782
|
});
|
|
14783
|
+
|
|
14784
|
+
me.removeAllListeners();
|
|
14447
14785
|
},
|
|
14786
|
+
reLoginJanusItvIndex: -1,
|
|
14448
14787
|
|
|
14449
14788
|
/**
|
|
14450
14789
|
* 初始化插件、登陆,初始化窗口
|
|
@@ -14504,13 +14843,43 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14504
14843
|
|
|
14505
14844
|
if (event === 'registration_failed') {
|
|
14506
14845
|
promptFailed("janus登陆失败: " + result["code"] + " " + result["reason"]);
|
|
14846
|
+
|
|
14847
|
+
if (me.reLoginJanusItvIndex == -1) {
|
|
14848
|
+
me.reLoginJanusItvIndex = setInterval(function () {
|
|
14849
|
+
console.log("尝试重新登陆janus!");
|
|
14850
|
+
|
|
14851
|
+
me._initJanus(janus);
|
|
14852
|
+
}, 5000);
|
|
14853
|
+
}
|
|
14854
|
+
|
|
14855
|
+
return;
|
|
14856
|
+
}
|
|
14857
|
+
|
|
14858
|
+
if (event === 'video_server_closed') {
|
|
14859
|
+
if (me.reLoginJanusItvIndex == -1) {
|
|
14860
|
+
me.reLoginJanusItvIndex = setInterval(function () {
|
|
14861
|
+
console.log("尝试重新登陆janus!");
|
|
14862
|
+
|
|
14863
|
+
me._initJanus(janus);
|
|
14864
|
+
}, 5000);
|
|
14865
|
+
}
|
|
14866
|
+
|
|
14507
14867
|
return;
|
|
14508
14868
|
}
|
|
14509
14869
|
|
|
14510
14870
|
if (event === 'registered') {
|
|
14511
14871
|
let userToken = result["userToken"];
|
|
14512
14872
|
console.log('janus登陆成功');
|
|
14513
|
-
registered = true;
|
|
14873
|
+
registered = true;
|
|
14874
|
+
|
|
14875
|
+
if (me.reLoginJanusItvIndex != -1) {
|
|
14876
|
+
clearInterval(me.reLoginJanusItvIndex);
|
|
14877
|
+
me.reLoginJanusItvIndex = -1;
|
|
14878
|
+
} //生成主界面
|
|
14879
|
+
//相对序号,用于标识当前janus连接初始化的序号窗口
|
|
14880
|
+
|
|
14881
|
+
|
|
14882
|
+
let relativeIndex = 0;
|
|
14514
14883
|
|
|
14515
14884
|
for (let i = me._opts.windowsBeginIndex; i < me._opts.windowsBeginIndex + me._opts.windowsNum; i++) {
|
|
14516
14885
|
me.VIDEO_DATA[i] = new SVideo({
|
|
@@ -14518,42 +14887,254 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14518
14887
|
janus: janus,
|
|
14519
14888
|
userToken: userToken,
|
|
14520
14889
|
windowsNum: me._opts.windowsNum,
|
|
14890
|
+
relativeIndex: relativeIndex++,
|
|
14521
14891
|
flag: me._opts.flag,
|
|
14522
14892
|
isVideoTag: me._opts.isVideoTag,
|
|
14523
|
-
janusPlugin: me._opts.conf.janusPlugin
|
|
14524
|
-
|
|
14893
|
+
janusPlugin: me._opts.conf.janusPlugin,
|
|
14894
|
+
videoTipTimeOut: me._opts.videoTipTimeOut,
|
|
14895
|
+
parentSelector: me.selector
|
|
14896
|
+
}, me.videoListener);
|
|
14525
14897
|
}
|
|
14526
14898
|
}
|
|
14527
14899
|
}
|
|
14528
14900
|
}
|
|
14529
14901
|
});
|
|
14902
|
+
},
|
|
14903
|
+
|
|
14904
|
+
/* ----------------------------- 播放队列 --------------------------- */
|
|
14905
|
+
// 记录等待中的视频
|
|
14906
|
+
WAITING_DATA: [],
|
|
14907
|
+
// 播放队列开关 默认关闭
|
|
14908
|
+
waitPlayQueueSwitch: false,
|
|
14909
|
+
|
|
14910
|
+
/**
|
|
14911
|
+
* 添加等待视频数据
|
|
14912
|
+
* 同一位置再次打开,则覆盖上一次的
|
|
14913
|
+
* 参数:index(视频窗口编号,从0开始) video(视频设备id,即devId) id(标识,空的话使用设备id) opts(其他参数)
|
|
14914
|
+
*/
|
|
14915
|
+
_addWaitingVideo: function (index, video, id, opts) {
|
|
14916
|
+
let _self = this;
|
|
14917
|
+
|
|
14918
|
+
let isOverride = false;
|
|
14919
|
+
$.each(_self.WAITING_DATA, function (i, obj) {
|
|
14920
|
+
if (obj.index == index) {
|
|
14921
|
+
console.log("播放队列中 index = " + index + ", video = " + obj.video + " 替换为 video = " + video);
|
|
14922
|
+
_self.WAITING_DATA[i] = {
|
|
14923
|
+
index: index,
|
|
14924
|
+
video: video,
|
|
14925
|
+
id: id,
|
|
14926
|
+
opts: opts
|
|
14927
|
+
};
|
|
14928
|
+
isOverride = true;
|
|
14929
|
+
return false;
|
|
14930
|
+
}
|
|
14931
|
+
});
|
|
14932
|
+
|
|
14933
|
+
if (!isOverride) {
|
|
14934
|
+
_self.WAITING_DATA.push({
|
|
14935
|
+
index: index,
|
|
14936
|
+
video: video,
|
|
14937
|
+
id: id,
|
|
14938
|
+
opts: opts
|
|
14939
|
+
});
|
|
14940
|
+
|
|
14941
|
+
console.log("index = " + index + ", video = " + video + " 加入播放队列");
|
|
14942
|
+
}
|
|
14943
|
+
|
|
14944
|
+
_self.VIDEO_DATA[index].isWaiting = true;
|
|
14945
|
+
},
|
|
14946
|
+
|
|
14947
|
+
/**
|
|
14948
|
+
* 删除等待视频数据
|
|
14949
|
+
*/
|
|
14950
|
+
_removeWaitingVideo: function (index, video) {
|
|
14951
|
+
let _self = this;
|
|
14952
|
+
|
|
14953
|
+
$.each(_self.WAITING_DATA, function (i, obj) {
|
|
14954
|
+
if (obj.index == index && obj.video == video) {
|
|
14955
|
+
_self.WAITING_DATA.splice(i, 1);
|
|
14956
|
+
|
|
14957
|
+
_self.VIDEO_DATA[index].isWaiting = false;
|
|
14958
|
+
console.log("index = " + index + ", video = " + video + " 从播放队列移除");
|
|
14959
|
+
return false;
|
|
14960
|
+
}
|
|
14961
|
+
});
|
|
14962
|
+
},
|
|
14963
|
+
|
|
14964
|
+
/**
|
|
14965
|
+
* 删除所有等待播放视频的数据
|
|
14966
|
+
*/
|
|
14967
|
+
_removeAllWaitingVideo: function () {
|
|
14968
|
+
let _self = this;
|
|
14969
|
+
|
|
14970
|
+
_self.WAITING_DATA = [];
|
|
14971
|
+
let index = _self._opts.windowsBeginIndex;
|
|
14972
|
+
|
|
14973
|
+
for (; index < _self._opts.windowsBeginIndex + _self._opts.windows; index++) {
|
|
14974
|
+
_self.VIDEO_DATA[index].isWaiting = false;
|
|
14975
|
+
}
|
|
14976
|
+
},
|
|
14977
|
+
|
|
14978
|
+
/**
|
|
14979
|
+
* 上一个视频关闭后,如果该位置由等待视频,通知打开新视频
|
|
14980
|
+
* @param index
|
|
14981
|
+
*/
|
|
14982
|
+
_notifyWaitingVideo: function (index) {
|
|
14983
|
+
let _self = this;
|
|
14984
|
+
|
|
14985
|
+
$.each(_self.WAITING_DATA, function (i, obj) {
|
|
14986
|
+
if (obj.index == index) {
|
|
14987
|
+
_self.play(obj.index, obj.video, obj.id, obj.opts);
|
|
14988
|
+
|
|
14989
|
+
_self._removeWaitingVideo(obj.index, obj.video);
|
|
14990
|
+
|
|
14991
|
+
return false;
|
|
14992
|
+
}
|
|
14993
|
+
});
|
|
14530
14994
|
}
|
|
14531
14995
|
};
|
|
14532
|
-
let
|
|
14533
|
-
|
|
14534
|
-
|
|
14535
|
-
|
|
14536
|
-
|
|
14537
|
-
|
|
14538
|
-
|
|
14539
|
-
|
|
14540
|
-
|
|
14541
|
-
|
|
14542
|
-
|
|
14543
|
-
|
|
14544
|
-
|
|
14545
|
-
|
|
14546
|
-
|
|
14547
|
-
|
|
14548
|
-
|
|
14549
|
-
|
|
14550
|
-
|
|
14551
|
-
|
|
14552
|
-
|
|
14553
|
-
|
|
14554
|
-
|
|
14996
|
+
let CONST_CODE = {
|
|
14997
|
+
//打开失败错误码,面板显示,不做浮窗提示框显示
|
|
14998
|
+
VIDEO_CODE: {
|
|
14999
|
+
2002: "打开失败,未找到该ID的视频源",
|
|
15000
|
+
2003: "打开失败,请确认视频服务版本",
|
|
15001
|
+
3001: "打开失败,未接收到引流包,请检查端口映射",
|
|
15002
|
+
3002: "",
|
|
15003
|
+
3003: "打开失败,对方拒绝视频请求",
|
|
15004
|
+
4001: "打开失败,视频流中断",
|
|
15005
|
+
4002: "打开失败,终端挂机或超时未接听",
|
|
15006
|
+
7000: "打开失败,无法连接视频设备",
|
|
15007
|
+
7001: "打开失败,无法连接视频设备",
|
|
15008
|
+
7002: "打开失败,无法连接视频设备"
|
|
15009
|
+
},
|
|
15010
|
+
OTHER_CODE: {
|
|
15011
|
+
453: "videoServer连接失败,错误码453",
|
|
15012
|
+
454: "视频窗口已被占用,请选择其它窗口打开或停止播放",
|
|
15013
|
+
455: "操作失败,该段时间无视频录像",
|
|
15014
|
+
499: "操作异常,错误码499",
|
|
15015
|
+
440: "操作异常,错误码440",
|
|
15016
|
+
441: "操作异常,错误码441",
|
|
15017
|
+
442: "操作异常,错误码442",
|
|
15018
|
+
443: "操作异常,错误码443",
|
|
15019
|
+
444: "操作异常,错误码444",
|
|
15020
|
+
445: "操作异常,错误码445",
|
|
15021
|
+
446: "操作异常,错误码446",
|
|
15022
|
+
447: "操作异常,错误码447",
|
|
15023
|
+
448: "操作异常,错误码448",
|
|
15024
|
+
449: "操作异常,错误码449",
|
|
15025
|
+
450: "操作异常,错误码450",
|
|
15026
|
+
451: "操作异常,错误码451",
|
|
15027
|
+
452: "操作异常,错误码452",
|
|
15028
|
+
456: "设备已处于对讲状态或不支持对讲",
|
|
15029
|
+
6001: "录像失败"
|
|
15030
|
+
},
|
|
15031
|
+
FAILED_CODE: {
|
|
15032
|
+
1001: "账号或密码错误",
|
|
15033
|
+
1002: "该帐号已连接",
|
|
15034
|
+
1004: "没有鉴权",
|
|
15035
|
+
2001: "未携带token或token错误",
|
|
15036
|
+
2002: "视频源id不存在",
|
|
15037
|
+
2003: "操作指令非法(该账号不允许执行这个指令,或者不支持该指令)",
|
|
15038
|
+
3001: "nat通道未建立",
|
|
15039
|
+
3002: "该视频流已在传输",
|
|
15040
|
+
3003: "无法获取远端视频流",
|
|
15041
|
+
4001: "视频流异常断开连接",
|
|
15042
|
+
4002: "获取视频失败",
|
|
15043
|
+
5000: "内部错误",
|
|
15044
|
+
8001: "该设备不支持云台操作",
|
|
15045
|
+
453: "videoServer连接失败",
|
|
15046
|
+
454: "录像回放窗口已占用,请先停止播放",
|
|
15047
|
+
455: "无视频录像,操作失败",
|
|
15048
|
+
5001: "呼叫异常断开",
|
|
15049
|
+
5002: "禁止修改分辨率",
|
|
15050
|
+
401: "禁止修改分辨率",
|
|
15051
|
+
4003: "音频重置",
|
|
15052
|
+
4004: "音频被占用",
|
|
15053
|
+
4005: "客户端已打开对讲",
|
|
15054
|
+
4006: "终端离开云眼音频",
|
|
15055
|
+
4008: "终端拒绝打开视频",
|
|
15056
|
+
6001: "录像失败",
|
|
15057
|
+
499: "内部创建失败",
|
|
15058
|
+
440: "请求消息内容为空",
|
|
15059
|
+
441: "json格式错误",
|
|
15060
|
+
442: "无效的请求",
|
|
15061
|
+
443: "消息内容缺失",
|
|
15062
|
+
444: "消息缺少参数",
|
|
15063
|
+
445: "账户已登陆",
|
|
15064
|
+
446: "收到的videoserver消息有误",
|
|
15065
|
+
447: "消息参数错误",
|
|
15066
|
+
448: "SDP创建失败",
|
|
15067
|
+
449: "未使用",
|
|
15068
|
+
450: "创建端口失败",
|
|
15069
|
+
451: "SDP创建失败",
|
|
15070
|
+
452: "未使用加密的RTP",
|
|
15071
|
+
456: "对讲未打开",
|
|
15072
|
+
7000: "URL账号密码错误(RTSP)",
|
|
15073
|
+
7001: "URL地址不通(RTSP)",
|
|
15074
|
+
7002: "URL格式错误(RTSP)"
|
|
15075
|
+
},
|
|
15076
|
+
STATUS_CODE_ARR: ['5002', '4003', '4004', '4005', '4006']
|
|
14555
15077
|
};
|
|
14556
|
-
|
|
15078
|
+
/**
|
|
15079
|
+
* 显示播放错误内容, 4002特殊处理
|
|
15080
|
+
* @param videoObj 视频对象
|
|
15081
|
+
* @param code 状态码(包含错误码)
|
|
15082
|
+
* @param isShowReplayBtn 是否显示重新播放按钮
|
|
15083
|
+
* @param video 打开错误的视频Id
|
|
15084
|
+
*/
|
|
15085
|
+
|
|
15086
|
+
function showResult(videoObj, code, isShowReplayBtn, video) {
|
|
15087
|
+
let videoDom = videoObj.tagBox.parent();
|
|
15088
|
+
videoDom.addClass("result");
|
|
15089
|
+
videoDom.find('.operate-btn .close-btn').show();
|
|
15090
|
+
|
|
15091
|
+
if (CONST_CODE.FAILED_CODE[code] && code != "4002") {
|
|
15092
|
+
let resultHtml = "<div class='real-result'>错误码" + code + ": " + CONST_CODE.FAILED_CODE[code] + "</div>";
|
|
15093
|
+
videoDom.append(resultHtml);
|
|
15094
|
+
}
|
|
15095
|
+
|
|
15096
|
+
let resultHtml = "<div class='result'><div class='result-tip'>" + CONST_CODE.VIDEO_CODE[code] + "</div>";
|
|
15097
|
+
|
|
15098
|
+
if (isShowReplayBtn && code != "4002") {
|
|
15099
|
+
resultHtml += "<div class='result-replay'><span id='replay-" + videoObj.index + "' class='replay'>点击重试</span></div>";
|
|
15100
|
+
}
|
|
15101
|
+
|
|
15102
|
+
resultHtml += "</div>";
|
|
15103
|
+
videoDom.append(resultHtml);
|
|
15104
|
+
|
|
15105
|
+
if (isShowReplayBtn && code != "4002") {
|
|
15106
|
+
$("#replay-" + videoObj.index).unbind("click").click(function () {
|
|
15107
|
+
videoObj.videoListener.dispatch("openVideo", {
|
|
15108
|
+
index: videoObj.index,
|
|
15109
|
+
video: video,
|
|
15110
|
+
id: videoObj.id,
|
|
15111
|
+
opts: videoObj.opts
|
|
15112
|
+
});
|
|
15113
|
+
});
|
|
15114
|
+
}
|
|
15115
|
+
|
|
15116
|
+
if (code == "4002") {
|
|
15117
|
+
setTimeout(function () {
|
|
15118
|
+
clearResult(videoDom);
|
|
15119
|
+
}, 5000);
|
|
15120
|
+
}
|
|
15121
|
+
}
|
|
15122
|
+
/**
|
|
15123
|
+
* 清除显示内容 videoDom: 视频Dom对象
|
|
15124
|
+
*/
|
|
15125
|
+
|
|
15126
|
+
|
|
15127
|
+
function clearResult(videoDom, videoObj) {
|
|
15128
|
+
videoDom.removeClass("result");
|
|
15129
|
+
videoDom.find(".real-result").remove();
|
|
15130
|
+
videoDom.find(".result").remove();
|
|
15131
|
+
|
|
15132
|
+
if (!videoObj || !videoObj.playing) {
|
|
15133
|
+
// bug id 18654: 增加是否正在播放判断
|
|
15134
|
+
videoDom.find('.operate-btn .close-btn').hide();
|
|
15135
|
+
}
|
|
15136
|
+
} //window.VIDEO_DATA = [];//记录视频各分屏的状态
|
|
15137
|
+
|
|
14557
15138
|
|
|
14558
15139
|
window.windowsSum = 0; //当前页面的视频总数,可能有多个VideoWebRtc对象
|
|
14559
15140
|
//let userToken = null;
|
|
@@ -14561,16 +15142,27 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14561
15142
|
let registered = false;
|
|
14562
15143
|
let recordAvBusinessId = null;
|
|
14563
15144
|
|
|
14564
|
-
function SVideo(opts) {
|
|
15145
|
+
function SVideo(opts, videoListener) {
|
|
14565
15146
|
this.janus = opts.janus;
|
|
14566
15147
|
this.userToken = opts.userToken;
|
|
14567
15148
|
this.sipcall = null;
|
|
14568
15149
|
this.index = opts.index;
|
|
14569
|
-
this.tagBox = opts.isVideoTag ? $('#video-' + (this.index + 1)) : $('#audio-' + (this.index + 1));
|
|
15150
|
+
this.relativeIndex = opts.relativeIndex; // this.tagBox = opts.isVideoTag ? $('#video-' + (this.index + 1)) : $('#audio-' + (this.index + 1));
|
|
15151
|
+
|
|
15152
|
+
this.tagBox = opts.isVideoTag ? $(opts.parentSelector + ' #video-' + (this.index + 1)) : $('#audio-' + (this.index + 1));
|
|
14570
15153
|
this.windowsNum = opts.windowsNum;
|
|
14571
15154
|
this.flag = opts.flag;
|
|
14572
15155
|
this.isVideoTag = opts.isVideoTag;
|
|
14573
15156
|
this.janusPlugin = opts.janusPlugin;
|
|
15157
|
+
this.isClosing = false; // 当前分屏是否正在关闭视频
|
|
15158
|
+
|
|
15159
|
+
this.isWaiting = false; // 当前分屏是否有视频在等待播放
|
|
15160
|
+
|
|
15161
|
+
this.playSucTimeOutIndex = -1; // 超时提示定时器index
|
|
15162
|
+
|
|
15163
|
+
this.videoTipTimeOut = opts.videoTipTimeOut; // 超时无首屏时间
|
|
15164
|
+
|
|
15165
|
+
this.videoListener = videoListener;
|
|
14574
15166
|
this.init();
|
|
14575
15167
|
}
|
|
14576
15168
|
/**
|
|
@@ -14591,8 +15183,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14591
15183
|
console.log("视频插件初始化成功:" + self.index);
|
|
14592
15184
|
self.sipcall = pluginHandle;
|
|
14593
15185
|
|
|
14594
|
-
if (self.
|
|
14595
|
-
videoListener.dispatch('initsucc', self);
|
|
15186
|
+
if (self.relativeIndex + 1 >= self.windowsNum) {
|
|
15187
|
+
self.videoListener.dispatch('initsucc', self);
|
|
14596
15188
|
}
|
|
14597
15189
|
},
|
|
14598
15190
|
error: function (error) {
|
|
@@ -14606,11 +15198,20 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14606
15198
|
promptFailed("请先登陆");
|
|
14607
15199
|
}
|
|
14608
15200
|
|
|
15201
|
+
let video = self.video;
|
|
15202
|
+
|
|
14609
15203
|
if (msg.error_code) {
|
|
14610
|
-
console.error(msg.error_code +
|
|
14611
|
-
|
|
14612
|
-
|
|
14613
|
-
|
|
15204
|
+
console.error("错误码:" + msg.error_code + " " + CONST_CODE.FAILED_CODE[msg.error_code]);
|
|
15205
|
+
|
|
15206
|
+
if (CONST_CODE.VIDEO_CODE[msg.error_code]) {
|
|
15207
|
+
showResult(self, msg.error_code, true, video);
|
|
15208
|
+
} else {
|
|
15209
|
+
promptFailed(CONST_CODE.OTHER_CODE[msg.error_code] || CONST_CODE.FAILED_CODE[msg.error_code] || '错误码:' + msg.error_code);
|
|
15210
|
+
}
|
|
15211
|
+
|
|
15212
|
+
self.videoListener.dispatch('msginfo', {
|
|
15213
|
+
'code': msg.error_code,
|
|
15214
|
+
'msg': CONST_CODE.OTHER_CODE[msg.error_code] || CONST_CODE.FAILED_CODE[msg.error_code] || '错误码:' + msg.error_code
|
|
14614
15215
|
});
|
|
14615
15216
|
return false;
|
|
14616
15217
|
}
|
|
@@ -14620,23 +15221,32 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14620
15221
|
|
|
14621
15222
|
if (result.error_code && result.error_code != 0) {
|
|
14622
15223
|
//videoListener.dispatch('afterclose', self);
|
|
14623
|
-
if (!STATUS_CODE_ARR.includes(result.error_code + '')) {
|
|
15224
|
+
if (!CONST_CODE.STATUS_CODE_ARR.includes(result.error_code + '')) {
|
|
14624
15225
|
//videoListener.dispatch('afterclose', self);
|
|
14625
15226
|
//播放失败 关闭视频
|
|
14626
|
-
let video = self.video;
|
|
14627
15227
|
self.close('err');
|
|
14628
15228
|
|
|
14629
15229
|
if (self.isLockVideo) {
|
|
14630
|
-
|
|
15230
|
+
setTimeout(function () {
|
|
15231
|
+
self.play(video);
|
|
15232
|
+
}, 1500);
|
|
14631
15233
|
} else {
|
|
14632
|
-
|
|
15234
|
+
self.closeType = 'error';
|
|
15235
|
+
self.videoListener.dispatch('afterclose', self);
|
|
14633
15236
|
}
|
|
14634
15237
|
}
|
|
14635
15238
|
|
|
14636
|
-
videoListener.dispatch('msginfo', {
|
|
14637
|
-
'
|
|
15239
|
+
self.videoListener.dispatch('msginfo', {
|
|
15240
|
+
'code': result.error_code,
|
|
15241
|
+
'msg': CONST_CODE.OTHER_CODE[result.error_code] || CONST_CODE.FAILED_CODE[result.error_code] || '错误码:' + result.error_code
|
|
14638
15242
|
});
|
|
14639
|
-
|
|
15243
|
+
|
|
15244
|
+
if (CONST_CODE.VIDEO_CODE[result.error_code]) {
|
|
15245
|
+
showResult(self, result.error_code, true, video);
|
|
15246
|
+
} else {
|
|
15247
|
+
promptFailed(CONST_CODE.OTHER_CODE[result.error_code] || CONST_CODE.FAILED_CODE[result.error_code] || '错误码:' + result.error_code);
|
|
15248
|
+
}
|
|
15249
|
+
|
|
14640
15250
|
self.tagBox.parent().find('.recv-audio-btn').attr("class", "unrecv-audio-btn");
|
|
14641
15251
|
self.tagBox.parent().find('.send-audio-btn').attr("class", "unsend-audio-btn");
|
|
14642
15252
|
} //事件响应
|
|
@@ -14669,17 +15279,19 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14669
15279
|
});
|
|
14670
15280
|
},
|
|
14671
15281
|
error: function (error) {
|
|
14672
|
-
console.error(error);
|
|
14673
|
-
|
|
14674
|
-
"request": "decline",
|
|
14675
|
-
"code": 480
|
|
14676
|
-
};
|
|
14677
|
-
self.sipcall.send({
|
|
14678
|
-
"message": body
|
|
14679
|
-
});
|
|
15282
|
+
console.error(error); // let body = { "request": "decline", "code": 480 };
|
|
15283
|
+
// self.sipcall.send({"message": body});
|
|
14680
15284
|
}
|
|
14681
15285
|
});
|
|
14682
15286
|
break;
|
|
15287
|
+
|
|
15288
|
+
case 'accepted':
|
|
15289
|
+
self.playSucTimeOutIndex = setTimeout(function () {
|
|
15290
|
+
let _li = self.tagBox.parent();
|
|
15291
|
+
|
|
15292
|
+
_li.append('<div class="video-tip">网络环境较差,可能无法正常加载视频</div>');
|
|
15293
|
+
}, self.videoTipTimeOut * 1000);
|
|
15294
|
+
break;
|
|
14683
15295
|
//呼叫失败
|
|
14684
15296
|
|
|
14685
15297
|
case 'callfaild':
|
|
@@ -14698,7 +15310,16 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14698
15310
|
case 'start_av_record':
|
|
14699
15311
|
if (result && result.filename) {
|
|
14700
15312
|
self.videoFileName = result.filename;
|
|
14701
|
-
videoListener.dispatch('
|
|
15313
|
+
self.videoListener.dispatch('startRecordVideo', self);
|
|
15314
|
+
console.log('录像地址:' + result.filename);
|
|
15315
|
+
}
|
|
15316
|
+
|
|
15317
|
+
break;
|
|
15318
|
+
|
|
15319
|
+
case 'stop_av_record':
|
|
15320
|
+
if (result && result.filename) {
|
|
15321
|
+
self.videoFileName = result.filename;
|
|
15322
|
+
self.videoListener.dispatch('stopRecordVideo', self);
|
|
14702
15323
|
console.log('录像地址:' + result.filename);
|
|
14703
15324
|
}
|
|
14704
15325
|
|
|
@@ -14708,10 +15329,17 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14708
15329
|
case 'ser_notify_resolution':
|
|
14709
15330
|
if (result && result.resolution) {
|
|
14710
15331
|
self.resolution = result.resolution;
|
|
14711
|
-
videoListener.dispatch('notifyresolution', self);
|
|
15332
|
+
self.videoListener.dispatch('notifyresolution', self);
|
|
14712
15333
|
console.log('接收notifyresolution:' + result.resolution); //promptAlarm('当前分辨率:' + result.resolution);
|
|
14713
15334
|
}
|
|
14714
15335
|
|
|
15336
|
+
break;
|
|
15337
|
+
|
|
15338
|
+
case 'change_resolution':
|
|
15339
|
+
if (result) {
|
|
15340
|
+
self.videoListener.dispatch('notifyResolutionChange', self);
|
|
15341
|
+
}
|
|
15342
|
+
|
|
14715
15343
|
break;
|
|
14716
15344
|
//建立预呼叫响应
|
|
14717
15345
|
|
|
@@ -14748,9 +15376,38 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14748
15376
|
break;
|
|
14749
15377
|
|
|
14750
15378
|
case 'ser_stop_audio':
|
|
15379
|
+
self.tagBox.parent().find('.recv-audio-btn').attr("class", "unrecv-audio-btn");
|
|
14751
15380
|
console.log('音频异常关闭!');
|
|
14752
15381
|
break;
|
|
14753
15382
|
|
|
15383
|
+
case 'close_down_audio':
|
|
15384
|
+
self.tagBox.parent().find('.send-audio-btn').attr("class", "unsend-audio-btn");
|
|
15385
|
+
promptSuccess("通话时间到");
|
|
15386
|
+
console.log('通话时间到!');
|
|
15387
|
+
break;
|
|
15388
|
+
|
|
15389
|
+
case 'ser_notify_dispatch_close_ptop_poc':
|
|
15390
|
+
self.tagBox.parent().find('.send-audio-btn').attr("class", "unsend-audio-btn");
|
|
15391
|
+
console.log('调度通知点对点对讲关闭!');
|
|
15392
|
+
break;
|
|
15393
|
+
|
|
15394
|
+
case 'ser_close_ptop_poc':
|
|
15395
|
+
self.tagBox.parent().find('.send-audio-btn').attr("class", "unsend-audio-btn");
|
|
15396
|
+
console.log('点对点对讲关闭!');
|
|
15397
|
+
break;
|
|
15398
|
+
|
|
15399
|
+
case 'ser_open_ptop_poc':
|
|
15400
|
+
self.tagBox.parent().find('.unsend-audio-btn').attr("class", "send-audio-btn");
|
|
15401
|
+
console.log('点对点对讲打开!');
|
|
15402
|
+
break;
|
|
15403
|
+
// 视频关闭通知
|
|
15404
|
+
|
|
15405
|
+
case 'ser_close_video':
|
|
15406
|
+
console.log('视频框 ' + self.index + ' 视频已关闭');
|
|
15407
|
+
self.isClosing = false;
|
|
15408
|
+
self.videoListener.dispatch('notifyCloseVideo', self);
|
|
15409
|
+
break;
|
|
15410
|
+
|
|
14754
15411
|
default:
|
|
14755
15412
|
console.log('event:' + event);
|
|
14756
15413
|
break;
|
|
@@ -14798,7 +15455,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14798
15455
|
|
|
14799
15456
|
self.tagBox.bind("canplay play playing", function () {
|
|
14800
15457
|
if (self.video) {
|
|
14801
|
-
if (self.tagBox.is(':visible')) return;
|
|
15458
|
+
if (self.tagBox.is(':visible')) return; // 清除播放监测定时任务,清除内容
|
|
15459
|
+
|
|
15460
|
+
self.playSucTimeOutIndex > 0 && clearTimeout(self.playSucTimeOutIndex);
|
|
15461
|
+
self.tagBox.parent().find(".video-tip").remove();
|
|
14802
15462
|
console.log('分屏=' + (self.index + 1) + ', ' + self.video + ' 播放成功');
|
|
14803
15463
|
promptSuccess('分屏' + (self.index + 1) + ' 播放成功');
|
|
14804
15464
|
self.tagBox.show(); //self.tagBox.parent().removeClass("loading").find(".stream-loading").remove();
|
|
@@ -14847,13 +15507,21 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14847
15507
|
"message": body
|
|
14848
15508
|
});
|
|
14849
15509
|
this.video = video;
|
|
15510
|
+
this.isClosing = false;
|
|
14850
15511
|
this.playing = true;
|
|
14851
15512
|
this.packetsLostRate = '0.00%';
|
|
14852
15513
|
this.packetsLostSum = 0;
|
|
14853
|
-
this.packetsReceivedSum = 0;
|
|
15514
|
+
this.packetsReceivedSum = 0;
|
|
15515
|
+
let numIndex = this.index + 1;
|
|
15516
|
+
let framesDecodedDom = document.getElementById("frame-decoded-" + numIndex);
|
|
15517
|
+
framesDecodedDom.style.display = 'none';
|
|
15518
|
+
this.framesDecodedLast = undefined;
|
|
15519
|
+
this.framesDecodedCount = 0; //loading
|
|
14854
15520
|
|
|
14855
15521
|
let _li = this.tagBox.parent();
|
|
14856
15522
|
|
|
15523
|
+
clearResult(_li, this);
|
|
15524
|
+
|
|
14857
15525
|
if (!_li.hasClass("loading")) {
|
|
14858
15526
|
_li.addClass("loading").append('<div class="stream-loading">等待数据流传送...</div>');
|
|
14859
15527
|
}
|
|
@@ -14866,8 +15534,10 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14866
15534
|
if (!type) {
|
|
14867
15535
|
this.isLockVideo = false;
|
|
14868
15536
|
this.tagBox.parent().find('.lock-video-btn').attr("class", "unlock-video-btn");
|
|
14869
|
-
}
|
|
15537
|
+
} //清除结果提示内容
|
|
15538
|
+
|
|
14870
15539
|
|
|
15540
|
+
clearResult(this.tagBox.parent(), this); //let reqType = type ? type : "hangup";
|
|
14871
15541
|
|
|
14872
15542
|
if (!this.playing) return;
|
|
14873
15543
|
let _hangup = {
|
|
@@ -14881,6 +15551,7 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14881
15551
|
});
|
|
14882
15552
|
this.sipcall.hangup();
|
|
14883
15553
|
this.tagBox.hide();
|
|
15554
|
+
this.isClosing = true;
|
|
14884
15555
|
this.playing = false;
|
|
14885
15556
|
this.video = null;
|
|
14886
15557
|
this.packetsLostRate = '0.00%';
|
|
@@ -14895,7 +15566,15 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
14895
15566
|
|
|
14896
15567
|
this.tagBox.parent().removeClass("loading").find(".stream-loading").remove(); //清除object-fit
|
|
14897
15568
|
|
|
14898
|
-
this.tagBox.css('object-fit', '');
|
|
15569
|
+
this.tagBox.css('object-fit', ''); // 清除内容提示
|
|
15570
|
+
|
|
15571
|
+
this.playSucTimeOutIndex > 0 && clearTimeout(this.playSucTimeOutIndex);
|
|
15572
|
+
this.tagBox.parent().find(".video-tip").remove();
|
|
15573
|
+
var numIndex = Number(this.index) + 1;
|
|
15574
|
+
var framesDecodedDom = document.getElementById("frame-decoded-" + numIndex);
|
|
15575
|
+
framesDecodedDom.style.display = 'none';
|
|
15576
|
+
this.framesDecodedLast = undefined;
|
|
15577
|
+
this.framesDecodedCount = 0;
|
|
14899
15578
|
},
|
|
14900
15579
|
|
|
14901
15580
|
/**
|
|
@@ -15000,6 +15679,8 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
15000
15679
|
|
|
15001
15680
|
let _li = this.tagBox.parent();
|
|
15002
15681
|
|
|
15682
|
+
clearResult(_li, this);
|
|
15683
|
+
|
|
15003
15684
|
if (!_li.hasClass("loading")) {
|
|
15004
15685
|
_li.addClass("loading").append('<div class="stream-loading">等待数据流传送...</div>');
|
|
15005
15686
|
}
|
|
@@ -15144,6 +15825,26 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
15144
15825
|
"message": body
|
|
15145
15826
|
});
|
|
15146
15827
|
console.log("预呼叫操作=" + requestType + ", 对讲号码=" + pocNo + ",调度中心号码=" + centerTel);
|
|
15828
|
+
},
|
|
15829
|
+
|
|
15830
|
+
/**
|
|
15831
|
+
* 点对点对讲
|
|
15832
|
+
* requstType: open_ptop_poc(开启) close_poc_poc(关闭)
|
|
15833
|
+
* pocno
|
|
15834
|
+
*/
|
|
15835
|
+
ptopPoc: function (requestType, pocNo) {
|
|
15836
|
+
let self = this;
|
|
15837
|
+
let body = {
|
|
15838
|
+
request: requestType,
|
|
15839
|
+
pocno: pocNo,
|
|
15840
|
+
playseq: self.index,
|
|
15841
|
+
pocmember: self.video,
|
|
15842
|
+
userToken: self.userToken
|
|
15843
|
+
};
|
|
15844
|
+
self.sipcall.send({
|
|
15845
|
+
"message": body
|
|
15846
|
+
});
|
|
15847
|
+
console.log("点对点对讲操作=" + requestType + ", 主叫号码=" + pocNo + ",被叫号码=" + self.video);
|
|
15147
15848
|
}
|
|
15148
15849
|
};
|
|
15149
15850
|
return isIE() ? VideoOcx : VideoWebRtc;
|
|
@@ -28894,6 +29595,27 @@ let meet = {
|
|
|
28894
29595
|
data: {}
|
|
28895
29596
|
}
|
|
28896
29597
|
},
|
|
29598
|
+
|
|
29599
|
+
/**
|
|
29600
|
+
* 设置主持人
|
|
29601
|
+
*/
|
|
29602
|
+
setMeetChairmanNet: {
|
|
29603
|
+
url: '/dispatch-web/api/meet/setMeetChairman',
|
|
29604
|
+
method: 'POST',
|
|
29605
|
+
requestParam: {
|
|
29606
|
+
token: '',
|
|
29607
|
+
meetId: '',
|
|
29608
|
+
tel: ''
|
|
29609
|
+
},
|
|
29610
|
+
responseParam: {
|
|
29611
|
+
code: '',
|
|
29612
|
+
//返回结果状态码
|
|
29613
|
+
message: '',
|
|
29614
|
+
systemTime: '',
|
|
29615
|
+
//yyyy-MM-dd HH:mm:ss
|
|
29616
|
+
data: {}
|
|
29617
|
+
}
|
|
29618
|
+
},
|
|
28897
29619
|
joinVideoMemberNet: {
|
|
28898
29620
|
//成员加入会场(视频)
|
|
28899
29621
|
|
|
@@ -31496,6 +32218,20 @@ const meetOp = sip => {
|
|
|
31496
32218
|
}, '', net.method);
|
|
31497
32219
|
});
|
|
31498
32220
|
},
|
|
32221
|
+
setChairman: function (param) {
|
|
32222
|
+
let net = meet_url.setMeetChairmanNet;
|
|
32223
|
+
return new Promise((resolve, reject) => {
|
|
32224
|
+
loadJson(server_ + net.url, { ...param
|
|
32225
|
+
}, function (ret) {
|
|
32226
|
+
if (ret.code == 0) {
|
|
32227
|
+
resolve(ret);
|
|
32228
|
+
} else {
|
|
32229
|
+
console.log("设置会场主持人失败", ret.code);
|
|
32230
|
+
reject(ret.code);
|
|
32231
|
+
}
|
|
32232
|
+
}, '', net.method);
|
|
32233
|
+
});
|
|
32234
|
+
},
|
|
31499
32235
|
end: function (param) {
|
|
31500
32236
|
let net = meet_url.endMeetNet;
|
|
31501
32237
|
return new Promise((resolve, reject) => {
|