【Vue前端】使用 videojs 做 hls 直播流遇到的问题及解决方案总结(销毁、反复加载视频流、http-flv 低延时优化解决方向)

5 篇文章 1 订阅
订阅专栏
本文介绍了在Vue项目中使用videojs进行HLS直播流的实现过程,包括videojs的基本概念、Vue中的使用、常见问题及解决方案。详细讨论了videojs初始化、监听事件、视频销毁、防抖处理、加载错误重试以及低延时优化。此外,还提及了http-flv作为替代方案以降低延迟,并分享了相关资源链接。
摘要由CSDN通过智能技术生成

由于在自己的工作和学习过程中,只查看某个大佬的教程或文章无法满足自己的学习需求和解决遇到的问题,所以自己在追赶大佬们步伐的基础上,又自己总结、整理、汇总了一些资料,方便自己理解和后续回顾,同时也希望给大家带来帮助,所以才写下该篇文章。在本文中,所有参考或引用大佬们文章内容的位置,都附上了原文章链接,您可以直接前往查阅观看。在原文章内容的基础上,若无任何补充内容,同时避免直接大段摘抄大佬们的文章,该情况下也只附上了原文章链接供大家学习。本文旨在总结归纳,并希望给大家提供帮助,未用作任何商用用途。文章内容如有错误之处,望各位大佬指出。如果涉及侵权行为,将会第一时间对文章进行删除。


👉 个人博客主页 👈
📝 一个努力学习的程序猿


其他前端组件使用和踩坑记录文章,欢迎您查看:


⭐ vuedraggable
⭐ videojs 做 hls 直播流
⭐ html2canvas + jspdf 实现将页面内容生成 PDF


videojs

  • 前言
  • 何为 videojs
  • Vue 中使用 videojs 做 hls 直播流 => 实现代码
  • videojs 的监听事件
  • videojs 遇到的问题总结
    • 问题一:The element or ID supplied is not valid
    • 问题二:video 销毁问题
    • 问题三:防抖问题
    • 问题四:未获取到对应视频流的重新加载问题
  • http-flv 低延时优化说明


前言

在最近的开发中遇到了一个需求,就是能够在页面上看到直播流。在听到这样的一个开发需求时,只觉得这貌似很有难度,因为自己从来没有接触过这样的用法。此时,我第一时间想到了 HTML5 的 video 标签。不过我猜测目前肯定有更好的方法,所以为了一步到位,还是先网上冲浪一下。

经过一段时间探索,发现还真有其他的解决方案,即 videojs。而苦于网上没有找到言简意赅的教程,所以只能通过各位前辈们的博客去搜集资料,去不断试错。最终,通过参考大佬们的文章,找到了可以实现的解决方案,而且解决了部分常见问题。在这里进行总结,希望能够给各位提供帮助和思路。

在下文中,所有参考的文章如下:

videojs 官网: https://videojs.com/ (全英无中)

视频播放插件Video.js: https://www.jq22.com/plugin/404

可进行测试的 m3u8 链接: https://blog.csdn.net/myjie0527/article/details/117385253

项目经验和踩坑 - Vue中使用videojs做rtmp和hls直播流: https://blog.csdn.net/weixin_44238796/article/details/105808404

vue项目中video.js的使用总结: https://blog.csdn.net/weixin_39135926/article/details/118225035

videojs的一些监听事件汇总: https://blog.csdn.net/Q147351/article/details/106663908/


何为 videojs

首先 videojs 是一个开源 HTML5 播放器框架。

【图片截取自 videojs 官网】
在这里插入图片描述

在官网中可以看到它的很多特点,在这里帮大家快速总结一下:

1、videojs 不仅可以播放传统的文件格式,比如:MP4、WebM、Ogg,也能够支持自适应流格式,如 Hls、rtmp;

2、播放器开箱即用,而且可以很轻松的设置额外的 CSS 样式;

3、使用 videojs 可以支持现代的所有浏览器,包括桌面和移动浏览器。

如果各位对除了基本使用以外的内容感兴趣,可前往 videojs 官网: https://videojs.com/ 查看。


Vue 中使用 videojs 做 hls 直播流 => 实现代码

由于网上真的有很多繁杂的内容,而且大多是直接在 html 中使用,而不是针对 Vue,所以我在寻找解决方案的过程中,也是费了一些时间。

