浏览器使用video播放m3u8类的直播流媒体

关于m3u8文件格式

描述

m3u8 是一种基于 HTTP Live Streaming 视频流媒体格式。m3u8文件本身是一个纯文本文件,用于存放整个视频的基本信息和分片(Segment)组成。
由 Apple.inc 率先提出的 HLS 协议在 Mac 的 Safari 上原生支持,浏览器目前可以通过<video src="./test.m3u8" type="application/x-mpegURL">来播放。

生成

使用ffmpeg工具对mp4格式的视频进行基于hls协议分割可以得到m3u8文件以及一系列的.ts视频分片文件。

生成命令

将summary.mp4文件分片切割为

ffmpeg -i summary.mp4 -hls_time 5 -hls_list_size 0 -hls_segment_filename ./hls/summary_%05d.ts ./hls/summary.m3u8

参数的意义如下:

  • -hls_time:分片的视频长度
  • -hls_list_size:分片数量,为0表示所有分片
  • -hls_segment_filename:分片文件名
    生成的m3u8文件如下
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.000000,
summary_00000.ts
#EXTINF:10.000000,
summary_00001.ts
#EXTINF:10.000000,
summary_00002.ts
#EXTINF:10.000000,
summary_00003.ts
#EXTINF:10.000000,
summary_00004.ts
#EXTINF:10.000000,
summary_00005.ts
#EXTINF:10.000000,
summary_00006.ts
#EXTINF:10.000000,
summary_00007.ts
#EXTINF:10.000000,
summary_00008.ts
#EXTINF:10.000000,
summary_00009.ts
#EXTINF:10.000000,
summary_00010.ts
#EXTINF:10.000000,
summary_00011.ts
#EXTINF:10.000000,
summary_00012.ts
#EXTINF:8.600000,
summary_00013.ts
#EXTINF:10.000000,
summary_00014.ts
#EXTINF:10.000000,
summary_00015.ts
#EXTINF:10.000000,
summary_00016.ts
#EXTINF:5.960000,
summary_00017.ts
#EXTINF:10.000000,
summary_00018.ts
#EXTINF:9.440000,
summary_00019.ts
#EXTINF:10.000000,
summary_00020.ts
#EXTINF:10.000000,
summary_00021.ts
#EXTINF:6.800000,
summary_00022.ts
#EXT-X-ENDLIST

播放m3u8指定的视频

使用video.js 和 videojs-contrib-hls来播放m3u8指定的视频

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <head>
    <!-- 引入video.js样式文件 -->
    <link href="https://vjs.zencdn.net/7.10.2/video-js.css" rel="stylesheet" />
  
    <!-- If you'd like to support IE8 (for Video.js versions prior to v7) -->
    <script src="https://vjs.zencdn.net/ie8/1.1.2/videojs-ie8.min.js"></script>
  </head>
  <title>m3u8网页播放视频</title>
</head>
<body>
  <!-- 引入videojs-contrib-hls.js文件 -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.15.0/videojs-contrib-hls.min.js"
    type="text/javascript"></script>
  <video
    id="my-video"
    class="video-js"
    controls
    preload="auto"
    width="1024"
    height="768"
    poster="MY_VIDEO_POSTER.jpg"
    data-setup="{}"
  >
  <source src="./hls/summary.m3u8" type="application/x-mpegURL">
    <p class="vjs-no-js">
      To view this video please enable JavaScript, and consider upgrading to a
      web browser that
      <a href="https://videojs.com/html5-video-support/" target="_blank"
        >supports HTML5 video</a
      >
    </p>
  </video>
  <!-- 引入video.js文件 -->
  <script src="https://vjs.zencdn.net/7.10.2/video.min.js"></script>

  <!-- 据说下面的代码也可以,但实践过后发现并不能,video.play()会报错 -->
  <!-- <script src="https://cdn.jsdelivr.net/hls.js/latest/hls.min.js"></script>
  <video contorls autoplay id="video" width="1024px" height="768px"></video>
  <script>
    if(Hls.isSupported()) {
      var video = document.getElementById('video');
      var hls = new Hls();
      hls.loadSource('./hls/summary.m3u8');
      hls.attachMedia(video);
      hls.on(Hls.Events.MANIFEST_PARSED,function() {
        video.play();
    });
  } -->
  </script>
</body>
</html>

下载m3u8指定的视频

m3u8文件指定的视频是由一系列的视频分片组成,m3u8文件中记录了这些视频分片,可以使用ffmpeg工具来进行下载视频分片并合并为一个视频。

下载命令

使用下列的命令可以将指定的m3u8文件对应的视频下载合成为out.mp4文件。

ffmpeg -i [m3u8文件地址] -c copy out.mp4

其中,[m3u8文件地址]可以通过浏览器开发者模式获取到网站视频对应的m3u8文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值