safetwitch/src/components/VideoPlayer.vue

55 lines
1.2 KiB
Vue
Raw Normal View History

2023-03-17 21:20:51 -04:00
<template>
<div>
<video id="video-player" class="video-js vjs-defaultskin"></video>
</div>
</template>
<script lang="ts">
// Importing video-js
2023-03-18 13:49:02 -04:00
import videojs from 'video.js'
import qualityLevels from 'videojs-contrib-quality-levels'
2023-04-06 10:19:59 -04:00
import { createQualitySelector } from '@/assets/qualitySelector'
2023-09-16 18:13:28 -04:00
import { getTimeFromQuery } from '@/mixins'
import 'video.js/dist/video-js.css'
2023-03-18 13:49:02 -04:00
videojs.registerPlugin('qualityLevels', qualityLevels)
2023-03-17 21:20:51 -04:00
export default {
props: {
options: {
type: Object,
default() {
2023-03-18 13:49:02 -04:00
return {}
2023-03-17 21:20:51 -04:00
}
}
},
2023-07-19 20:26:43 -04:00
emits: ['PlayerTimeUpdate'],
2023-09-16 18:13:28 -04:00
setup() {
2023-03-17 21:20:51 -04:00
let player: any
return {
player
}
},
// initializing the video player
// when the component is being mounted
mounted() {
2023-07-19 20:26:43 -04:00
const emit = this.$emit
2023-04-06 10:19:59 -04:00
this.player = videojs('video-player', this.options, () => {
createQualitySelector(this.player)
2023-07-19 20:26:43 -04:00
2023-09-16 18:13:28 -04:00
if (this.$route.query['t']) {
const timeQuery = this.$route.query['t'].toString() || ""
const time = getTimeFromQuery(timeQuery)
this.player.currentTime(time)
}
2023-07-19 20:26:43 -04:00
this.player.on('timeupdate', () => {
emit('PlayerTimeUpdate', this.player.currentTime())
2023-07-20 13:57:01 -04:00
})
2023-04-06 10:19:59 -04:00
})
2023-04-10 20:55:53 -04:00
},
unmounted() {
this.player.dispose()
2023-03-17 21:20:51 -04:00
}
}
2023-03-18 13:49:02 -04:00
</script>