通常在做iOS平台直播的时候,有俩种直播协议可以选择:HLS和RMTP。
-HLS,是苹果实现的基于HTTP的流媒体传输协议,全程HTTP Live Streaming,可支持流媒体的直播和点播,主要应用在iOS系统,为iOS设备(如iPhone、iPad)提供音视频直播和点播方案。
-RTMP,实时消息传输协议,Real Time Messaging Protocol,是Adebe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。协议基于TCP,是一个协议族。包括RTMP基本协议及RTMTP/RTMPS/RTMPE等多种变种协议。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。
1.HLS
HLS的基本原理就是当采集推流端将视频流推送到流媒体服务器时,服务器将收到的流信息每缓存一段时间就封包成一个新的ts文件,同时服务器会建立一个m3u8的索引文件来维护最新几个ts片段的索引。当播放端获取视频时,它时从m3u8索引文件获取最新的ts视频文件片段来播放,从而保证客户在任何时候连接进来都会看到较新的内容,实现近似直播的体验。相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议等,HLS最大的不同在于直播客户端获取到的并不是一个完整的数据流,而是一个连续的、短时长的媒体文件,客户端不断得下载并播放这些小文件。这种方式的理论最小延迟为一个ts文件的时长,一般情况为2到3个ts文件的时长。HLS的分段策略,推荐是10秒一个分片,这就看出了HLS的缺点:
-通常HLS的直播延时会达到20~30秒,而高延时对于需要实时互动体验的直播来说是不可接收的。
-HLS基于短链接HTTP,HTTP是基于TCP的,这就意味着HLS需要不断的跟服务器建立连接,TCP每次建立连接的3次握手、慢启动过程和断开连接的4次挥手都会产生消耗。
不过HLS也有它的优点:
-数据通过HTTP协议传输,所以采用HLS时不用考虑防火墙或者代理的问题。
-使用短时长的分片文件播放,客户端可以平滑的切换码率,以适应不同带宽条件下的播放
-HLS是苹果推出的流媒体协议,在iOS平台上可以获得天然的支持,采用系统提供的AVPlayer就能播放,不用自己开发播放器。
2.RTMP
相对于HLS来说,采用RTMP协议时,从采集推流端到流媒体服务器再到播放端是一条,因此在服务器不会有落地文件。这样RTMP相对来说就有这些优点:
-延时较小,通常为1~3秒
-基于TCP长连接,不需要多次建立连接
因此业界大部分直播业务都会选择用RTMP作为流媒体传输协议。通常会将数据流封装成FLV通过HTTP。但是这样也有一些问题要解决:
-iOS平台没有提供原生支持RTMP或HTTP-FLV的播放器,这就需要开发支持相关协议的播放器。
协议差别:
-HLS:HTTP Live Streaming;基于短连接HTTP,集成一段时间的数据生成ts切片文件,更新m3u8文件;延时25s+
-RTMP:Real Time Messaging Protocol;基于长连接TCP,每个时刻收到的数据立即转发,延时1~3秒;
-HTTP-FLV:RTMP Over HTTP;基于长连接HTTP,每个时刻收到的数据立即转发,延时1~3秒;