343 lines
9.5 KiB
JavaScript
343 lines
9.5 KiB
JavaScript
let tokens;
|
||
let start = [];
|
||
|
||
function hint() {
|
||
layer.msg('视频播放失败,请检查网络!!!', {
|
||
icon: 2,
|
||
time: 2000 //2秒关闭(如果不配置,默认是3秒)
|
||
});
|
||
}
|
||
|
||
// 执行一次函数的定时器
|
||
let time = setTimeout(hint, 1000 * 30);
|
||
|
||
// $(function () {
|
||
// if (isNumber(puId)) {
|
||
// createVideo();
|
||
// connect();
|
||
// } else {
|
||
// alert("puId错误!!!")
|
||
// }
|
||
// });
|
||
|
||
/**
|
||
* post 请求
|
||
* @param router
|
||
* @param params
|
||
* @param callback
|
||
*/
|
||
function requestPost(router, params, callback) {
|
||
$.ajax({
|
||
type: 'post',
|
||
url: _cf.q2http_url + router,
|
||
data: params,
|
||
traditional: true,
|
||
dataType: 'json',
|
||
async: false,
|
||
complete: function (rv) {
|
||
$('#hint').show();
|
||
setTimeout(" $('#hint').hide();", 3000);
|
||
if (typeof callback == 'function') callback(rv)
|
||
}
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 创建平台连接
|
||
*/
|
||
function connect() {
|
||
var allDataParams="address="+_cf.connParams.address+"&port="+_cf.connParams.port+
|
||
"&user="+ _cf.connParams.user+"&password="+_cf.connParams.password+"&epid="+_cf.connParams.epid+"&fixaddr="+_cf.connParams.bfix;
|
||
let params = {
|
||
"params":videoEncrypt(allDataParams)
|
||
}
|
||
console.log(params)
|
||
requestPost('login2', params, function (rv) {
|
||
let result = {
|
||
errcode: -1,
|
||
token: ''
|
||
}
|
||
let respJSON = JSON.parse(rv.responseText);
|
||
if (respJSON.hasOwnProperty('errcode')) {
|
||
result.errcode = respJSON.errcode;
|
||
}
|
||
if (respJSON.hasOwnProperty('token')) {
|
||
result.token = respJSON.token;
|
||
result.errcode = 0;
|
||
tokens = result.token;
|
||
if (!isEmpty(tokens)) {
|
||
playVideo(puId, "0");
|
||
}else{
|
||
alert("平台登录失败!!!")
|
||
}
|
||
}
|
||
});
|
||
|
||
|
||
}
|
||
|
||
/**
|
||
* 播放视频
|
||
* @param puId
|
||
* @param idx
|
||
*/
|
||
function playVideo(puId, idx) {
|
||
//播视频接口
|
||
let url = _cf.q2http_url + "stream.flv?puid=" + puId + "&idx=" + idx + "&stream=0&token=" + tokens;
|
||
if (flvjs.isSupported()) {
|
||
let videoElement = document.getElementById('video_html5_api');
|
||
// fullScreenOfAndroid();
|
||
flvPlayer = flvjs.createPlayer({
|
||
type: 'flv',
|
||
url: url,
|
||
isLive: true,
|
||
hasAudio: false
|
||
}, {
|
||
enableWorker: false,
|
||
autoCleanupSourceBuffer: true, //清理缓冲区
|
||
enableStashBuffer: false,
|
||
stashInitialSize: 128, // 减少首桢显示等待时长
|
||
statisticsInfoReportInterval: 600
|
||
});
|
||
flvPlayer.attachMediaElement(videoElement);
|
||
flvPlayer.load();
|
||
}else if(typeof(flvjs.isSupported())=='undefined'){
|
||
let videoElement = document.getElementById('video_html5_api');
|
||
flvPlayer = flvjs.createPlayer({
|
||
type: 'mp4',
|
||
url: url,
|
||
isLive: true,
|
||
hasAudio: false
|
||
}, {
|
||
enableWorker: false,
|
||
autoCleanupSourceBuffer: true, //清理缓冲区
|
||
enableStashBuffer: false,
|
||
stashInitialSize: 128, // 减少首桢显示等待时长
|
||
statisticsInfoReportInterval: 600
|
||
});
|
||
flvPlayer.attachMediaElement(videoElement);
|
||
flvPlayer.load();
|
||
}else{
|
||
let videoElement = document.getElementById('video_html5_api');
|
||
flvPlayer = flvjs.createPlayer({
|
||
type: 'fly',
|
||
url: url,
|
||
isLive: true,
|
||
hasAudio: false
|
||
}, {
|
||
enableWorker: false,
|
||
autoCleanupSourceBuffer: true, //清理缓冲区
|
||
enableStashBuffer: false,
|
||
stashInitialSize: 128, // 减少首桢显示等待时长
|
||
statisticsInfoReportInterval: 600
|
||
});
|
||
flvPlayer.attachMediaElement(videoElement);
|
||
flvPlayer.load();
|
||
}
|
||
flvPlayer.on(flvjs.Events.STATISTICS_INFO, (res) => {
|
||
if (this.leaveRouter || this.changeLampPost) { // 离开路由或切换设备
|
||
destoryVideo(flvPlayer);
|
||
}
|
||
});
|
||
}
|
||
|
||
function createVideo() {
|
||
|
||
let play = videojs('video', {
|
||
muted: true,
|
||
controls: false,
|
||
loop: true,
|
||
preload: "auto",
|
||
autoplay: true,
|
||
});
|
||
play.play();
|
||
$('.vjs-loading-spinner').hide();
|
||
$('.vjs-big-play-button').hide();
|
||
$('.vjs-poster').removeAttr("class");
|
||
var elevideo = document.getElementById("video_html5_api");
|
||
elevideo.addEventListener('play', function () { //播放开始执行的函数
|
||
console.log(time);
|
||
clearTimeout(time);
|
||
});
|
||
}
|
||
|
||
// Android平台的视频全屏旋转
|
||
/* var fullScreenOfAndroid = function() {
|
||
if(true) {
|
||
// 最新5+API的支持
|
||
var self = plus.webview.currentWebview();
|
||
self.setStyle({
|
||
videoFullscreen: 'landscape'
|
||
});
|
||
} else {
|
||
document.addEventListener('webkitfullscreenchange', function() {
|
||
var el = document.webkitFullscreenElement; //获取全屏元素
|
||
if(el) {
|
||
plus.screen.lockOrientation('landscape'); //锁死屏幕方向为横屏
|
||
} else {
|
||
plus.screen.lockOrientation('portrait-primary'); //锁死屏幕方向为竖屏
|
||
}
|
||
});
|
||
}
|
||
}; */
|
||
function shot() {
|
||
screenshot($('#video_html5_api'));
|
||
}
|
||
/**
|
||
* 销毁断流方法
|
||
* @param flvPlayer
|
||
*/
|
||
function destoryVideo(flvPlayer) {
|
||
if(flvPlayer!=null){
|
||
flvPlayer.destroy();
|
||
flvPlayer.unload();
|
||
flvPlayer.detachMediaElement();
|
||
}
|
||
}
|
||
//缩放功能
|
||
function zoomcontrol(option) {
|
||
let params = {
|
||
puid: puId,
|
||
idx: "0"
|
||
}
|
||
switch (option) {
|
||
case "stop":
|
||
//停止缩放接口
|
||
requestPost('PTZ/C_PTZ_StopPictureZoom?token=' + tokens, params, rv => {
|
||
})
|
||
break;
|
||
case "zoomin":
|
||
//放大图像接口
|
||
requestPost('PTZ/C_PTZ_ZoomInPicture?token=' + tokens, params, rv => {
|
||
})
|
||
break;
|
||
default:
|
||
//缩小图像接口
|
||
requestPost('PTZ/C_PTZ_ZoomOutPicture?token=' + tokens, params, rv => {
|
||
})
|
||
break;
|
||
}
|
||
}
|
||
|
||
//远近焦点功能
|
||
function focuscontrol(option) {
|
||
let params = {
|
||
puid: puId,
|
||
idx: "0"
|
||
}
|
||
switch (option) {
|
||
case "near":
|
||
requestPost('PTZ/C_PTZ_MakeFocusNear?token=' + tokens, params, rv => {
|
||
console.log(rv)
|
||
})
|
||
break;
|
||
case "faraway":
|
||
requestPost('PTZ/C_PTZ_MakeFocusFar?token=' + tokens, params, rv => {
|
||
console.log(rv)
|
||
})
|
||
break;
|
||
default:
|
||
requestPost('PTZ/C_PTZ_StopFocusMove?token=' + tokens, params, rv => {
|
||
console.log(rv)
|
||
})
|
||
break;
|
||
}
|
||
}
|
||
|
||
function aperture(option) {
|
||
let camera = {
|
||
puid: puId,
|
||
idx: "0"
|
||
};
|
||
let xml = "";
|
||
switch (option) {
|
||
case "augment":
|
||
xml = `<?xml version="1.0" encoding="UTF-8"?>
|
||
<M Type="ComReq">
|
||
<C Type="G" Prio="1" EPID="${_cf.connParams.epid}" Lang="zh_CN">
|
||
<Res Type="IV" Idx="${camera.idx}" OptID="C_PTZ_AugmentAperture" Stream="0"><Param></Param></Res>
|
||
</C>
|
||
</M>`;
|
||
requestPost(`RawRequest?dstType=201&dstID=${camera.puid}&token=${tokens}`, {xml: xml}, rv => {
|
||
console.log(rv);
|
||
});
|
||
break;
|
||
case "minish":
|
||
xml = `<?xml version="1.0" encoding="UTF-8"?>
|
||
<M Type="ComReq">
|
||
<C Type="G" Prio="1" EPID="${_cf.connParams.epid}" Lang="zh_CN">
|
||
<Res Type="IV" Idx="${camera.idx}" OptID="C_PTZ_MinishAperture" Stream="0"><Param></Param></Res>
|
||
</C>
|
||
</M>`;
|
||
requestPost(`RawRequest?dstType=201&dstID=${camera.puid}&token=${tokens}`, {xml: xml}, rv => {
|
||
console.log(rv)
|
||
});
|
||
break;
|
||
default:
|
||
xml = `<?xml version="1.0" encoding="UTF-8"?>
|
||
<M Type="ComReq">
|
||
<C Type="G" Prio="1" EPID="${_cf.connParams.epid}" Lang="zh_CN">
|
||
<Res Type="IV" Idx="${camera.idx}" OptID="C_PTZ_StopApertureZoom" Stream="0"><Param></Param></Res>
|
||
</C>
|
||
</M>`;
|
||
requestPost(`RawRequest?dstType=201&dstID=${camera.puid}&token=${tokens}`, {xml: xml}, rv => {
|
||
console.log(rv);
|
||
});
|
||
break;
|
||
}
|
||
}
|
||
|
||
//旋转平台功能
|
||
async function turncontrol(option) {
|
||
let params = {
|
||
puid: puId,
|
||
idx: "0",
|
||
motion: option
|
||
};
|
||
if (!isEmpty(option)) {
|
||
requestPost('PTZ/C_PTZ_Turn?token=' + tokens, params, (rv) => {
|
||
});
|
||
}
|
||
}
|
||
|
||
function control(key) {
|
||
switch (key) {
|
||
case 0:
|
||
turncontrol('stop');
|
||
break;
|
||
case 1:
|
||
turncontrol('up');
|
||
break;
|
||
case 2:
|
||
turncontrol('down');
|
||
break;
|
||
case 3:
|
||
turncontrol('left');
|
||
break;
|
||
case 4:
|
||
turncontrol('right');
|
||
break;
|
||
case 5:
|
||
zoomcontrol('zoomin');
|
||
break;
|
||
case 6:
|
||
zoomcontrol('zoominout');
|
||
break;
|
||
case 7:
|
||
focuscontrol('near');
|
||
break;
|
||
case 8:
|
||
focuscontrol('faraway');
|
||
break;
|
||
case 9:
|
||
zoomcontrol('stop');
|
||
break;
|
||
case 10:
|
||
focuscontrol('stop');
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|