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

2023-10-27

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文档【推荐】

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • java grid动态行合并,CSS Grid布局:合并单元格布局

    CSS Grid布局 网格单元格布局 一文中通过一些简单的实例介绍了如何给容器定义网格 并且怎么使用网格线或者网格区域来实现单元格这样的简单的布局 在文章结尾之处也提到过 这样的单元格如同表格一样 仅仅一个个独立的单元格是无法满足一些复杂的
  • nestjs 优秀的ORM框架sequelize操作数据库

    奉上最新代码 nestjs服务demo代码 gitee地址 github地址 nodejs的ORM sequelize 笔者在使用koa2开发后端服务的时候用的ORM框架是sequelize 觉得挺好用的 也做了分享 node从入门到放弃系
  • 安卓psp模拟器哪个好_更完美!安卓PSP模拟器PPSSPP 0.9.9发布

    PConline 资讯 最好的安卓PSP模拟器PPSSPP 0 9 9新版发布下载了 PPSSPP是最强的PSP模拟器 在PC 安卓和iOS上均有对应版本 笔者曾经简单介绍过PPSSPP安卓版的用法 详情可以点此查看PPSSPP教程 现在
  • HiveSQL:求累计访问量

    数据 userId visitDate visitCount u01 2017 1 21 5 u02 2017 1 23 6 u03 2017 1 22 8 u04 2017 1 20 3 u01 2017 1 23 6 u01 2017
  • 10个常见的Redis面试"刁难"问题

    导读 在程序员面试过程中Redis相关的知识是常被问到的话题 作为一名在互联网技术行业打击过成百上千名的资深技术面试官 本文作者总结了面试过程中经常问到的问题 十分值得一读 作者简介 钱文品 老钱 互联网分布式高并发技术十年老兵 目前任掌阅
  • docker搭建测试(项目)管理平台jira

    1 下载镜像 使用docker下载jira和mysql的镜像 docker pull cptactionhank atlassian jira software docker pull mysql 5 6 docker images 查看是
  • Font shape `OMX/cmex/m/n‘ in size <10.53937> not available (Font) size <10.95> substituted.

    Latex在写公式时 报如下错误 Font shape OMX cmex m n in size lt 10 53937 gt not available Font size lt 10 95 gt substituted 解决方案 在 b
  • Web指纹识别技术研究与优化实现(CMS)

    本文通过分析web指纹的检测对象 检测方法 检测原理及常用工具 设计了一个简易的指纹搜集脚本来协助发现新指纹 并提取了多个开源指纹识别工具的规则库并进行了规则重组 开发了一个简单快捷的指纹识别小工具TideFinger 并实现了一套在线的指
  • python爬虫实践-01-携程酒店评论的爬取

    0 关键 携程网其最大的特点就是 基本上所有的有效数据都是通过Ajax异步请求获取的 本博客的主要内容为 构造Ajax请求 获得返回的reviews数据 由于返回的数据为JSON格式 很好分析 判定是否爬完酒店评论 直接获取评论数目 想要通
  • Dorado下拉框多选(ListDropDown)

    最终样式如下图 这里是通过ListDropDown下拉框做出的效果 1 在ListDropDown的Entity属性添加下拉内容 并且设置红色框的属性为false 该控件的onClose事件 var value arg selectedVa
  • ESP32-C3 学习测试 蓝牙 篇(四、GATT Server 示例解析)

    了解了蓝牙 GATT 相关概念 趁热打铁 分析一下官方示例 GATT Server 的应用程序架构 目录 前言 一 GATT Server 示例分析 1 1 初始化 1 2 回调函数 gatts event handler gap even
  • 软件技术基础知识忏悔录C#&.NET篇(一)

    为何开始 人已是大三之年 虽是身在985 心里却没有半分985的底气 自从大二分流以来 自己几乎是没再系统的学过什么 除了几位知识还算渊博的老师教了较为详细的数据库 数据结构的知识之外 其他老师大抵都是迷迷糊糊的念些大家都知道的大条话 然后
  • 开源许可协议:GPL、LGPL、AGPL、MPL和BSD、MIT、Apache

    概述 一 开源许可证的分类 开源许可证分为2种类型 宽松型和著作权型 1 宽松型 Permissive 该类许可证往往只要求被许可方保留原作品的版权信息 对用户施加的限制较少 衍生软件可以成为私有软件 如Apache MIT BSD系列许可
  • 基于Session实现登录流程

    流程一 发送短信验证码 用户在提交手机号后 会校验手机号是否合法 如果不合法 则要求用户重新输入手机号 如果手机号合法 后台此时生成手机号对应的验证码 后台先得到验证码 同时将验证码保存到session中 然后再通过短信的方式 测试中输出到
  • 2020年网络安全国赛解析(仅个人想法)

    A 1任务一登录安全加固 请对服务器Log Web Data 按要求进行相应的设置 提高服务器的安全性 1 密码策略 Log Web Data a 最小密码长度不少于8个字符 windows 打开本地安全策略 开始菜单 管理工具 管理 本地
  • 关于nlohmann::json的简单使用

    nlohmann json的使用非常简单 只需要包含 hpp文件即可 这是它的官网https github com nlohmann json 简单使用 include json hpp include
  • Apache Doris (四) :Doris分布式部署(一) FE部署及启动

    目录 1 Apache Doris下载 2 节点划分 3 节点配置 4 FE部署及启动 进入正文之前 欢迎订阅专题 对博文点赞 评论 收藏 关注IT贫道 获取高质量博客内容 部署Apache Doris时需要分别部署FE BE Broker
  • C# 9 新特性——record的相关总结

    Intro C 9 中引入了 record record 是一个特殊类 用它来实现 model 在有些情况下会非常的好用 Sample record RecordPerson public string Name get init publ
  • AOT

    处理appearance gap很大的图像伪造 比如说复杂的光照条件和肤色 把appearance mapping 定义为一个最优传输问题 在特征空间和像素空间 a relighting generator来模拟最优传输 1通过求特征空间中
  • flvjs播放器事件动态监听并实现flvjs实例销毁(http-flv协议)

    flvjs播放器事件动态监听 http flv协议 1 困扰我的问题 最近在使用flvjs播放器播放http flv协议流的直播视频 业务需求要动态加载非固定数量的视频 不超过6个 使用flv创建flvjs实例简单 但销毁flvjs得想法子