vue3使用flv.js播放flv直播流

目前有个需求是:管理直播机有一个列表需要查看每个直播机的实时内容,所以需要在后台加这个功能。

效果:我用ffmpeg模拟推流:

 

如何用ffmpeg模拟推流请看我上一篇文章

网页:

 

如上是可以正确再网页端拉流,这个功能费了一天的时间,在这里免费分享出来。

首先安装flv.js(用npm的话我遇到过报错):

pnpm i flv.js

页面核心代码:

html:

<video ref="videoElementRef" controls autoplay muted
style="width: 400px; height: 300px; object-fit: fill"></video>

js:

import { computed, ref, nextTick, watch } from 'vue';
const formValue = ref(newState(null));
const flvPlayer = ref<flvjs.Player | null>(null);
const videoElementRef = ref<HTMLVideoElement | null>(null); // 明确类型
const createVideo = async () => {
if (flvjs.isSupported()) {
if (!videoElementRef.value) {
console.warn('videoElementRef.value is null, retrying...');
return; // 如果 video 元素还未准备好,则直接返回
}
console.log('videoElement', videoElementRef.value);
flvPlayer.value = flvjs.createPlayer({
type: 'flv', // 只支持flv和mp4
url: 'http://live.xxx.com/xxx/2.flv', //你的url地址
isLive: true,
hasAudio: true,
});
console.log('flvPlayer.value', flvPlayer.value);
flvPlayer.value.attachMediaElement(videoElementRef.value);
flvPlayer.value.load();
flvPlayer.value.play();
//处理视频播放错误的语法
flvPlayer.value.on('error', () => {
message.error(`视频加载失败,请稍候重试!`);
return false;
});
}
};
// 监听 formValue 的变化,当数据加载完成后初始化视频
watch(
() => formValue.value,
(newFormValue) => {
if (newFormValue && showModal.value) {
nextTick(() => {
createVideo();
});
}
},
{ deep: true, immediate: false } // 深度监听,并且初始不执行
);

页面关闭时销毁flvPlayer:

//销毁播放器

if (flvPlayer.value) {
flvPlayer.value.pause();
flvPlayer.value.unload();
flvPlayer.value.detachMediaElement();
flvPlayer.value.destroy();
flvPlayer.value = null;
}

这篇分享文章就到这里啦!如果你对文章内容有疑问或想要深入讨论,欢迎在评论区留言,我会尽力回答。同时,如果你觉得这篇文章对你有帮助,不妨点个赞并分享给其他同学,让更多人受益。

想要了解更多相关知识,可以查看我以往的文章,其中有许多精彩内容。记得关注我,获取及时更新,我们可以一起学习、讨论技术,共同进步。

感谢你的阅读与支持,期待在未来的文章中与你再次相遇!

我的微信公众号:【xdub】,欢迎大家订阅,我会同步文章到公众号上。

posted @   一方_self  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示