flvjs播放器事件动态监听并实现flvjs实例销毁(http-flv协议)

flv.js解决延迟、卡死、断流重连问题 阅读详情
AI摘要

本文介绍如何使用FLVJS播放器动态加载多个HTTP-FLV协议直播视频,并通过监听特定事件实现实例的创建与销毁。重点在于利用$flvjs.Events.STATISTICS_INFO事件进行动态监控。

flvjs播放器事件动态监听(http-flv协议)

1.困扰我的问题

最近在使用flvjs播放器播放http-flv协议流的直播视频,业务需求要动态加载非固定数量的视频(不超过6个),使用flv创建flvjs实例简单,但销毁flvjs得想法子,下面是解决我曾经的困扰思路~

2.思路
我们要监听创建出来flvjs实例事件,然后设置变量去判断何时该销毁实例

3.代码说明

watch: {
	device(val) {
		if (val) {
			this.changeLampPost = true // 切换设备时销毁
		}
	}
},
data() {
	return {
		leaveRouter: false, 
      	changeLampPost: false,
    }
},
methods: {
	// 打开视频(方法体)
    openVideo() {
      let _this = this
      this.tableData.forEach((item, index) => { // 遍历接口返回的数据
        if (item) {
          _this.$nextTick(() => {
            setTimeout(()=>{
              // 【flvjs播放】
              if (_this.$flvjs.isSupported()) { // 引入flvjs时已声明全局变量 $flvjs
                let videoElement = document.getElementById('videoElement'+(index+1))
                // 创建flvjs实例
                let flvPlayer = _this.$flvjs.createPlayer({
                  type: 'flv',
                  url: item, // 直播地址(http://xxx.flv?port=1935&app=live&stream=xxx)
                })
                flvPlayer.attachMediaElement(videoElement)
                flvPlayer.load()
                flvPlayer.play()

                // 【flvjs播放器事件侦听】
                flvPlayer.on(_this.$flvjs.Events.LOADING_COMPLETE, (res) => {
                  console.log("加载完成")
                })
                flvPlayer.on(_this.$flvjs.Events.MEDIA_INFO, (res) => {
                  console.log("媒体信息")
                })
                flvPlayer.on(_this.$flvjs.Events.METADATA_ARRIVED, (res) => {
                  console.log("获取元数据")
                })
                flvPlayer.on(_this.$flvjs.Events.RECOVERED_EARLY_EOF, (res) => {
                  console.log("恢复早期EOF")
                })
                flvPlayer.on(_this.$flvjs.Events.SCRIPTDATA_ARRIVED, (res) => {
                  console.log("获取到脚本数据")
                })
                flvPlayer.on(_this.$flvjs.Events.ERROR, (errorType, errorDetail, errorInfo) => {
                  console.log("视频错误信息回调")
                  console.log("errorType:", errorType);
                  console.log("errorDetail:", errorDetail);
                  console.log("errorInfo:", errorInfo);
                })
                
                // 【重要事件监听】http请求建立好后,该事件会一直监听flvjs实例
                flvPlayer.on(_this.$flvjs.Events.STATISTICS_INFO, (res) => {
                  console.log("请求数据信息")
                  if (_this.leaveRouter || _this.changeLampPost) { // 离开路由或切换设备
                    console.log("销毁实例")
                    // 销毁实例
                    flvPlayer.pause();
                    flvPlayer.unload();
                    flvPlayer.detachMediaElement();
                    flvPlayer.destroy();
                    flvPlayer= null;
                  }
                })
              }
            })
          })
        } else this.setDrop(index) // 掉线设备
      })
      // 切换设备,完成旧flvjs实例销毁后重启flvjs播放器
      if (this.changeLampPost) {
        console.log("重启播放器")
        this.changeLampPost = false
        this.openVideo()
      }
   },
},
// 路由销毁前
beforeDestroy() {
   this.leaveRouter = true
},

4.总结
要解决动态监听flvjs实例问题,解决方案在代码中已呈现,关键是$flvjs.Events.STATISTICS_INFO的监听事件。

感谢启发文章:
Flv.js文档使用随记
原作者(bilibili)flv.js API文档【推荐】

