249 lines
7.3 KiB
Plaintext
249 lines
7.3 KiB
Plaintext
//视频播放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) {
|
||
}
|
||
});
|
||
|
||
}
|
||
|
||
|