因为在 Vue 项目中使用 videojs 做 hls 直播流时,我也是参考相关文章中的代码,且在亲自尝试后,确定该用法可以实现,所以我这里也就不粘贴了。尊重原创,关于更详细的使用内容,为了避免大篇幅引用,您需要前往以下文章查阅:: 项目经验和踩坑 - Vue中使用videojs做rtmp和hls直播流


videojs 的监听事件

而在使用过程中,不可避免的就是需要使用其中的事件。关于更详细的内容,为了避免大篇幅引用,您需要前往以下文章查阅: videojs的一些监听事件汇总。后续在解决部分问题时,就将会用到其中的部分事件。


videojs 遇到的问题总结

接下来是本文的主要内容,记录了我自己在做 hls 直播流过程中,遇到的问题和相关解决方案。


问题一:The element or ID supplied is not valid

在最开始使用的时候,我遇到了下面的报错:

在这里插入图片描述

针对这个报错,在网上有一些相关的参考方案。关于更详细的内容,为了避免大篇幅引用,您可以先前往以下文章查阅,看是否能够解决:

video.js多个视频初次加载报错The element or ID supplied is not valid

videojs中遇到的问题

而我在尝试了网上的几种方法后,发现问题并没有解决。所以在回到原点后,针对报错信息思考了一下,其实就是在使用 videojs 获取 ID 时,遇到了问题

经过自己的排查发现,问题的原因其实很简单。我在使用 getElementByID 时,ID 写错了,其中包含了特殊字符。也就是说各位需要注意,在写 ID 名时,确保不含有 # 特殊字符(其他特殊字符未尝试)。除此以外,请务必注意执行顺序(比如在 created 生命周期调用 getElementById 肯定拿不到这个元素,因为这时候元素还未生成。那就需要把这样的操作,放到 mounted 中)


问题二:video 销毁问题

为了更好的解释问题,相关代码展示如下:(代码不完整,仅用于展示问题,无法直接运行)

<template>
  <div>
    <el-button
      type="primary"
      @click="startTransFlow"
    >测试</el-button>
    <video
   	  v-if="showVideo"
      id="cameraIndexCode"
      class="video-js vjs-default-skin"
      width="500"
      height="264"
    ></video>
  </div>
</template>
<script>
export default {
  data() {
    return {
      // ...
      showVideo: false,
      videoPlayer: null
    }
  },
  // ...
  beforeDestroy() {
    if (this.videoPlayer !== null) {
      this.videoPlayer.dispose() // dispose()会直接删除Dom元素
    }
  },
  methods: {
    startTransFlow() {
	   // ...
	   // 调用接口,触发生成 m3u8 文件的事件。拿到url路径
	   // ...
	
       this.showVideo = true;

       this.videoPlayer = this.$video(document.getElementById('cameraIndexCode'), {
           autoplay: true, // 是否自动播放
           controls: true, // 是否显示控件
       })

       this.videoPlayer.src({
           src: url, // 上方调用接口拿到的url路径
           type: 'rtmp/flv', // 这个type值必写, 告诉videojs这是一个rtmp流视频
       })
    }
  }
}
</script>

实现销毁看起来是很简单的,本质上就是在对应的时间点上去触发 dispose 事件:

  beforeDestroy() {
    if (this.videoPlayer !== null) {
      this.videoPlayer.dispose() // dispose()会直接删除Dom元素
    }
  },

但是需要注意的是,当我们对 videojs 对象使用了 dispose 事件后,它就会直接删除这个 DOM 元素。那么这会有什么后果,而为什么要进行销毁?

1、首先,我们必须要在不想播放该视频流的时候进行销毁。因为现在是直播,如果我们不对其进行销毁,那么离开页面后,这部分切片内容(即视频)仍然会不断的进行获取。那显而易见的,如果用户又点击查看了不同的视频流,最后获取到的内容越来越多,当多到一定限额时,页面很可能崩溃。(不过对于该问题没有进行过多测试,因为在当前的需求中,视频流其实是在一个 el-dialog 上展现的,如果在关闭对话框时不销毁,视频流显然会不断获取。但是未测试切换普通页面或 F5 后是否仍会获取,不过这肯定是个需要留意的问题。其实更重要的是后端该怎么判断前端不需要获取视频流,从而停止生成切片(视频)。这可以通过 websocket 或者在页面销毁时用接口来解决)
在这里插入图片描述

