You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
livestock-trading/src/components/MonitorLivePlayer.vue

76 lines
1.2 KiB

<template>
<div class="live-player">
<video
ref="videoRef"
class="screen-media"
muted
autoplay
playsinline
/>
</div>
</template>
<script setup>
import { ref, watch, onMounted, onBeforeUnmount, nextTick } from 'vue'
import { createLivePlayer, destroyLivePlayer } from '../utils/liveStreamPlayer.js'
const props = defineProps({
url: {
type: String,
default: ''
},
playerConfig: {
type: Object,
default: () => ({})
},
active: {
type: Boolean,
default: true
}
})
const videoRef = ref(null)
let playerInstance = null
const teardown = () => {
destroyLivePlayer(playerInstance)
playerInstance = null
}
const setup = async () => {
teardown()
if (!props.active || !props.url) {
return
}
await nextTick()
if (!videoRef.value) {
return
}
playerInstance = createLivePlayer(videoRef.value, props.url, props.playerConfig)
}
watch(
() => [props.url, props.active, props.playerConfig],
setup,
{ deep: true }
)
onMounted(setup)
onBeforeUnmount(teardown)
</script>
<style scoped>
.live-player {
width: 100%;
height: 100%;
overflow: hidden;
}
.screen-media {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
background: #0a1418;
}
</style>