vue项目中将MP4文件转为m3u8文件并播放视频

安装文件

npm install --save vue-video-player
npm install --save videojs-contrib-hls
理论上安装这两个就够了,但我安装时给的提示需要再安装一个:
npm install --save mux.js/lib/mp4/caption-parser
but安装这一条会报错
要安装这个:npm install --save mux.js

引入样式

在需要main.js文件中引入
import VideoPlayer from ‘vue-video-player’
import ‘vue-video-player/src/custom-theme.css’
import ‘video.js/dist/video-js.css’
import hls from ‘videojs-contrib-hls’
Vue.use(hls)

播放页面的设置

首先通过FFmpeg(开源多媒体视频处理软件),运行批处理命令,将MP4格式的视频转为m3u8文件和ts视频片段,m3u8文件是服务端建立的分片TS文件的索引,浏览器端请求并解析服务端的m3u8文件,获取分片信息之后,按照顺序向服务端请求下载TS分片的文件,实现视频的完整播放。
前端使用开源组件vue-video-player播放视频,引入样式文件,需要安装适合HLS的依赖,即videojs-contrib-hls,视频文件的sources[0].types设为application/x-mpegURL,src设为m3u8文件地址。

<template>
  <div class>
    <video-player
      class="video-player vjs-custom-skin"
      ref="videoPlayer"
      :playsinline="true"
      :options="playerOptions"
      style='width: 1200px;margin:0 auto;height: auto'
    ></video-player>
    <button @click="test(1)">网络例子</button>
    <button @click="test(2)">服务器result例子</button>
    <button @click="test(3)">mp4</button>
  </div>
</template>

<script>
export default {
  data() {
    //这里存放数据
    return {
      playerOptions: {
        playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
        autoplay: false, //如果true,浏览器准备好时开始回放。
        muted: false, // 默认情况下将会消除任何音频。
        loop: false, // 导致视频一结束就重新开始。
        preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
        language: "zh-CN",
        aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
        fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
        sources: [
          {
            type: "application/x-mpegURL", //这里的种类支持很多种:基本视频格式、直播、流媒体等,具体可以参看git网址项目
            src:
              "http://hls01open.ys7.com/openlive/6d499d610a0c4a6182e36ac7dca124ad.m3u8", //url地址
          },
        ],
        // poster: "../../static/images/test.jpg", //你的封面地址
        // width: document.documentElement.clientWidth, //播放器宽度
        hls: true, // 启用hls?
        notSupportedMessage: "此视频暂无法播放,请稍后再试", //允许覆盖Video.js无法播放媒体源时显示的默认信息。
        controlBar: {
          timeDivider: true,
          durationDisplay: true,
          remainingTimeDisplay: false,
          fullscreenToggle: true, //全屏按钮
        },
      },
    };
  },
  //监听属性 类似于data概念
  computed: {},
  //监控data中的数据变化
  watch: {},
  //方法集合
  methods: {
    test(val){
      if(val==1){
         this.playerOptions.sources[0].src = 'http://hls01open.ys7.com/openlive/6d499d610a0c4a6182e36ac7dca124ad.m3u8'
      }
      else if(val==2){
        this.playerOptions.sources[0].src = 'http://noncoal.ahutit.com/upload/CourseVideo/202004/result/test.m3u8'
      }
      else{
        this.playerOptions.sources[0].src = '/api/upload/CourseVideo/Video/3-2017年矿业科技大会/4.22葛新建:新型辊压机在冶金矿山应用的前景分析.mp4'
      }
      console.log(this.playerOptions.sources)
    },
  },
  mounted() {
    
  },
};
</script>
<style  scoped>
</style>
Logo

前往低代码交流专区

更多推荐