var layer;
var splitWin = 1; //分屏数,默认1分屏
var windowsNum = 1; //播放窗口下标,手动选择模式下使用
var timer;
var table;
var cameraData;
var playUrl= null;
$(function () {
layui.use(['layer', 'table'], function () {
layer = layui.layer;
table = layui.table;
});
showPtz = function(){
$("#ptz-block").css("opacity",1);
};
disPtz = function(){
$("#ptz-block").css("opacity",0);
};
//初始化渲染播放列表
renderList();
});
/**
* 播放窗口选中
* @param win1 分屏数
* @param win2 选中窗口数
*/
function selectWin(win1,win2) {
removeSelectCss();
splitWin = win1;
windowsNum = win2;
addSelectCss();
}
/**
* 去除选中CSS
*/
function removeSelectCss() {
$("#f" + splitWin + "_d" + windowsNum).removeClass("selectWin");
}
/**
* 增加选中CSS
*/
function addSelectCss() {
$("#f" + splitWin + "_d" + windowsNum).addClass("selectWin");
}
/**
* 分屏切换
* @param tagNum 分屏数
*/
function fenping(tagNum) {
//切换分屏图标及页面
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', 'block');
$("#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', 'block');
$("#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', 'block');
}
}
/**
* 点击播放
* @param cameraId
*/
play = function (data) {
layer.msg("正在获取播放信息……");
cameraData = null;
playUrl = null;
var data = {
id: data.id,
playType: data.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 {
cameraData = result;
playUrl = result.playUrl;
play2();
}
},
error: function (result) {
play2();
}
});
};
play2 = function () {
if (!cameraData) {
layer.alert("未获取到当前摄像头播放信息!!");
return;
}
if(PlayType.VLC == cameraData.playType){ //说明使用本地VLC播放
vlcToPlay();
}
if (PlayType.PLAY_TYPE_WEB_RTC_DH == cameraData.playType
|| PlayType.PLAY_TYPE_WEB_RTC_HIK == cameraData.playType) {//使用web-rtc播放
webRtcToPlay();
}
};
function renderList() {
if (!listCamera || listCamera.length == 0) {
return;
}
var eleTable = document.getElementById("cameraList");
var _tr;
var _td;
listCamera.forEach(function (data) {
_tr = document.createElement("tr");
_tr.ondblclick = function () {
play(data);
};
_td = document.createElement("td");
_td.innerText = data.name;
_tr.appendChild(_td);
_td = document.createElement("td");
_td.innerText = data.type == "01" ? "枪机" : "球机";
_tr.appendChild(_td);
_td = document.createElement("td");
_td.innerText = data.status == "OFF" ? "离线" : "在线";
_tr.appendChild(_td);
eleTable.appendChild(_tr);
});
}
/**
* 播放还是暂停
*/
function playStop() {
var videL = $('#easyPlayer');
if (videL.paused) {
videL.play();
} else {
videL.pause();
}
}
/*============= vlc视频播放 ----- 开始 ===============*/
function vlcToPlay() {
$("#video").css('display','none');
$("#vlcPlayer").css('display','block');
var html = '';
html += '';
$("#vlcPlayer").html(html);
}
/*============= webRtc视频播放 ----- 开始 ===============*/
/*============= webRtc视频播放 ----- 开始 ===============*/
/**
* 开始播放
* @param winTag 播放窗口
* @returns {Promise}
*/
async function webRtcToPlay() {
layer.msg("开始启动播放……");
$("#vlcPlayer").css('display','none');
$("#video").css('display','block');
if(playUrl){
mediaStream = new MediaStream();
$("#video")[0].srcObject = mediaStream;
webrtc = new RTCPeerConnection({
iceServers: [{
urls: ["stun:stun.l.google.com:19302"]
}],
sdpSemantics: "unified-plan"
});
webrtc.onsignalingstatechange = signalingstatechange;
webrtc.ontrack = ontrack
let offer = await webrtc.createOffer({
offerToReceiveAudio: true,
offerToReceiveVideo: true
});
await webrtc.setLocalDescription(offer);
}
}
function ontrack(event) {
mediaStream.addTrack(event.track);
}
async function signalingstatechange() {
switch (webrtc.signalingState) {
case 'have-local-offer':
// let uuid = $('#uuid').val();
let url = playUrl + "?uuid=" + cameraData.cameraId + "&channel=0";
$.post(url, {
data: btoa(webrtc.localDescription.sdp)
}, function (data) {
try {
console.log(data);
webrtc.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 ${webrtc.signalingState}`);
break;
}
}
/*============= 视频播放 ----- 结束 ===============*/