videojs播放流媒体视频
Contents
下载相关npm包
{
"dependencies": {
"@videojs-player/vue": "^1.0.0",
"video.js": "^7.21.5",
"videojs-contrib-hls": "^5.15.0",
"vue-video-player": "^6.0.0"
},
"devDependencies": {
"@types/video.js": "^7.3.56",
},
}
前端相关vue3代码
<script setup lang="ts">
import videojs from 'video.js'
import type { VideoJsPlayerOptions } from 'video.js'
import 'video.js/dist/video-js.min.css'
interface MyVideoProps {
/** 视频地址 */
src: string
}
const props = withDefaults(defineProps<MyVideoProps>(), {})
// video标签
const videoRef = ref<HTMLElement | null>(null)
// video实例对象
let videoPlayer: videojs.Player | null = null
// video初始化完成的回调函数
const onPlayerReady = () => { }
// 初始化videojs
const initVideo = () => {
// https://gitcode.gitcode.host/docs-cn/video.js-docs-cn/docs/guides/options.html
const options: VideoJsPlayerOptions = {
playbackRates: [0.5, 1.0, 1.5, 2.0], // 可选的播放速度
// aspectRatio: '4:3', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
language: 'zh-CN', // 设置语言
controls: true, // 是否显示控制条
preload: 'auto', // 预加载
loop: false, // 是否视频一结束就重新开始。
muted: false, // 默认情况下将会消除任何音频。
autoplay: true, // 是否自动播放
fluid: false, // 自适应宽高
src: props.src, // 要嵌入的视频源的源 URL
// poster: '', // 封面地址
notSupportedMessage: '此视频暂无法播放,请稍后再试', // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
controlBar: {
timeDivider: true, // 当前时间和持续时间的分隔符
durationDisplay: true, // 显示持续时间
remainingTimeDisplay: true, // 是否显示剩余时间功能
fullscreenToggle: true, // 是否显示全屏按钮
},
}
if (videoRef.value) {
// 创建 video 实例
videoPlayer = videojs(videoRef.value, options, onPlayerReady)
videoPlayer.src({
src: props.src,
type: 'application/x-mpegURL',
})
}
}
onMounted(() => {
initVideo()
})
onUnmounted(() => {
videoPlayer?.dispose()
})
</script>
<template>
<video id="my-player" ref="videoRef" class="video-js w-full" style="height: calc(100vh - 50px);" />
</template>
<style lang="scss" scoped>
.w-full {
width: 100%;
}
:deep(.vjs-big-play-button) {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
</style>
- src:视频地址,一般为可访问的静态目录,其中有目标视频的m3u8文件
后端
- 需要将非m3u8格式的视频转成m3u8格式并放入服务器指定文件夹下
- 将文件夹暴露出去可以直接访问