流媒体协议—HLS

HLS概述

HLS(Http Live Streaming)是APPLE公司提出的基于HTTP的流媒体传输协议。
它的工作原理就是把整个ts流分成一个个ts小文件供播放器按顺序下载播放。

HLS作为当前媒体分发传输最为重要的几大协议之一,网络上已有大量深入分析文章,苹果官方文档也对协议应用做了完善的定义。故本篇文章仅简单介绍HLS的组成以及抓包对照分析。

另外,完整的HLS系统需由服务端切片和播放端下载切片两部分组成。本篇文章仅对后一部分进行介绍。

HLS优势

由于HLS只请求基本的HTTP报文,故它可以穿过任何允许HTTP数据通过的的防火墙或者代理服务器,因此对CDN加速分发有着天然的友好性。

与其他基于实时RTP族的协议需要为每一个连接维护状态的特点不同,HLS协议本身是无状态的,只需要按序进行简单HTTP下载即可。所以,HLS跟其它HTTP一样,通过普通的WEB服务器就能承载负载均衡等。

苹果在提出HLS时,自身就已考虑了码率自适应,实现了不同的带宽设备可以自动切换到最合适自己码率的视频播放。

另外不得不说的是,由于HLS由苹果提出,所以APPLE系列产品,iphone、ipad、Safari都不需要任何插件原生就支持HLS,加之后来Android也意外的原生支持了HLS,所以HLS就变得如此重要了。

HLS劣势

对于直播来说,HLS目前暂时还无法逾越的难题就是延时很难稳定的做到和RTMP一个级别,所以我们看到互动直播少有用HLS作为主协议的。
对于点播来说,就是TS切片文件太小,海量碎片文件在分发、一致性缓存、存储读写等方面小吃力。

HLS协议介绍

HLS协议由HTTP+M3U8+TS三部分组成,其中,HTTP是传输协议,M3U8是索引文件,TS是视音频的媒体信息。
不论是直播还是点播,播放器首先请求M3U8索引文件,然后根据M3U8里的TS列表,再请求真实的TS切片文件。


HLS协议规定:

  • 视频的封装格式是TS;

  • 视频的编码格式为H264,音频编码格式为MP3、AAC或者AC-3;

  • 除了TS视频文件本身,还定义了用来控制播放的m3u8文件(文本文件)。

下面给出一个m3u8列表,结合实例简要介绍hls

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES        ------> 指定客户端可以缓存下载下来的文件用于重播。
#EXT-X-MEDIA-SEQUENCE:0       ------> 指明出现在播放列表文件中的第一个URI的序列号
#EXT-X-TARGETDURATION:15      ------> ts列表里的最大时长(注意这里必须为整数,否则safari会播放失败)
#EXTINF:14.700, no desc       ------> 14.700是stream-0.ts的时长
stream-0.ts
#EXTINF:11.600, no desc       ------> 11.600 stream-1.ts的时长
stream-1.ts
#EXTINF:10.100, no desc
stream-2.ts
#EXTINF:11.600, no desc
stream-3.ts
#EXTINF:11.400, no desc
stream-4.ts
#EXTINF:11.400, no desc
stream-5.ts

对于直播来说,服务器会不断产生新的ts片,所以会不断的刷新m3u8和ts。播放器播放时,也不停的
请求m3u8和ts。
对于点播,所有的ts片都会写在m3u8里,m3u8不需要更新,所以点播的话只在开始时请求一次m3u8,然后
不停的请求ts。

播放器拿到该m3u8列表之后,会请求一片ts后,间隔一段时间请求下一片ts。 这个间隔的时间的长短,
一般是根据m3u8中的 #EXT-X-TARGETDURATION, 比如间隔1/2(或1/3)的EXT-X-TARGETDURATION
请求下一片ts。播放器不同,策略也不同。

播放器一般是根据EXT-X-MEDIA-SEQUENCE, 可能还会结合列表中ts片的数目,判断m3u8是否更新,然后决定
是否需要请求新的m3u8。

以上介绍的是最常见的hls。但是由于客户端每次请求ts或m3u8有可能都是一个新的连接请求,所以我们无法有效的标识客户端,一旦出现问题,基本无法有效的定位问题,所以一般工业级的服务器都会对传统的hls
做一些改进。

改进版的hls:

主要是网宿的variant hls 和 观止云的HLS plus(HLS+)

  • variant

这是从网宿的hls链接里面下载的m3u8文件,可以看出这是一个Variant Playlist file,是一个变种的m3u8文件也称作Master Playlist。该文件中有一层m3u8的嵌套,即一个m3u8文件中嵌套另一个m3u8:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1341000    // EXT-X-STREAM-INF, 指定一个包含多媒体信息的 media URI 作为PlayList,一般做M3U8的嵌套使用,它只对紧跟后面的URI有
http://ttpull.8686c.com/live/stream/playlist.m3u8?wsSession=ea62d7ecaff3ad0bc72fa4e3-147460862424110&wsIPSercert=b80d38c068c9e3634a7ebb2f2bbf9b89&wsMonitor=-1