2、现在我们已经知道了需要对它进行销毁,那么直接使用 dispose 会有什么后果?

在上面已经提到了,这样操作会直接删除这个 DOM 元素。这就会导致使用 dispose 后,如果还想去测试视频流,此时 DOM 元素被删除,也就肯定无法再查看视频流。

所以现在问题的解决方案就是:在合适的时间进行销毁,在合适的时间再创建这个 DOM 元素。如果有大佬对 DOM 操作比较熟练可以这样做,不过由于本人不太擅长且这样做有些麻烦,所以我就想起来利用 Vue 中 v-if 的机制。

3、针对这个问题,再总结一下就是:

(1)在离开页面或者想重新获取视频流时,我们需要将之前的 videojs 进行销毁。

(2)在想播放视频流时,要保证 video 标签的存在。

针对以上可能出现的复杂判定条件,我利用了 v-if 的特性。 v-if 的特性就是它在 true、false 转化时,对组件是重新销毁和创建的。那么这样就很清晰了。当我们想要实现销毁时,就去切换 v-if,从而触发该组件的 beforeDestroy 事件。也就是需要将可实现代码放入另一个组件里,然后在要使用这个 video 的组件里去引用这个自己创建的 video 组件,然后在父组件判断销毁或创建时,去切换这个组件的 v-if 状态即可。当切换 v-if 后,组件就会重新创建,video 标签自然也就又出现了。


问题三:防抖问题

为了更好的解释问题,相关代码展示如下:(代码不完整,仅用于展示问题,无法直接运行)

<template>
  <div>
    <el-button
      type="primary"
      @click="startTransFlow"
    >测试</el-button>
    <video
   	  v-if="showVideo"
      id="cameraIndexCode"
      class="video-js vjs-default-skin"
      width="500"
      height="264"
    ></video>
  </div>
</template>
<script>
export default {
  // ...
  methods: {
    startTransFlow() {
      if (this.timer === null) {
        /* 防抖 */
        this.timer = setTimeout(() => {
          this.timer = null
        }, 35000)
		
		// ...
		// 调用接口,触发生成 m3u8 文件的事件。拿到url路径
		// ...
		
        this.showVideo = true;
        // 选中的要播放的video标签
        this.videoPlayer = this.$video(document.getElementById('cameraIndexCode'), {
          autoplay: true, // 是否自动播放
          controls: true // 是否显示控件
        }, function onPlayerReady() {
          this.src(url); // 在这里放入接口返回的url路径
          this.play();
        })
      }
    }
  }
}
</script>

防抖的代码简单来看就是这样的:

if (this.timer === null) {
  /* 防抖 */
  this.timer = setTimeout(() => {
    this.timer = null
  }, 25000)
   /*  ... 调用接口,video处理  */
}

在这里的需求是,点击按钮后去检测视频流。如果有相关的功能就可以使用防抖。防抖就是来避免用户可能会误操作点击多次按钮的,在这里如果触发多次 video 事件,显然可能会出现页面问题。当然,就算不是点击按钮触发,平常也需要注意页面中是否可能会多次触发这些事件。如果多次触发,带来的后果将是不可预估的。


问题四:未获取到对应视频流的重新加载问题

为了更好的解释问题,代码简单展示如下:(代码不完整,仅用于展示问题,无法直接运行)

<template>
  <div>
    <el-button
      type="primary"
      @click="startTransFlow"
    >测试</el-button>
    <video
   	  v-if="showVideo"
      id="cameraIndexCode"
      class="video-js vjs-default-skin"
      width="500"
      height="264"
    ></video>
  </div>
</template>
<script>
export default {
  // ...
  methods: {
    startTransFlow() {
      if (this.timer === null) {
        /* 防抖 */
        this.timer = setTimeout(() => {
          this.timer = null
        }, 35000)
		
		// ...
		// 调用接口,触发生成 m3u8 文件的事件。最后拿到接口返回的url
		// ...
		
        const _this = this;
        this.$message.info('摄像头加载中');
        this.showVideo = true;
		setTimeout(() => {
          // 选中的要播放的video标签
          this.videoPlayer = this.$video(document.getElementById('cameraIndexCode'), {
            autoplay: true, // 是否自动播放
            controls: true // 是否显示控件
          }, function onPlayerReady() {
            let num = 1;
            this.on('canplaythrough', () => {
              _this.$message.success('摄像头加载成功');
            });
            // 加载失败会在有限次数内,不断重试
            this.on('error', () => {
              if (num > 3) {
                _this.$message.error('摄像头加载失败,请重新尝试');
                num = 1;
              } else {
                _this.$message.info('摄像头第' + num + '次尝试加载....');
                num++;
                setTimeout(() => {
                  this.src(url); // 放入接口返回的url
                  this.play();
                }, 10000)
              }
            });
            this.src(url); // 放入接口返回的url
            this.play();
          })
        }, 5000)
      }
    }
  }
}
</script>

