HLS/RTSP/RTMP 三个流媒体协议的区别

一、RTSP

RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层。RTSP以客户端方式工作,对流媒体提供播放、暂停、后退、前进等操作。RTSP作为一个应用层协议,它主要用来控制具有实时特性的数据的发送,但其本身并不用于传送流媒体数据,而必须依赖下层传输协议(如RTP/RTCP)所提供的服务来完成流媒体数据的传送。RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作。RTSP媒体服务协议框架如下:
HLS/RTSP/RTMP 三个流媒体协议的区别_第1张图片
RTSP传输的一般是TS、MP4格式的流,其传输一般需要2~3个通道,命令和数据通道分离。使用RTSP协议传输流媒体数据需要有专门的媒体播放器和媒体服务器,也就是需要支持RTSP协议的客户端和服务器。
HLS/RTSP/RTMP 三个流媒体协议的区别_第2张图片
RTSP请求建立
HLS/RTSP/RTMP 三个流媒体协议的区别_第3张图片
二、RTMP
RTMP协议,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。RTMP协议一般传输的是flv,f4v格式流,RTMP在一个通道上传输命令和数据。
RTMP协议是应用层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建立完成后,RTMP协议也要客户端和服务器通过“握手”来建立基于传输层链接之上的RTMP链接。
2. rtmp建立
播放一个RTMP协议的流媒体需要经过以下几个步骤:握手,建立连接,建立流,播放。
1.握手:
 握手开始于客户端发送C0、C1块。服务器收到C0或C1后发送S0和S1。
 当客户端收齐S0和S1后,开始发送C2。当服务器收齐C0和C1后,开始发送S2。
 当客户端和服务器分别收到S2和C2后,握手完成

|client|Server |
|---C0+C1—->|
|<--S0+S1+S2– |
|---C2----> |

  1. 建立网络连接(NetConnection)

 客户端发送命令消息中的“连接”(connect)到服务器,请求与一个服务应用实例建立连接。
 服务器接收到连接命令消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到客户端,同时连接到连接命令中提到的应用程序。
 服务器发送设置带宽协议消息到客户端。
 客户端处理设置带宽协议消息后,发送确认窗口大小(Window Acknowledgement Size)协议消息到服务器端。
 服务器发送用户控制消息中的“流开始”(Stream Begin)消息到客户端
 服务器发送命令消息中的“结果”(_result),通知客户端连接的状态。
3. 建立网络流(NetStream)
 客户端发送命令消息中的“创建流”(createStream)命令到服务器端。
 服务器端接收到“创建流”命令后,发送命令消息中的“结果”(_result),通知客户端流的状态。
4.播放(Play)
 客户端发送命令消息中的“播放”(play)命令到服务器。
 接收到播放命令后,服务器发送设置块大小(ChunkSize)协议消息。
 服务器发送用户控制消息中的“streambegin”,告知客户端流ID。
 播放命令成功的话,服务器发送命令消息中的“响应状态” NetStream.Play.Start & NetStream.Play.reset,告知客户端“播放”命令执行成功。
 在此之后服务器发送客户端要播放的音频和视频数据。
三、HLS
HLS 全称是 HTTP Live Streaming, 是一个由 Apple 公司实现的基于 HTTP 的媒体流传输协议. 通过将整条流切割成一个小的可以通过 HTTP 下载的媒体文件, 然后提供一个配套的媒体列表文件, 提供给客户端, 让客户端顺序地拉取这些媒体文件播放, 来实现看上去是在播放一条流的效果.m3u8文件就是基于m3u8协议,存放视频流元数据的文件。
每一个 .m3u8 文件,分别对应若干个 ts 文件,这些 ts 文件才是真正存放视频的数据,m3u8 文件只是存放了一些 ts 文件的配置信息和相关路径,当视频播放时,.m3u8 是动态改变的,video 标签会解析这个文件,并找到对应的 ts 文件来播放。

#EXTM3U m3u文件头
#EXT-X-MEDIA-SEQUENCE 第一个TS分片的序列号
#EXT-X-TARGETDURATION 每个分片TS的最大的时长
#EXT-X-ALLOW-CACHE 是否允许cache
#EXT-X-ENDLIST m3u8文件结束符
#EXTINF 指定每个媒体段(ts)的持续时间(秒),仅对其后面的URI有效

四、HLS/RTSP/RTMP 三个流媒体协议的区别

HLS( HTTP Live Streaming)苹果公司提出的流媒体协议,直接把流媒体切片成一段段,信息保存到 m3u 列表文件中,可以将不同速率的版本切成相应的片。播放器可以直接使用 HTTP 协议请求流数据,可以在不同速率的版本间自由切换,实现无缝播放,省去使用其他协议的烦恼。缺点是延迟大小受切片大小影响,不适合直播,适合视频点播。

RTSP,实时流传输协议,基于文本的多媒体播放控制协议。RTSP 定义流格式,流数据经由 RTP 传输。RTSP 实时效果非常好,适合视频聊天、视频监控等方向。

RTMP实时消息传输协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题,优势在于低延迟,稳定性高,支持所有摄像头格式,浏览器加载 Flash 插件就可以直接播放。

总结:
HLS 延迟大,适合视频点播;RTSP 虽然实时性最好,但是实现复杂,适合视频聊天和视频监控;RTMP 强在浏览器支持好,加载Flash 插件后就能直接播放,所以非常火,相反在浏览器里播放 RTSP 就很困难了。
理论上RTSP/ RTMP/HTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP。做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了。

你可能感兴趣的:(HLS/RTSP/RTMP 三个流媒体协议的区别)