IntelligentRecognition/ah-jjsp-web/bns/js/public/videoPlay.js

249 lines
7.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//视频播放token
let vToken;
//播放视频类型 1实时 2历史
let playType = 'video';
//初始化对象
let videos;
//分屏数量
let winNums = 1;
//设备编码
let currCode;
let obj = {
ak: ty.connParams.ak,
sk: ty.connParams.sk
};
function initVideo() {
initLogin();
window.videos = videos = new VideoObj("videoDemo", winNums, ty.connParams.address, ty.connParams.port, vToken, playType, 'callBack', 'false', ty.connParams.ak);//创建实例对象
}
/**
* @param {Object} eventContext 回调函数
* @param {Object} eventType
*/
window.callBack = function (eventType, eventContext) {
console.log('这是回调函数');
}
/**
* 登录获取token
*/
function initLogin() {
$.ajax({
data: JSON.stringify(obj),
type: "POST",
contentType: 'application/json',
dataType: "json",
url: ty.basePath + "uvp-backend-common/api/v1/authorization",
success: function (result) {
vToken = result.resultValue.token; // 拿到token
}
});
}
/**
* 播放视频
* @param {Object} winNum
* @param {Object} devCode
* @param {Object} devName
*/
function playVideo(winNum, devCode, devName) {
currCode = devCode;
/**
* 需判断所选视频是否正在播放
* 关闭视频方法
* videos.closeAllVideo();
*/
videos.videoPlay(winNum, "h264", devCode, '', devName, '1');
}
/**
* 云台控制
* @param key
*/
function playControl() {
let key;
if (!isEmpty(currCode)) {
//点击事件
let control = $('[lay-event=control]');
control.unbind();
control.mousedown(function (event) {
key = controlType[$(this).attr('id')][0]
videos.videoControl(currCode, key, 5, 5);
event.stopPropagation();
}).mouseup(function (event) {
key = controlType[$(this).attr('id')][1]
videos.videoControl(currCode, key, 5, 5);
event.stopPropagation();
});
}
}
/**
* 录制视频
*/
function recordVideo(id) {
let video = $("#" + id + "_video")[0];
let canvas = $("#canvas_" + id)[0];
let width = $(video).width();
let height = $(video).height();
let encodeType = "video/webm;codecs=vp8";
let chunks = [];
let frameId = null;
//设置画布背景
let ctx = canvas.getContext('2d');
let H = window.innerHeight;
let W = window.innerWidth;
const pixelRatio = window.devicePixelRatio || 1;
const backingStoreRatio = ctx.webkitBackingStorePixelRatio ||
ctx.mozBackingStorePixelRatio ||
ctx.msBackingStorePixelRatio ||
ctx.oBackingStorePixelRatio ||
ctx.backingStorePixelRatio || 1;
const ratio = pixelRatio / backingStoreRatio;
canvas.width = width * ratio;
canvas.height = height * ratio;
canvas.style.width = W + 'px';
canvas.style.height = H + 'px';
ctx.scale(ratio, ratio);
ctx.drawImage(video, 0, 0, width, height); // 将video中的数据绘制到canvas里
//创建MediaRecorder设置媒体参数
let stream = canvas.captureStream();
let start = true;
let recorder = new MediaRecorder(stream, {
mimeType: encodeType
});
//收集录制数据
recorder.ondataavailable = e => {
chunks.push(e.data);
};
$('#localVideoBtn').click(function () {
if (playBallList.length === 0) {
layer.msg("请先播放视频", {icon: 2});
return;
}
if (selectedScreen !== $(video).closest("div").attr("id")) {
return;
}
if (start) {
layer.msg("开启本地录像", {icon: 0});
chunks = [];
recorder.start(10);
drawFrame();
$(this).css('background-image', 'url(../../img/video/no_check/local_video_no.png)')
start = false;
$.each(playBallList, function (index, item) {
if (item.selectedScreen === selectedScreen) {
item.recordVideo = start;
}
})
} else {
layer.msg("关闭本地录像", {icon: 0});
recorder.stop();
cancelAnimationFrame(frameId);
download();
$(this).css('background-image', 'url(../../img/video/no_check/local_video.png)')
start = true;
$.each(playBallList, function (index, item) {
if (item.selectedScreen === selectedScreen) {
item.recordVideo = start;
}
})
}
});
//播放视频
function drawFrame() {
ctx.drawImage(video, 0, 0, width, height);
frameId = requestAnimationFrame(drawFrame);
}
//下载录制内容
function download() {
let blob = new Blob(chunks, {type: 'video/webm'});
let url = window.URL.createObjectURL(blob);
let link = document.createElement("a");
link.href = url;
link.download = new Date().getTime() + ".mp4";
link.style.display = "none";
document.body.appendChild(link);
link.click();
link.remove();
}
}
/**
* 本地抓拍
*/
function screenshot(selectedScreen, type) {
let video = $("#" + selectedScreen + "_video")[0];
let canvas = $('#canvas_' + selectedScreen)[0];
let ctx = canvas.getContext('2d');
let H = window.innerHeight;
let W = window.innerWidth;
const pixelRatio = window.devicePixelRatio || 1;
const backingStoreRatio = ctx.webkitBackingStorePixelRatio ||
ctx.mozBackingStorePixelRatio ||
ctx.msBackingStorePixelRatio ||
ctx.oBackingStorePixelRatio ||
ctx.backingStorePixelRatio || 1;
const ratio = pixelRatio / backingStoreRatio;
canvas.width = $(video).width() * ratio;
canvas.height = $(video).height() * ratio;
canvas.style.width = W + 'px';
canvas.style.height = H + 'px';
ctx.scale(ratio, ratio);
ctx.drawImage(video, 0, 0, $(video).width(), $(video).height()); // 将video中的数据绘制到canvas里
let image = canvas.toDataURL('image/jpg').replace('image/jpg', 'image/octet-stream');
saveAs(image, new Date().getTime() + '.png' || new Date().getTime() + '.png');
}
/**
* 根据设备编码获取设备近期上下线详细信息
* @param devCodes 设备编码(一个或者多个设备编码)
* @param startTime 开始时间(格式yyyy-mm-dd),默认为当天
* @param endTime 结束时间(格式yyyy-mm-dd),默认为当天
*/
function queryDevStatusDescriptionInfo(devCodes, startTime, endTime) {
Ajax().post({
url: videoUrl + '/uvp-backend-maintenance/api/v1/dev/queryDevStatusDescriptionInfo',
data: {
devCodes: devCodes,
startTime: startTime,
endTime: endTime
},
success: function (data) {
}
});
}
/**
* 根据设备编码查询历史图片
* @param devCode 设备编码
* @param startTime 检索图片产生的时间范围的开始时间格式为yyyy-mm-dd
* @param endTime 检索图片产生的时间范围的结束时间格式为yyyy-mm-dd
*/
function queryImageByDevice(devCode, startTime, endTime) {
Ajax().post({
url: videoUrl + '/uvp-backend-imagesurveillance/api/v1/image/queryImageByDevice',
data: {
devCode: devCode,
startDate: startTime,
endDate: endTime,
pageNo: 1,
pageSize: 6
},
success: function (data) {
}
});
}