在这里使用到了 function onPlayerReady() 去反复加载,并进行相应的提示。

在这里先阐述一下,为什么会需要反复加载的功能。在我的项目中,想播放视频流是通过一个按钮去触发,从而调用接口,告知后台去对视频流进行处理。当然,在大家的项目中肯定也是需要有个触发的开关,或者进入页面自动调接口。此时,后台处理视频流必然需要一些时间,才能给前端返回一个对应的存放 m3u8 (或者其他格式视频)位置的路径。然后在前端利用插件或工具展现。所以就出现了在获取时,可能获取不到,从而报错的问题(也就是大家看直播经常需要加载和反复刷新的问题)。

那问题就很明确了,无论什么原因,此时直播视频流文件还没生成出来,所以前端也应该给用户一些友好提示,并作出短暂时间的等待。而为了解决这个问题,就如同上面代码一样,用到了 error 事件。只要遇到了报错,就会进入到该事件中。在代码中将会在有限的次数和时间下,反复去尝试对应的视频源是否加载完毕,并在加载完成后去进行播放。

而反复去尝试的原理,就是使用:

this.src(url);
this.play();

只要 src 变化,并尝试播放,videojs 就会被调用。它的流程就是这样的,比较简单:

在这里插入图片描述


http-flv 低延时优化说明

说到这里,笔者还想补充说明一些内容。

在上文和之前自己的开发过程中,使用的是 videojs 做 hls 直播流,因为这种方式相对简单。但是在后续项目的迭代过程中发现,使用 hls 直播流是会有一些问题的。只要您真的实现了功能,只要一拿直播流进行测试,查看北京时间就会发现,hls 的延时和其他方案相比很高。这样一来,就无法满足低延时的这种需求。如果您对低延时没有要求,那就不用考虑太多问题了。

以下为自己测试多个视频流的测试结果:

hls 延时会达到 15 ~ 30 秒。
rtmp 延时只有 1 ~ 5 秒。
http-flv 延时只有 4 ~ 10 秒。
在这里插入图片描述

从目前来看几个主要的视频流对比如下:(如果还有其他格式,确实是笔者才疏学浅)

在这里插入图片描述

那很不幸的是,在我的开发需求中,视频流播放的延时一定要低。那显然的,hls 直播流就不满足需求了。所以我就尝试使用了 http-flv 和 rtmp 两种格式。

但实际上最终的解决方案只能是用 http-flv。因为在使用 rtmp 流时,会发生这样的报错:
在这里插入图片描述

起初,没觉得这是什么大问题,应该就是什么小 bug,最多也就是跨域问题。但通过在网上参考了很多篇文章,发现这个问题完全解决不掉。那到底问题出在哪里?这个报错信息属实是难以定位。

最后,一篇文章吸引了我的注意力: Chrome将在2020年底不再支持Flash,那如何播放rtmp格式的监控或直播视频?

在这里插入图片描述

那也就是说,出现这个问题的最根本原因,也许就是 chrome 及其他浏览器要逐步淘汰 flash(而经过测试,至少 2022年 chrome 最新版本已经不支持了)。如果您想尝试到底有没有办法播放 rtmp 流,您可以选择进入上面的文章查看,或者在网上查阅。

当然,作为一个前端程序猿,我们肯定不能要求使用者只使用特定版本的浏览器。所以才有了下文对 http-flv 的使用说明。


那么言归正传,http-flv 该如何使用呢?由于笔者在参考了以下几篇文章后发现完全可行,且没有遇到其他问题,所以尊重原创,在这里就不大篇幅引用了。 关于更详细的使用内容,您需要前往以下文章查阅:

vue+flv.js实时播放 断流重连 关闭断流开发心得

vue使用flv.js(bilibili)拉流

flv.js解决直播流延迟、断流重连以及画面卡死

