video.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652
  1. var webSocket;
  2. var leiBar = 3,shipLi = [];
  3. var playView = {}, uuidView = {}, _Uuid = "";
  4. $(document).ready(function(){
  5. _Uuid = _uuid();
  6. setMsg();
  7. init();
  8. getLi(0);
  9. timeId = setInterval(()=>{
  10. getLi(1);
  11. },60*1000)
  12. })
  13. function setMsg() {
  14. if ('WebSocket' in window) {
  15. webSocket = new WebSocket("ws://121.201.66.101:9988/video");
  16. } else if ('MozWebSocket' in window) {
  17. webSocket = MozWebSocket("ws://121.201.66.101:9988/video");
  18. } else {
  19. window.alert("浏览器不支持WebSocket");
  20. }
  21. webSocket.onopen = function() {
  22. setwsAlive()
  23. }
  24. webSocket.onclose = function() {
  25. console.log("我自闭了");
  26. }
  27. webSocket.onmessage = function(msg) {
  28. let _data = JSON.parse(msg.data);
  29. }
  30. }
  31. function setwsAlive(){
  32. webSocket.send(JSON.stringify({
  33. cmd: "keep_alive",
  34. sid: _Uuid
  35. }))
  36. setTimeout(setwsAlive, 3*1e4);
  37. }
  38. function _uuid() {
  39. let t = () => (65536 * (1 + Math.random()) | 0).toString(16).substring(1);
  40. return t() + t() + t() + t() + t() + t() + t() + t()
  41. }
  42. function init(){
  43. let _str = "";
  44. playView = {};
  45. for(let i=0;i<leiBar*leiBar;i++){
  46. _str += `<div class="videoBg alPlay${i}" style="width: ${100 / leiBar}%;height: ${100 / leiBar}%;"></div>`;
  47. playView["alPlay"+i] = null;
  48. }
  49. $("#videoBox").html(_str);
  50. $(".caremLi .iconfont").removeClass("icon-bofang").addClass("icon-shexiangtou");
  51. }
  52. function getLi(num){
  53. var _arr = [{name:"粤珠",list:[],check:true},
  54. {name:"高栏",list:[],check:false},
  55. {name:"新谷",list:[],check:false},
  56. {name:"其他",list:[],check:false},
  57. {name:"监控室",list:[],check:false}];
  58. infoAjax("G00137283",function(res){
  59. if(num == 0){
  60. _arr[4].list = res;
  61. }else{
  62. shipLi[4].list = res;
  63. }
  64. getList(function acb(_obj, _online){
  65. _obj.sort(function(a,b){ return Number(a.prod.replace(/[^0-9]/ig, "")) - Number(b.prod.replace(/[^0-9]/ig, "")) });
  66. _obj.forEach((i,ind) => {
  67. if(i.prod.indexOf("粤珠") != -1){
  68. _arr[0].list.push(i);
  69. }else if(i.prod.indexOf("高栏") != -1){
  70. _arr[1].list.push(i);
  71. }else if(i.prod.indexOf("新谷") != -1){
  72. _arr[2].list.push(i);
  73. }else{
  74. _arr[3].list.push(i);
  75. }
  76. $(".shipDet[data-sn="+i.sn+"] .icon-chuanbo").css("color",i.status == 1?'#55aaff':'#afafaf');
  77. });
  78. // $("#onAll").text(_online+"/"+_obj.length);
  79. if(num == 0){
  80. shipLi = _arr;
  81. setHtml();
  82. }else{
  83. shipLi[0].list = _arr[0].list;
  84. shipLi[1].list = _arr[1].list;
  85. shipLi[2].list = _arr[2].list;
  86. shipLi[3].list = _arr[3].list;
  87. }
  88. });
  89. })
  90. };
  91. function changeTime(time) {
  92. let date3 = new Date().getTime() - (parseInt(time));
  93. let str = 1;
  94. if (date3 > (5 * 60 * 1000)) {
  95. str = 0;
  96. }
  97. return str;
  98. };
  99. function setHtml(){
  100. let str = "";
  101. for(let i=0;i<shipLi.length;i++){
  102. let item = shipLi[i],_list = shipLi[i].list;
  103. if(_list.length){
  104. str += `<div style="padding:5px;color:#e6e6e6;">
  105. <div class="clasName" data-ind="${i}">
  106. <div class="${item.check?'el-icon-caret-bottom':'el-icon-caret-right'}" style="margin-right:5px;"></div>
  107. <div style="font-size:14px;">${item.name}</div>
  108. </div>
  109. <div class="shipClas" style="display:${item.check?'block':''};">`
  110. for(let j=0;j<_list.length;j++){
  111. let subi = _list[j];
  112. str += `<div style="padding:5px;">
  113. <div class="shipDet" data-sn="${subi.sn}" data-id="${i}">
  114. <div class="iconfont icon-jia"></div>
  115. <div class="iconfont icon-chuanbo" style="margin:0 5px;color:${subi.status == 1?'#55aaff':'#afafaf'};font-size:16px;"></div>
  116. <div style="font-size:14px;">${subi.prod}</div>
  117. </div>
  118. <div class="caremLi"></div>
  119. </div>`
  120. }
  121. str += `</div></div>`;
  122. }
  123. }
  124. $("#shipLi").html(str);
  125. }
  126. $(document).on("click",".leiBox>div",function(){
  127. $(".leiBox>div").removeClass("act");
  128. $(this).addClass("act");
  129. $(".leiBtn").text($(this).text());
  130. $(".leiBox").css("display","none");
  131. let key = parseInt($(this).data("id"));
  132. let _a = key*key;
  133. let _b = leiBar*leiBar;
  134. if(key < leiBar){
  135. let _ele = $("#videoBox .videoBg");
  136. for(let i = _a;i < _b;i++){
  137. _ele[i].remove();
  138. delete playView["alPlay"+i] ;
  139. }
  140. $("#videoBox .videoBg").css({"width":(100 / key)+"%","height":(100 / key)+"%"})
  141. }else if(key > leiBar){
  142. let _str = "";
  143. for(let i = _b;i < _a;i++){
  144. playView["alPlay"+i] = null;
  145. _str += `<div class="videoBg alPlay${i}" style="width: ${100 / key}%;height: ${100 / key}%;"></div>`;
  146. }
  147. $("#videoBox").append(_str);
  148. $("#videoBox .videoBg").css({"width":(100 / key)+"%","height":(100 / key)+"%"})
  149. }
  150. leiBar = key;
  151. });
  152. $(".leiBtn").on("click","",function(){
  153. if($(".leiBox").css("display") == "none"){
  154. $(".leiBox").css("display","block");
  155. }else{
  156. $(".leiBox").css("display","none");
  157. }
  158. })
  159. $(document).on("click",".shipDet",function(){
  160. let _sn = $(this).data("sn");
  161. let _id = $(this).data("id");
  162. let _ind = shipLi[_id].list.findIndex((item,index) => { return item.sn == _sn; });
  163. let _obj = shipLi[_id].list[_ind];
  164. if(_ind != -1){
  165. if( _obj["list"]!= undefined){
  166. if(shipLi[_id].list[_ind]["show"]){
  167. shipLi[_id].list[_ind]["show"] = false;
  168. $(".shipDet[data-sn="+_sn+"]+.caremLi").css("display","none");
  169. $(this).find(".icon-jian").removeClass("icon-jian").addClass("icon-jia");
  170. }else{
  171. shipLi[_id].list[_ind]["show"] = true;
  172. $(".shipDet[data-sn="+_sn+"]+.caremLi").css("display","block");
  173. $(this).find(".icon-jia").removeClass("icon-jia").addClass("icon-jian");
  174. }
  175. }else{
  176. if(_obj.dev_ver == 2){
  177. ajaxCream(_sn,_id,_ind);
  178. }else if(_obj.dev_ver == 4){
  179. getCream(_sn,_id,_ind,[{
  180. alive: _obj.status,
  181. cameraid: "1",
  182. name: "监控室"
  183. }]);
  184. }else{
  185. let _Str = [{
  186. alive: 1,
  187. cameraid: "001",
  188. name: "驾驶室",
  189. },{
  190. alive: 1,
  191. cameraid: "002",
  192. name: "机舱",
  193. },{
  194. alive: 1,
  195. cameraid: "003",
  196. name: "左舷",
  197. },{
  198. alive: 1,
  199. cameraid: "004",
  200. name: "右舷",
  201. }];
  202. let _creamStr = [{
  203. alive: 0,
  204. cameraid: "001",
  205. name: "驾驶室",
  206. },{
  207. alive: 0,
  208. cameraid: "002",
  209. name: "机舱",
  210. },{
  211. alive: 0,
  212. cameraid: "003",
  213. name: "左舷",
  214. },{
  215. alive: 0,
  216. cameraid: "004",
  217. name: "右舷",
  218. }];
  219. if(zhgYsy[_sn] == undefined){
  220. if(_obj.status == 1){
  221. getCream(_sn,_id,_ind,_Str);
  222. }else{
  223. getCream(_sn,_id,_ind,_creamStr);
  224. }
  225. }else{
  226. infoAjax(zhgYsy[_sn],function(res){
  227. let _skoi = _obj.status == 1?_Str:_creamStr;
  228. if(res.length){
  229. let _oxkj = res[0];
  230. _skoi.push({
  231. alive: _oxkj.status,
  232. cameraid: 1,
  233. name: _oxkj.prod,
  234. ysy: _oxkj.sn
  235. });
  236. }
  237. getCream(_sn,_id,_ind,_skoi);
  238. })
  239. }
  240. }
  241. }
  242. }
  243. })
  244. var creamStr = [{
  245. alive: 0,
  246. cameraid: "001",
  247. name: "驾驶室",
  248. },{
  249. alive: 0,
  250. cameraid: "002",
  251. name: "机舱",
  252. },{
  253. alive: 0,
  254. cameraid: "003",
  255. name: "左舷",
  256. },{
  257. alive: 0,
  258. cameraid: "004",
  259. name: "右舷",
  260. }];
  261. function ajaxCream(sn,faind,ind){
  262. if(shipLi[faind].list[ind].status == 1){
  263. let _obj = {
  264. http: baseUrl,
  265. url: "/request",
  266. type: "POST",
  267. tok: "Bearer " + localStorage.getItem("ylToken")
  268. };
  269. let _data = {
  270. event: "videoLists",
  271. msgid: new Date().getTime()+"",
  272. sn: sn
  273. };
  274. postAjax(_obj, _data).then((res) => {
  275. if(res.result == "ok"){
  276. getCream(sn,faind,ind,res.data.info);
  277. }else{
  278. getCream(sn,faind,ind,creamStr);
  279. }
  280. })
  281. }else{
  282. getCream(sn,faind,ind,creamStr);
  283. }
  284. }
  285. function getCream(sn,faind,ind,_obj){
  286. let str = "";
  287. for(let i=0;i<_obj.length;i++){
  288. if(_obj[i].name != "none"){
  289. if(_obj[i].ysy == undefined){
  290. str += `<div class="creamItem" data-id="${faind}" data-cid="${_obj[i].cameraid+"_"+_obj[i].alive+"_"+sn+"_ord"}">
  291. <i class="iconfont icon-shexiangtou margin-right-xs" style="color:${_obj[i].alive == 0?'#cfcfcf':'#0068ff'}"></i>${_obj[i].name}
  292. </div>`
  293. }else{
  294. str += `<div class="creamItem" data-id="${faind}" data-cid="${_obj[i].ysy+"_"+_obj[i].alive+"_"+sn+"_ysy"}">
  295. <i class="iconfont icon-shexiangtou margin-right-xs" style="color:${_obj[i].alive == 0?'#cfcfcf':'#0068ff'}"></i>${_obj[i].name}
  296. </div>`
  297. }
  298. }
  299. }
  300. shipLi[faind].list[ind]["show"] = true;
  301. shipLi[faind].list[ind]["list"] = [];
  302. $(".shipDet[data-sn="+sn+"]+.caremLi").html(str);
  303. $(".shipDet[data-sn="+sn+"]").find(".icon-jia").removeClass("icon-jia").addClass("icon-jian");
  304. }
  305. $(document).on("click",".creamItem",function(){
  306. let _key = $(this).data("cid").split("_");
  307. let _val = $(this).text();
  308. let _ids = shipLi[$(this).data("id")].list;
  309. let _snNa = _ids[_ids.findIndex((item,index) => {return item.sn == _key[2]})];
  310. let _ab = _key[2]+"_"+Number(_key[0])+"_"+_snNa.dev_ver;
  311. if(_key[1] == 0){
  312. showErr('摄像头离线中!');
  313. }else{
  314. if(JSON.stringify(playView).indexOf(_key[2]) != -1){
  315. for(let key in playView){
  316. if(playView[key].indexOf(_key[2]) != -1){
  317. if(_key[3] == "ord"){
  318. stopFlv(key,_snNa.dev_ver,1);
  319. $(this).find(".iconfont").removeClass("icon-shexiangtou").addClass("icon-bofang");
  320. playView[key] = _key.toString();
  321. if(_snNa.dev_ver != 4){
  322. $("."+key).html(`<video id="${key}" style="width:100%;height:100%;object-fit: fill;" muted autoplay controls></video>
  323. <div class="vidTxt"><div>${_snNa.dev_name} - ${_val}</div><div class="iconfont icon-cha" data-id="${key}_${_key[2]}_${_snNa.dev_ver}"></div></div>`);
  324. if(_snNa.dev_ver == 2){
  325. openRtmp(_key, key);
  326. }else{
  327. if(JSON.stringify(uuidView).indexOf(_ab) == -1){
  328. uuidView[_ab] = _uuid();
  329. }
  330. let _src = "ws://121.201.66.101:9988/real_play/" + _Uuid + "/gzyz/" + uuidView[_ab] + "/"+_key[2]+"/0/"+Number(_key[0])+"/1"
  331. startPlay(_src,key,_key,false);
  332. }
  333. }else{
  334. $("."+key).html(`<div id="${key}" style="width:100%;height:100%;object-fit: fill;"></div>
  335. <div class="vidTxt"><div>${_snNa.dev_name} - ${_val}</div><div class="iconfont icon-cha" data-id="${key}_${_key[2]}_${_snNa.dev_ver}"></div></div>`);
  336. playEzopen(_key, key);
  337. }
  338. }else{
  339. stopFlv(key,_snNa.dev_ver);
  340. $(this).find(".iconfont").removeClass("icon-shexiangtou").addClass("icon-bofang");
  341. playView[key] = _key.toString();
  342. $("."+key).html(`<div id="${key}" style="width:100%;height:100%;object-fit: fill;"></div>
  343. <div class="vidTxt"><div>${_snNa.dev_name} - ${_val}</div><div class="iconfont icon-cha" data-id="${key}_${_key[2]}_${_snNa.dev_ver}"></div></div>`);
  344. playEzopen(_key, key);
  345. }
  346. break;
  347. }
  348. }
  349. }else{
  350. let flag=true;
  351. // if(JSON.stringify(playView).indexOf(null) != -1){
  352. for(let key in playView){
  353. if(playView[key] == null){
  354. $(".shipDet[data-sn="+_key[2]+"]+.caremLi .iconfont").removeClass("icon-bofang").addClass("icon-shexiangtou");
  355. $(this).find(".iconfont").removeClass("icon-shexiangtou").addClass("icon-bofang");
  356. playView[key] = _key.toString();
  357. if(_snNa.dev_ver != 4){
  358. if(_key[3] == "ord"){
  359. $("."+key).html(`<video id="${key}" style="width:100%;height:100%;object-fit: fill;" muted autoplay controls></video>
  360. <div class="vidTxt"><div>${_snNa.dev_name} - ${_val}</div><div class="iconfont icon-cha" data-id="${key}_${_key[2]}_${_snNa.dev_ver}"></div></div>`);
  361. if(_snNa.dev_ver == 2){
  362. setAlive(_key[2]);
  363. openRtmp(_key, key);
  364. }else{
  365. if(JSON.stringify(uuidView).indexOf(_ab) == -1){
  366. uuidView[_ab] = _uuid();
  367. }
  368. let _src = "ws://121.201.66.101:9988/real_play/" + _Uuid + "/gzyz/" + uuidView[_ab] + "/"+_key[2]+"/0/"+Number(_key[0])+"/1"
  369. startPlay(_src,key,_key,false);
  370. }
  371. }else{
  372. $("."+key).html(`<div id="${key}" style="width:100%;height:100%;object-fit: fill;"></div>
  373. <div class="vidTxt"><div>${_snNa.dev_name} - ${_val}</div><div class="iconfont icon-cha" data-id="${key}_${_key[2]}_${_snNa.dev_ver}"></div></div>`);
  374. playEzopen(_key, key);
  375. }
  376. }else{
  377. $("."+key).html(`<div id="${key}" style="width:100%;height:100%;object-fit: fill;"></div>
  378. <div class="vidTxt"><div>${_snNa.dev_name} - ${_val}</div><div class="iconfont icon-cha" data-id="${key}_${_key[2]}_${_snNa.dev_ver}"></div></div>`);
  379. playEzopen(_key, key);
  380. }
  381. flag=false;
  382. break;
  383. }
  384. }
  385. if(flag){
  386. showErr('暂无可用通道!');
  387. }
  388. // }else{
  389. // console.log("playView",playView)
  390. // showErr('暂无可用通道!');
  391. // }
  392. }
  393. }
  394. })
  395. $(document).on("click",".videoBg .icon-cha",function(){
  396. let _sf = $(this).data("id").split("_");
  397. $(".videoBg."+_sf[0]).html("");
  398. stopFlv(_sf[0],_sf[2]);
  399. })
  400. function stopFlv(_sn,_dev,num){
  401. let _snli = playView[_sn].split(",");
  402. if(_dev == 2){
  403. let _obj = {
  404. http: baseUrl,
  405. url: "/request",
  406. type: "POST",
  407. tok: "Bearer " + localStorage.getItem("ylToken")
  408. };
  409. let _data = {
  410. "msgid": new Date().getTime()+"",
  411. "sn": _snli[2],
  412. "event": "stopVideo",
  413. "info": {
  414. "cameraid": _snli[0],
  415. "type": 0
  416. }
  417. };
  418. postAjax(_obj, _data).then((res) => {
  419. if(num != 1){
  420. if(playId[_snli[2]] != null){
  421. playId[_snli[2]].unload();
  422. playId[_snli[2]].detachMediaElement();
  423. playId[_snli[2]].destroy();
  424. delete playId[_snli[2]];
  425. }
  426. clearInterval(timeId[_snli[2]]);
  427. playView[_sn] = null;
  428. $(".shipDet[data-sn="+_snli[2]+"]+.caremLi .iconfont").removeClass("icon-bofang").addClass("icon-shexiangtou");
  429. }
  430. })
  431. }else if(_dev == 4 || _snli[3] == "ysy"){
  432. if(playId[_snli[2]] != null){
  433. playId[_snli[2]].stop();
  434. playId[_snli[2]].destroy();
  435. delete playId[_snli[2]];
  436. }
  437. playView[_sn] = null;
  438. $(".shipDet[data-sn="+_snli[2]+"]+.caremLi .iconfont").removeClass("icon-bofang").addClass("icon-shexiangtou");
  439. // }else if(_snli[3] == "ysy"){
  440. // playId[_snli[2]].stop();
  441. // playId[_snli[2]].destroy();
  442. // playView[_sn] = null;
  443. // $(".shipDet[data-sn="+_snli[2]+"]+.caremLi .iconfont").removeClass("icon-bofang").addClass("icon-shexiangtou");
  444. }else{
  445. webSocket.send(JSON.stringify({
  446. carId: _snli[2],
  447. channel: 1,
  448. cmd: "real_close",
  449. stream: Number(_snli[0]),
  450. uuid: uuidView[_snli[2]+"_"+Number(_snli[0])+"_3"]
  451. }))
  452. if(num != 1){
  453. if(playId[_snli[2]] != null){
  454. playId[_snli[2]].unload();
  455. playId[_snli[2]].detachMediaElement();
  456. playId[_snli[2]].destroy();
  457. delete playId[_snli[2]];
  458. }
  459. playView[_sn] = null;
  460. }
  461. $(".shipDet[data-sn="+_snli[2]+"]+.caremLi .iconfont").removeClass("icon-bofang").addClass("icon-shexiangtou");
  462. }
  463. }
  464. var playId = {}, playErr = {},timeId = {};
  465. // ----------------- 播放视频 -----------------------
  466. function openRtmp(_carme,_num){
  467. let _obj = {
  468. http: baseUrl,
  469. url: "/request",
  470. type: "POST",
  471. tok: "Bearer " + localStorage.getItem("ylToken")
  472. };
  473. let _data = {
  474. event: "video",
  475. msgid: new Date().getTime()+"",
  476. sn: _carme[2],
  477. info: {
  478. "cameraid":_carme[0],
  479. "type":"rtsp/rtmp"
  480. }
  481. };
  482. postAjax(_obj, _data).then((res) => {
  483. if(res.result == "ok"){
  484. if(res.data.errcode == 0||res.data.errcode == -206){
  485. let _src = "https://www.enstation.com:8090/live?port=1935&app=live&stream="+_carme[2]+"_"+_carme[0];
  486. startPlay(_src,_num,_carme,true);
  487. }else{
  488. playErr[_carme[2]] = 0;
  489. showErr("请求播放失败!");
  490. }
  491. }else{
  492. playErr[_carme[2]] = 0;
  493. showErr("请求播放失败!");
  494. }
  495. })
  496. }
  497. function playEzopen(_sn,_divid){
  498. if(playId[_sn[2]] != null&&playId[_sn[2]] != undefined){
  499. playId[_sn[2]].stop();
  500. playId[_sn[2]].destroy();
  501. }
  502. let _wid = $(".videoBg").width();
  503. let _hie = $(".videoBg").height();
  504. let _src = "ezopen://open.ys7.com/"+(_sn[3] == "ysy"?_sn[0]:_sn[2])+"/1.live";
  505. playId[_sn[2]] = new EZUIKit.EZUIKitPlayer({
  506. id: _divid,
  507. autoplay: true,
  508. url: _src,
  509. accessToken: localStorage.getItem("ysyToken"),
  510. width:_wid,
  511. height:_hie,
  512. audio:false,
  513. plugin: ['talk'],
  514. decoderPath: "http://121.37.6.200/Zgcy"
  515. });
  516. }
  517. // 直播组件创建并播放
  518. function startPlay(_url,_id,_sn,_sta){
  519. if(playId[_sn[2]] != null&&playId[_sn[2]] != undefined){
  520. playId[_sn[2]].unload();
  521. playId[_sn[2]].detachMediaElement();
  522. playId[_sn[2]].destroy();
  523. playId[_sn[2]] = null;
  524. }
  525. setTimeout(()=>{
  526. try {
  527. if (flvjs.isSupported()) {
  528. let videoWin = document.getElementById(_id);
  529. playId[_sn[2]] = flvjs.createPlayer({
  530. type: "flv",
  531. isLive: true,
  532. hasAudio: false,
  533. url: _url,
  534. enableStashBuffer: !_sta
  535. }, {
  536. enableStashBuffer: _sta,
  537. stashInitialSize: 128
  538. });
  539. flvjs.getFeatureList();
  540. playId[_sn[2]].attachMediaElement(videoWin)
  541. playId[_sn[2]].load();
  542. playId[_sn[2]].play();
  543. playId[_sn[2]].on('error', err => {
  544. playId[_sn[2]].unload();
  545. playId[_sn[2]].detachMediaElement();
  546. playId[_sn[2]].destroy();
  547. playId[_sn[2]] = null;
  548. playErr[_sn[2]] += 1;
  549. if(playErr[_sn[2]] > 5){
  550. console.log(playErr[_sn[2]])
  551. }else{
  552. startPlay(_url,_id,_sn,_sta);
  553. }
  554. });
  555. return true;
  556. } else {
  557. console.log("flvjs不支持")
  558. }
  559. } catch (error) {
  560. console.log("连接websocket异常", error);
  561. return false;
  562. }
  563. },2000);
  564. }
  565. // --------------------- 心跳包 -----------
  566. function setAlive(_sn){
  567. clearInterval(timeId[_sn]);
  568. if(timeId[_sn] == null){
  569. ajaAlive(_sn);
  570. timeId[_sn] = setInterval(()=>{
  571. ajaAlive(_sn);
  572. },60*1000)
  573. }
  574. }
  575. // 心跳包
  576. function ajaAlive(_sn){
  577. let _obj = {
  578. http: baseUrl,
  579. url: "/request",
  580. type: "POST",
  581. tok: "Bearer " + localStorage.getItem("ylToken")
  582. };
  583. let _data = {
  584. event: "alive",
  585. msgid: new Date().getTime()+"",
  586. sn: _sn
  587. };
  588. postAjax(_obj, _data).then((res) => {})
  589. }
  590. function closeAll(){
  591. for(let key in playView){
  592. if(playView[key] != null){
  593. let _snli = playView[key].split(",");
  594. if(JSON.stringify(uuidView).indexOf(_snli[2]) != -1){
  595. stopFlv(key,1);
  596. }else{
  597. stopFlv(key,2);
  598. }
  599. }
  600. }
  601. init();
  602. }
  603. function showErr(_msg, _type) {
  604. var boardDiv = `<div id="yzAlert">
  605. <i class="iconfont icon-warn"></i>
  606. <p>${_msg}</p>
  607. </div>`;
  608. $(document.body).append(boardDiv);
  609. setTimeout(() => {
  610. $("#yzAlert").css("transform","translate(-50%, -100%)");
  611. setTimeout(() => {
  612. $("#yzAlert").remove();
  613. }, 100);
  614. }, 3000);
  615. };
  616. function fullScreen(){
  617. let elem = document.getElementById("videoBox");
  618. if (elem.requestFullscreen) {
  619. elem.requestFullscreen();
  620. } else if (elem.mozRequestFullScreen) {
  621. elem.mozRequestFullScreen();
  622. } else if (elem.webkitRequestFullScreen) {
  623. elem.webkitRequestFullScreen();
  624. }else if(elem.msRequestFullScreen){
  625. elem.msRequestFullScreen();
  626. }else {
  627. alert('当前浏览器不支持全屏,请更换浏览器')
  628. return false
  629. }
  630. }
  631. $(document).on("click",".clasName",function(){
  632. let _ind = $(this).data("ind");
  633. if(shipLi[_ind].check){
  634. shipLi[_ind].check = false;
  635. $(this).next().css("display","none");
  636. $(this).find(".el-icon-caret-bottom").addClass("el-icon-caret-right").removeClass("el-icon-caret-bottom");
  637. }else{
  638. shipLi[_ind].check = true;
  639. $(this).next().css("display","block");
  640. $(this).find(".el-icon-caret-right").addClass("el-icon-caret-bottom").removeClass("el-icon-caret-right");
  641. }
  642. })
  643. function closeLogout(){
  644. localStorage.removeItem("AjaxGen");
  645. localStorage.removeItem("ylToken");
  646. top.location.href = "../index.html?id=video";
  647. }