main.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. import zlplayer from '';
  2. let webServer = {
  3. host: 'localhost',
  4. port: 7890
  5. }
  6. let isLive = true; //是否为实时视频
  7. zlplayer.resPath = '';
  8. //去后端获取预览视频地址
  9. function getRealUrlByToken() {
  10. isLive = true;
  11. let elevatorSn = document.getElementById('elevatorSn').value;
  12. let xhr = new XMLHttpRequest();
  13. let reqUrl = `http://${webServer.host}:${webServer.port}/getElevatorMonitolUrlByToken?elevatorSn=${elevatorSn}`;
  14. xhr.open('GET', reqUrl, false);
  15. xhr.send();
  16. if (xhr.status == 200) {
  17. let res = JSON.parse(xhr.responseText);
  18. if (res && res.monitorUrl) {
  19. document.getElementById('url').value = res.monitorUrl;
  20. }
  21. return;
  22. }
  23. console.error(`getElevatorMonitolUrl error ${xhr.status}`);
  24. }
  25. //去后端获取报警录像地址
  26. function getAlarmRecordUrlByToken() {
  27. isLive = false;
  28. let elevatorSn = document.getElementById('elevatorSn').value;
  29. let alarmId = document.getElementById('alarmId').value;
  30. let xhr = new XMLHttpRequest();
  31. let reqUrl = `http://${webServer.host}:${webServer.port}/getAlarmRecordUrlByToken?elevatorSn=${elevatorSn}&alarmId=${alarmId}`;
  32. xhr.open('GET', reqUrl, false);
  33. xhr.send();
  34. if (xhr.status == 200) {
  35. let res = JSON.parse(xhr.responseText);
  36. if (res && res.recordUrl) {
  37. document.getElementById('url').value = res.recordUrl;
  38. }
  39. return;
  40. }
  41. console.error(`getAlarmRecordUrlByToken error ${xhr.status}`);
  42. }
  43. //去后端获取视频地址
  44. function getTimeRecordUrlByToken() {
  45. isLive = false;
  46. let elevatorSn = document.getElementById('elevatorSn').value;
  47. let beginTime = parseInt(document.getElementById('beginTime').value);
  48. let endTime = parseInt(document.getElementById('endTime').value);
  49. let xhr = new XMLHttpRequest();
  50. let reqUrl = `http://${webServer.host}:${webServer.port}/getElevatorRecordUrlByToken?elevatorSn=${elevatorSn}&beginTime=${beginTime}&endTime=${endTime}`;
  51. xhr.open('GET', reqUrl, false);
  52. xhr.send();
  53. if (xhr.status == 200) {
  54. let res = JSON.parse(xhr.responseText);
  55. if (res && res.recordUrl) {
  56. document.getElementById('url').value = res.recordUrl;
  57. }
  58. return;
  59. }
  60. console.error(`getTimeRecordUrlByToken error ${xhr.status}`);
  61. }
  62. let player = null;
  63. //开始播放
  64. function startPlay() {
  65. stopPlay();
  66. let videoElement = document.getElementById('myvideo');
  67. let urlElement = document.getElementById("url");
  68. let config = {
  69. url: urlElement.value, //资源地址
  70. isLive: isLive, //实时预览:true , 回放:false
  71. enableFullScreen: true, //是否双击全屏
  72. enableFillWindow: true //是否视频铺满窗口
  73. };
  74. player = zlplayer.createPlayer(videoElement, config);
  75. player.on('error', onPlayerError);
  76. player.play();
  77. }
  78. //停止播放
  79. function stopPlay() {
  80. if ( player ) {
  81. player.stop();
  82. player = null;
  83. }
  84. }
  85. //抓图
  86. function capture() {
  87. if (player) {
  88. let img = player.capture(); //抓图,返回image
  89. if (img) {
  90. let now = new Date();
  91. let filename = `capture_${now.toLocaleDateString()}_${now.toLocaleTimeString()}.png`;
  92. let save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
  93. save_link.href = img;
  94. save_link.download = filename;
  95. let event = document.createEvent('MouseEvents');
  96. event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  97. save_link.dispatchEvent(event);
  98. }
  99. }
  100. }
  101. //开始录像
  102. function startRecord() {
  103. if (player) {
  104. player.startRecord();
  105. }
  106. }
  107. //停止录像
  108. function stopRecord() {
  109. if (player) {
  110. let blob = player.stopRecord(); //停止录像返回 blob
  111. if ( blob ) {
  112. let url = window.URL.createObjectURL(blob);
  113. let now = new Date();
  114. let filename = `record_${now.toLocaleDateString()}_${now.toLocaleTimeString()}.webm`;
  115. let a = document.createElement('a');
  116. a.style.display = 'none';
  117. a.href = url;
  118. a.download = filename;
  119. document.body.appendChild(a);
  120. a.click();
  121. setTimeout(function() {
  122. document.body.removeChild(a);
  123. window.URL.revokeObjectURL(url);
  124. }, 100);
  125. }
  126. }
  127. }
  128. //旋转视频
  129. function rotate(deg) {
  130. if (player) {
  131. player.rotate(deg);
  132. }
  133. }
  134. //清理创建过的播放器
  135. function clearPlayer() {
  136. zlplayer.clearPlayer();
  137. }
  138. //播放器错误event
  139. function onPlayerError(type, reason, desc) {
  140. switch(type){
  141. case 'NetworkError':
  142. if ( desc.code == -1 ) {
  143. alert("网络错误");
  144. }
  145. else if ( desc.code == -999 ) {
  146. alert("网络错误, 流中断");
  147. let urlElement = document.getElementById("url");
  148. player.flvSrc.url = urlElement.value; //这里应该是重新去获取新的url
  149. player.resume();
  150. }else if ( desc.code == 401 ) {
  151. console.log(`${desc.msg} : 鉴权失败`);
  152. }
  153. else if ( desc.code == 404 ) {
  154. alert("资源不存在, 设备不在线");
  155. };
  156. break;
  157. case 'MediaError':
  158. if ( reason == 'NeedReplay' ) {
  159. console.log("媒体异常,自动重新播放");
  160. let urlElement = document.getElementById("url");
  161. player.flvSrc.url = urlElement.value; //这里应该是重新去获取新的url
  162. player.resume();
  163. };
  164. break;
  165. }
  166. }