ventutil.ts 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. import { render, h, nextTick } from 'vue';
  2. import LivePlayer from '@liveqing/liveplayer-v3';
  3. import { play } from '../views/vent/monitorManager/balancePressMonitor/balancePress.threejs';
  4. export function toEchartsData(list, option) {
  5. option.legend['data'] = [];
  6. option.yAxis.length = list.length;
  7. option.yAxis.series = list.length;
  8. list.forEach((item: any, index) => {
  9. option.legend['data'].push(`${item['legend']}(${item['unit']})`);
  10. const yAxiObj = {
  11. type: 'value',
  12. position: item['yaxispos'],
  13. axisLabel: { formatter: `{value} ${item['unit']}` },
  14. };
  15. const serieObj = {
  16. name: `${item['legend']}(${item['unit']})`,
  17. type: item['linetype'],
  18. yAxisIndex: item['sort'],
  19. };
  20. if (!option.yAxis[index]) {
  21. option.yAxis[index] = yAxiObj;
  22. } else {
  23. Object.assign(option.yAxis[index], yAxiObj);
  24. }
  25. if (!option.series[index]) {
  26. option.series[index] = serieObj;
  27. } else {
  28. Object.assign(option.series[index], serieObj);
  29. }
  30. });
  31. return option;
  32. }
  33. export function formatNum(data) {
  34. return new Intl.NumberFormat('ja-JP', {
  35. minimumFractionDigits: 2,
  36. maximumFractionDigits: 2,
  37. }).format(data);
  38. }
  39. export function cameraInit(dom, rtspUrl) {
  40. let webRtcServer = undefined;
  41. const ip = VUE_APP_URL.webRtcUrl;
  42. // const ip = '//192.168.183.216:8000';
  43. webRtcServer = new window['WebRtcStreamer'](dom, location.protocol + ip);
  44. if (webRtcServer) webRtcServer.connect(rtspUrl);
  45. return { webRtcServer };
  46. }
  47. export function deviceCameraInit(cameraAddrs, player: HTMLElement, webRtcServerList: any[] = []) {
  48. console.log('webRtcServerList0--------->', webRtcServerList);
  49. const playerDoms: (HTMLVideoElement | undefined | null)[] = [];
  50. const webRtcServer: any[] = [];
  51. let livePlayerDiv: HTMLElement | null = document.getElementById('LivePlayerBox');
  52. if (livePlayerDiv) {
  53. livePlayerDiv.remove();
  54. livePlayerDiv = null;
  55. }
  56. if (!livePlayerDiv) {
  57. const dom = document.createElement('div');
  58. dom.setAttribute('id', 'LivePlayerBox');
  59. livePlayerDiv = dom;
  60. player.appendChild(livePlayerDiv);
  61. }
  62. const videoParentDomList: (HTMLElement | [string, { name: string; addr: string }])[] = [];
  63. return new Promise((resolve) => {
  64. const playCamrea = () => {
  65. if (cameraAddrs.length > 0) {
  66. const promiseList: Promise<any>[] = [];
  67. cameraAddrs.forEach(async (cameraUrl: { name: string; addr: string }, index) => {
  68. const promise = new Promise(async (childResolve) => {
  69. let cameraNameDom: null | HTMLElement = null;
  70. console.log('摄像头地址--------->', cameraUrl, cameraUrl.addr.startsWith('rtsp://'), livePlayerDiv);
  71. if (cameraUrl.addr.startsWith('rtsp://')) {
  72. const server = webRtcServerList.shift();
  73. if (server) {
  74. try {
  75. const videoElement = server.videoElement as HTMLVideoElement;
  76. const cameraNameDom = videoElement.parentElement?.getElementsByClassName('video-name')[0];
  77. if (cameraNameDom) cameraNameDom.innerText = cameraUrl.name;
  78. playerDoms.unshift(videoElement);
  79. webRtcServer.unshift(server);
  80. await server.connect(cameraUrl['addr']);
  81. videoElement.play();
  82. childResolve(null);
  83. } catch (error) {
  84. playerDoms.unshift(undefined);
  85. childResolve(null);
  86. }
  87. } else {
  88. const videoParentDom: HTMLElement = document.createElement('div');
  89. videoParentDom.setAttribute('class', 'video-parent');
  90. const videoDom: HTMLVideoElement = document.createElement('video');
  91. videoDom.setAttribute('class', 'rtspVideo');
  92. videoDom.setAttribute('muted', 'muted');
  93. videoDom.setAttribute('poster', '/src/assets/images/vent/noSinge.png');
  94. videoDom.autoplay = true;
  95. videoParentDom.appendChild(videoDom);
  96. cameraNameDom = document.createElement('div');
  97. cameraNameDom.setAttribute('class', 'video-name');
  98. cameraNameDom.innerText = cameraUrl.name;
  99. videoParentDom.appendChild(cameraNameDom);
  100. videoParentDomList.push(videoParentDom);
  101. try {
  102. const server = new window['WebRtcStreamer'](videoDom, location.protocol + VUE_APP_URL.webRtcUrl);
  103. webRtcServer.unshift(server);
  104. await server.connect(cameraUrl.addr);
  105. videoDom.play();
  106. playerDoms.unshift(videoDom);
  107. childResolve(null);
  108. } catch (error) {
  109. console.log('WebRtcStreamer 抛出异常!!!!!!');
  110. playerDoms.unshift(null);
  111. childResolve(null);
  112. }
  113. }
  114. } else {
  115. try {
  116. fetch(cameraUrl.addr)
  117. .then(() => {
  118. videoParentDomList.push(['player', cameraUrl]);
  119. childResolve(null);
  120. })
  121. .catch(() => {
  122. videoParentDomList.push(['onPlayer' + index, cameraUrl]);
  123. childResolve(null);
  124. });
  125. } catch (error) {
  126. // console.log('可以捕获到异常吗?????');
  127. childResolve(null);
  128. }
  129. }
  130. });
  131. promiseList.push(promise);
  132. });
  133. Promise.all(promiseList).then(() => {
  134. resolve(null);
  135. });
  136. } else {
  137. resolve(null);
  138. }
  139. };
  140. playCamrea();
  141. }).then(() => {
  142. videoParentDomList.forEach((videoParentDom) => {
  143. if (typeof videoParentDom[0] === 'string') {
  144. if (videoParentDom[0].startsWith('onPlayer')) {
  145. render(
  146. h(LivePlayer, {
  147. class: 'player',
  148. id: videoParentDom[0],
  149. muted: 'muted',
  150. autoplay: true,
  151. live: true,
  152. videoUrl: videoParentDom[1].addr,
  153. videoTitle: videoParentDom[1].name,
  154. alt: '无信号',
  155. poster: '/src/assets/images/vent/noSinge.png',
  156. }),
  157. livePlayerDiv
  158. );
  159. } else {
  160. render(
  161. h(LivePlayer, {
  162. class: 'player',
  163. muted: 'muted',
  164. autoplay: true,
  165. live: true,
  166. videoUrl: videoParentDom[1].addr,
  167. videoTitle: videoParentDom[1].name,
  168. alt: '无信号',
  169. poster: '/src/assets/images/vent/noSinge.png',
  170. }),
  171. livePlayerDiv
  172. );
  173. }
  174. } else {
  175. player.appendChild(videoParentDom as Node);
  176. }
  177. });
  178. const players = livePlayerDiv?.getElementsByClassName('player');
  179. if (players && players.length) {
  180. for (let i = 0; i < players.length; i++) {
  181. try {
  182. const isCanPlayer = !players[i].getAttribute('id')?.startsWith('onPlayer');
  183. const dom = players[i].getElementsByTagName('video')[0];
  184. if (dom && isCanPlayer) {
  185. playerDoms.unshift(dom);
  186. } else {
  187. playerDoms.unshift(null);
  188. }
  189. } catch (error) {
  190. console.log('可以捕获到异常吗?????');
  191. playerDoms.unshift(null);
  192. }
  193. }
  194. }
  195. if (webRtcServerList.length > 0) {
  196. for (let i = 0; i < webRtcServerList.length; i++) {
  197. webRtcServerList[i].videoElement.parentElement.remove();
  198. webRtcServerList[i].disconnect();
  199. webRtcServerList[i] = undefined;
  200. }
  201. }
  202. console.log('webRtcServerList--------->', webRtcServerList);
  203. console.log('playerDoms--------->', playerDoms);
  204. return { webRtcServerList: webRtcServer, playerDoms };
  205. });
  206. }