var layer;
|
var splitWin = 1; //分屏数,默认1分屏
|
var windowsNum = null; //播放窗口下标,手动选择模式下使用
|
var timer;
|
var table;
|
var curCamera = null;
|
var playCamera = null;
|
var playList = {};
|
|
var playUrl1 = null;
|
var videoId1 = null;
|
let webrtc1;
|
let mediaStream1;
|
var playUrl2 = null;
|
var videoId2 = null;
|
let webrtc2;
|
let mediaStream2;
|
var playUrl3 = null;
|
var videoId3 = null;
|
let webrtc3;
|
let mediaStream3;
|
var playUrl4 = null;
|
var videoId4 = null;
|
let webrtc4;
|
let mediaStream4;
|
var playUrl5 = null;
|
var videoId5 = null;
|
let webrtc5;
|
let mediaStream5;
|
var playUrl6 = null;
|
var videoId6 = null;
|
let webrtc6;
|
let mediaStream6;
|
var playUrl7 = null;
|
var videoId7 = null;
|
let webrtc7;
|
let mediaStream7;
|
var playUrl8 = null;
|
var videoId8 = null;
|
let webrtc8;
|
let mediaStream8;
|
var playUrl9 = null;
|
var videoId9 = null;
|
let webrtc9;
|
let mediaStream9;
|
|
$(function () {
|
layui.use(['layer', 'table'], function () {
|
layer = layui.layer;
|
table = layui.table;
|
});
|
|
//初始化渲染播放列表
|
renderList();
|
});
|
|
/**
|
* 渲染监控列表
|
*/
|
function renderList() {
|
if (!listCamera || listCamera.length == 0) {
|
return;
|
}
|
var eleTable = document.getElementById("cameraList");
|
var _tr;
|
var _td;
|
|
$.each(listCamera, function (index, item) {
|
|
_tr = document.createElement("tr");
|
_tr.ondblclick = function () {
|
getMedia(index);
|
};
|
|
_td = document.createElement("td");
|
_td.innerText = item.name;
|
_tr.appendChild(_td);
|
|
_td = document.createElement("td");
|
_td.innerText = item.type == "01" ? "枪机" : "球机";
|
_tr.appendChild(_td);
|
|
_td = document.createElement("td");
|
_td.innerText = item.status == "OFF" ? "离线" : "在线";
|
_tr.appendChild(_td);
|
|
eleTable.appendChild(_tr);
|
})
|
}
|
|
/**
|
* 点击获取播放信息
|
* @param index
|
*/
|
function getMedia(index) {
|
if(windowsNum == null){
|
windowsNum = 1;
|
}
|
playCamera = null;
|
var camera = listCamera[index];
|
playList[windowsNum] = camera;
|
|
var data = {
|
id: camera.id,
|
playType: camera.playType
|
};
|
$.ajax({
|
type: 'POST',
|
url: "/security/get-media",
|
dataType: 'JSON',
|
contentType: "application/json;charset=UTF-8",
|
data: JSON.stringify(data),
|
success: function (result) {
|
if (result.code != "SUCCESS") {
|
layer.msg(result.msg);
|
} else {
|
playCamera = result;
|
startPlay();
|
}
|
},
|
error: function (result) {
|
layer.msg(result.msg);
|
startPlay();
|
}
|
});
|
};
|
|
/**
|
* 播放窗口选中
|
* @param win1 分屏数
|
* @param win2 选中窗口数
|
*/
|
function selectWin(win1, win2) {
|
if (windowsNum) {
|
removeSelectCss();
|
}
|
splitWin = win1;
|
windowsNum = win2;
|
addSelectCss();
|
|
curCamera = playList[windowsNum];
|
}
|
|
/**
|
* 去除选中CSS
|
*/
|
function removeSelectCss() {
|
const target = document.getElementById("f" + splitWin + "_d" + windowsNum);
|
target.classList.remove('active');
|
}
|
|
/**
|
* 增加选中CSS
|
*/
|
function addSelectCss() {
|
const target = document.getElementById("f" + splitWin + "_d" + windowsNum);
|
target.classList.add('active');
|
}
|
|
/**
|
* 分屏切换
|
* @param tagNum 分屏数
|
*/
|
function fenping(tagNum) {
|
if (windowsNum) {
|
removeSelectCss();
|
}
|
playList = {};
|
|
//重置切换前的分屏窗口
|
reloadView(splitWin);
|
|
//赋值当前分屏数
|
splitWin = tagNum;
|
|
//重置切换后的分屏窗口
|
reloadView(splitWin);
|
|
//切换分屏图标及页面
|
if (tagNum === 1) {
|
$("#f_1").attr("src", "/img/web/group/fp_1_active.png");
|
$("#f_4").attr("src", "/img/web/group/fp_4.png");
|
$("#f_9").attr("src", "/img/web/group/fp_9.png");
|
$("#video_1").css('display', 'grid');
|
$("#video_4").css('display', 'none');
|
$("#video_9").css('display', 'none');
|
}
|
if (tagNum === 4) {
|
$("#f_1").attr("src", "/img/web/group/fp_1.png");
|
$("#f_4").attr("src", "/img/web/group/fp_4_active.png");
|
$("#f_9").attr("src", "/img/web/group/fp_9.png");
|
$("#video_1").css('display', 'none');
|
$("#video_4").css('display', 'grid');
|
$("#video_9").css('display', 'none');
|
}
|
if (tagNum === 9) {
|
$("#f_1").attr("src", "/img/web/group/fp_1.png");
|
$("#f_4").attr("src", "/img/web/group/fp_4.png");
|
$("#f_9").attr("src", "/img/web/group/fp_9_active.png");
|
$("#video_1").css('display', 'none');
|
$("#video_4").css('display', 'none');
|
$("#video_9").css('display', 'grid');
|
}
|
windowsNum = null;
|
}
|
|
/**
|
* 重置分屏前的窗口
|
* @param num
|
*/
|
function reloadView(num) {
|
var html;
|
for (var i = 1; i <= num; i++) {
|
html = '';
|
html += '<video className="video" id="video' + num + '_' + i + ' autoPlay="" muted="" playsInline=""></video>';
|
$("#f" + num + "_d" + i).html(html);
|
}
|
}
|
|
|
|
function startPlay() {
|
|
if(windowsNum > splitWin){
|
windowsNum = 1;
|
}
|
if (!playCamera) {
|
$("#f" + splitWin + "_d" + windowsNum).html("未获取到摄像头播放信息!!");
|
}
|
|
if (playCamera.playUrl) {
|
if (windowsNum === 1) {
|
playUrl1 = null;
|
mediaStream1 = null;
|
playUrl1 = playCamera.playUrl;
|
videoId1 = playCamera.cameraId;
|
webRtcToPlay1();
|
}else if (windowsNum === 2) {
|
playUrl2 = null;
|
mediaStream2 = null;
|
playUrl2 = playCamera.playUrl;
|
videoId2 = playCamera.cameraId;
|
webRtcToPlay2();
|
}else if (windowsNum === 3) {
|
playUrl3 = null;
|
mediaStream3 = null;
|
playUrl3 = playCamera.playUrl;
|
videoId3 = playCamera.cameraId;
|
webRtcToPlay3();
|
}else if (windowsNum === 4) {
|
playUrl4 = null;
|
mediaStream4 = null;
|
playUrl4 = playCamera.playUrl;
|
videoId4 = playCamera.cameraId;
|
webRtcToPlay4();
|
}else if (windowsNum === 5) {
|
playUrl5 = null;
|
mediaStream5 = null;
|
playUrl5 = playCamera.playUrl;
|
videoId5 = playCamera.cameraId;
|
webRtcToPlay5();
|
}else if (windowsNum === 6) {
|
playUrl6 = null;
|
mediaStream6 = null;
|
playUrl6 = playCamera.playUrl;
|
videoId6 = playCamera.cameraId;
|
webRtcToPlay6();
|
}else if (windowsNum === 7) {
|
playUrl7 = null;
|
mediaStream7 = null;
|
playUrl7 = playCamera.playUrl;
|
videoId7 = playCamera.cameraId;
|
webRtcToPlay7();
|
}else if (windowsNum === 8) {
|
playUrl8 = null;
|
mediaStream8 = null;
|
playUrl8 = playCamera.playUrl;
|
videoId8 = playCamera.cameraId;
|
webRtcToPlay8();
|
}else if (windowsNum === 9) {
|
playUr9 = null;
|
mediaStream9 = null;
|
playUrl9 = playCamera.playUrl;
|
videoId9 = playCamera.cameraId;
|
webRtcToPlay9();
|
}
|
|
curCamera = playList[windowsNum];
|
} else {
|
$("#f" + splitWin + "_d" + windowsNum).html("未获取到摄像头(" + playCamera.cameraName + ")播放信息!!");
|
}
|
}
|
|
/*============= webRtc视频播放1 ----- 开始 ===============*/
|
/**
|
* 开始播放
|
* @param winTag 播放窗口
|
* @returns {Promise<void>}
|
*/
|
async function webRtcToPlay1() {
|
if (playUrl1) {
|
mediaStream1 = new MediaStream();
|
$("#video" + splitWin + "_" + windowsNum)[0].srcObject = mediaStream1;
|
webrtc1 = new RTCPeerConnection({
|
iceServers: [{
|
urls: ["stun:stun.l.google.com:19302"]
|
}],
|
sdpSemantics: "unified-plan"
|
});
|
webrtc1.onsignalingstatechange = signalingstatechange1;
|
|
webrtc1.ontrack = ontrack1
|
let offer = await webrtc1.createOffer({
|
|
offerToReceiveAudio: true,
|
offerToReceiveVideo: true
|
});
|
await webrtc1.setLocalDescription(offer);
|
}
|
}
|
|
function ontrack1(event) {
|
mediaStream1.addTrack(event.track);
|
}
|
|
async function signalingstatechange1() {
|
switch (webrtc1.signalingState) {
|
case 'have-local-offer':
|
// let uuid = $('#uuid').val();
|
let url = playUrl1 + "?uuid=" + videoId1 + "&channel=0";
|
$.post(url, {
|
data: btoa(webrtc1.localDescription.sdp)
|
}, function (data) {
|
try {
|
console.log(data);
|
webrtc1.setRemoteDescription(new RTCSessionDescription({
|
type: 'answer',
|
sdp: atob(data)
|
}))
|
} catch (e) {
|
console.warn(e);
|
}
|
|
});
|
break;
|
case 'stable':
|
break;
|
case 'closed':
|
break;
|
default:
|
console.log(`unhandled signalingState is ${webrtc1.signalingState}`);
|
break;
|
}
|
}
|
|
/*============= 视频播放 ----- 结束 ===============*/
|
|
/*============= webRtc视频播放2 ----- 开始 ===============*/
|
/**
|
* 开始播放
|
* @param winTag 播放窗口
|
* @returns {Promise<void>}
|
*/
|
async function webRtcToPlay2() {
|
if (playUrl2) {
|
mediaStream2 = new MediaStream();
|
$("#video" + splitWin + "_" + windowsNum)[0].srcObject = mediaStream2;
|
webrtc2 = new RTCPeerConnection({
|
iceServers: [{
|
urls: ["stun:stun.l.google.com:19302"]
|
}],
|
sdpSemantics: "unified-plan"
|
});
|
webrtc2.onsignalingstatechange = signalingstatechange2;
|
|
webrtc2.ontrack = ontrack2
|
let offer = await webrtc2.createOffer({
|
|
offerToReceiveAudio: true,
|
offerToReceiveVideo: true
|
});
|
await webrtc2.setLocalDescription(offer);
|
}
|
}
|
|
function ontrack2(event) {
|
mediaStream2.addTrack(event.track);
|
}
|
|
async function signalingstatechange2() {
|
switch (webrtc2.signalingState) {
|
case 'have-local-offer':
|
// let uuid = $('#uuid').val();
|
let url = playUrl2 + "?uuid=" + videoId2 + "&channel=0";
|
$.post(url, {
|
data: btoa(webrtc2.localDescription.sdp)
|
}, function (data) {
|
try {
|
console.log(data);
|
webrtc2.setRemoteDescription(new RTCSessionDescription({
|
type: 'answer',
|
sdp: atob(data)
|
}))
|
} catch (e) {
|
console.warn(e);
|
}
|
|
});
|
break;
|
case 'stable':
|
break;
|
case 'closed':
|
break;
|
default:
|
console.log(`unhandled signalingState is ${webrtc2.signalingState}`);
|
break;
|
}
|
}
|
|
/*============= 视频播放 ----- 结束 ===============*/
|
|
/*============= webRtc视频播放3 ----- 开始 ===============*/
|
/**
|
* 开始播放
|
* @param winTag 播放窗口
|
* @returns {Promise<void>}
|
*/
|
async function webRtcToPlay3() {
|
if (playUrl3) {
|
mediaStream3 = new MediaStream();
|
$("#video" + splitWin + "_" + windowsNum)[0].srcObject = mediaStream3;
|
webrtc3 = new RTCPeerConnection({
|
iceServers: [{
|
urls: ["stun:stun.l.google.com:19302"]
|
}],
|
sdpSemantics: "unified-plan"
|
});
|
webrtc3.onsignalingstatechange = signalingstatechange3;
|
|
webrtc3.ontrack = ontrack3
|
let offer = await webrtc3.createOffer({
|
|
offerToReceiveAudio: true,
|
offerToReceiveVideo: true
|
});
|
await webrtc3.setLocalDescription(offer);
|
}
|
}
|
|
function ontrack3(event) {
|
mediaStream3.addTrack(event.track);
|
}
|
|
async function signalingstatechange3() {
|
switch (webrtc3.signalingState) {
|
case 'have-local-offer':
|
// let uuid = $('#uuid').val();
|
let url = playUrl3 + "?uuid=" + videoId3 + "&channel=0";
|
$.post(url, {
|
data: btoa(webrtc3.localDescription.sdp)
|
}, function (data) {
|
try {
|
console.log(data);
|
webrtc3.setRemoteDescription(new RTCSessionDescription({
|
type: 'answer',
|
sdp: atob(data)
|
}))
|
} catch (e) {
|
console.warn(e);
|
}
|
|
});
|
break;
|
case 'stable':
|
break;
|
case 'closed':
|
break;
|
default:
|
console.log(`unhandled signalingState is ${webrtc3.signalingState}`);
|
break;
|
}
|
}
|
|
/*============= 视频播放 ----- 结束 ===============*/
|
|
/*============= webRtc视频播放4 ----- 开始 ===============*/
|
/**
|
* 开始播放
|
* @param winTag 播放窗口
|
* @returns {Promise<void>}
|
*/
|
async function webRtcToPlay4() {
|
if (playUrl4) {
|
mediaStream4 = new MediaStream();
|
$("#video" + splitWin + "_" + windowsNum)[0].srcObject = mediaStream4;
|
webrtc4 = new RTCPeerConnection({
|
iceServers: [{
|
urls: ["stun:stun.l.google.com:19302"]
|
}],
|
sdpSemantics: "unified-plan"
|
});
|
webrtc4.onsignalingstatechange = signalingstatechange4;
|
|
webrtc4.ontrack = ontrack4
|
let offer = await webrtc4.createOffer({
|
|
offerToReceiveAudio: true,
|
offerToReceiveVideo: true
|
});
|
await webrtc4.setLocalDescription(offer);
|
}
|
}
|
|
function ontrack4(event) {
|
mediaStream4.addTrack(event.track);
|
}
|
|
async function signalingstatechange4() {
|
switch (webrtc4.signalingState) {
|
case 'have-local-offer':
|
// let uuid = $('#uuid').val();
|
let url = playUrl4 + "?uuid=" + videoId4 + "&channel=0";
|
$.post(url, {
|
data: btoa(webrtc4.localDescription.sdp)
|
}, function (data) {
|
try {
|
console.log(data);
|
webrtc4.setRemoteDescription(new RTCSessionDescription({
|
type: 'answer',
|
sdp: atob(data)
|
}))
|
} catch (e) {
|
console.warn(e);
|
}
|
|
});
|
break;
|
case 'stable':
|
break;
|
case 'closed':
|
break;
|
default:
|
console.log(`unhandled signalingState is ${webrtc4.signalingState}`);
|
break;
|
}
|
}
|
|
/*============= 视频播放 ----- 结束 ===============*/
|
/*============= webRtc视频播放5 ----- 开始 ===============*/
|
/**
|
* 开始播放
|
* @param winTag 播放窗口
|
* @returns {Promise<void>}
|
*/
|
async function webRtcToPlay5() {
|
if (playUrl5) {
|
mediaStream5 = new MediaStream();
|
$("#video" + splitWin + "_" + windowsNum)[0].srcObject = mediaStream5;
|
webrtc5 = new RTCPeerConnection({
|
iceServers: [{
|
urls: ["stun:stun.l.google.com:19302"]
|
}],
|
sdpSemantics: "unified-plan"
|
});
|
webrtc5.onsignalingstatechange = signalingstatechange5;
|
|
webrtc5.ontrack = ontrack5
|
let offer = await webrtc4.createOffer({
|
|
offerToReceiveAudio: true,
|
offerToReceiveVideo: true
|
});
|
await webrtc5.setLocalDescription(offer);
|
}
|
}
|
|
function ontrack5(event) {
|
mediaStream5.addTrack(event.track);
|
}
|
|
async function signalingstatechange5() {
|
switch (webrtc5.signalingState) {
|
case 'have-local-offer':
|
// let uuid = $('#uuid').val();
|
let url = playUrl5 + "?uuid=" + videoId5 + "&channel=0";
|
$.post(url, {
|
data: btoa(webrtc5.localDescription.sdp)
|
}, function (data) {
|
try {
|
console.log(data);
|
webrtc5.setRemoteDescription(new RTCSessionDescription({
|
type: 'answer',
|
sdp: atob(data)
|
}))
|
} catch (e) {
|
console.warn(e);
|
}
|
|
});
|
break;
|
case 'stable':
|
break;
|
case 'closed':
|
break;
|
default:
|
console.log(`unhandled signalingState is ${webrtc5.signalingState}`);
|
break;
|
}
|
}
|
|
/*============= 视频播放 ----- 结束 ===============*/
|
/*============= webRtc视频播放4 ----- 开始 ===============*/
|
/**
|
* 开始播放
|
* @param winTag 播放窗口
|
* @returns {Promise<void>}
|
*/
|
async function webRtcToPlay6() {
|
if (playUrl6) {
|
mediaStream6 = new MediaStream();
|
$("#video" + splitWin + "_" + windowsNum)[0].srcObject = mediaStream6;
|
webrtc6 = new RTCPeerConnection({
|
iceServers: [{
|
urls: ["stun:stun.l.google.com:19302"]
|
}],
|
sdpSemantics: "unified-plan"
|
});
|
webrtc6.onsignalingstatechange = signalingstatechange6;
|
|
webrtc6.ontrack = ontrack6
|
let offer = await webrtc4.createOffer({
|
|
offerToReceiveAudio: true,
|
offerToReceiveVideo: true
|
});
|
await webrtc6.setLocalDescription(offer);
|
}
|
}
|
|
function ontrack6(event) {
|
mediaStream6.addTrack(event.track);
|
}
|
|
async function signalingstatechange6() {
|
switch (webrtc6.signalingState) {
|
case 'have-local-offer':
|
// let uuid = $('#uuid').val();
|
let url = playUrl6 + "?uuid=" + videoId6 + "&channel=0";
|
$.post(url, {
|
data: btoa(webrtc6.localDescription.sdp)
|
}, function (data) {
|
try {
|
console.log(data);
|
webrtc6.setRemoteDescription(new RTCSessionDescription({
|
type: 'answer',
|
sdp: atob(data)
|
}))
|
} catch (e) {
|
console.warn(e);
|
}
|
|
});
|
break;
|
case 'stable':
|
break;
|
case 'closed':
|
break;
|
default:
|
console.log(`unhandled signalingState is ${webrtc6.signalingState}`);
|
break;
|
}
|
}
|
|
/*============= 视频播放 ----- 结束 ===============*/
|
|
/*============= webRtc视频播放7 ----- 开始 ===============*/
|
/**
|
* 开始播放
|
* @param winTag 播放窗口
|
* @returns {Promise<void>}
|
*/
|
async function webRtcToPlay7() {
|
if (playUrl7) {
|
mediaStream7 = new MediaStream();
|
$("#video" + splitWin + "_" + windowsNum)[0].srcObject = mediaStream7;
|
webrtc7 = new RTCPeerConnection({
|
iceServers: [{
|
urls: ["stun:stun.l.google.com:19302"]
|
}],
|
sdpSemantics: "unified-plan"
|
});
|
webrtc7.onsignalingstatechange = signalingstatechange7;
|
|
webrtc7.ontrack = ontrack7
|
let offer = await webrtc7.createOffer({
|
|
offerToReceiveAudio: true,
|
offerToReceiveVideo: true
|
});
|
await webrtc7.setLocalDescription(offer);
|
}
|
}
|
|
function ontrack7(event) {
|
mediaStream7.addTrack(event.track);
|
}
|
|
async function signalingstatechange7() {
|
switch (webrtc7.signalingState) {
|
case 'have-local-offer':
|
// let uuid = $('#uuid').val();
|
let url = playUrl7 + "?uuid=" + videoId7 + "&channel=0";
|
$.post(url, {
|
data: btoa(webrtc7.localDescription.sdp)
|
}, function (data) {
|
try {
|
console.log(data);
|
webrtc7.setRemoteDescription(new RTCSessionDescription({
|
type: 'answer',
|
sdp: atob(data)
|
}))
|
} catch (e) {
|
console.warn(e);
|
}
|
|
});
|
break;
|
case 'stable':
|
break;
|
case 'closed':
|
break;
|
default:
|
console.log(`unhandled signalingState is ${webrtc7.signalingState}`);
|
break;
|
}
|
}
|
|
/*============= 视频播放 ----- 结束 ===============*/
|
|
/*============= webRtc视频播放8 ----- 开始 ===============*/
|
/**
|
* 开始播放
|
* @param winTag 播放窗口
|
* @returns {Promise<void>}
|
*/
|
async function webRtcToPlay8() {
|
if (playUrl8) {
|
mediaStream8 = new MediaStream();
|
$("#video" + splitWin + "_" + windowsNum)[0].srcObject = mediaStream8;
|
webrtc8 = new RTCPeerConnection({
|
iceServers: [{
|
urls: ["stun:stun.l.google.com:19302"]
|
}],
|
sdpSemantics: "unified-plan"
|
});
|
webrt8.onsignalingstatechange = signalingstatechange8;
|
|
webrtc8.ontrack = ontrack8
|
let offer = await webrtc8.createOffer({
|
|
offerToReceiveAudio: true,
|
offerToReceiveVideo: true
|
});
|
await webrtc8.setLocalDescription(offer);
|
}
|
}
|
|
function ontrack8(event) {
|
mediaStream8.addTrack(event.track);
|
}
|
|
async function signalingstatechange8() {
|
switch (webrtc8.signalingState) {
|
case 'have-local-offer':
|
// let uuid = $('#uuid').val();
|
let url = playUrl8 + "?uuid=" + videoId8 + "&channel=0";
|
$.post(url, {
|
data: btoa(webrtc8.localDescription.sdp)
|
}, function (data) {
|
try {
|
console.log(data);
|
webrtc8.setRemoteDescription(new RTCSessionDescription({
|
type: 'answer',
|
sdp: atob(data)
|
}))
|
} catch (e) {
|
console.warn(e);
|
}
|
|
});
|
break;
|
case 'stable':
|
break;
|
case 'closed':
|
break;
|
default:
|
console.log(`unhandled signalingState is ${webrtc8.signalingState}`);
|
break;
|
}
|
}
|
|
/*============= 视频播放 ----- 结束 ===============*/
|
|
/*============= webRtc视频播放9 ----- 开始 ===============*/
|
/**
|
* 开始播放
|
* @param winTag 播放窗口
|
* @returns {Promise<void>}
|
*/
|
async function webRtcToPlay9() {
|
if (playUrl9) {
|
mediaStream9 = new MediaStream();
|
$("#video" + splitWin + "_" + windowsNum)[0].srcObject = mediaStream9;
|
webrtc9 = new RTCPeerConnection({
|
iceServers: [{
|
urls: ["stun:stun.l.google.com:19302"]
|
}],
|
sdpSemantics: "unified-plan"
|
});
|
webrtc9.onsignalingstatechange = signalingstatechange9;
|
|
webrtc9.ontrack = ontrack9
|
let offer = await webrtc4.createOffer({
|
|
offerToReceiveAudio: true,
|
offerToReceiveVideo: true
|
});
|
await webrtc9.setLocalDescription(offer);
|
}
|
}
|
|
function ontrack9(event) {
|
mediaStream9.addTrack(event.track);
|
}
|
|
async function signalingstatechange9() {
|
switch (webrtc9.signalingState) {
|
case 'have-local-offer':
|
// let uuid = $('#uuid').val();
|
let url = playUrl9 + "?uuid=" + videoId9 + "&channel=0";
|
$.post(url, {
|
data: btoa(webrt9.localDescription.sdp)
|
}, function (data) {
|
try {
|
console.log(data);
|
webrtc9.setRemoteDescription(new RTCSessionDescription({
|
type: 'answer',
|
sdp: atob(data)
|
}))
|
} catch (e) {
|
console.warn(e);
|
}
|
|
});
|
break;
|
case 'stable':
|
break;
|
case 'closed':
|
break;
|
default:
|
console.log(`unhandled signalingState is ${webrtc9.signalingState}`);
|
break;
|
}
|
}
|
|
/*============= 视频播放 ----- 结束 ===============*/
|