常见的视频传输协议:
- HTTP 浏览器一次性把视频请求下来,一般来说用户可以点击鼠标右键或者通过抓包的方式直接把视频下载到本地
- HLS(HTTP Live Streaming)Apple 开发的一种视频传输格式,其核心思想是将视频分为多个 .ts 文件,用户播放视频的时候只请求一部分 .ts 文件,无需等待整个视频全部下载完才能播放。由于传来的不是一整个视频文件,因此无法直接下载 HLS 传输的视频。
- MPEG-DASH 思想类似 HLS,都是将视频分片传输,提高视频的播放速度。DASH传来的文件是 .m4s 后缀的。
HLS
HLS 采用分片传输媒体文件,因此需要一个索引文件标识视频有多少个分片,这个索引文件实际是一个文本文件,格式如下:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10.0,
http://example.com/video-0.ts
#EXTINF:10.0,
http://example.com/video-1.ts
#EXTINF:10.0,
http://example.com/video-2.ts
#EXT-X-ENDLIST
其中 #[TEXT] 被称为标签,用来给分片和文件提供描述。#EXTINF:10.0 后面的 10.0 标识分片为 10s,下一行的链接则代表分片的地址,可以直接下载这个分片到本地。
上面的例子一共有 3 个 .ts 分片,每个分片 10s,因此该视频长度为 30s。
下载 HLS 传输的媒体
把所有 .ts 文件下载到本地后,可以通过 ffmpeg 合并分片为 .mp4 文件:ffmpeg -i 1.ts -i 2.ts -c copy output.mp4
解析 m3u8 文件
可以使用这个 https://github.com/globocom/m3u8 Python 包解析 m3u8 文件。
HLS 播放
播放 HLS 传输的媒体主要依赖如下两个对象:
SourceBuffer:https://developer.mozilla.org/en-US/docs/Web/API/SourceBuffer#examples
MediaSource: https://developer.mozilla.org/en-US/docs/Web/API/MediaSource文章来源:https://www.toymoban.com/news/detail-560742.html
HEARTBEAT 和 认证
播放视频的时候前端定时发送 heartbeat 保活;如果请求 .ts 分片的时候需要认证,则在请求头或者 URL 中添加对应的参数。文章来源地址https://www.toymoban.com/news/detail-560742.html
到了这里,关于.m3u8、HLS 协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!