flv.js API (API 全英)

Debian使用Nginx和Nginx-http-flv-module来实现简单的直播服务

nginx-http-flv-module.github


至此前端在 Vue 做直播流的内容就完成了。关于十分具体的前端实现源码、后端如何生成 http-flv、nginx 如何解决跨域等内容,恕笔者无法提供,因为涉及项目核心功能代码。总之笔者仅参考了以上内容就完成了相关需求。希望这些参考文章能够为您提供帮助!


由于在自己的工作和学习过程中,只查看某个大佬的教程或文章无法满足自己的学习需求和解决遇到的问题,所以自己在追赶大佬们步伐的基础上,又自己总结、整理、汇总了一些资料,方便自己理解和后续回顾,同时也希望给大家带来帮助,所以才写下该篇文章。在本文中,所有参考或引用大佬们文章内容的位置,都附上了原文章链接,您可以直接前往查阅观看。在原文章内容的基础上,若无任何补充内容,同时避免直接大段摘抄大佬们的文章,该情况下也只附上了原文章链接供大家学习。本文旨在总结归纳,并希望给大家提供帮助,未用作任何商用用途。文章内容如有错误之处,望各位大佬指出。如果涉及侵权行为,将会第一时间对文章进行删除。


👉 个人博客主页 👈
📝 一个努力学习的程序猿


其他前端组件使用和踩坑记录文章,欢迎您查看:


⭐ vuedraggable
⭐ videojs 做 hls 直播流
⭐ html2canvas + jspdf 实现将页面内容生成 PDF

