/** * @Author: zhangtq 2452618307@qq.com * @Date: 2024-11-18 13:33:30 * @LastEditors: zhangtq 2452618307@qq.com * @LastEditTime: 2024-11-18 17:51:28 * @FilePath: static/js/qx/qxVideo.js * @Description: 这是默认设置,可以在设置》工具》File Description中进行配置 */ //播放球机集合 let playBallList = [] let playBallObj = {} //默认选择视频框 var selectedScreen = 'video1' //全屏or窗口 let status = 1 //平台在线的球机 var onLineBallList = [] let puid let ballIndex let qxToken let q2Url let touchStartX = 0; let touchEndX = 0; window.onload = getQueryParams $(function() { //获取前置传参 puid:球机id ballIndex:球机序号 getQueryParams() let html = '' $('#canvasDiv').empty().append(html) //默认加载一个视频 const startPlayButton = document.getElementById('startPlay') startPlayButton.click() doubleClick(1) }) function getQueryParams() { const params = new URLSearchParams(window.location.search) puid = params.get('puid') ballIndex = params.get('ballIndex') qxToken = params.get('qxToken') q2Url = params.get('q2Url') } function startPlayVideo() { getQueryParams() setTimeout(function() { let ballFrom = '1' if (!isEmpty(puid)) { if (Object.keys(playBallObj).length > 0) { playBallObj.myPlayer.unload() playBallObj.myPlayer.detachMediaElement() playBallObj.myPlayer.destroy() playBallObj.myPlayer = null playBallObj = {} } playBallObj = { puid: puid, selectedScreen: selectedScreen, window: 1, start: false, type: ballFrom, myPlayer: null } //播放视频 qxPlayVideo(puid, ballIndex) } }, 200) } /** * 播放视频 * @param puId * @param idx */ function qxPlayVideo(puId, idx) { setTimeout(function() { readyPlay(puId, idx) }, 200) } //开始播放视频 function readyPlay(puId, idx) { //若是清晰平台,删除连接对象 let url = q2Url + 'stream.flv?puid=' + puId + '&idx=' + idx + '&stream=0&token=' + qxToken if (!isEmpty(playBallObj)) { if (selectedScreen === playBallObj.selectedScreen) { if (playBallObj.window !== null) { try { var myPlayer = flvjs.createPlayer({ type: 'flv', url: url, isLive: true, hasAudio: false }, { enableWorker: false, autoCleanupSourceBuffer: true, //清理缓冲区 enableStashBuffer: false, stashInitialSize: 128, // 减少首桢显示等待时长 statisticsInfoReportInterval: 600 }) myPlayer.attachMediaElement(document.getElementById(playBallObj.selectedScreen)) myPlayer.load() setTimeout(function() { myPlayer.play() }, 200) playBallObj.myPlayer = myPlayer playBallObj.start = true } catch (e) { alert('该视频不在线。。。') } } } }else{ uni.showToast({ title: '获取视频失败!', icon: 'none' }) uni.navigateBack() } $('#video' + selectedScreen + '_html5_api').css('width', '100%') $('#video' + selectedScreen + '_html5_api').css('height', '100%') $('#video' + selectedScreen).css('width', '100%') $('#video' + selectedScreen).css('height', '100%') $('#video' + selectedScreen + '_html5_api').css('background-color', 'black') $('.vjs-text-track-display').hide() $('.vjs-loading-spinner').hide() $('.vjs-big-play-button').hide() $('.vjs-control-bar').hide() $('.vjs-error-display').hide() $('.vjs-error-display').hide() $('.vjs-modal-dialog').hide() $('.vjs-poster').removeAttr('class') $('.video' + selectedScreen + '-dimensions').css('width', '100%') $('.video' + selectedScreen + '-dimensions').css('height', '100%') } /** * 关闭/停止/销毁 视频 */ function stopVideo() { playBallObj.player.unload() playBallObj.player.detachMediaElement() playBallObj.player.destroy() playBallObj.player = null playBallObj.start = false playBallObj = {} } //单机球机页面点击 var timer = null //定义一个变量存放定时器 function singleClick(t) {// if (timer) { //取消上次延时未执行的方法 window.clearTimeout(timer) timer = null } timer = window.setTimeout(function() { ballScreen(t) }, 300) } //添加单机视频框样式 function ballScreen(t) { $.each($('.ballsplit'), function(index, item) { $($('.ballsplit')[index]).removeClass('selectedContent') }) selectedScreen = 'video' + t $('#ball' + t).addClass('selectedContent') let result = playBallList.some((item => { if (item.selectedScreen === 'video' + t) { return true } })) } //双击球机页面 function doubleClick(t) { if (timer) { //取消上次延时未执行的方法 window.clearTimeout(timer) } var div = document.getElementById('ball' + t) if (status == 1) { //全屏 $('#video' + t).css('-webkit-transform', 'rotate(90deg)') $('#video' + t).css('transform', 'rotate(90deg)') $('#video' + t).css('width', '100vh') $('#video' + t).css('height', '100vw') $('#video' + t).css('position', 'absolute') $('#video' + t).css('top', '50%') $('#video' + t).css('left', '50%') $('#video' + t).css('transform-origin', 'center center') $('#video' + t).css('transform', 'translate(-50%, -50%) rotate(90deg)') if (div.requestFullscreen) { div.requestFullscreen() } else if (div.msRequestFullscreen) { div = document.body div.msRequestFullscreen() } else if (div.mozRequestFullScreen) { div.mozRequestFullScreen() } else if (div.webkitRequestFullScreen) { div.webkitRequestFullScreen() } status = 2 } else if (status == 2) { //关闭全屏 $('#ball' + t).css('width', '100%') $('#ball' + t).css('height', '27%') $('#ball' + t).css('margin-top', '2%') $('#video' + t).css('-webkit-transform', 'rotate(0)') $('#video' + t).css('transform', 'rotate(0)') $('#video' + t).css('position', '') $('#video' + t).css('top', '') $('#video' + t).css('left', '') $('#video' + t).css('transform-origin', '') $('#video' + t).css('width', '') $('#video' + t).css('height', '') if (document.exitFullscreen) { document.exitFullscreen() } else if (document.msExitFullscreen) { document.msExitFullscreen() } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen() } else if (document.webkitCancelFullScreen) { document.webkitCancelFullScreen() } status = 1 } } /*********************云台控制****************/ function ptz(type) { console.log("type="+type); let pId = playBallObj.puid; let idex = playBallObj.ballIndex; if(type == 'TurnUp'){ turncontrol(pId,idex,'up'); }else if(type == 'TurnDown'){ turncontrol(pId,idex,'down'); }else if(type == 'TurnLeft'){ turncontrol(pId,idex,'left'); }else if(type == 'TurnRight'){ turncontrol(pId,idex,'right'); }else if(type == 'ZoomInPicture'){ //放大 zoomcontrol(pId,idex,'zoomin'); }else if(type == 'ZoomOutPicture'){ //缩小 zoomcontrol(pId,idex,'zoominout'); }else if(type == 'MakeFocusFar'){ //远焦 focuscontrol(pId,idex,'faraway'); }else if(type == 'MakeFocusNear'){ //近焦 focuscontrol(pId,idex,'near'); }else if(type == 'StopFocusMove'){ focuscontrol(pId,idex,'stop'); }else if(type == 'StopPictureZoom'){ zoomcontrol(pId,idex,'stop'); }else{ turncontrol(pId,idex,'stop'); } }; //清新云台上下左右 //旋转平台功能 async function turncontrol(puid,idx,option) { if (option == "up") { // $("#balltop").css("background-image","url('../../../img/video/ydj/s.png')"); await requestPost('PTZ/C_PTZ_Turn?token=' + qxToken, { puid: puid, idx: idx, motion: 'up' }, async (rv) => { }); } else if (option == "down") { // $("#ballbuttom").css("background-image","url('../../../img/video/ydj/x.png')"); var number = "down"; await requestPost('PTZ/C_PTZ_Turn?token=' + qxToken, { puid: puid, idx: idx, motion: 'down' }, rv => { }); } else if (option == "left") { // $("#ballleft").css("background-image","url('../../../img/video/ydj/z.png')"); var number = "left"; await requestPost('PTZ/C_PTZ_Turn?token=' + qxToken, { puid: puid, idx: idx, motion: 'left' }, rv => { }); } else if (option == "right") { var number = "right"; // $("#ballright").css("background-image","url('../../../img/video/ydj/y.png')"); await requestPost('PTZ/C_PTZ_Turn?token=' + qxToken, { puid: puid, idx: idx, motion: 'right' }, rv => { }); } else if (option == "stop") { var number = "stop"; console.log("stop----------------"); requestPost('PTZ/C_PTZ_Turn?token=' + qxToken, { puid: puid, idx: idx, motion: 'stop' }, rv => { console.log("stop++++++++++++++++"); // $("#balltop").css("background-image","url('../../../img/video/wdj/s.png')"); // $("#ballbuttom").css("background-image","url('../../../img/video/wdj/x.png')"); // $("#ballleft").css("background-image","url('../../../img/video/wdj/z.png')"); // $("#ballright").css("background-image","url('../../../img/video/wdj/y.png')"); }); } };