456 lines
16 KiB
Plaintext
456 lines
16 KiB
Plaintext
|
|
var token = null;
|
||
|
|
var device_list = [];
|
||
|
|
var flvPlayer = "";
|
||
|
|
var myPlayer = "";
|
||
|
|
var pictureId = "";
|
||
|
|
var storageId = "";
|
||
|
|
var deviceinfo = {
|
||
|
|
puid: "",
|
||
|
|
idx: "",
|
||
|
|
path: "",
|
||
|
|
id: ""
|
||
|
|
};
|
||
|
|
var i = 0;
|
||
|
|
var host = _cf.q2http_url;
|
||
|
|
//post请求
|
||
|
|
function requestPost(router, params, callback) {
|
||
|
|
var self = this;
|
||
|
|
$.ajax({
|
||
|
|
type: 'post',
|
||
|
|
url: host + router,
|
||
|
|
data: params,
|
||
|
|
traditional: true,
|
||
|
|
dataType: 'json',
|
||
|
|
async: true,
|
||
|
|
complete: function (rv) {
|
||
|
|
if (typeof callback == 'function') callback(rv)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
//get请求
|
||
|
|
function requestGet(router, callback) {
|
||
|
|
var self = this;
|
||
|
|
var url = host + router;
|
||
|
|
$.ajax({
|
||
|
|
type: 'get',
|
||
|
|
url: url,
|
||
|
|
dataType: 'json',
|
||
|
|
async: true,
|
||
|
|
complete: function (rv) {
|
||
|
|
if (typeof callback == 'function') callback(rv)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
//创建平台连接
|
||
|
|
function connect() {
|
||
|
|
var self = this;
|
||
|
|
var params = {
|
||
|
|
"address": _cf.connParams.address,
|
||
|
|
"port": _cf.connParams.port,
|
||
|
|
"user": _cf.connParams.user,
|
||
|
|
"password": _cf.connParams.password,
|
||
|
|
"epid": _cf.connParams.epid,
|
||
|
|
"fixaddr": _cf.connParams.bfix
|
||
|
|
}
|
||
|
|
requestPost('login', params, function (rv) {
|
||
|
|
let self = this;
|
||
|
|
var result = {
|
||
|
|
errcode: -1,
|
||
|
|
token: ''
|
||
|
|
}
|
||
|
|
var respJSON = rv.responseJSON;
|
||
|
|
if (respJSON.hasOwnProperty('errcode')) {
|
||
|
|
result.errcode = respJSON.errcode;
|
||
|
|
}
|
||
|
|
if (respJSON.hasOwnProperty('token')) {
|
||
|
|
result.token = respJSON.token;
|
||
|
|
result.errcode = 0;
|
||
|
|
token = result.token;
|
||
|
|
fetch_device(0, 200);
|
||
|
|
device_resource_tree();
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
//获取设备列表
|
||
|
|
function fetch_device(offset, count) {
|
||
|
|
|
||
|
|
var self = this;
|
||
|
|
|
||
|
|
//获取设备列表的接口
|
||
|
|
var router = 'CAS/C_CAS_QueryPUIDSets?offset=' + offset + '&count=' + count + '&token=' + token;
|
||
|
|
requestGet(router, rv => {
|
||
|
|
var respJSON = rv.responseJSON;
|
||
|
|
if (respJSON.constructor != Array) {
|
||
|
|
respJSON = [respJSON];
|
||
|
|
}
|
||
|
|
device_list = respJSON;
|
||
|
|
|
||
|
|
//把设备加载到指定的位置
|
||
|
|
render_device_nodes(device_list);
|
||
|
|
|
||
|
|
if (device_list.length == count) {
|
||
|
|
offset += count;
|
||
|
|
fetch_device(offset, count);
|
||
|
|
} else {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
function render_device_nodes(device_list) {
|
||
|
|
let data = new Array();
|
||
|
|
for (var i = 0; i < device_list.length; i++) {
|
||
|
|
var list = device_list[i];
|
||
|
|
var icon = "icon-device-offline";
|
||
|
|
if (list.OnlineFlag == 1) {
|
||
|
|
icon = "icon-device-online";
|
||
|
|
}
|
||
|
|
|
||
|
|
data.push({
|
||
|
|
id: list.$,
|
||
|
|
text: list.Name,
|
||
|
|
iconCls: icon,
|
||
|
|
attributes: {
|
||
|
|
list: list
|
||
|
|
},
|
||
|
|
state: "closed",
|
||
|
|
children: [{
|
||
|
|
text: '正在查询资源……'
|
||
|
|
}]
|
||
|
|
});
|
||
|
|
data.sort((a, b) => {
|
||
|
|
return b.attributes.list.OnlineFlag - a.attributes.list.OnlineFlag;
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
$('#resource_tree').tree('append', {
|
||
|
|
data: data
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
function device_resource_tree() {
|
||
|
|
$('#resource_tree').tree({
|
||
|
|
data: [],
|
||
|
|
onBeforeLoad: function () {},
|
||
|
|
onDblClick: function (node) {
|
||
|
|
QueryRecordFiles(node);
|
||
|
|
},
|
||
|
|
onExpand: function (node) {
|
||
|
|
console.log(node)
|
||
|
|
var childs = $(this).tree('getChildren', node.target);
|
||
|
|
console.log(childs)
|
||
|
|
if (childs.length == 1) {
|
||
|
|
if (node.children[0].text == "正在查询资源……") {
|
||
|
|
var newList = node.attributes.list;
|
||
|
|
var params = {
|
||
|
|
puid: [newList.$]
|
||
|
|
};
|
||
|
|
requestPost('C_CAS_QueryPUIDRes?token=' + token, params, rv => {
|
||
|
|
var respJSON = rv.responseJSON;
|
||
|
|
var res = respJSON.Res;
|
||
|
|
var videoList = [];
|
||
|
|
console.log(res)
|
||
|
|
var childNodes = new Array();
|
||
|
|
for (let j = 0; j < res.length; j++) {
|
||
|
|
var resource = res[j];
|
||
|
|
if (resource.Type != "IV") {
|
||
|
|
continue;
|
||
|
|
} else {
|
||
|
|
videoList = resource;
|
||
|
|
var iconsuffix = "offline";
|
||
|
|
var icon = "icon-camera-" + iconsuffix;
|
||
|
|
if (newList.OnlineFlag == 1) {
|
||
|
|
iconsuffix = "online";
|
||
|
|
icon = "icon-camera-" + iconsuffix;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
childNodes.push({ id: newList.$ + "_" + videoList.Idx, text: videoList.Name, iconCls: icon, attributes: { newList: newList, self: videoList } });
|
||
|
|
|
||
|
|
}
|
||
|
|
if (childNodes.length > 0) {
|
||
|
|
//删除load节点
|
||
|
|
for (var i = 0; i < childs.length; i++) {
|
||
|
|
$('#resource_tree').tree('remove', childs[i].target);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
$('#resource_tree').tree('append', { parent: node.target, data: childNodes });
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
//获取一定时间段的前端录像或云录像
|
||
|
|
function QueryRecordFiles(node) {
|
||
|
|
if (node && node.attributes && node.attributes.self) {
|
||
|
|
var puid = node.attributes.newList.$;
|
||
|
|
var idx = node.attributes.self.Idx;
|
||
|
|
var offset = 0;
|
||
|
|
var count = 200;
|
||
|
|
|
||
|
|
var beginTime = "";
|
||
|
|
var endTime = "";
|
||
|
|
beginTime = $('#vod_record_begintime').datetimespinner('getValue');
|
||
|
|
endTime = $('#vod_record_endtime').datetimespinner('getValue');
|
||
|
|
beginTime = parseInt(DTStrToTimestamp(beginTime).getTime() / 1000);
|
||
|
|
endTime = parseInt(DTStrToTimestamp(endTime) / 1000);
|
||
|
|
|
||
|
|
//获取录像文件
|
||
|
|
queryRecordFiles(idx, puid, beginTime, endTime, offset, count);
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
//获取录像文件
|
||
|
|
function queryRecordFiles(idx, puid, beginTime, endTime, offset, count) {
|
||
|
|
//判断选中的是前端存储还是云存储
|
||
|
|
if ($("#showtype").is(":checked")) {
|
||
|
|
//获取前端录像文件
|
||
|
|
var files = new Array();
|
||
|
|
var router = 'SG/C_SG_QueryRecordFiles?token=' + token + '&idx=' + idx + '&puid=' + puid + '&begin=' + beginTime + '&end=' + endTime + '&offset=' + offset + '&count=' + count;
|
||
|
|
requestGet(router, rv => {
|
||
|
|
var result = new Array();
|
||
|
|
var respJSON = rv.responseJSON;
|
||
|
|
if (respJSON.constructor != Array) {
|
||
|
|
result = [respJSON];
|
||
|
|
} else {
|
||
|
|
result = respJSON;
|
||
|
|
}
|
||
|
|
for (let i = 0; i < result.length; i++) {
|
||
|
|
var f = result[i];
|
||
|
|
files.push({ type: 'local', offset: 0, name: f.Name, size: f.Size, beginTime: f.Begin, endTime: f.End, path: f.Path, puid: puid, idx: idx })
|
||
|
|
}
|
||
|
|
$('#video_file').datagrid("loadData", files);
|
||
|
|
})
|
||
|
|
} else {
|
||
|
|
if ($("#manualvideo").is(":checked")) {
|
||
|
|
var type = 0; //云录像
|
||
|
|
var videofiles = new Array();
|
||
|
|
var router = 'CSS/C_CSS_QueryStorageFiles?token=' + token + '&idx=' + idx + '&puid=' + puid + '&type=' + type + '&begin=' + beginTime + '&end=' + endTime + '&offset=' + offset + '&count=' + count;
|
||
|
|
requestGet(router, rv => {
|
||
|
|
var result = new Array();
|
||
|
|
var respJSON = rv.responseJSON;
|
||
|
|
if (respJSON.constructor != Array) {
|
||
|
|
result = [respJSON];
|
||
|
|
} else {
|
||
|
|
result = respJSON;
|
||
|
|
}
|
||
|
|
console.log(result[0])
|
||
|
|
console.log(result[0].File)
|
||
|
|
for (let i = 0; i < result[0].File.length; i++) {
|
||
|
|
var f = result[0].File[i];
|
||
|
|
//f.File;
|
||
|
|
videofiles.push({ type: 'cloud', offset: 0, name: f.Name, size: f.Size, beginTime: f.Begin, endTime: f.End, path: f.Path, id: f.ID, puid: f.PUID, idx: idx });
|
||
|
|
}
|
||
|
|
$('#video_file').datagrid("loadData", videofiles);
|
||
|
|
})
|
||
|
|
} else if ($("#manualpicture").is(":checked")) {
|
||
|
|
var type = 1; //云抓拍
|
||
|
|
var videofiles = new Array();
|
||
|
|
var router = 'CSS/C_CSS_QueryStorageFiles?token=' + token + '&idx=' + idx + '&puid=' + puid + '&type=' + type + '&begin=' + beginTime + '&end=' + endTime + '&offset=' + offset + '&count=' + count;
|
||
|
|
requestGet(router, rv => {
|
||
|
|
var result = new Array();
|
||
|
|
var respJSON = rv.responseJSON;
|
||
|
|
if (respJSON.constructor != Array) {
|
||
|
|
result = [respJSON];
|
||
|
|
} else {
|
||
|
|
result = respJSON;
|
||
|
|
}
|
||
|
|
for (let i = 0; i < result.File.length; i++) {
|
||
|
|
var f = result[i];
|
||
|
|
f.File;
|
||
|
|
videofiles.push({ type: 'cloud', offset: 0, name: f.Name, size: f.Size, beginTime: f.Begin, endTime: f.End, path: f.Path, id: f.ID, puid: f.PUID, idx: idx });
|
||
|
|
}
|
||
|
|
$('#video_file').datagrid("loadData", videofiles);
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function record_file_sizemap(v, r, i) {
|
||
|
|
if (v < 1024) {
|
||
|
|
return v + "(B)";
|
||
|
|
} else if (v < (1024 * 1024)) {
|
||
|
|
return (parseInt(v) / 1024).toFixed(2) + "(KB)";
|
||
|
|
} else {
|
||
|
|
return (parseInt(v) / (1024 * 1024)).toFixed(2) + "(MB)";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function video_file_vodplay(v, r, i) {
|
||
|
|
var op = "";
|
||
|
|
op += "<a class='easyui-linkbutton' onclick='playVideo(" + i + ")' >点播</a>";
|
||
|
|
return op;
|
||
|
|
}
|
||
|
|
async function playVideo(i) {
|
||
|
|
var rows = $("#video_file").datagrid("getRows");
|
||
|
|
if (rows[i] != "") {
|
||
|
|
$("#dialog").show();
|
||
|
|
var node = rows[i];
|
||
|
|
var puid = node.puid;
|
||
|
|
var idx = 0;
|
||
|
|
var path = "";
|
||
|
|
var path = node.path;
|
||
|
|
var name = node.name;
|
||
|
|
path = path + name;
|
||
|
|
var durationSecond = node.endTime - node.beginTime;
|
||
|
|
var startTime = node.offset;
|
||
|
|
var id = node.id; //云存储
|
||
|
|
|
||
|
|
deviceinfo.puid = puid;
|
||
|
|
deviceinfo.idx = idx;
|
||
|
|
deviceinfo.path = path;
|
||
|
|
deviceinfo.id = id;
|
||
|
|
if (!id) {
|
||
|
|
//前端录像播放接口
|
||
|
|
let url = host + 'SG/VODFile.flv?puid=' + puid + '&idx=' + idx + '&path=' + path + '&startTime=' + startTime + '&durationSecond=' + durationSecond + '&stream=0&token=' + token;
|
||
|
|
console.log(url)
|
||
|
|
playPlayer(url);
|
||
|
|
} else if (id) {
|
||
|
|
//云录像、云抓拍播放接口
|
||
|
|
let url = host + 'CSS/VODFile.flv?puid=' + puid + '&idx=' + idx + '&id=' + id + '&path=' + path + '&start=' + startTime + '&stream=0&token=' + token;
|
||
|
|
playPlayer(url);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
//点播视频
|
||
|
|
function playPlayer(url) {
|
||
|
|
let self = this;
|
||
|
|
if (flvjs.isSupported()) {
|
||
|
|
// if (flvPlayer != "") {
|
||
|
|
// flvPlayer.unload();
|
||
|
|
// flvPlayer.detachMediaElement();
|
||
|
|
// flvPlayer.destroy();
|
||
|
|
// flvPlayer = ""
|
||
|
|
// }
|
||
|
|
setTimeout(() => {
|
||
|
|
var videoElement = "";
|
||
|
|
videoElement = document.getElementById('my-video');
|
||
|
|
//
|
||
|
|
// if (i == 0) {
|
||
|
|
// videoElement = document.getElementById('my-video');
|
||
|
|
// i += 1;
|
||
|
|
// } else {
|
||
|
|
// videoElement = document.getElementById('my-video2');
|
||
|
|
// i = 0;
|
||
|
|
// }
|
||
|
|
|
||
|
|
videoElement.controls = false;
|
||
|
|
flvPlayer = flvjs.createPlayer({
|
||
|
|
type: 'flv',
|
||
|
|
url: url,
|
||
|
|
isLive: true,
|
||
|
|
hasAudio: false
|
||
|
|
});
|
||
|
|
flvPlayer.attachMediaElement(videoElement);
|
||
|
|
flvPlayer.load();
|
||
|
|
flvPlayer.play();
|
||
|
|
}, 10)
|
||
|
|
} else {
|
||
|
|
createPlayer();
|
||
|
|
myPlayer.src(url);
|
||
|
|
myPlayer.on("error", e => {
|
||
|
|
setTimeout(e => {
|
||
|
|
myPlayer.src(url);
|
||
|
|
myPlayer.load(url);
|
||
|
|
myPlayer.play();
|
||
|
|
}, 100);
|
||
|
|
});
|
||
|
|
myPlayer.on("ended", e => {
|
||
|
|
setTimeout((e) => {
|
||
|
|
myPlayer.src(url);
|
||
|
|
myPlayer.load(url);
|
||
|
|
myPlayer.play();
|
||
|
|
}, 100);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function createPlayer() {
|
||
|
|
myPlayer = new videojs('my-video', {
|
||
|
|
"techOrder": ["html5", "flash"],
|
||
|
|
preload: 'auto',
|
||
|
|
posterImage: false,
|
||
|
|
controls: true,
|
||
|
|
autoplay: true,
|
||
|
|
bigPlayButton: false,
|
||
|
|
videoWidth: 704,
|
||
|
|
videoHeight: 598,
|
||
|
|
controlBar: {
|
||
|
|
playToggle: false,
|
||
|
|
volumePanel: {
|
||
|
|
inline: false
|
||
|
|
},
|
||
|
|
remainingTimeDisplay: false,
|
||
|
|
progressControl: false,
|
||
|
|
LiveDisplay: true
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//双击视频可以全屏播放
|
||
|
|
function videofullscreen(box) {
|
||
|
|
let self = this;
|
||
|
|
var p = '#' + box.id;
|
||
|
|
$(p).fullScreen(true);
|
||
|
|
// $(p).toggleFullScreen();
|
||
|
|
$(p).fullScreen(false);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/* 标准的时间字符串转为时间戳 */
|
||
|
|
function DTStrToTimestamp(dateStr) {
|
||
|
|
var d = new Date();
|
||
|
|
var patn = /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$/;
|
||
|
|
|
||
|
|
if (patn.test(dateStr) || patn1.test(dateStr)) {
|
||
|
|
return new Date(dateStr.substr(0, 4), (parseInt(dateStr.substr(5, 2), 10) - 1), dateStr.substr(8,
|
||
|
|
2), dateStr.substr(11, 2), dateStr.substr(14, 2), dateStr.substr(17, 2));
|
||
|
|
} else {
|
||
|
|
return d;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
//双击视频可以全屏播放
|
||
|
|
$("#windowbox").on("dblclick", function () {
|
||
|
|
alert("sssdd")
|
||
|
|
$("#windowbox").fullScreen(true);
|
||
|
|
$("#windowbox").toggleFullScreen();
|
||
|
|
})
|
||
|
|
//开始前端抓拍
|
||
|
|
// async function StartSnapshot() {
|
||
|
|
// var puid = deviceinfo.puid;
|
||
|
|
// var idx = deviceinfo.idx;
|
||
|
|
// await requestGet('SG/C_SG_StartSnapshot?token=' + token +'&idx='+ idx +'&puid=' + puid,rv =>{
|
||
|
|
// })
|
||
|
|
// }
|
||
|
|
//下载前端抓拍文件
|
||
|
|
// async function DownLoadFile() {
|
||
|
|
// var puid = deviceinfo.puid;
|
||
|
|
// var path = deviceinfo.path;
|
||
|
|
// await requestGet('SG/C_SG_DownLoadFile_PushMode?token=' + token +'&path='+ path +'&puid=' + puid,rv =>{
|
||
|
|
// })
|
||
|
|
// }
|
||
|
|
//下载云平台图片文件
|
||
|
|
// function DownLoadFile(){
|
||
|
|
// var path = deviceinfo.path;
|
||
|
|
// var id = deviceinfo.id;
|
||
|
|
// var router = 'CSS/C_CSS_DownloadFile?id=' + id + '&path=' + path + '&token=' + token;
|
||
|
|
// requestGet(router, rv => {
|
||
|
|
// })
|
||
|
|
// }
|
||
|
|
//关闭视频框
|
||
|
|
function closedialog() {
|
||
|
|
if (flvjs.isSupported()) {
|
||
|
|
if (flvPlayer != "") {
|
||
|
|
flvPlayer.unload();
|
||
|
|
flvPlayer.detachMediaElement();
|
||
|
|
flvPlayer.destroy();
|
||
|
|
flvPlayer = ""
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$('#dialog').hide();
|
||
|
|
}
|