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

249 lines
7.3 KiB
JavaScript
Raw Permalink Normal View History

2024-05-24 16:09:40 +08:00
//视频播放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) {
}
});
}