当前位置: 首页 > news >正文

原生html+js播放flv直播视频流【vue等皆可用】

一、前言

最近着手了一个新需求:将某记录仪的实时视频在页面展现。

实现步骤:

  1. 通过WebRtc将直播视频转码为flv/rtsp格式流;
  2. 通过Vlc或代码中的视频播放器播放视频。

常见播放flv直播视频流软件如:VLC、PotPlayer等,好用但无法嵌入代码。

在此介绍一种使用原生html+js即可实现直播视频流播放的方式,内网外网皆可用。

二、实现

  • 引入Bilibili开源Flash 视频(FLV)播放器

方式一:外网引入
https://github.com/Bilibili/flv.js
方式二:内网导入(把js下载下来标签引入即可)
链接:https://pan.baidu.com/s/1kiDJgoxGn4pQ3qCROdu0fw?pwd=myjn
提取码:myjn

  • 编写调用播放器方法
if (flvjs.isSupported()) {var videoElement = document.getElementById('videoElement');var flvPlayer = flvjs.createPlayer({type: 'flv', // 指定视频类型,特别注意此处伟flvisLive: true, // 开启直播hasAudio: false, //需要设置为false不然播放不了视频cors: true,  // 开启跨域访问url: 'url' //FLV视频地址},{enableWorker: false, //不启用分离线程enableStashBuffer: false, //关闭IO隐藏缓冲区reuseRedirectedURL: true, //重用301/302重定向url,用于随后的请求,如查找、重新连接等。autoCleanupSourceBuffer: true //自动清除缓存});flvPlayer.attachMediaElement(videoElement);flvPlayer.load();flvPlayer.play(); //开始播放// flvPlayer.stop(); //停止播放时打开}

三、整体Demo

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script src="./flv.min.js"></script>
<style>
body,center{
padding:0;
margin:0;
}.v-container{width:640px;height:360px;border:solid 1px red;}video{width:100%;height:100%;}
</style>
</head>
<body><h2>FLV视频播放测试</h2><div class="v-container"><video id="videoElement" muted autoplay="autoplay" preload="auto" controls="controls"></video></div>
</body>
</html>
<script>if (flvjs.isSupported()) {var videoElement = document.getElementById('videoElement');var flvPlayer = flvjs.createPlayer({type: 'flv', // 指定视频类型,特别注意此处伟flvisLive: true, // 开启直播hasAudio: false, //需要设置为false不然播放不了视频cors: true,  // 开启跨域访问url: 'url' //FLV视频地址},{enableWorker: false, //不启用分离线程enableStashBuffer: false, //关闭IO隐藏缓冲区reuseRedirectedURL: true, //重用301/302重定向url,用于随后的请求,如查找、重新连接等。autoCleanupSourceBuffer: true //自动清除缓存});flvPlayer.attachMediaElement(videoElement);flvPlayer.load();flvPlayer.play(); //开始播放// flvPlayer.stop(); //停止播放时打开}
</script>
http://www.lryc.cn/news/421759.html

相关文章:

  • 初学java第一天:写一下熟悉的猜数字小游戏
  • 【C++】如何判断类型
  • 让一切发生皆有利于我,在人生的长河中,我们常常面临诸多的不确定性和变化
  • 腾讯云AI代码助手:智能AI代码助手 ,新一代的高效代码开发辅助工具
  • C#:索引器 集合初始化器 事件访问器 枚举器 迭代器
  • css伪类选择器、盒子模型等
  • opencv-python图像增强三:图像清晰度增强
  • 第130天:内网安全-横向移动PTH哈希PTT 票据PTK密匙Kerberos密码喷射
  • SB3045LFCT-ASEMI无人机专用SB3045LFCT
  • RPA财务机器人是什么,RPA的具体应用场景有哪些?| 实在RPA研究
  • 滑动窗口 | Java | (hot100) 力扣 3
  • 【产品经理】竞品分析怎么理解?拆解一下
  • 合规性导航:处理爬虫数据用于机器学习的最佳实践
  • spring中使用到的设计模式有哪些
  • splitcontainer控件设置固定大小
  • 最近在写的支付模块
  • 解决域名加别名后再代理或者映射到fastadmin项目
  • Armv9.5架构新增的关键扩展--精简版
  • STM32 GPIO 模块
  • 网络剪枝——network-slimming 项目复现
  • Spring 懒加载的实际应用
  • PyQT 串口改动每次点开时更新串口信息
  • 三级_网络技术_19_路由器的配置及使用
  • 【STM32 Blue Pill编程】-STM32CubeIDE开发环境搭建与点亮LED
  • 【数据结构】六、图:4.图的遍历(深度优先算法DFS、广度优先算法BFS)
  • 29、号外!号外!ERA5再分析数据下载方式更新啦
  • 智能识别,2024年SD卡数据恢复软件的智能进化
  • 浙大数据结构慕课课后题(04-树5 Root of AVL Tree)
  • Golang | Leetcode Golang题解之第331题验证二叉树的前序序列化
  • zdppy+vue3+onlyoffice文档管理系统项目实战 20240812上课笔记