Commit 17e74d960994f0c293aa2a6d29be4977d13457bb
1 parent
29bde1de
fix(external/Componse): 修复摄像头更换源地址无法播放问题
Showing
2 changed files
with
25 additions
and
20 deletions
| ... | ... | @@ -4,7 +4,7 @@ import { CameraConfig } from './index' |
| 4 | 4 | import cloneDeep from 'lodash/cloneDeep' |
| 5 | 5 | |
| 6 | 6 | export const option = { |
| 7 | - dataset: 'http://113.204.115.250:83/openUrl/4itVrfG/live.m3u8' | |
| 7 | + dataset: 'http://113.204.115.250:83/openUrl/zXuPw5y/live.m3u8' | |
| 8 | 8 | } |
| 9 | 9 | |
| 10 | 10 | export default class Config extends PublicConfigClass implements CreateComponentType { | ... | ... |
| 1 | 1 | <template> |
| 2 | 2 | <div class="go-content-box" :style="{ width: w + 'px', height: h + 'px' }"> |
| 3 | 3 | <video id="my-player" ref="videoRef" class="video-js my-video"> |
| 4 | - <source :src="props.chartConfig.option.dataset" /> | |
| 4 | + <source :src="dataset" /> | |
| 5 | 5 | </video> |
| 6 | 6 | </div> |
| 7 | 7 | </template> |
| 8 | 8 | <script setup lang="ts"> |
| 9 | -import { PropType, onMounted, ref, watch, toRefs } from 'vue' | |
| 9 | +import { PropType, onMounted, ref, watch, toRefs, onUnmounted } from 'vue' | |
| 10 | 10 | import { CreateComponentType } from '@/packages/index.d' |
| 11 | 11 | import videojs from 'video.js' |
| 12 | 12 | import type { VideoJsPlayerOptions } from 'video.js' |
| ... | ... | @@ -21,44 +21,49 @@ const props = defineProps({ |
| 21 | 21 | |
| 22 | 22 | const { w, h } = toRefs(props.chartConfig.attr) |
| 23 | 23 | |
| 24 | +const { dataset } = toRefs(props.chartConfig.option) | |
| 25 | + | |
| 24 | 26 | // video标签 |
| 25 | 27 | const videoRef = ref<HTMLElement | null>(null) |
| 26 | 28 | |
| 27 | 29 | // video实例对象 |
| 28 | 30 | let videoPlayer: videojs.Player | null = null |
| 29 | 31 | |
| 32 | +//options配置 | |
| 33 | +const options: VideoJsPlayerOptions = { | |
| 34 | + language: 'zh-CN', // 设置语言 | |
| 35 | + controls: true, // 是否显示控制条 | |
| 36 | + preload: 'auto', // 预加载 | |
| 37 | + autoplay: true, // 是否自动播放 | |
| 38 | + fluid: false, // 自适应宽高 | |
| 39 | + src: dataset?.value, // 要嵌入的视频源的源 URL | |
| 40 | + userActions: { | |
| 41 | + hotkeys: true | |
| 42 | + } | |
| 43 | +} | |
| 44 | + | |
| 30 | 45 | // 初始化videojs |
| 31 | 46 | const initVideo = () => { |
| 32 | - const options: VideoJsPlayerOptions = { | |
| 33 | - language: 'zh-CN', // 设置语言 | |
| 34 | - controls: true, // 是否显示控制条 | |
| 35 | - preload: 'auto', // 预加载 | |
| 36 | - autoplay: true, // 是否自动播放 | |
| 37 | - fluid: false, // 自适应宽高 | |
| 38 | - src: props.chartConfig.option.dataset, // 要嵌入的视频源的源 URL | |
| 39 | - userActions: { | |
| 40 | - hotkeys: true | |
| 41 | - } | |
| 42 | - } | |
| 43 | 47 | if (videoRef.value) { |
| 44 | 48 | // 创建 video 实例 |
| 45 | - videoPlayer = videojs(videoRef.value, options, onPlayerReady) | |
| 49 | + videoPlayer = videojs(videoRef.value, options) | |
| 46 | 50 | } |
| 47 | 51 | } |
| 48 | 52 | |
| 49 | -// video初始化完成的回调函数 | |
| 50 | -const onPlayerReady = () => {} | |
| 51 | - | |
| 52 | 53 | onMounted(() => { |
| 53 | 54 | initVideo() |
| 54 | 55 | }) |
| 55 | 56 | |
| 57 | +onUnmounted(() => { | |
| 58 | + videoPlayer?.dispose() | |
| 59 | +}) | |
| 60 | + | |
| 56 | 61 | watch( |
| 57 | 62 | () => props.chartConfig.option.dataset, |
| 58 | 63 | newData => { |
| 59 | - console.log(newData) | |
| 60 | 64 | props.chartConfig.option.dataset = newData |
| 61 | - initVideo() | |
| 65 | + videoPlayer?.src(newData) | |
| 66 | + videoPlayer?.play() | |
| 62 | 67 | } |
| 63 | 68 | ) |
| 64 | 69 | </script> | ... | ... |