今天,我们来聊聊 RTMP 和 HLS 协议。
1.RTMP
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。
◆ 应用层协议,依靠TCP保证可靠传输。rtsp基于udp传输。
◆ 默认端口:1935,可能被防火墙屏蔽。
◆ 在流媒体/交互服务器之间进行音视频和数据通信。
2.HLS(HTTP Live Streaming)
HLS是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。
它的工作原理是把整个流分成一个个小的基于HTTP的TS文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。
HLS请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。
HLS规范:
◆ 视频的封装格式是TS。
◆ 音视频采用H264编码和AAC编码。
◆ 除了TS视频文件本身,还定义了用来控制播放的m3u8索引文件。
3.对比RTMP,HLS和HTTP-FLV
根据应用场景不同,流媒体协议分为:
◆ 推流协议。 摄像机等推流到服务器。
◆ 拉流播放协议。手机等从服务器拉流。
RTMP可以用在双端,即是推流又是拉流,HLS用在拉流端,HTTP-FLV用在拉流端。
我们先放一张表格从几个维度来对比下这三种协议。
RTMP | HTTP-FLV | HLS | |
传输协议 | TCP | HTTP | HTTP |
视频封装格式 | flv | flv | ts |
延时 | 1-3秒 | 1-3秒 | 5-20秒 |
Web支持 | H5需要使用插件 | H5中需要使用插件 | 支持H5 |
数据 | 连续流 | 连续流 | 切片文件 |
(1)RTMP & HTTP-FLV区别
◆ 这两个协议实际上传输的数据是一样的,数据都是flv文件的tag。
◆ RTMP:实时播放服务器的 FLV 文件或服务器转发的FLV数据,本地无 FLV 缓存文件,FLV保密性好。
◆ HTTP-FLV:将 FLV 下载到本地再播放,FLV保密性不好。
(2)HLS & RTMP
◆ RTMP:采用1935端口,而非HTTP80端口,在某些网络环境下可能被屏蔽。
◆ RTMP:是一种有状态协议,需要为每一个播放视频流的客户端维护状态,服务器平滑扩展难度大。
◆ HLS:基于无状态HTTP协议,客户端只需要按顺序使用下载的TS文件就可,负载均衡如同普通的HTTP文件服务器负载均衡一样。
(3)HTTP-FLV
HTTP-FLV 结合了 RTMP 和 HLS 的优点,易用(HTTP协议,端口80比rtmp的1935更通用)低延时(flv)
(4)为什么 RTPM 比 HLS 快
◆ HLS拉流:服务器音视频数据切片生成 TS 文件
◆ HLS拉流:客户端必须等待服务端至少生成一个 TS 文件,通常下载完两个媒体文件后才能保证不同分段音视频间的无缝连接。
◆ HLS一直在等切片数据,RTMP不需要切片