vue + video.js/videojs-contrib-hls 实现hls拉流播放

videojs-contrib-hls拉流播放

主要是因为之前使用西瓜播放器插件实现hls拉流播放时,安卓手机是正常的,但是苹果一直打转,pc端的话https格式也播放不来,pc端的话去掉s改为http即可进行播放

步骤1.下载videojs-contrib-hls依赖(没有下载video.js的也下载一下这个)

npm i videojs-contrib-hls --save

npm i video.js --save

步骤2. main中引入video-js.css

import 'video.js/dist/video-js.css'; // video.js样式

步骤3.vue页面代码

<template>
      <div class="viedo" v-show="status == 4">
        <video
          id="my-video"
          class="video-js vjs-default-skin vjs-big-play-centered"
          controls
          preload="auto"
          width="375"
          height="200"
          :poster="coverpic"
        >
          <source
            v-show="hlsDownAddress"
            :src="hlsDownAddress"
            type="application/x-mpegURL"
          />
        </video>
      </div>
    </template>

步骤4.在使用的页面中引入videojs-contrib-hls和video.js

import videojs from 'video.js';
import 'videojs-contrib-hls';

步骤5.在data中先定义一下

data(){
	return{
	 player: null,
  }
}

步骤6.methos中写配置

methods:{
	 getVideo() {
      this.player = videojs(
        'my-video',
        {
          bigPlayButton: true, // 显示播放按钮
          textTrackDisplay: false,
          posterImage: true,
          errorDisplay: false,
          controlBar: true, // 显示控件
        },
        function() {
          if (this.hlsDownAddress) {
            this.play();
          }
        }
      );
    }
}

步骤7.在挂载方法使用

mounted(){
   // 延迟一秒来唤起播放器
    this.timers = setTimeout(() => {
      that.$nextTick(() => {
        that.getVideo();
      });
    }, 1000);
}

步骤8.页面关闭的时候销毁

  beforeDestroy() {
    this.player.dispose(); // 关闭控件
  },

好啦,赶紧测试一下吧,有什么问题的话,可以一起探讨哈,觉得还不错的话,可以点点关注,一键三连啊

<think>好的,我现在需要在Vue项目中集成video.jsvideojs-contrib-hls插件来播放HLS流。首先,我得回想一下用户提供的引用内容。引用里提到需要安装这两个包,然后引入样式和插件。但具体到Vue组件中,怎么正确初始化和销毁实例呢? 我应该先确认安装步骤。用户引用的部分说要用npm安装video.jsvideojs-contrib-hls,所以第一步是运行这两个安装命令。然后,在Vue组件中,需要导入这两个库,以及video.js的CSS样式。不过要注意的是,在Vue的单文件组件中,通常会在生命周期钩子中进行初始化和清理,比如mounted和beforeDestroy。 接下来,初始化video.js的时候,可能需要使用this.$nextTick来确保DOM已经渲染完毕,这样video元素才存在。然后注册HLS插件,可能videojs会自动检测到,或者需要显式调用videojs.Hls?这点可能需要查一下文档。不过根据videojs-contrib-hls的文档,可能只需要导入插件,它会自动注册到videojs上。 然后,设置src源的时候,应该使用hls的源,比如一个.m3u8的URL。同时,可能需要设置techOrder,让HLS优先,确保使用正确的播放技术。 在组件销毁时,必须记得调用dispose方法,防止内存泄漏。这通常在beforeDestroy或beforeUnmount钩子中处理。 还有可能的注意事项,比如在Vue中使用ref来获取video元素的引用,而不是直接使用document.querySelector,这样更符合Vue的反应式机制。此外,可能需要处理跨域问题,但那是服务器配置的问题,不属于代码部分。 测试的时候,可能需要一个示例的HLS流URL,或者使用本地文件来验证播放是否正常。如果遇到插件未正确加载的问题,可能需要检查导入顺序是否正确,或者是否有版本兼容性问题。比如video.jsvideojs-contrib-hls的版本是否匹配,Vue的版本是否有影响。 总结步骤应该是:安装依赖→导入库和样式→在mounted钩子初始化video.js实例并配置HLS→在销毁时清理实例。同时,代码示例需要展示这些步骤,比如在template里放置video标签,设置ref,在script部分处理初始化和销毁逻辑。 可能用户会遇到的问题包括插件未正确注册、HLS源无法播放、内存泄漏等,所以在回答中需要强调正确的导入顺序、生命周期钩子的使用以及清理的重要性。</think>在Vue中集成`videojs-contrib-hls`需要遵循以下步骤: ### 步骤1:安装依赖 ```bash npm install video.js videojs-contrib-hls --save ``` ### 步骤2:创建Vue组件 ```vue <template> <div> <video ref="videoPlayer" class="video-js vjs-default-skin"></video> </div> </template> <script> import videojs from 'video.js' import 'video.js/dist/video-js.css' // 引入样式[^2] import 'videojs-contrib-hls' // 自动注册HLS插件 export default { props: { src: { type: String, required: true } }, data() { return { player: null } }, mounted() { this.$nextTick(() => { this.player = videojs(this.$refs.videoPlayer, { techOrder: ['html5', 'hls'], // 优先使用HLS技术 controls: true, sources: [{ src: this.src, type: 'application/x-mpegURL' // HLS流类型 }] }) }) }, beforeDestroy() { if (this.player) { this.player.dispose() // 必须销毁播放器实例[^1] } } } </script> ``` ### 关键配置说明: 1. **techOrder**:确保HLS技术优先使用 2. **source.type**:必须设置为`application/x-mpegURL` 3. **自动注册**:通过`import 'videojs-contrib-hls'`自动扩展video.js功能 ### 使用示例 ```vue <template> <HlsPlayer src="http://example.com/stream.m3u8" /> </template> ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值