HLS协议原理

本文深入解析HLS(HTTP Live Streaming)协议,探讨其相对于RTMP的优势,包括防火墙友好性、负载均衡简易性及码率自适应功能。阐述了HLS的架构,从媒体采集、编码、打包到分发的全过程,并解释了客户端如何通过.m3u8索引文件获取不同码率的.ts视频片段。此外,还对比了点播与直播模式下HLS的应用差异。

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

HLS协议提出的原因

  • HLS(HTTP Live Streaming)协议是由苹果提出的基于流媒体的网络传输协议。

  • RTMP(实时消息传输协议,1935端口)协议存在的一些问题。比如RTMP协议不使用标准的HTTP接口传输数据,所以在一些特殊的网络环境下可能被防火墙屏蔽掉。但是HLS由于使用的HTTP协议传输数据,不会遇到被防火墙屏蔽的情况(该不会有防火墙连80接口都不放过吧)。

  • RTMP是一种有状态协议,很难对视频服务器进行平滑扩展,因为需要为每一个播放视频流的客户端维护状态。而HLS基于无状态协议(HTTP),客户端只是按照顺序使用下载存储在服务器的普通TS文件,做负载均衡如同普通的HTTP文件服务器的负载均衡一样简单。

  • HLS协议本身实现了码率自适应,不同带宽的设备可以自动切换到最适合自己码率的视频播放。

HLS的整体架构

 

  1. 视频与音频被设备采集到的之后传输给服务器处理

  2. 服务器先对,音频、视频,进行编码,视频使用h.264(现在也开始支持其他的格式),音频为mp3、acc、ac-3。

  3. 然后对编码后的文件打包为mpeg-2格式。

  4. 然后对编码后的文件进行分割,分割完会产生两种文件,一个是.m3u8、一个是.ts,文件。在文件分割这一步,还有一个重要功能,就是对文件进行加密,常用AES加密算法。

  5. 分发服务器,只要是web服务器就可以。分发服务器,负责存储被分割的文件形成的.ts文件以及索引文件.m3u8文件。

  6. 然后通过http协议与客户端通信。

客户端获取流程图

  1. 客户端先获取一级索引文件(.m3u8),这一级文件的作用是,存储不同码率(分辨率)的相同内容的文件,如果文件只有一种码率,那么没有一级索引。

  2. 二级文件里面存储着一个文件被分为多个.ts文件的信息,有时长(秒为单位)、起始ts文件的索引值、每个ts文件的索引值(相邻之间+1),如果有加密的话,会与密匙获取地址。

  3. 未加密的文件,按照约定的规则顺序播放每一个文件片段即可。加密文件在获取密匙后,对ts文件进行解密,然后播放即可。

    • .ts文件有一个特性,每一小节可以独立播放。不用像mp4文件有一个moov目录记录里,整个视频文件的播放信息,必须先获取到这条信息才可以播放文件。

HLS协议自适应播放原理

  • 只有一种码率文件的不足在于,在网络上不稳定时会卡顿。有自适应技术的使用,能够通过降低码率,来是视屏更加流畅。

  • 自适应播放的的意思是,对于不同的网络环境,设备通过与服务器之间的交互,为保证其流畅的播放前提下,自动切换视频的清晰度,以达到流畅播放的目的。

  • 在码率自动切换的方面,都讲的不清楚。我个人认为是客户端,请求的时候,更具自己的网络环境,调整所要下载的文件的码率。

    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000
    http://example.com/low.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1300000
    http://example.com/mid.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2300000
    http://example.com/hi.m3u8
  • 上方是一个一级索引中的一部分,,一共有三种码率。

    在播放hls视频的时候, 当设置了码率自适应之后, 在每次下载完一个切片的时候,会依据上个切片的下载速度(80%)来决定是否要切换码率, 如果当前下载速度分别为: 1M :其80%速度为 800K, 低于1300K, 那么会下载700K的码率 2M :其80%速度为 1600K, 高于1300k低于2300k, 会下载1300K的码率 3M :其80%速度为 2400K, 高于2300k, 会下载2300K的码率

    • 这样在网络不稳定时应该体验不好,但是网络不好体验怎么会好呢

  • 除了上述视频的多码率之外,hls协议还支持多音轨。这样的好处使得存储空间得到节省,常见的MP4文件不支持多音轨。

HLS协议使用

点播(vod)

  • 点播,相当于文件的大小时间,已经可以确定。所以在使用hls协议,进行点播服务时,我们可以得到所有文件.ts文件的地址。在播放时,只用考虑自身网络环境,对码率进行选择就可以了。

  • 一次下载好索引文件就好,不用反复请求

直播(Live)

  • 直播时文件在实时产生,所以我们需要频繁的获取索引文件,以得到最新的.ts文件。它的索引文件一直处于动态变化的,播放的时候需要不断下载二级index文件,以获得最新生成的ts文件播放视频。如果一个二级index文件的末尾没有#EXT-X-ENDLIST标志,说明它是一个Live视频流。

  • 在苹果的文档中,有说明延迟在30s左右。因为苹果规定一个ts片段,有10s。一个m3u8文件中有3个片段,所以你看到这个视频时,已经是30s之后。可以通过减少切片时间与每个二级索引中ts文件的数目,使得实时性更好。但是这样会增加客户端请求资源的数目,增大服务器的压力。当网速慢时,会造成更多的缓冲。

对比

客户端在播放VOD模式的视频时其实只需要下载一次一级index文件和二级index文件就可以得到所有ts文件的下载地址,除非客户端进行比特率切换,否则无需再下载任何index文件,只需顺序下载ts文件并播放就可以了。但是Live模式下略有不同,因为播放的同时,新ts文件也在被生成中,所以客户端实际上是下载一次二级index文件,然后下载ts文件,再下载二级index文件(这个时候这个二级index文件已经被重写,记录了新生成的ts文件的下载地址),再下载新ts文件,如此反复进行播放。

标签

  • 自己找吧有很多

观点

  • 由于与HLS协议有竞争关系的协议为RTMP协议,但是苹果、谷歌不支持。而且由于h5对hls的支持,我觉得hls发展会更好,但是高延迟是硬伤。但是用的人多了,延迟问题肯定会被解决,或者大公司耍流氓,让用户升级设备,加网速,换光纤。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值