再从这个m3u8文件中去得到真正的m3u8文件:

#EXTM3U
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:3
#EXT-X-MEDIA-SEQUENCE:6
#EXTINF:3,
478294.ts?wsSession=ea62d7ecaff3ad0bc72fa4e3-147460862424110&wsIPSercert=b80d38c068c9e3634a7ebb2f2bbf9b89&wsMonitor=-1&wsApp=HLS
#EXTINF:3,
478298.ts?wsSession=ea62d7ecaff3ad0bc72fa4e3-147460862424110&wsIPSercert=b80d38c068c9e3634a7ebb2f2bbf9b89&wsMonitor=-1&wsApp=HLS
#EXTINF:3,
478302.ts?wsSession=ea62d7ecaff3ad0bc72fa4e3-147460862424110&wsIPSercert=b80d38c068c9e3634a7ebb2f2bbf9b89&wsMonitor=-1&wsApp=HLS

同时网宿采用wsSession来标识一条播放链接。

观止hls+采用的是302(也支持variant hls):
Redirect to http://58.222.18.3:8080/uplive.b0.upaiyun.com/live/loading.m3u8?shp_uuid=5afe6c2d614861f715206ef9e9da6040&shp_ts=1474619128984&shp_cid=890925&shp_pid=3049551&shp_sip0=127.0.0.1&shp_sip1=58.222.18.3&domain=uplive.b0.upaiyun.com
再次请求重定向后的链接得到真正播放的m3u8文件:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-ALLOW-CACHE:YES
#EXT-X-MEDIA-SEQUENCE:15
#EXT-X-TARGETDURATION:3
#EXTINF:2.984, no desc
http://58.222.18.3:8080/uplive.b0.upaiyun.com/live/loading-15.ts?shp_uuid=5afe6c2d614861f715206ef9e9da6040&shp_ts=1474619128984&shp_cid=890925&shp_pid=3049551&shp_sip0=127.0.0.1&shp_sip1=58.222.18.3&domain=uplive.b0.upaiyun.com&shp_seqno=15
#EXTINF:2.980, no desc
http://58.222.18.3:8080/uplive.b0.upaiyun.com/live/loading-16.ts?shp_uuid=5afe6c2d614861f715206ef9e9da6040&shp_ts=1474619128984&shp_cid=890925&shp_pid=3049551&shp_sip0=127.0.0.1&shp_sip1=58.222.18.3&domain=uplive.b0.upaiyun.com&shp_seqno=16
#EXTINF:2.988, no desc
http://58.222.18.3:8080/uplive.b0.upaiyun.com/live/loading-17.ts?shp_uuid=5afe6c2d614861f715206ef9e9da6040&shp_ts=1474619128984&shp_cid=890925&shp_pid=3049551&shp_sip0=127.0.0.1&shp_sip1=58.222.18.3&domain=uplive.b0.upaiyun.com&shp_seqno=17
#EXTINF:2.995, no desc
http://58.222.18.3:8080/uplive.b0.upaiyun.com/live/loading-18.ts?shp_uuid=5afe6c2d614861f715206ef9e9da6040&shp_ts=1474619128984&shp_cid=890925&shp_pid=3049551&shp_sip0=127.0.0.1&shp_sip1=58.222.18.3&domain=uplive.b0.upaiyun.com&shp_seqno=18
#EXTINF:2.985, no desc
http://58.222.18.3:8080/uplive.b0.upaiyun.com/live/loading-19.ts?shp_uuid=5afe6c2d614861f715206ef9e9da6040&shp_ts=1474619128984&shp_cid=890925&shp_pid=3049551&shp_sip0=127.0.0.1&shp_sip1=58.222.18.3&domain=uplive.b0.upaiyun.com&shp_seqno=19

观止云采用的是uuid来标识一个播放连接。

两种方式都可以通过一组字符串(网宿的wsSession,观止的uuid)来唯一标识一个客户端的连接,这样可以有助于运维迅速的定位某个播放器播放hls失败的原因。

另外对于hls纯音频,必须开启相应的配置,否则很容易造成hls纯音频播放失败。

HLS延时分析

HLS理论上延时=1个切片的时长+ 0-1个td(td是EXT-X-TARGETDURATION,可简单理解为播放器取片的间隔时间) + 0-n个启动切片(苹果官方建议是请求到3个片之后才开始播放) + 播放器最开始请求的片的网络延时(网络连接耗时)。

