vue3 + video.js 加载多种视频流(HLS、FLV、RTMP、RTSP)封装开箱及用,发布npm

vue3 + video.js 加载多种视频流(HLS、FLV、RTMP、RTSP)封装开箱及用,发布npm

提示:这里兼容了rtmp数据流,但是前提需要下载支持flash插件的浏览器



前言

上一偏我们使用vue3和vite封装了一个audio插件发布npm官网,这里我们将封装一个视频video插件并发布npm供大家参考


提示:下面不涉及新建项目和打包npm流程,需要的请看上一篇
vue3 + vite自定义封装vue+audio ,并发布到npm详情介绍

封装组件

一. 用video.js实现视频播放

  1. 安装video.js插件,这里我们使用的是在index.html中引入的本地css
       //引入video插件
     <script src="/public/static/js/video.min.js"></script>
     <script src="/public/static/js/videojs-contrib-hls.min.js"></script>
     //如果需要播放rtmp直播流,需安装一下插件
     <script src="/public/static/js/videojs-flash.min.js"></script>
     //引入键盘控制video插件
     <script src="/public/static/js/videojs.hotkeys.min.js"></script>
    
    1. 在组件代码里使用
     <template>
          <div class="videoBox">
             <video id="myVideoBig"
                class="video-js vjs-default-skin vjs-big-play-centered"
                loop="loop"
                :poster="posterSrc"
                 data-setup=''
                 muted="muted"
                 style="object-fit: fill; width: 100%; height: 100%">
             <source :src="videoSrc"
                 ref="videos"
                 id="source"
                :type="format" />
             <p class="vjs-no-js">不支持播放</p>
             </video>
           </div>
       </template>     

video的class “vjs-big-play-centered” 播放按钮默认在左上角,会遮挡,不过这个是可以根据参数修改的,只需要给video标签加一个class(vjs-big-play-centered)就可以居中显示了

  1. 定义常用video.js 配置项
  • autoplay:true/false 播放器准备好之后,是否自动播放 【默认false】
  • controls:true/false 是否拥有控制条 【默认true】,如果设为false, 界面上不会出现任何控制按钮,启动视频播放的唯一方法是使用autoplay 属性或通过Player API
  • height: 视频容器的高度,字符串或数字(以像素为单位),比如: height: 300 或者 height: ‘300px’
  • width: 视频容器的宽度, 字符串或数字(以像素为单位)
  • loop : true/false 视频播放结束后,是否循环播放
  • muted : true/false 是否静音
  • poster: 播放前显示的视频画面,播放开始之后自动移除。通常传入一个URL
  • language: “zh-CN”
  • errorDisplay :是否显示错误提示
  • fluid : 跟随外层容器变化大小,跟随的是外层宽度
  • controlBar: 是否显示控制条,设为false不渲染控制条DOM元素,只设置controls为false虽然不展示,但是存在
  • notSupportedMessage :允许覆盖Video.js无法播放媒体源时显示的默认信息
  • techOrder:定义Video.js技术首选的顺序 [‘html5’, ‘flash’]
  • plugins:放插件的地方是否支持热键
    • hotkeys:过键盘按键来控制视频播放的功能
      • volumeStep: 0.1 调整音量的步长
      • seekStep: 5, 快进/快退的时间(秒)
      • fullscreenKey:(event, player)=>{} 监听键盘按键
  • preload: 预加载
    • ‘auto’:立即开始加载视频(如果浏览器支持)。某些移动设备不会预加载视频,以保护用户的带宽/数据使用。
    • ‘metadata’:仅加载视频的元数据,其中包括视频的持续时间和尺寸等信息。有时,元数据将通过下载几帧视频来加载。
    • ‘none’:不要预加载任何数据。浏览器将等待用户点击“播放”开始下载。
  • children: Array | Object 可选子组件 从基础的Component组件继承而来的子组件,数组中的顺序将影响组件的创建顺序

这里我们设置一个变量储存videojs使用的配置项以便后期批量使用

const videoParameter = ref({
   
  autoplay: isautoplays.value, // 是否自动播放
  language: "zh-CN",
  controls: iscontrols.value, // 是否显示控制为false时用户不可以与之交互控件
  preload: "auto", // 自动加载 预加载 建议浏览器是否应在<video>加载元素后立即开始下载视频数据。
  errorDisplay: true,// 错误展示
  fluid: true, // 跟随外层容器变化大小,跟随的是外层宽度
  controlBar: iscontrolBar.value,
  // textTrackDisplay: false,  // 不渲染字幕相关DOM
  // 是否支持热键|过键盘按键来控制视频播放的功能
  plugins:
Broadway.js是一个用于解码H.264视频流JavaScript库,它可以在浏览器中播放H.264视频流。如果你想在前端vue中使用Broadway.js播放rtsp视频流,你可以按照以下步骤进行: 1. 安装Broadway.js 使用npm或者yarn安装Broadway.js: ``` npm install broadway-player ``` 或者 ``` yarn add broadway-player ``` 2. 引入Broadway.jsVue组件中引入Broadway.js: ```javascript import BroadwayPlayer from 'broadway-player'; ``` 3. 创建播放器 在Vue组件的mounted方法中创建播放器: ```javascript mounted() { const canvas = this.$refs.canvas; const player = new BroadwayPlayer({ canvas, workerFile: 'path/to/Decoder.js', webgl: true, }); player.start(); } ``` 其中,canvas是用于显示视频的画布,workerFile是Decoder.js的路径,webgl设置为true表示使用WebGL进行渲染。 4. 播放视频流 使用RTSP.js获取视频流,并交给Broadway.js进行解码和播放: ```javascript import RTSP from 'rtsp-streaming'; mounted() { const canvas = this.$refs.canvas; const player = new BroadwayPlayer({ canvas, workerFile: 'path/to/Decoder.js', webgl: true, }); player.start(); const rtsp = new RTSP({ url: 'rtsp://example.com/stream', onFrame: (frame) => { player.decode(frame.data); }, }); rtsp.start(); } ``` 其中,url是视频流的地址,onFrame是获取到每一帧视频流时的回调函数,将视频流交给Broadway.js进行解码和播放。 以上就是在前端Vue中使用Broadway.js播放rtsp视频流的步骤。需要注意的是,由于视频流解码需要消耗大量的计算资源,建议使用较新的浏览器和计算机设备。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值