/** * @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); }); } }