使用 Vue 和 flv.js 实现流媒体视频播放:完整教程 本文详细介绍了如何在 Vue.js 项目中集成 flv.js,以实现宇视摄像头的实时视频播放。成功解决了多窗体视频播放的问题,并优化了流媒体的加载速度和播放稳定性。文章还涵盖了在实际开发中遇到的挑战,例如处理摄像头的流媒体格式兼容性、视频加载延迟等问题,并提供了对应的解决方案。本文适合有一定 Vue.js 开发经验的读者,特别是那些在项目中需要实现流媒体视频播放功能的开发者。 阅读详情

相关推荐

flv.js解析与使用

简介 Flv.js 是 HTML5 Flash 视频(FLV)播放器,纯原生 JavaScript 开发,没有用到 Flash。由 bilibili 网站开源。它的工作原理是将 FLV 文件流转码复用成 ISO BMFF(MP4 碎片)片段,然后通过 Media Source Extensions 将 MP4 片段喂进浏览器。 Github地址:https://github.com/Bilibili/flv.js/ flv.js demo地址:http://bilibili.github.io/flv.js

佳佳鸽的博客 1万+

flv.js源码知识点(中)

方法,根据本次调用的时间和上一次计算时间的差值做不同处理,具体参见代码注释,这种计算的思路是挺巧妙的,开始以为不准切,但是仔细思考是能准确计算最近有数据一秒的网速。则往缓存中添加,如果大于继续下面的判断如果缓存中没有数据则直接消费本地来的数据,如果有数据则消费缓存中的数据消费之后再把本地来的数据放入缓存。在音视频播放的场景中,用户的网速是影响体验的重要因素,播放器在播放的过程中,可以计算单位时间获取的数据量来衡量网速。每次只处理当前数据中完整的TAG,没有处理的部分就缓存起来,和下次获取的数据拼接。...

小陈的博客 1018

flvjs、videojs、cyberplayer.js 三大播放器选型指南

在 Web 视频开发中,HTML5 播放器与流媒体协议的选择直接影响首屏时间、延迟和兼容性。HTTP-FLV 凭借低解析成本和 MSE 转封装技术,成为低延迟直播的主流方案;而通用播放器框架则通过插件体系适配 HLS、MP4 等多种格式。理解 FLV 解封装、fMP4 转封装、SourceBuffer 管理等底层原理,有助于在互动直播、点播、云平台集成等场景中做出合理技术决策。本文围绕 flvjs、videojs、cyberplayer.js 三个高频方案,从核心机制、实操配置到踩坑经验展开对比,帮助开发者

weixin_33859844的博客 353

flv(直播流视频播放)踩坑

最近项目开发中用flv加载的直播视频流遇到了如下几个问题,现进行记录学习 1、出现组件销毁后,视频流依然在进行拉流 2、出现断流和卡顿 项目场景: flv格式的直播流通过flv.js依赖进行实时直播播放 问题描述: 1、出现组件销毁后,视频流依然在进行拉流 2、出现断流和卡顿 组件销毁后,视频流一直在加载 第一次未连接上直播流后,未进行重连操作,导致视频无法播放,页面报错 原因分析: 1、由于销毁组件的时候没有正确的销毁视频实例,导致一直在拉流 2、没有监听视频流的断连、断流、卡顿的.

Plumea的博客 6196

Vue项目集成萤石云实时视频流:从HLS/FLV协议选型到多路播放优化实战

在Web前端开发中,实时视频流集成是物联网、智慧园区等后台管理系统常见的核心需求,其本质是在浏览器中处理持续推送的媒体数据。实现原理主要基于流媒体协议,如兼容性广但延迟较高的HLS协议,以及延迟更低、适合实时监控的HTTP-FLV协议。这些技术为Web应用带来了实时音视频交互能力,具有重要的技术价值。其典型应用场景包括安防监控、智能家居设备预览和远程巡检等。本文聚焦于在Vue.js技术栈中,如何高效、稳定地集成萤石云视频流,并深入探讨了基于flv.js和hls.js的动态协议切换方案,以应对多路视频播放时的

536

