nxdt-uniapp/static/js/qx/utility/video.js

463 lines
9.7 KiB
JavaScript

/**
* @Author: zhangtq 2452618307@qq.com
* @Date: 2024-11-18 13:33:30
* @LastEditors: zhangtq 2452618307@qq.com
* @LastEditTime: 2024-11-18 13:34:43
* @FilePath: static/js/qx/utility/video.js
* @Description: 这是默认设置,可以在设置》工具》File Description中进行配置
*/
var selectedScreen = "cs_ball";
var loginName="admin";
var password="bonus@admin";
var win;
var puid;
var webSocket;
var ballType;
var tokens;
var flvPlayer;
var loginToken;
var orgId;
$(function() {
orgId = localStorage.getItem("orgId");
setInterval(initLoginToken, 2000);
getRoleTreeData();
getWebSocket();
createVideo();
connect();
})
function initLoginToken() {
loginToken = localStorage.getItem("loginToken");
// var data = JSON.parse(window.localStorage.getItem("loginToken"));
// if (data !== null) {
// if (data.expirse != null && data.expirse < new Date().getTime()) {
// window.localStorage.removeItem("loginToken")
// loginToken = null;
// } else {
// loginToken = data.value;
// }
// }
if(loginToken=="" || loginToken==null){
// window.location.href = "http://localhost:63344/SbdVideoDisplayWeb/login.html?_ijt=1nni8n80o9n3ri1ugce6m1gcv9";
window.location.href = "http://112.31.212.128:21027/sbdVideo/login.html";
}
}
//树的设置
var setting1 = {
view: {
selectedMulti: true,
// showIcon:false
},
data: {
simpleData: {
enable: true
}
},
edit: {
enable: false,
},
callback: {
onClick: onTreeClick,
// 点击前
beforeClick: beforeClick,
// 不允许拖拽
beforeDrag: beforeDrag,
}
};
function beforeClick(treeId, treeNode) {
if (treeNode.id == 0) {
return false;
}
return true;
}
//不允许拖拽
function beforeDrag(treeId, treeNodes) {
return false;
}
//定义树节点初始数据
var zNodes1 = []; // 球机
//获取球机视频/移动视频树
function getRoleTreeData() {
var dialog = showDialog();
var url = "http://112.31.212.128:21028/ahsbs/video/getVideoTree";
$.ajax({
type: 'POST',
url: url,
data:{
orgId:orgId
},
dataType: "json",
success: function(data) {
var l = data.obj;
if (l == null) {
layer.alert("暂无球机视频");
layer.close(dialog);
} else {
var data = parseTreeData(l);
var nodes = zNodes1.concat(data);
$.fn.zTree.init($("#ballTree"), setting1, nodes);
layer.close(dialog);
}
},
error: function(e) {
}
});
}
function showDialog() {
var layerMsg = layer.load(1,{
icon : 2,
shade : [0.5,'transparent']
});
return layerMsg;
}
// 解析球机视频/移动视频树
function parseTreeData(data) {
for (var i = 0; i < data.length; i++) {
var type = data[i].platformType;
var pId = data[i].pid;
var puid = data[i].puid;
data[i].pId = pId;
data[i].open = true;
if (pId == '-1') {
data[i].icon = "../img/company.png";
} else if (pId != '-1' && puid == null){
data[i].icon = "../img/pro.png";
} else if (puid != null) {
var onLine = data[i].isOnline;
if(onLine == '1'){
data[i].icon = "../img/ball.png";
// if(type == "1"){
// data[i].icon = "../img/cs_ball.png";
// }else{
// data[i].icon = "../img/qx_ball.png";
// }
}else{
data[i].icon = "../img/no_online_ball.png";
}
}
}
return data;
}
//获取树点击事件 执行播放视频
function onTreeClick(event, treeId, treeNode, clickFlag) {
var cs_ball = document.getElementById('cs_ball');
var qx_ball = document.getElementById('qx_ball');
var width = window.screen.availWidth;
var height = window.screen.availHeight;
puid = treeNode.puid;
ballType = treeNode.platformType;
var onLine = treeNode.isOnline;
if(onLine == "1"){
var dialog = showDialog();
if(ballType == "1"){
cs_ball.style.display = "";
qx_ball.style.display = "none";
stopVideo(puid);
play(win,puid,"0",webSocket,dialog);
}else{
if (tokens != null) {
cs_ball.style.display = "none";
qx_ball.style.display = "";
stopVideo(puid);
playVideo(puid, "0",dialog);
}
}
}else{
layer.alert("请选择开机的球机")
}
}
function stopVideo(puid) {
if(win != null){
win.CloseVideo();
}
if(flvPlayer != null){
flvPlayer.unload();
flvPlayer.detachMediaElement();
flvPlayer.destroy();
flvPlayer = null;
}
}
/**
* 获取websocket地址
*/
function getWebSocket(){
$.ajax({
url: "http://112.31.212.128:21028/ahsbs/video/getWebSocket",
type:"POST",
data:{name:loginName,passwd:password},
success:function(data){
var jsons = JSON.parse(data);
webSocket = jsons.content.Addr;
if(webSocket.indexOf("127.0.0.1") != -1){
webSocket = webSocket.replace("127.0.0.1","112.30.98.105");
}
win = new H5Live.Window(selectedScreen,{
callback: function (action, instance, data) {
}
});
},error:function(error){
alert("a")
}
})
}
/**
* 创世h5视频播放
* @param win
* @param puid
* @param idx
* @param webSocket
*/
function play(win,puid,idx,webSocket,dialog) {
var options = {
wsPath: webSocket,
puid:puid,
idx:idx,
streamType:'REALTIME'
}
win.OpenVideo(options);
layer.close(dialog);
}
function ptz(type) {
if(ballType == "1"){
csBallPTZ(type);
}else{
if(type == 'TurnUp'){
qxBallPTZ('up');
}else if(type == 'TurnDown'){
qxBallPTZ('down');
}else if(type == 'TurnLeft'){
qxBallPTZ('left');
}else if(type == 'TurnRight'){
qxBallPTZ('right');
}else if(type == 'ZoomInPicture'){
zoomcontrol('zoomin');
}else if(type == 'ZoomOutPicture'){
zoomcontrol('zoominout');
}else if(type == 'MakeFocusFar'){
focuscontrol('faraway');
}else if(type == 'MakeFocusNear'){
focuscontrol('near');
}else if(type == 'StopFocusMove'){
focuscontrol('stop');
}else if(type == 'StopPictureZoom'){
zoomcontrol('stop');
}else{
qxBallPTZ('stop');
}
}
}
/**
* 创世云台控制
* @param {Object} type
*/
function csBallPTZ(type){
$.ajax({
url: "http://112.31.212.128:21028/ahsbs/video/getBallPTZControl",
type: "POST",
data: {
puid: puid,
type: type
},
success: function(data) {
console.log(new Date().getTime()+"云台控制:",data);
},
error: function(error) {
console.log("请求错误:",error);
}
});
}
/**
* 清新云台控制
* @param {Object} type
*/
function qxBallPTZ(type){
turncontrol(type).then(r => {});
}
/**
* 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: true,
complete: function (rv) {
if (typeof callback == 'function') callback(rv)
}
})
}
/**
* 创建平台连接
*/
function connect() {
let params = {
"address": _cf.connParams.address,
"port": _cf.connParams.port,
"user": _cf.connParams.user,
"password": _cf.connParams.password,
"epid": _cf.connParams.epid,
"fixaddr": _cf.connParams.bfix
}
requestPost('login', 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;
}
});
}
function progress(e) {
var bf = e.srcElement.buffered;
var currentTime = e.srcElement.currentTime;
if (bf.length > 0) {
let end = bf.end(0);
if (end - currentTime > 1.5) {
e.srcElement.currentTime = end - 0.1;
}
}
}
/**
* 播放视频
* @param puId
* @param idx
*/
function playVideo(puId, idx, dialog) {
//播视频接口
let url = _cf.q2http_url + "stream.flv?puid=" + puId + "&idx=" + idx + "&stream=0&token=" + tokens;
if (flvjs.isSupported()) {
let videoElement = document.getElementById('qx_ball_html5_api');
videoElement.controls = false;
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();
layer.close(dialog);
}
}
/**
* 清新
*/
function createVideo() {
let play = videojs('qx_ball', {
muted: true,
controls: false,
loop: true,
preload: "auto",
autoplay: true,
});
play.play();
$('#video_html5_api').width(document.body.clientWidth - 30);
$('#video_html5_api').height(document.body.clientHeight * 0.3 + 12)
$('#video_html5_api').css("background-color","black");
$('.vjs-loading-spinner').hide();
$('.vjs-big-play-button').hide();
$('.vjs-poster').removeAttr("class");
}
//缩放功能
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;
}
}
//旋转平台功能
async function turncontrol(option) {
let params = {
puid: puid,
idx: "0",
motion: option
};
if (option != null) {
requestPost('PTZ/C_PTZ_Turn?token=' + tokens, params, (rv) => {
console.log(option);
console.log(rv);
});
}
}