vue-video-player播放hls视频流
renkai721的专栏
01-06 2094
vue-video-player播放hls视频流,vue接入海康摄像头视频
The element or ID supplied is not valid. (videojs)
ahjujian的博客
04-28 2万+
问题:首次打开视频弹出框报The element or ID supplied is not valid. (videojs)错误 原因:页面未找到相应组件 解决:延迟加载。 asyncvideoHLSURL(row){ varplayer=videojs('my-video'); player.src({ src:dat...
videojs直播
milijiangjun的博客
09-23 1442
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>前端播放m3u8格式视频</title> <title>https://blog.csdn.net/qq_30282133/article/details/81566273</title> <!-- https://blog.csd
videojs-hlsjs-plugin 使用教程
最新发布
gitblog_00557的博客
08-20 260
videojs-hlsjs-plugin 使用教程 videojs-hlsjs-pluginhls.js Source Handler for video.js 5项目地址:https://gitcode.com/gh_mirrors/vi/videojs-hlsjs-plugin 项目介绍 videojs-hlsjs-plugin 是一个用于 video.jsHLS 源处理插件,它使用 ...
探索先进的视频播放解决方案Video.js HLS 插件
gitblog_00086的博客
04-04 833
探索先进的视频播放解决方案Video.js HLS 插件 去发现同类优质开源项目:https://gitcode.com/ 的作用所在。 项目简介 Video.js HLS 插件是 Video.js 官方插件的一个增强版本,专为处理 HLS 而设计。它允许开发者轻松地在他们的网站上添加对 HLS 协议的支持,从而确保视频在各种浏览器和设备上的顺畅播放。 技术分析 此项目基于最新的 Video....
videoJs介绍及播放直播加载清晰度)
weixin_41519423的博客
01-12 1264
1、video标签内的属性值请自行百度(未提及到的) (1)、autoplay : true/false 播放器准备好之后,是否自动播放 【默认false】; (2)、controls : true/false 是否拥有控制条 【默认true】,如果设为false ,那么只能通过api进行控制了。也就是说界面上不会出现任何控制按钮; (3)、autoplay : tr...
基于video.js的rtmp直播播放
07-19
如果发生报错,可能直播地址失效了,或者自己开直播用自己的直播,需要起一个本地服务 https://github.com/BMSVieira/moovie.js 一个 JavaScript 写的 HTML5 视频播放器,可以在网页上播放视频。特点是功能较全,支持外挂字幕文件。
web-video-live:网页H5播放视频流直播系统,使用flv.jsvue-video-player播放器,测试支持rtmp,http-flvhls视频流格式,可以视频监控,也可以通过视频截图
03-11
使用vue开发前端页面并需要进行网页截图,要求延迟,所以我选择了延迟的HTTP-FLV协议,支持这个协议的上面的只有flv.js了,所以最终选择了它。 展示效果 在一个视频监控的项目中使用flv.j
vue3 + video.js 加载多种视频流(HLSFLV、RTMP、RTSP)封装开箱及用,发布npm
l976689的博客
04-07 5285
上一偏我们使用vue3和vite封装了一个audio插件发布npm官网,这里我们将封装一个视频video插件并发布npm供大家参考提示:下面不涉及新建项目和打包npm程,需要的请看上一篇vue3 + vite自定义封装vue+audio ,并发布到npm详情介绍。
项目经验和踩坑 - Vue使用videojsrtmp和hls直播
前端攻城狮Dannis
04-28 9567
笔者最近因为在接手公司的媒体系统业务, 涉及到直播和点播的功能, 一开始确实是抓耳挠腮, 看了网上很多帖子都不太靠谱, 而过去的很多帖子都过于老旧, 比如videojs都更新了7.7.5版本了, 而很多blog还在用5的版本, 在阅读了一段时间的官方文档以后, 对在Vue使用videojs也有了一定的理解, 现在分享出来, 希望可以帮助到大家 videojs官网: https://videoj...
videojs支持hls播放
11-19
videojs支持hls播放
Vue使用XgPlay.js播放 flv视频
01-22
Vue.js应用中集成XgPlay.js以播放FLV视频是一项常见的需求,特别是在构建富媒体交互的Web应用时。Vue.js是一款轻量级的前端框架,它提供了组件化开发模式,使得开发者能够轻松管理和复用代码。而XgPlay.js则是一个...
Vue3中使用Video.js
hookind的博客
06-07 9881
Vue3中使用video.js
videojs播放hls视频流
weixin_43456164的博客
10-12 887
博客地址:https://blog.csdn.net/ddx2019/article/details/111310294 一、安装 "vue": "^2.6.11", "video.js": "^7.10.2", "videojs-contrib-hls": "^5.15.0", "mux.js": "^5.7.0" 二、引入 import "video.js/dist/video-js.css"; // 引入video.js的css import hls from "videoj
VideoJS实现视频直播vue
snowflakelm的博客
06-12 5444
video.js实现视频直播
Vue使用videojs直播
qq_40501683的博客
04-14 1099
安装videojs插件 npm i videojs-contrib-hls –save//hls格式需要使用这个 npm i video.js --save 引入插件: 可以在main.js中全局引入也可以在需要使用vue文件中引入 本文选择的在使用的文件中引入 import videojs from "video.js"; import "video.js/dist/video-js.css"; import "videojs-contrib-hls.js/src/videojs.hlsjs..
前端videojs实现m3u8格式的直播
weixin_59017683的博客
07-14 1071
在onMounted里获取到数据列表后,就调用一次getVideoList(arguments),此处默认是有数据列表数据的,且arguments对象中即是包含.m3u8地址的,由于此处客户需要全屏至指定框大小,而不是全屏整个屏幕所以没用插件自带的全屏控件。三、template。
vue+video.js播放m3u8 hls视频
wkx23223的博客
07-29 648
常规的视频地址存到服务器中,url给到前端视频过大将会加载过慢,影响用户体验,后端通过视频分片上传到服务器,给到前端一个m3u8格式的视频减轻加载压力(同样适用于直播
Vue 项目】使用 vuedraggable 实现拖拽效果时遇到问题解决方案总结(允许 el-table 行拖拽、部分元素不允许拖拽、拖拽避免影响文字复制和输入框输入文字)
热门推荐
一个努力学习的程序猿
04-11 2万+
在最近的开发过程中,遇到了关于拖拽排序的功能需求。在这里向大家推荐使用 vuedraggable。
vue3.2使用西瓜视频插件,直播
06-06
您可以尝试使用Vue Video Player插件来播放直播。这个插件基于video.js,并且可以支持多种直播协议,如HLS、DASH、FLV等。以下是在Vue 3.2中使用Vue Video Player播放HLS直播的示例代码: 1. 安装Vue Video Player ```bash npm install vue-video-player --save ``` 2. 在Vue组件中引入Vue Video Player ```javascript import VueVideoPlayer from 'vue-video-player' import 'video.js/dist/video-js.css' import 'vue-video-player/src/custom-theme.css' export default { components: { VueVideoPlayer }, // ... } ``` 3. 在模板中使用Vue Video Player,并传递直播地址 ```html <template> <div> <vue-video-player ref="player" :options="playerOptions" /> </div> </template> <script> export default { data () { return { playerOptions: { autoplay: true, controls: true, sources: [{ type: 'application/x-mpegURL', src: 'your_hls_stream_url' }] } } } } </script> ``` 注意,这里的"your_hls_stream_url"需要替换为您自己的HLS直播地址。 希望这个示例对您有所帮助!
写文章

热门文章

  • 【Vue 项目】使用 vuedraggable 实现拖拽效果时遇到的问题及解决方案总结(允许 el-table 行拖拽、部分元素不允许拖拽、拖拽避免影响文字复制和输入框输入文字) 29111
  • 【Vue前端】使用 videojs 做 hls 直播流遇到的问题及解决方案总结(销毁、反复加载视频流、http-flv 低延时优化解决方向) 28689
  • Mock 使用方式 + 在 Vue 项目中使用 Mock 16421
  • 【Vue 项目】html2canvas + jspdf 实现将页面内容生成 PDF 及相关问题解决方案(页面被分页分割问题、html2canvas生成图片只有一半) 15693
  • 基于Java的贪吃蛇游戏设计(含免费可用源代码) 11936

分类专栏

  • 游戏制作
  • C# 4篇
  • Linux 3篇
  • 前端面试分享 7篇
  • 前端学习+方案分享 5篇
  • 前端踩坑日记 17篇
  • 前端专栏(学习顺序从上至下)
  • HTML和CSS 15篇
  • JavaScript 8篇
  • jQuery 3篇
  • AngularJS + NodeJS + JS模块化 3篇
  • webpack 4篇
  • Vue 7篇
  • uni-app 5篇
  • Vue3 3篇
  • TypeScript 7篇
  • React 8篇
  • Mock + Nginx + Cypress 2篇
  • SQL 6篇
  • Java 1篇
  • Java数据结构与算法 24篇
  • Spring
  • Python 15篇
  • 杂项 2篇

最新评论

  • Mock 使用方式 + 在 Vue 项目中使用 Mock

    wwee1223: 谢谢楼主,讲的太好了

  • Mock 使用方式 + 在 Vue 项目中使用 Mock

    qq_42564482: 开发环境的配置跟测试环境的配置是一样的,而且我并没有根据环境变量去判断是否使用mock模拟接口

  • Mock 使用方式 + 在 Vue 项目中使用 Mock

    只爭朝夕不負韶華: 可以注意一下是不是只改了 .env.development 文件,理论上打包后,会走 .env.test 文件 或者 .env.production

  • Mock 使用方式 + 在 Vue 项目中使用 Mock

    只爭朝夕不負韶華: 证明这些接口没被mock抓到,而是走的实际接口,所以404了。可以排查一下,是不是哪里配置有问题

  • Mock 使用方式 + 在 Vue 项目中使用 Mock

    qq_42564482: 请问下打包后接口都报404是什么情况

最新文章

  • 裸辞后找工作有多难?分享个人经历+面经+学习路线【内含免费下载初级前端面试题】- 回忆我的2023
  • 【VitePress】项目打包异常问题总结(Could not resolve、Unexpected character ‘‘、Invalid value used as weak map key)
  • 【Vue + ElementUI】实现前端调用接口传递 form-data 类型入参及总结遇到的问题记录(状态码 415 问题及记录如何生成 File 文件对象)
2024年1篇
2022年17篇
2021年23篇
2020年84篇
2019年24篇

目录

目录

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只爭朝夕不負韶華

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳坪山网站建设公司莆田网站搜索优化优化网站策略中国网站优化系统代理项目平台博爱营销网站搭建优化万源市网站seo优化排名展现网站优化效果怎么样网站优化合同广州网站优化服务商速优化网站惫云速捷选网站怎么优化首选火28星昆明网站排名优化报价怎么优化一个大型的网站丰南专业的网站优化推荐嘉峪关网站优化推广怎么做网站优化包括对什么优化百度网站优化厦门联系电话江苏省网站优化渠道青岛提供网站优化哪家便宜重庆巴南区网站优化推广晋城关键词网站优化网站优化哪种渠道好seo网站的优化建议济南建网站优化排名江阳网站优化百度网站排名优化工具廊坊网站优化托管网页优化和网站推广哪个好罗湖儿童网站优化广告java网站优化簇锦网站优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化