从以上延时组成可以看出,理论上HLS延时很难做到和RTMP同一级别。为了追求低延时效果,可以将切片切的更小,取片间隔做的更小,播放器未取到3个片就启动播放。但是,这些优化方式都会增加HLS不稳定和出现错误的风险。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一款免费的流媒体直播软件,主要用于流媒体直播,视频直播,视频点播,视频录制等应用,与FMS、WOWZA、RED5一道,作为用户流媒体直播应用的可选方案。 1、支持Windows/Linux等多种操作系统; 2、采用开发的流媒体协议,而非私有协议,可以与主流系统对接,至少支持RTMP推流,RTMP拉流,RTSP拉流三种方式获取直播流,支持对获取的直播流再按照TS组播或者单播,RTMP,RTSP,HLS,TS OVER HTTP,FLV OVER HTTP等标准流媒体协议的方式进行对外直播转发; 3、支持录制,可定时录制或手动录制,能录制MP4或者FLV格式文件,录制时支持生成新文件或者追加文件两种方式,支持录制超过4G的文件; 4、单台服务器可支持1000个以上并发用户,直播延时小于2秒; 5、支持RTMP转发功能,能够把AMS上的直播流转发给其它AMS服务器或者第三方的RTMP服务器,例如RED5,FMS,WOWZA流媒体服务器; 6、 支持PC/手机/平板电脑等多终端访问,无论是windows,linux,或者andriod以及IOS系统访问收看直播时都无需下载插件,直接观看; 7、响应点播时间控制在100ms以内,支持暂停、拖动等特技操作; 8、支持文件直播,可把硬盘上存在的FLV文件编目后,按设定好的任务和顺序进行直播; 9、内置Web应用系统,无需复杂配置,可直接部署到用户服务器使用,也可以选配更复杂的媒资管理系统,完成类似优酷土豆的应用模式; 10、开放的系统架构,提供二次开发接口,可轻松的融入到用户已有的平台或网站平台中、或在此基础上进行二次开放等 ------------------------------------------------------------------------- 使用说明: 1、关于安装运行:软件解压到硬盘上后,执行AokuMServiceManager,即可完成AMS服务的安装,安装完成后,在Windows系统服务中会出现一个AokuMService服务; 2、关于端口:AMS默认的管理端口是9001,可通过浏览器登陆http://127.0.0.1:9001/main.html进行管理;AMS默认的RTMP端口是1935,默认的rtsp端口是5554,默认的flv over http端口是7000,默认的ts over http端口是8008,默认的hls端口也是9001; 3、关于推流:使用直播你需要有一个支持rtmp推流的编码器,建议用奥酷全接口高清编码器,当然你也可以通过FME进行软编码来实现; 4、关于接收直播:AMS正常启动并发布上直播流后,你可以在网络内的任一电脑上打开http://ip:9001,通过浏览器观看直播,若开启了hls功能,通过iphone或者ipad登陆http://ip:9001即可观看直播。 5、若开启了TS组播,请确认防火墙是否允许组播,另外您网络内的路由器是否支持组播,接收组播是需要用VLC播放器来完成; 6、接收flv over http也是通过VLC播放器或者支持类似协议的播放器来测试。 7、若使用中出现问题,你可以查看logs目录下的rtmpserver.log文件,里面有详细的错误日志描述。
### 回答1: 流媒体协议是指一种通过互联网传输音频和视频等流媒体内容的协定,这种协议可以保证数据传输的稳定和流畅。而实例下载则是承载流媒体协议的一种具体形式,用户可以通过下载相应的实例文件,获取流媒体内容。 实例下载的具体过程是用户先寻找需要下载的流媒体内容,然后找到对应的实例下载链接,进行下载。这种方式最常见的应用场景是在电影、电视剧等视频内容的在线观看中,用户可以根据自己的需求,下载相应的实例,以获得更流畅稳定的播放体验,同时也可以避免网速不够快或不稳定而导致的播放卡顿等问题。 为了确保实例下载的安全性和可靠性,用户需要选择权威可信的实例下载网站,避免下载病毒、恶意软件等有害文件。同时,用户还需要根据自己设备的操作系统、软件版本等因素,选择适合的实例进行下载,否则可能出现文件不兼容、无法播放等问题。 总的来说,实例下载作为流媒体协议的一种具体形式,可以帮助用户获得更好的观看体验,但在使用过程中也需要注意安全和兼容等问题。 ### 回答2: 流媒体协议是指在网络上传输音视频数据的协议。它通过将音视频数据分成多个小分段数据传输来保证数据在网络中的稳定性,同时可以根据客户端带宽和设备性能自动调整视频质量,以在不同设备上实现更好的观看体验。 常见的流媒体协议有HTTP Live Streaming (HLS)、Dynamic Adaptive Streaming over HTTP (DASH)、Real Time Messaging Protocol (RTMP)等。其中,HLS和DASH都是基于HTTP协议的标准流媒体协议,而RTMP则是Adobe公司开发的专有协议。 如果需要实例下载,可以在相应的官方网站或GitHub上找到对应的SDK或工具包,例如可以在苹果的官方文档中找到HLS相关的介绍和开发文档,并下载相应的iOS或Android SDK;而DASH则可以在MPEG-DASH Industry Forum的官网上找到相关的文档和SDK下载链接。需要注意的是,下载前需要确认对应的证书和权限是否齐全。 总之,流媒体协议是实现音视频实时传输的重要协议,在很多场景下都有着广泛的应用,如在线视频直播、在线会议、远程教育等。选择合适的协议并使用合理的工具包可以提升音视频传输的效率和质量,从而更好地满足用户需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值