advancedLinkage.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <template>
  2. <div class="advanced-linkage h-full">
  3. <UseFullscreen v-slot="{ toggle, isFullscreen }">
  4. <div class="relative w-full h-full flex items-center">
  5. <pub-video-new :newClass="['al-video' + currentActive]" class="aspect-ratio-video" />
  6. <div class="absolute top-10px right-10px flex flex-row-reverse gap-1 z-999">
  7. <!-- 全屏按钮 -->
  8. <div class="all-screen popover-screen-full-trigger cursor-pointer">
  9. <Icon
  10. icon="icon-park-outline:off-screen"
  11. color="#8ac5ff"
  12. width="25"
  13. height="25"
  14. v-if="isFullscreen"
  15. @click="toggle"
  16. />
  17. <Icon
  18. icon="iconamoon:screen-full"
  19. color="#8ac5ff"
  20. width="25"
  21. height="25"
  22. @click="toggle"
  23. v-else
  24. />
  25. </div>
  26. <Icon
  27. icon="grommet-icons:power-shutdown"
  28. v-if="!isFullscreen"
  29. color="#8ac5ff"
  30. width="25"
  31. height="25"
  32. cursor-pointer
  33. alt="关闭画面"
  34. @click="closeWorker"
  35. />
  36. </div>
  37. <div
  38. v-if="loading"
  39. class="absolute top-50% left-50% transform-translate--50% flex justify-center items-center"
  40. >
  41. <NSpin />
  42. </div>
  43. </div>
  44. </UseFullscreen>
  45. </div>
  46. </template>
  47. <script setup>
  48. import { uuid } from '@/utils'
  49. import { omatVideoPlayer } from '@/assets/js/video-lib/flv/omatVideoPlayer'
  50. import { UseFullscreen } from '@vueuse/components'
  51. import { NSpin } from 'naive-ui'
  52. import { useOutsideSystemStore } from '@/stores/modules/system.js'
  53. const props = defineProps({
  54. data: Object,
  55. currentActive: Number
  56. })
  57. const useSystem = useOutsideSystemStore()
  58. const loading = ref(false)
  59. const clearCom = inject('clearCom')
  60. let playerObj = null
  61. const init = async () => {
  62. // const url = videoList.value.third.replace('{4}', uuid()).replace('{13}', props.data.id)
  63. loading.value = true
  64. const { url } = await useSystem.getStream({ device_id: props.data.address })
  65. try {
  66. // await useSystem.getDeviceInfo()
  67. console.log('websocket请求')
  68. playerObj = omatVideoPlayer(
  69. '.al-video' + props.currentActive,
  70. url,
  71. () => {
  72. loading.value = false
  73. },
  74. {
  75. enableZoom: true, // 启用缩放
  76. enableDrag: true, // 启用拖动
  77. minScale: 1, // 最小缩放比例
  78. maxScale: 6, // 最大缩放比例
  79. dragSpeed: 1.9 // 拖动速度
  80. }
  81. )
  82. } catch (error) {
  83. console.log(error)
  84. }
  85. }
  86. // 关闭线程
  87. const closeWorker = () => {
  88. if (!playerObj) return
  89. playerObj?.destroyed()
  90. playerObj = null
  91. clearCom()
  92. }
  93. onMounted(() => {
  94. init()
  95. })
  96. onUnmounted(() => {
  97. playerObj?.destroyed()
  98. })
  99. </script>