979 lines
34 KiB
JavaScript
979 lines
34 KiB
JavaScript
// var dataUrl ="http://192.168.0.110:18888/rearScreen/"
|
||
// var dataUrl ="http://192.168.195.243:18888/rearScreen/"
|
||
var videoUrl = "http://192.168.0.110:18885/witDisplay/"
|
||
var clickCount = 0;
|
||
|
||
var token2 = localStorage.getItem('video_token');
|
||
var token1 = localStorage.getItem('video_token1');
|
||
//当前展示树 1移动球机,2固定 球机
|
||
var openBallsNum = localStorage.getItem('openBallsNum');
|
||
var video_puid_1 = localStorage.getItem("video_puid")
|
||
//定义树节点初始数据
|
||
var zNodes1 = [];
|
||
//播放球机集合
|
||
let playBallList = [];
|
||
//窗口集合
|
||
let videoList = [];
|
||
//默认选择视频框
|
||
var selectedScreen = "video1";
|
||
//当前是几窗口模式
|
||
var numOfWindows = 1;
|
||
//全屏or窗口
|
||
let status = 1;
|
||
//平台在线的球机
|
||
var onLineBallList = [];
|
||
var imgType = 1;
|
||
var video_puid = '34020000001180000003';
|
||
|
||
var videoLoaded = true; // 在进入系统时初始化一个变量来记录视频是否加载完成,默认为true
|
||
$(function () {
|
||
//接口状态数量
|
||
// interfaceStatus();
|
||
let html = "";
|
||
//加载球机树
|
||
getRoleTreeData(1,"")
|
||
// setTimeout('getRoleTreeData(1)',3500)
|
||
for (let i = 1; i <= 9; i++) {
|
||
videoList.push({
|
||
selectedScreen: "video" + i,
|
||
playState: false,
|
||
state: 0
|
||
})
|
||
html += '<canvas id="canvas_video' + i + '" style="display:none;"></canvas>'
|
||
}
|
||
$('#canvasDiv').empty().append(html);
|
||
//默认加载一个视频
|
||
ballOne();
|
||
|
||
//用于首页视频点击进入播放视频
|
||
setTimeout(function () {
|
||
if (!isEmpty(video_puid_1)){
|
||
video_puid = video_puid_1;
|
||
}
|
||
if (video_puid != "") {
|
||
let url = _cf_1.q2http_url + "stream.flv?puid=" + video_puid + "&idx=0&stream=0&token=" + token1;
|
||
//循环视频播放列表
|
||
try {
|
||
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('video1'));
|
||
myPlayer.load();
|
||
setTimeout(function () {
|
||
myPlayer.play();
|
||
}, 200);
|
||
} catch (e) {
|
||
alert("该视频不在线。。。");
|
||
}
|
||
var selectedScreen = 'video1';
|
||
$('#video' + selectedScreen + '_html5_api').css("width", "100%");
|
||
$('#video' + selectedScreen + '_html5_api').css("height", "100%");
|
||
$('#video1').css("width", "85%");
|
||
$('#video1').css("height", "100%");
|
||
$('#video1').css("margin-left", "7%");
|
||
$('#video1').css("margin-top", "2%");
|
||
$('#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%");
|
||
}
|
||
playBallList.push({
|
||
puid: video_puid,
|
||
selectedScreen: 'video1',
|
||
window: 1,
|
||
start: true,
|
||
type: '1',
|
||
myPlayer: myPlayer,
|
||
token : token1,
|
||
pathType: 2
|
||
});
|
||
video_puid = '';
|
||
}, 1500);
|
||
|
||
|
||
// $("#imgBtn").click(function () {
|
||
// if (imgType === 1) {
|
||
// imgType = 2;
|
||
// $("#video-left").css("display", "none")
|
||
// $("#video-center").css("width", "98%")
|
||
// $("#imgBtn").attr("src", "right_triangle.png")
|
||
// } else {
|
||
// imgType = 1;
|
||
// $("#video-center").css("width", "75%")
|
||
// setTimeout(function () {
|
||
// $("#video-left").css("display", "")
|
||
// }, 2000)
|
||
// $("#imgBtn").attr("src", "left_triangle.png")
|
||
// }
|
||
// })
|
||
|
||
});
|
||
|
||
// 使用Layui的日期时间范围选择器组件
|
||
layui.use('laydate', function(){
|
||
var laydate = layui.laydate;
|
||
|
||
// 初始化起始时间选择器
|
||
laydate.render({
|
||
elem: '#start-time',
|
||
type: 'datetime',
|
||
format: 'yyyy-MM-dd HH:mm:ss',
|
||
min: dayOffset(-11) + ' 00:00:00', // 设置最小可选日期
|
||
max: getCurrentDateTime(), // 设置最大可选日期
|
||
theme: 'grid',
|
||
done: function(value, date){
|
||
// 获取起始时间选择器的值
|
||
var startTime = new Date(value).getTime();
|
||
var endTime = new Date($('#end-time').val()).getTime();
|
||
|
||
// 如果结束时间早于起始时间,则自动修正为与起始时间相同
|
||
if (endTime < startTime){
|
||
$('#end-time').val(value);
|
||
}
|
||
}
|
||
});
|
||
|
||
// 初始化结束时间选择器
|
||
laydate.render({
|
||
elem: '#end-time',
|
||
type: 'datetime',
|
||
format: 'yyyy-MM-dd HH:mm:ss',
|
||
min: dayOffset(-11) + ' 00:00:00', // 设置最小可选日期
|
||
max: getCurrentDateTime(), // 设置最大可选日期
|
||
theme: 'grid',
|
||
done: function(value, date){
|
||
// 获取结束时间选择器的值
|
||
var startTime = new Date($('#start-time').val()).getTime();
|
||
var endTime = new Date(value).getTime();
|
||
|
||
// 如果结束时间早于起始时间,则自动修正为与起始时间相同
|
||
if (endTime < startTime){
|
||
$('#end-time').val($('#start-time').val());
|
||
}
|
||
}
|
||
});
|
||
});
|
||
|
||
|
||
// 获取当前日期时间字符串
|
||
function getCurrentDateTime(){
|
||
var now = new Date();
|
||
var year = now.getFullYear();
|
||
var month = padZero(now.getMonth() + 1);
|
||
var day = padZero(now.getDate());
|
||
var hours = padZero(now.getHours());
|
||
var minutes = padZero(now.getMinutes());
|
||
var seconds = padZero(now.getSeconds());
|
||
return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
|
||
}
|
||
|
||
// 获取相对于当前日期的偏移量的日期字符串
|
||
function dayOffset(offset){
|
||
var now = new Date();
|
||
now.setDate(now.getDate() + offset);
|
||
var year = now.getFullYear();
|
||
var month = padZero(now.getMonth() + 1);
|
||
var day = padZero(now.getDate());
|
||
return year + '-' + month + '-' + day + ' 00:00:00';
|
||
}
|
||
|
||
// 数字补零函数
|
||
function padZero(num){
|
||
return num < 10 ? '0' + num : num;
|
||
}
|
||
|
||
|
||
$("#imgSearch").click(function () {
|
||
getRoleTreeData(1,$("#keyWord").val())
|
||
})
|
||
|
||
/**
|
||
* 监控视频-接口状态数量
|
||
*/
|
||
function interfaceStatus() {
|
||
$.ajax({
|
||
type: 'POST',
|
||
url: dataUrl + 'electricity/interfaceStatus',
|
||
data: "type=4",
|
||
dataType: 'json',
|
||
success: function(res) {
|
||
let interface = res.obj.electricityBean;
|
||
// document.getElementById('requestNum').innerText = parseInt(interface.requestNum);
|
||
// document.getElementById('successNum').innerText = parseInt(interface.successNum);
|
||
// document.getElementById('errorNum').innerText = parseInt(interface.errorNum);
|
||
document.getElementById('requestNum').innerText = 15;
|
||
document.getElementById('successNum').innerText = 15;
|
||
document.getElementById('errorNum').innerText = 0;
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 球机树搜索---回车调用搜索方法
|
||
* @param event
|
||
*/
|
||
function handleKeyDown(event) {
|
||
if (event.keyCode === 13) {
|
||
event.preventDefault(); // 阻止默认的回车行为
|
||
// 在这里执行您想要的操作
|
||
getRoleTreeData(1,$("#keyWord").val())
|
||
}
|
||
}
|
||
|
||
//改变球机树 固定视频or移动视频
|
||
function changeView(num) {
|
||
localStorage.setItem('openBallsNum', num);
|
||
openBalls();
|
||
}
|
||
|
||
//改变选择样式
|
||
function openBalls() {
|
||
var nowNum = localStorage.getItem('openBallsNum');
|
||
if (nowNum == null || nowNum == "null") {
|
||
nowNum = '1';
|
||
}
|
||
console.log("nowNum===" + nowNum)
|
||
if (nowNum == 1) {
|
||
$("#null1").css("border-bottom", "4px solid transparent");
|
||
$("#null2").css("border-bottom", "4px solid #04A087");
|
||
getRoleTreeData(nowNum); //移动球机
|
||
} else if (nowNum == 2) {
|
||
$("#null1").css("border-bottom", "4px solid #04A087");
|
||
$("#null2").css("border-bottom", "4px solid transparent");
|
||
getRoleTreeData(nowNum); //移动球机
|
||
}
|
||
}
|
||
|
||
//树的设置
|
||
var setting1 = {
|
||
// 不显示引导线
|
||
view: {
|
||
selectedMulti: false,
|
||
// showIcon:false
|
||
},
|
||
data: {
|
||
simpleData: {
|
||
enable: true
|
||
}
|
||
},
|
||
edit: {
|
||
enable: false,
|
||
},
|
||
callback: {
|
||
onClick: onTreeClick,
|
||
// 点击前
|
||
beforeClick: beforeClick,
|
||
// 不允许拖拽
|
||
beforeDrag: beforeDrag,
|
||
// beforeExpand: zTreeBeforeExpand //节点展开前的事件
|
||
}
|
||
};
|
||
|
||
function beforeClick(treeId, treeNode) {
|
||
if (treeNode.id == 0) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
//不允许拖拽
|
||
function beforeDrag(treeId, treeNodes) {
|
||
return false;
|
||
}
|
||
|
||
//获取数据初始化树
|
||
function getRoleTreeData(ballType,keyWord) {
|
||
console.log("ballType===" + ballType);
|
||
$.ajax({
|
||
type: 'post',
|
||
url: dataUrl + 'video/getBallTreeData',
|
||
data: {
|
||
keyWord : keyWord
|
||
},
|
||
dataType: 'json',
|
||
success: function (result) {
|
||
var obj = result.obj;
|
||
if (obj == null && obj.length == 0) {
|
||
layer.alert("暂无球机信息");
|
||
} else {
|
||
var data = parseTreeData(obj);
|
||
var nodes = zNodes1.concat(data);
|
||
$.fn.zTree.init($("#resourceTree"), setting1, nodes);
|
||
}
|
||
|
||
},
|
||
error: function (e) {
|
||
console.log(e.resMsg);
|
||
},
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 解析返回的树数据及其结构
|
||
* @param {Object} data
|
||
* @param {Object} allNum
|
||
*/
|
||
function parseTreeData(data) {
|
||
var allNum = 0;
|
||
var onlineNum = 0;
|
||
var noLineNum = 0;
|
||
for (var i = 0; i < data.length; i++) {
|
||
var nodeType = data[i].type;
|
||
if (nodeType == 1) {
|
||
data[i].icon = "../../img/video/jingyanyuan.png";
|
||
} else if (nodeType == 2) {
|
||
data[i].icon = "../../img/video/dong.png";
|
||
} else if (nodeType == 3) {
|
||
data[i].icon = "../../img/video/ceng.png";
|
||
} else if (nodeType == 4) {
|
||
allNum++;
|
||
data[i].icon = "../../img/video/notOnline.png";
|
||
if (data[i].onLine === '1') {
|
||
onlineNum++;
|
||
data[i].icon = "../../img/video/online.png";
|
||
data[i].ballStatus = "1";
|
||
continue;
|
||
}
|
||
}
|
||
}
|
||
$("#equipmentNmb").html(allNum);
|
||
$("#onlineNmb").html(onlineNum);
|
||
$("#OfflineNmb").html(allNum - onlineNum);
|
||
return data;
|
||
}
|
||
|
||
function dataClick() {
|
||
var element1 = document.getElementById("details1");
|
||
var element3 = document.getElementById("details3");
|
||
var videoWindow = document.getElementById("videoWindow");
|
||
var audioPlayer = document.getElementById("audioPlayer");
|
||
var centerNumCenter = document.getElementById("center_num_center");
|
||
var icon = document.getElementById("icon");
|
||
let treeDiv = document.getElementById("treeDiv");
|
||
var videoSwitch = document.getElementById("videoSwitch");
|
||
|
||
if (element1.style.display === "none") { // 如果第一个元素是隐藏状态audioPlayer
|
||
videoWindow.style.display = "block"; // 切换为显示状态
|
||
element1.style.display = "block"; // 切换为显示状态
|
||
centerNumCenter.style.display = "block"; // 切换为显示状态
|
||
element3.style.display = "none"; // 否则切换为隐藏状态
|
||
audioPlayer.style.display = "none"; // 否则切换为隐藏状态
|
||
icon.style.display = "none"; // 否则切换为隐藏状态
|
||
treeDiv.style.height = "380px";
|
||
videoSwitch.innerHTML = "视频监控";
|
||
|
||
} else {
|
||
videoWindow.style.display = "none"; // 否则切换为隐藏状态
|
||
element1.style.display = "none"; // 否则切换为隐藏状态
|
||
centerNumCenter.style.display = "none"; // 否则切换为隐藏状态
|
||
element3.style.display = "block"; // 切换为显示状态
|
||
audioPlayer.style.display = "block"; // 切换为显示状态
|
||
icon.style.display = "block"; // 切换为显示状态
|
||
treeDiv.style.height = "553px";
|
||
videoSwitch.innerHTML = "历史视频";
|
||
|
||
|
||
}
|
||
if (clickCount === 0) {
|
||
clickCount = 1;
|
||
stopVideo(null, null, 2);
|
||
} else if (clickCount === 1) {
|
||
clickCount = 0;
|
||
}
|
||
}
|
||
|
||
//播放历史视频
|
||
|
||
// function loadVideo(url) {
|
||
// // 创建一个 XMLHttpRequest 对象
|
||
// var xhr = new XMLHttpRequest();
|
||
//
|
||
// // 发送 HEAD 请求,获取视频文件的状态码
|
||
// xhr.open('HEAD', url, true);
|
||
// xhr.onreadystatechange = function() {
|
||
// if (xhr.readyState === 4) {
|
||
// if (xhr.status === 200) {
|
||
// var audioPlayer = document.getElementById('audioPlayer');
|
||
// audioPlayer.src = url;
|
||
//
|
||
// } else if (xhr.status === 404) {
|
||
// console.log('视频文件不存在,继续加载...');
|
||
// layer.msg('视频加载中', {icon: 15});
|
||
// setTimeout(function() {
|
||
// loadVideo(url); // 递归调用自身再次发送请求
|
||
// }, 3000); // 设置延迟时间(单位:毫秒),可以根据实际情况调整
|
||
// } else {
|
||
// // 其他状态码,处理错误情况
|
||
// console.error("请求视频文件失败");
|
||
// }
|
||
// }
|
||
// };
|
||
// xhr.send();
|
||
// }
|
||
|
||
function loadVideo(url) {
|
||
// 创建一个 XMLHttpRequest 对象
|
||
var xhr = new XMLHttpRequest();
|
||
|
||
// 发送 HEAD 请求,获取视频文件的状态码
|
||
xhr.open('HEAD', url, true);
|
||
xhr.onreadystatechange = function() {
|
||
if (xhr.readyState === 4) {
|
||
if (xhr.status === 200) {
|
||
setTimeout(function() {
|
||
const iframe = document.getElementById('audioPlayer');
|
||
iframe.setAttribute('src', url);
|
||
videoLoaded = true;
|
||
const el = document.querySelector('.layui-icon-refresh-3');
|
||
if (el) {
|
||
el.addEventListener('click', function() {
|
||
const iframe = document.getElementById('audioPlayer');
|
||
iframe.setAttribute('src', url);
|
||
videoLoaded = true;
|
||
});
|
||
}
|
||
}, 5000);
|
||
|
||
} else if (xhr.status === 404) {
|
||
console.log('视频文件不存在,继续加载...');
|
||
layer.msg('视频加载中', {icon: 10});
|
||
setTimeout(function() {
|
||
loadVideo(url); // 递归调用自身再次发送请求
|
||
}, 5000); // 设置延迟时间(单位:毫秒),可以根据实际情况调整
|
||
} else {
|
||
// 其他状态码,处理错误情况
|
||
console.error("请求视频文件失败");
|
||
}
|
||
}
|
||
};
|
||
xhr.send();
|
||
}
|
||
|
||
function playHistoricalVideo(startTime, endTime, videoType, channelId) {
|
||
console.log('开始时间:', startTime + '结束时间:', endTime + '视频类型:', videoType + '通道号:', channelId);
|
||
$.ajax({
|
||
type: 'POST',
|
||
url: dataUrl + 'video/playback',
|
||
data: {
|
||
startTime: startTime,
|
||
endTime: endTime,
|
||
channelId: channelId,
|
||
videoType: videoType
|
||
},
|
||
dataType: 'json',
|
||
success: function(res) {
|
||
let url = videoUrl + res.obj;
|
||
console.log("url:"+ url);
|
||
const iframe = document.getElementById('audioPlayer');
|
||
iframe.src = '';
|
||
//获取请求状态
|
||
getReadyState(startTime, endTime, videoType, channelId, url);
|
||
// loadVideo(url); // 调用加载视频的函数
|
||
}
|
||
});
|
||
}
|
||
|
||
function getReadyState( startTime, endTime, videoType, channelId, url) {
|
||
|
||
// 使用split方法将路径以斜杠为分隔符拆分成数组
|
||
const segments = url.split('/');
|
||
|
||
// 获取数组中最后一个非空元素,即最后一个斜杠之后的内容
|
||
const videoName = segments.filter(segment => segment !== '').pop();
|
||
console.log(videoName);
|
||
|
||
$.ajax({
|
||
type: 'POST',
|
||
url: dataUrl + 'video/getDownloadStatus',
|
||
data: {
|
||
videoName: videoName
|
||
},
|
||
dataType: 'json',
|
||
success: function(res) {
|
||
if (res.obj === 17) {
|
||
layer.msg('视频获取失败请稍等,正在重新获取...', {icon: 10});
|
||
playHistoricalVideo(startTime, endTime, videoType, channelId); // 下载失败回调重新获取视频地址
|
||
}else {
|
||
loadVideo(url); // 调用加载视频的函数
|
||
}
|
||
|
||
}
|
||
});
|
||
}
|
||
|
||
//获取树点击事件 执行播放视频
|
||
function onTreeClick(event, treeId, treeNode, clickFlag) {
|
||
console.log(clickCount)
|
||
if (clickCount === 0) {
|
||
if(playBallList.length > 0){
|
||
if (playBallList[0].puid === "34020000001180000003"){
|
||
playBallList[0].myPlayer.pause();
|
||
playBallList[0].myPlayer.unload();
|
||
playBallList[0].myPlayer.detachMediaElement();
|
||
playBallList[0].myPlayer.destroy();
|
||
playBallList[0].myPlayer = null;
|
||
playBallList = [];
|
||
}
|
||
}
|
||
let state = true;
|
||
var ballFrom = treeNode.onLine;
|
||
console.log("ballFrom=" + ballFrom);
|
||
var puid = treeNode.puid;
|
||
if (puid == '' || puid == "null") {
|
||
layer.alert("puid为空!请联系运维人员核对!");
|
||
return;
|
||
}
|
||
let ballStatus = treeNode.onLine;
|
||
console.log("puid=" + puid);
|
||
var name = treeNode.name;
|
||
var ballIndex = treeNode.ballIndex;
|
||
console.log("onTreeClick name=" + name);
|
||
console.log("onTreeClick ballIndex=" + ballIndex);
|
||
if (ballIndex == null) {
|
||
ballIndex = '0';
|
||
}
|
||
if (ballStatus != 1) {
|
||
alert("请选择在线视频观看");
|
||
return;
|
||
}
|
||
if (!isEmpty(puid)) {
|
||
//if (onLine === "1") {
|
||
if (true) {
|
||
//去除空播对象
|
||
remove();
|
||
$.each(playBallList, function (index, item) {
|
||
if (!isEmpty(item)) {
|
||
if (puid === item.puid) {
|
||
//notify("此球机正在播放,请勿重复播放", "warning", "");
|
||
ballScreen(item.selectedScreen.replace("video", ""));
|
||
state = false;
|
||
}
|
||
}
|
||
});
|
||
|
||
if (state) {
|
||
$.each(videoList, function (index, item) {
|
||
if (selectedScreen === item.selectedScreen) {
|
||
if (!item.playState) {
|
||
state = false;
|
||
}
|
||
}
|
||
});
|
||
//寻找没有播放视频的窗口
|
||
if (state && playBallList.length > 0) {
|
||
$.each(videoList, function (index, item) {
|
||
if (!item.playState) {
|
||
if (index < numOfWindows) {
|
||
selectedScreen = item.selectedScreen;
|
||
return false;
|
||
}
|
||
}
|
||
});
|
||
}
|
||
//视频替换
|
||
$.each(playBallList, function (index, item) {
|
||
if (!isEmpty(item)) {
|
||
if (selectedScreen === item.selectedScreen) {
|
||
if (item.start && item.myPlayer !== null) {
|
||
item.token = '';
|
||
item.myPlayer.pause();
|
||
item.myPlayer.unload();
|
||
item.myPlayer.detachMediaElement();
|
||
item.myPlayer.destroy();
|
||
item.myPlayer = null;
|
||
playBallList.splice(index, 1);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
playBallList.push({
|
||
puid: puid,
|
||
selectedScreen: selectedScreen,
|
||
window: 1,
|
||
start: false,
|
||
type: ballFrom,
|
||
myPlayer: null,
|
||
token : '',
|
||
pathType: 2
|
||
});
|
||
|
||
$.each(videoList, function (index, item) {
|
||
if (selectedScreen === item.selectedScreen) {
|
||
item.playState = true;
|
||
}
|
||
});
|
||
|
||
//播放视频
|
||
qxPlayVideo(puid, ballIndex);
|
||
}
|
||
} else {
|
||
notify("请选择开机的球机", "warning", "");
|
||
}
|
||
}
|
||
}else if (clickCount === 1){
|
||
layui.use('layer', function(){
|
||
var layer = layui.layer;
|
||
var startTime = document.getElementById('start-time').value;
|
||
var endTime = document.getElementById('end-time').value;
|
||
let videoType = treeNode.videoType;
|
||
let channelId = treeNode.channelId;
|
||
|
||
if (startTime === '' || endTime === '') {
|
||
|
||
layer.msg('时间不能为空', {icon: 10});
|
||
|
||
} else {
|
||
// 计算起始时间和结束时间的间隔(单位:毫秒)
|
||
var timeDiff = new Date(endTime).getTime() - new Date(startTime).getTime();
|
||
|
||
// 判断视频时长是否超过两小时(7200000毫秒)
|
||
if (timeDiff > 7200000) {
|
||
layer.msg('视频不能超过两小时', {icon: 6});
|
||
} else {
|
||
if (videoLoaded) {
|
||
videoLoaded = false;
|
||
playHistoricalVideo(startTime, endTime, videoType, channelId);
|
||
}else {
|
||
// 弹出提示框询问用户是否确定关闭当前视频
|
||
layer.confirm('当前视频正在加载,是否确定关闭?', {icon: 3, title:'提示'}, function(index){
|
||
playHistoricalVideo(startTime, endTime, videoType, channelId);
|
||
layer.close(index); // 关闭提示框
|
||
}, function(index){
|
||
// 用户点击取消,则关闭当前操作,不发送新的请求
|
||
layer.close(index); // 关闭提示框
|
||
});
|
||
}
|
||
}
|
||
}
|
||
});
|
||
|
||
}
|
||
}
|
||
|
||
//防止重复播放,与去掉空播对象
|
||
function remove() {
|
||
$.each(playBallList, function (index, item) {
|
||
if (!isEmpty(item)) {
|
||
if (item.window === null) {
|
||
playBallList.splice(index, 1);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 播放视频
|
||
* @param puId
|
||
* @param idx
|
||
*/
|
||
function qxPlayVideo(puId, idx) {
|
||
setTimeout(function () {
|
||
readyPlay(puId, idx);
|
||
}, 500);
|
||
}
|
||
|
||
|
||
//开始播放视频
|
||
function readyPlay(puId, idx) {
|
||
//若是清晰平台,删除连接对象
|
||
// mySet.delete(selectedScreen);
|
||
var tk = token1;
|
||
var pathType = 2;
|
||
let url = _cf_1.q2http_url + "stream.flv?puid=" + puId + "&idx=" + idx + "&stream=0&token=" + token1;
|
||
if (playBallList.length > 5) {
|
||
url = _cf.q2http_url + "stream.flv?puid=" + puId + "&idx=" + idx + "&stream=0&token=" + token2;
|
||
tk = token2;
|
||
pathType = 1;
|
||
console.log("tk=============="+tk)
|
||
}
|
||
console.log("playBallList1111=" + JSON.stringify(playBallList));
|
||
//循环视频播放列表
|
||
var isPlay = null;
|
||
$.each(playBallList, function (index, item) {
|
||
if (!isEmpty(item)) {
|
||
if (selectedScreen === item.selectedScreen) {
|
||
if (item.window !== null) {
|
||
var playObj = item.myPlayer
|
||
isPlay = item.start;
|
||
try {
|
||
var myPlayer = flvjs.createPlayer({
|
||
type: 'flv',
|
||
url: url,
|
||
isLive: true,
|
||
hasAudio: false
|
||
}, {
|
||
enableWorker: false,
|
||
autoCleanupSourceBuffer: true, //清理缓冲区
|
||
enableStashBuffer: false,
|
||
stashInitialSize: 128, // 减少首桢显示等待时长
|
||
statisticsInfoReportInterval: 600,
|
||
// fixAudioTimestampGap : false
|
||
});
|
||
|
||
myPlayer.attachMediaElement(document.getElementById(item.selectedScreen));
|
||
myPlayer.load();
|
||
setTimeout(function () {
|
||
myPlayer.play();
|
||
}, 200);
|
||
item.myPlayer = myPlayer;
|
||
item.start = true;
|
||
item.token = tk;
|
||
item.pathType = pathType;
|
||
|
||
console.log("playBallList222=" + JSON.stringify(playBallList));
|
||
console.log("item.token==========" + item.token);
|
||
} catch (e) {
|
||
alert("该视频不在线。。。");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
});
|
||
$('#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%");
|
||
}
|
||
|
||
/**
|
||
* @param {*} player 播放控件对象
|
||
* @param {*} index playBallList 下标,第几个
|
||
* @param {*} type 类型 1切换窗口关闭视频,2主动关闭视频
|
||
*/
|
||
function stopVideo(player, index, type) {
|
||
if (type == 1) {
|
||
player.unload();
|
||
player.detachMediaElement();
|
||
player.destroy();
|
||
player = null;
|
||
videoList.splice(index, 1);
|
||
for (let i = 0; i < videoList.length; i++) {
|
||
if (selectedScreen === videoList[i].selectedScreen) {
|
||
videoList[i].playState = false;
|
||
}
|
||
}
|
||
} else {
|
||
$.each(playBallList, function (index, item) {
|
||
if (!isEmpty(item)) {
|
||
if (selectedScreen === item.selectedScreen) {
|
||
let start = item.start;
|
||
let player = item.myPlayer;
|
||
item.token = '';
|
||
if (start && player !== null) {
|
||
player.pause();
|
||
player.unload();
|
||
player.detachMediaElement();
|
||
player.destroy();
|
||
player = null;
|
||
playBallList.splice(index, 1);
|
||
|
||
}
|
||
}
|
||
}
|
||
});
|
||
for (let i = 0; i < videoList.length; i++) {
|
||
if (selectedScreen === videoList[i].selectedScreen) {
|
||
videoList[i].playState = false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//1个视频
|
||
function ballOne() {
|
||
setBallNumBtnStyle(1);
|
||
numOfWindows = 1;
|
||
document.getElementById("ball1").style.cssText = "width: 97%;height: 98.6%;float:left";
|
||
document.getElementById("video1").style.cssText = "width: 100%;height: 100%;";
|
||
$('.video1-dimensions').css("width", "100%");
|
||
$('.video1-dimensions').css("height", "100%");
|
||
// $.each(playBallList, function (index, item) {
|
||
// if (!isEmpty(item)) {
|
||
// if (item.selectedScreen !== "video1") {
|
||
// let start = item.start;
|
||
// let player = item.myPlayer;
|
||
// if(start && player != null){
|
||
// stopVideo(player,index,1);
|
||
// }
|
||
// }
|
||
// }
|
||
// });
|
||
for (var i = 2; i <= 9; i++) {
|
||
document.getElementById("ball" + i).style.display = "none";
|
||
}
|
||
|
||
for (let i = 2; i <= 9; i++) {
|
||
videoList[i - 1].playState = false;
|
||
}
|
||
}
|
||
|
||
//4个视频
|
||
function ballFour() {
|
||
setBallNumBtnStyle(4);
|
||
numOfWindows = 4;
|
||
// $.each(playBallList, function (index, item) {
|
||
// if (!isEmpty(item)) {
|
||
// if (item.selectedScreen.replace("video","") > 4 ) {
|
||
// let start = item.start;
|
||
// let player = item.myPlayer;
|
||
// if(start && player != null){
|
||
// stopVideo(player,index,1);
|
||
// }
|
||
// }
|
||
// }
|
||
// });
|
||
for (var i = 1; i < 5; i++) {
|
||
document.getElementById("ball" + i).style.cssText = "width: 48.5%;height: 48.8%;float:left";
|
||
document.getElementById("video" + i).style.cssText = "width: 100%;height: 100%;";
|
||
$('.video' + i + '-dimensions').css("width", "100%");
|
||
$('.video' + i + '-dimensions').css("height", "100%");
|
||
}
|
||
|
||
for (var i = 5; i <= 9; i++) {
|
||
document.getElementById("ball" + i).style.display = "none";
|
||
}
|
||
|
||
for (let i = 5; i <= 9; i++) {
|
||
videoList[i - 1].playState = false;
|
||
}
|
||
}
|
||
|
||
//9个视频
|
||
function ballNine() {
|
||
setBallNumBtnStyle(9);
|
||
numOfWindows = 9;
|
||
for (var i = 1; i <= 9; i++) {
|
||
document.getElementById("ball" + i).style.cssText = "width: 32.2%;height: 32%;float:left";
|
||
document.getElementById("video" + i).style.cssText = "width: 100%;height: 100%;";
|
||
$('.video' + i + '-dimensions').css("width", "100%");
|
||
$('.video' + i + '-dimensions').css("height", "100%");
|
||
}
|
||
|
||
}
|
||
|
||
//设置球机上方数字样式
|
||
function setBallNumBtnStyle(type) {
|
||
var a = [1, 4, 9];
|
||
for (var i = 0; i < a.length; i++) {
|
||
if (a[i] == type) {
|
||
document.getElementById('ballBtn' + type).style.background = '#17CBAE';
|
||
} else {
|
||
document.getElementById('ballBtn' + a[i]).style.background = 'transparent';
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
//单机球机页面点击
|
||
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) {
|
||
console.log("item.puid===========" + item.puid);
|
||
console.log("item.state===========" + item.start);
|
||
return true;
|
||
}
|
||
}))
|
||
|
||
}
|
||
|
||
//双击球机页面
|
||
function doubleClick(t) {
|
||
if (timer) { //取消上次延时未执行的方法
|
||
window.clearTimeout(timer);
|
||
}
|
||
var div = document.getElementById("ball" + t);
|
||
if (status == 1) { //全屏
|
||
$("#video" + t).css("width", "100%");
|
||
$("#video" + t).css("height", "100%");
|
||
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) { //关闭全屏
|
||
if (numOfWindows == 1) {
|
||
$("#" + t).css("width", "97%");
|
||
$("#" + t).css("height", "98.6%");
|
||
$("#" + t).css("float", "left");
|
||
} else if (numOfWindows == 4) {
|
||
$("#" + t).css("width", "48.5%");
|
||
$("#" + t).css("height", "48.8%");
|
||
$("#" + t).css("float", "left");
|
||
} else {
|
||
$("#" + t).css("width", "32.2%");
|
||
$("#" + t).css("height", "32%");
|
||
$("#" + t).css("float", "left");
|
||
}
|
||
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 isEmpty(str) {
|
||
if (str == undefined || str == null || str == "null" || str == "") {
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
} |