Vue项目集成多格式视频播放:基于video.js的m3u8、flv、mp4统一解决方案

在Web前端开发中,视频播放是多媒体处理的核心场景之一,涉及流媒体协议、编解码兼容与浏览器原生支持等关键技术原理。其技术价值在于为点播、直播、监控等业务提供流畅、一致的跨平台用户体验。面对HLS(m3u8)、FLV、MP4等不同封装格式,前端需要一套统一的播放器架构来屏蔽底层差异。本文聚焦于**Vue.js**框架下的工程实践,通过集成**video.js**播放器内核及其插件生态,构建了一个智能适配多格式的播放器组件。该方案不仅解决了m3u8流媒体在旧版浏览器中的兼容性问题,还通过flv.js插件实现了对

weixin_34150830的博客 338

flvjs、videojs、cyberplayer.js 播放器选型与 FLV 直播实战

视频播放的核心挑战在于格式兼容与协议适配,浏览器原生 video 标签仅支持 MP4、WebM 等有限容器,而实际业务中常需处理 HTTP-FLV、HLS 等流媒体协议。MSE(Media Source Extensions)技术通过 JavaScript 将 FLV 等格式转封装为 fMP4 分片,再喂给 video 标签,实现浏览器端播放。flvjs 作为 FLV 解码内核,专注格式适配;videojs 提供完整播放器框架与插件生态;cyberplayer.js 则是开箱即用的成品 SDK。在直播、监控

weixin_34302561的博客 338

uniapp直播播放器实践:基于mui-player的m3u8/flv跨端优化

HLS与FLV是当前直播分发的主流协议,HLS通过索引切片实现多码率自适应,FLV则通过HTTP长连接带来更低延迟。在移动端跨平台开发中,统一的播放器方案需要应对不同环境的兼容性。uniapp作为跨端框架,结合mui-player可封装一套支持m3u8/flv的直播播放方案,并针对自动播放、弱网降级、内存释放等场景进行专项优化。从协议原理到工程落地,本文梳理直播流播放链路、跨端适配思路与常见踩坑解法,为需要快速接入直播能力的跨端项目提供参考。

weixin_34357928的博客 392

流媒体在线预览协议选型与播放器实战:m3u8、rtmp、mp4、flv

流媒体协议是音视频在线播放的基础技术,其核心原理在于通过不同的封装与传输机制平衡延迟、兼容性与成本。m3u8(HLS)基于分片索引实现自适应码率,适合长视频与直播;rtmp作为推流协议需服务端转封装;mp4依赖faststart与Range请求实现秒开;flv则借助MSE实现低延迟直播。合理选型可显著提升首帧速度与播放稳定性,广泛应用于监控预览、后台审核、直播回放等场景。本文深入解析四种格式的协议细节与播放器配置,结合hls.js、flv.js实操及常见问题排查,帮助开发者构建高效的在线预览方案。

weixin_34037515的博客 310

Vue集成海康威视云眸平台:视频监控实时预览与回放实战

视频监控平台与Web前端融合是企业数字化的常见需求。其核心在于理解直播流与回放流的技术差异:HLS协议兼容性好但延迟较高,HTTP-FLV延迟低却需借助flv.js解析。通过OpenAPI获取临时播放地址,前端即可基于Vue组件灵活实现实时预览与录像回放,摆脱对官方插件的依赖,同时兼顾HTTPS安全与多浏览器兼容性。此类方案适合云SaaS后台、多租户管理系统等场景。本文基于海康威视云眸平台,分享Vue项目中视频监控集成的完整思路与实践。

weixin_34032792的博客 454

海康威视WebSDK 3.0集成实战:从架构解析到核心功能实现

在Web应用开发中,视频监控集成是一个常见需求,其核心在于实现浏览器与网络摄像机(IPC)或网络硬盘录像机(NVR)的稳定通信。传统方案常依赖浏览器插件,存在兼容性与安全风险。现代Web技术通过WebSocket、HTTP-FLV及WebRTC等标准协议,实现了纯Web化的视频流传输,结合HTTPS API完成信令交互,从而构建安全、跨平台的前端监控能力。这种架构不仅解决了“海康威视摄像头漏洞”等历史安全问题,也提升了开发效率与应用性能。其技术价值在于为智慧园区、智能工厂等场景提供了可定制、易集成的视频解决

