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 += "点播"; 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(); }