iOS 边学边记 HLS协议 m3u8 ts详解

本文详细介绍了iOS中HLS协议的工作原理,包括M3U8文件和TS分片的结构。HLS通过将视频流切割成小的TS文件,实现码率自适应和跨平台播放。M3U8文件作为索引,指示浏览器如何播放TS片段。文章还深入探讨了M3U8文件的结构和TS文件的三个层次,包括Transport Stream、Packet Elemental Stream和Elementary Stream。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.HLS综述

HLS 就不得不谈苹果,谈苹果就不得不提乔帮主。HLS就是“HTTP Live Streaming”的缩写,它诞生自2009年,QuickTimeiPhone3GS黄金搭档下的一个标准,一个意在颠覆流媒体产业的新协议。

它的工作原理简单来说就是把一段视频流,分成一个个小的基于HTTP的文件来下载。当媒体流正在播放时,客户端可以根据当前网络环境,方便地在不同的码率流中做切换,以实现更好的观影体验。

HLS的出现是为了解决苹果原生环境中的流媒体播放,这个协议可以方便地让MaciPhone播放视频流,不依赖Adobe,更不用去管什么标准委员会。依赖自己,永远是最大力量的保障。

HLS(HTTP Live Streaming) 把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。HLS 协议由三部分组成:HTTPM3U8TS。这三部分中,HTTP 是传输协议,M3U8 是索引文件,TS 是音视频的媒体信息。

HLS 提供一个 m3u8 地址,AppleSafari 浏览器直接就能打开 m3u8 地址,譬如:

http://demo.srs.com/live/livestream.m3u8

Android 不能直接打开,需要使用 html5video 标签,然后在浏览器中打开这个页面即可,譬如:

<!-- livestream.html -->
<video width="640" height="360"
        autoplay controls autobuffer 
        src="http://demo.srs.com/live/livestream.m3u8"
        type="application/vnd.apple.mpegurl">
</video>

HLSm3u8,是一个 TS 的列表,也就是告诉浏览器可以播放这些 TS 文件,譬如:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:64
#EXT-X-TARGETDURATION:12
#EXTINF:11.550
livestream-64.TS
#EXTINF:5.250
livestream-65.TS
#EXTINF:7.700
livestream-66.TS
#EXTINF:6.850
livestream-67.TS

有几个关键的参数,这些参数在 SRS 的配置文件中都有配置项:

  • EXT-X-TARGETDURATION:所有切片的最大时长。有些 Apple 设备这个参数不正确会无法播放。SRS 会自动计算出 TS 文件的最大时长,然后更新 m3u8 时会自动更新这个值。用户不必自己配置。
  • EXTINFTS 切片的实际时长,SRS 提供配置项 hls_fragment,但实际上的 TS 时长还受 gop 影响。
  • TS 文件的数目:SRS 可配置 hls_window,指定 m3u8 中保存多少个切片,SRS 会自动清理旧的切片
  • livestream-67.TSSRS 会自动维护 TS 切片的文件名,在编码器重推之后,这个编号会继续增长,保证流的连续性。直到 SRS 重启,这个编号才重置为 0

譬如,每个 TS 切片为 10 秒,窗口为 60 秒,那么 m3u8 中会保存 6TS 切片。

每一个 .m3u8 文件,分别对应若干个 TS 文件,这些 TS 文件才是真正存放视频的数据,m3u8 文件只是存放了一些 TS 文件的配置信息和相关路径,当视频播放时,.m3u8 是动态改变的,video 标签会解析这个文件,并找到对应的 TS 文件来播放,所以一般为了加快速度,.m3u8 放在 web 服务器上,TS 文件放在 CDN 上。

.m3u8 文件,其实就是以 utf-8 编码的 m3u 文件,这个文件本身不能播放,只是存放了播放信息的文本文件。

HLS 整体框架图:Server、CDN 和 Client
在这里插入图片描述
HLS 协议编码格式要求

  • 视频的编码格式:H264
  • 音频的编码格式:AACMP3AC-3
  • 视频的封装格式:TS
  • 保存 TS 索引的 m3u8 文件

HLS 协议优势

  • HLS 相对于 RTMP 来讲使用了标准的 HTTP 协议来传输数据,可以避免在一些特殊的网络环境下被屏蔽。
  • HLS 相比 RTMP 在服务器端做负载均衡要简单得多。因为 HLS 是基于无状态协议 HTTP 实现的,客户端只需要按照顺序使用下载存储在服务器的普通 TS 文件进行播放就可以。而 RTMP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一了百-了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值