weixin_34235457的博客 394

flv.js接口介绍

您可以根据自己的实际需求,选择需要的配置项进行传参。默认值为 true。: 懒加载最大时长,超过该值则关闭懒加载。默认值为3 * 60。默认值为 true。默认值为 true。: 是否启用对跨域请求的凭证支持。默认值为 false。: 是否在加载流时自动播放视频。默认值为 true。默认值为 undefined。默认值为 512 * 1024。默认值为 384 * 1024。: 恢复懒加载前需要恢复的时长。: 加载当前流并准备播放,但不自动开始播放。: 是否启用调试模式。默认值为 false。

百鸣的专栏 5809

海康威视设备Web集成实战:从RTSP流转发到GB28181协议对接

在Web应用开发中,音视频流媒体集成是一个常见且复杂的技术挑战,尤其在安防监控、物联网平台等场景。其核心原理在于将设备端的视频流(如RTSP、GB/T 28181协议)通过服务端进行协议转换与转发,最终以Web友好的格式(如HTTP-FLV、HLS、WebRTC)推送到前端播放器。这项技术的核心价值在于实现了浏览器无插件化播放,打破了传统安防系统对特定客户端或插件的依赖,极大地提升了系统的可访问性和易用性。在安防监控、智慧园区、工业物联网等应用场景中,开发者常需集成海康威视、大华等主流设备。本文聚焦于**海

weixin_34055787的博客 356

使用WebSocket+ffmpeg转码+flvjs于前端播放rtmp视频流

使用nodejs简单配置后端。

jbbz_的博客 539

BALM2深度解析 | 港大MARS实验室如何用点簇革新激光BA?

本文深度解析了港大MARS实验室提出的BALM2方案如何通过点簇技术革新激光BA(Bundle Adjustment)处理。BALM2将点云数据聚合为点簇,显著提升计算效率,实测显示其计算耗时仅为传统方法的1/20。文章详细介绍了点簇的核心原理、二阶优化方法及与传统方法的性能对比,展示了其在激光SLAM领域的突破性应用。

weixin_29212867的博客 152

.ipynb文件深度解析:从JSON结构到Jupyter Notebook高效使用指南

在Python开发与数据处理领域,交互式编程正成为探索数据与验证思路的高效方式。Jupyter Notebook作为最流行的交互式环境之一,其默认文件格式.ipynb本质是一个基于JSON的文本文件,内部通过单元格组织代码、说明文字与运行结果。理解其JSON结构,不仅有助于掌握Notebook的存储原理,更能为文件损坏修复、版本控制与自动化转换提供基础。依托对单元格类型、魔法命令及输出可视化的熟练运用,数据分析和数据可视化流程可以变得更为流畅。同时,借助VS Code、nbconvert等工具,开发者能将.

weixin_28839629的博客 346

大华摄像头Web播放实战:RTSP转HTTP-FLV与HLS低延迟方案详解

浏览器原生不支持RTSP协议,这使得安防摄像头实时画面在Web端的呈现成为一项系统工程。视频监控场景下,由摄像头输出的H.264或H.265编码流,往往需借助流媒体服务进行协议转换,才能被网页中的<video>标签识别并播放。围绕这一核心需求,行业内形成了HLS切片、HTTP-FLV、WebRTC三大主流技术路线,各有其延迟表现与适用边界。通过对比可知,基于FLV的播放方案在延迟控制和兼容性之间取得了较好平衡,配合ZLMediaKit这类开源流媒体网关,能够高效完成RTSP流的拉取、转发与分发,再借助flv

weixin_33885676的博客 362

智慧矿山无人机空地一体化解决方案

