var layer;
var playUrl= null;
var loginTag = false;
$(function () {
layui.use(['layer'], function () {
layer = layui.layer;
});
getMedia();
});
/**
* 获取播放信息
*/
function getMedia() {
var data = {
id: cameraData.id,
playType: cameraData.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 {
playUrl = result.playUrl;
var htm = "";
//web-rtc播放方式
if (PlayType.PLAY_TYPE_WEB_RTC == cameraData.playType) {
htm = '';
$("#sp-showItem2").append(htm);
toPlay();
onLogin();
}
if (PlayType.PLAY_TYPE_YD_QLY == cameraData.playType) {
htm = '';
$("#sp-showItem2").append(htm);
}
}
},
error: function (result) {
layer.msg(result.msg);
}
});
}
/*============= webRtc视频播放 ----- 开始 ===============*/
/**
* 开始播放
* @param winTag 播放窗口
* @returns {Promise}
*/
async function toPlay() {
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.id + "&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;
}
}
/*============= 视频播放 ----- 结束 ===============*/
/**
*
* @param command 云台事件类型
* @param flag 是否停止相应事件
*/
function handPTZ(command, flag){
if(!loginTag){
layer.alert("设备云台登录失败,请重试!");
return;
}
//大华云台控制
dhPlayerPTZ(command, flag);
}
/**
* 云台控制 -预置位置调用
*/
function handPreset() {
}
/*============= 大华JS云台控制 ----- 开始 ===============*/
/**
* @description 设备登录
*/
function onLogin (){
onLogout();
let ip = cameraData.ip;
let port= cameraData.webPort;
let user= cameraData.loginId;
let pwd= cameraData.pwd;
let target = ip + ':' + port;
setIP(target);
/**
* RPC.login 登录
* @param {string} $user.value 用户名
* @param {string} $password.value 密码
* @param {boolean} false 是否httpOnly,默认false
* @returns {Promise}
*/
RPC.login(user, pwd, false).then((res) => {
setCookie('DWebClientSessionID', '', -1);
setCookie('DhWebClientSessionID', '', -1);
/**
* RPC.keepAlive 保活
*/
RPC.keepAlive(300, 60000, _getSession(), target, 0);
const browser = BrowserType();
if (browser.includes('ie')) {
window.onunload = () => {
ajax({
url: 'global.logout'
});
};
} else if (browser.includes('chrome')) {
const params = {
method: 'global.logout',
params: null,
id: 10000,
session: _getSession()
};
pubsub.subscribe('onbeforeunload',() => {
navigator.sendBeacon('/RPC2', JSON.stringify(params));
});
} else {
pubsub.subscribe('onbeforeunload',() => {
ajax({
url: 'global.logout'
});
});
}
//登录成功,记录登录成功的硬盘录像机
loginTag = true;
}).catch((err) => {
console.log(err);
});
}
/**
* @description 设备注销
*/
function onLogout (){
/**
* RPC.Global.logout 注销接口
* @returns {Promise}
*/
RPC.Global.logout().then(function() {
setLoginState(false);
playerInstance.forEach(item => {
if(item) {
item.stop();
item.close();
item = null;
}
loginTag = false;
});
});
}
/**
* @description 设备云台事件
* @param {string} type 云台事件类型
* @param {boolean} isStop 是否停止相应事件
*/
function dhPlayerPTZ (type, isStop) {
//云台步长
// let stepVal = $_('#h5_ptz_step').value - 0;
let stepVal = 5;
let arg2 = 0;
let arg2Arr = ['LeftUp', 'RightUp', 'LeftDown', 'RightDown'];
let presetArr = ['GotoPreset','SetPreset', 'ClearPreset'];
//预置点
// let presetNum = $_('#h5_preset').value - 0;
let presetNum = 0;
if(arg2Arr.indexOf(type) > -1) {
arg2 = stepVal;
}
if(!isStop) {
if(presetArr.indexOf(type) > -1) {
/**
* RPC.PTZManager 云台相关
* @param {string} 方法
* @param {number} channel 通道
* @param {object} 参数集合
*/
RPC.PTZManager('start', 0, { 'code': type, 'arg1': presetNum, 'arg2': 0, 'arg3': 0 });
} else {
RPC.PTZManager('start', 0, { 'code': type, 'arg1': stepVal, 'arg2': arg2, 'arg3': 0 });
}
} else {
RPC.PTZManager('stop', 0, { 'code': type, 'arg1': stepVal, 'arg2': arg2, 'arg3': 0 });
}
}
/*============= 大华JS云台控制 ----- 结束 ===============*/