未来,随着技术的不断进步和应用场景的不断拓展,智慧矿山无人机空地一体化解决方案将在矿业领域发挥更加重要的作用,为矿山的可持续发展提供更加有力的保障。该系统能够实现矿山的全方位、全天候监测与管理,提升矿山生产效率,降低安全风险,并为矿山的可持续发展提供有力支持。智慧矿山无人机空地一体化解决方案是当前矿业领域技术创新的重要方向,旨在通过集成无人机技术、物联网、大数据、人工智能等先进技术,实现矿山的智能化、高效化和安全化运营。在矿山爆破、挖掘等危险作业中,无人机可进行远程监控和指挥,降低人员安全风险。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 1109

Vue项目多格式视频播放实战:整合HLS、FLV与MP4的完整方案

在现代Web开发中,视频播放是提升用户体验的关键技术。其核心原理是利用浏览器的Media Source Extensions (MSE) API,将流媒体数据动态喂给video元素,从而实现超越原生支持的格式兼容。这项技术的核心价值在于,它让前端能够处理复杂的流媒体协议,如HLS和FLV,为直播、点播等场景提供了统一的播放体验。在Vue.js等现代前端框架中,通过集成hls.js和flv.js等专业库,开发者可以构建自适应的播放器组件,根据视频地址自动选择最佳播放方案。这种工程实践不仅解决了M3U8、FLV

weixin_34228387的博客 351

【Docker】如何让docker容器正常使用nvidia显卡

描述了如何在docker容器中使用英伟达显卡的过程和问题解决方法。

NameLoadingFailed的博客 8372

四足机器人跨楼层轨迹规划:SCAN-Planner-Pure-ROS2开源项目实践指南

在机器人导航领域,路径规划是让机器人从起点安全、高效移动到目标点的核心技术。其原理通常基于环境地图(如占据栅格地图或八叉树地图),通过搜索算法(如A*、RRT*)在配置空间中找到一条无碰撞的可行路径。这项技术的价值在于赋予机器人在复杂、非结构化环境中的自主移动能力,是巡检、救援、物流等应用场景的基石。对于四足机器人而言,其运动能力超越了轮式平台,能在楼梯、斜坡等三维地形中移动,这使得传统的二维规划不再适用,需要专门的三维轨迹规划算法。SCAN-Planner-Pure-ROS2正是这样一个专注于解决四足机器

weixin_30700977的博客 461

DPlayer 官方使用指南:HTML5 弹幕视频播放器的安装、全参数配置、API、事件、多清晰度与流媒体接入实战

本文以 DPlayer 仓库的官方指南 [docs/guide.md](https://link.gitcode.com/i/89d1ac052567275813de16be14d4c3e4) 为骨架,结合仓库源码([src/js/options.js](https://link.gitcode.com/i/7310ff9033bcc85e780081d8857f3b80)、[src/js/pla

gitblog_00246的博客 420

【EMC专题】为什么芯片规格书ESD性能中看不到MM(机器放电模型)

器件级ESD包括三种类型,HBM人体放电模型、MM机械放电模型和CDM元件充电模型。但在芯片规格书中为什么只见到HBM模型与CDM模型,却没有看到MM模型的数据?

一点硬件 450

GitHub Pages 免费托管静态站

发个静态演示页,流程却是找运维申请 Nginx 配置、排期、等部署。把页面交给 GitHub Pages 后,这条链路缩成一次 commit:静态文件进仓库,平台自动构建并发布到全球 CDN,默认带 HTTPS,不收服务器费用。本文覆盖从零发布到自定义域名的完整路径,外加一张高频故障速查表。 ## 机制透视 ### 提交即上线的触发链 GitHub Pages 没有独立部署按钮,发布源就是仓

gitblog_00883的博客 694

【连接器专题】 EIA-364 系列标准的完整列表

EIA-364 系列标准在电子工业中具有重要的地位,为电子连接器和互连系统的测试和验证提供了统一的、可操作的流程和方法,有助于提高电子产品的质量和可靠性,促进了电子工业的发展

一点硬件 2654

【测绘程序设计】——潮汐调和分析

最小二乘潮汐调和分析源码、使用示例及数据

C_xxy's blog 2652
上一篇: 90版本以上的谷歌浏览器,本地请求不携带cookie
下一篇: 【Vue】this.$router与this.$route的区别
TurtleOrange
博客等级 码龄9年 71粉丝 70原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值