转自:原文链接:https://blog.csdn.net/m0_60259116/article/details/124729523
本文聚集于RTSP、RTMP、HLS这3种主流的流媒体协议介绍,从协议起源、协议特点、优点、缺点、应用场景等多维度进行解析,希望能给大家带来收获。
一、 TCP 与UDP 协议介绍
UDP/TCP本质上是一种网络传输协议,负责、并规范了信息的传递。
- TCP 是面向有连接的协议,优点是传输可靠稳定,缺点是因为需要维护长连接,相对来说会消耗资源,同时,建立连接过程中也稍稍麻烦
2、UDP 是面向无连接协议,因无须长连接,故消耗资源比TCP 少,同时连接简单
二、RTSP、RTMP、HLS 协议介绍
2.1 RTSP 介绍
- RTSP,是目前三大流媒体协议之一,英文全称为:Real Time Streaming Protocol,即实时流传输协议,它是由Real Networks 和 Netscape2家公司共同创立。它本身并不传输数据,传输数据的动作可以让UDP/TCP协议完成,而且RTSP可以选择基于RTP协议传输。
- RTSP对流媒体提供了诸如暂停,快进等控制,它不仅提供了对于视频流的控制还定义了流格式,如TS、 mp4 格式。通常应用于安防视频监控等场景,如公安调查监控进行视频的查看、回放、快进、后退等操作,十分友好。
- RTSP流媒体协议还有哪些特点呢?
最大的特点除了控制视频操作外还具有低延时的特点,通常可实现毫秒级的延时,但是也存在一些弊端,如该视频流技术实现复杂,而且对浏览器很挑剔,且flash插件播不了,这也极大的限制了它的发展。
2.2 RTMP 介绍
- RTMP,英文全称为:Real Time Messaging Protocol,即实时消息传输协议,由Adobe公司创立。RTMP主要基于TCP协议传输,主要传输 flv, f4v 格式流,最大的特点是装个插件可以在各大浏览器进行播放,播放门槛相对不高,可在手机上得到充分的应用、推广,因此比较受欢迎,目前也是视频云服务的主推流协议。此外RTMP时延也比较低,目前常用于手机直播、语音通话等场景。
- 那么这种RTMP流协议是这么传输数据的呢?
这种视频流协议传输的数据主要包含2部分,第一,基本单元为Message(消息),第二,最小单元是Chunk(消息块),发送端会把需要传输的媒体数据封装成消息,然后把消息拆分成消息块,每一个消息具有特定的id号,后面将根据这个id号,将一个个零散的Chunk(消息块)又重新拼接成消息(有点小蝌蚪找妈妈的感觉,拆散又合体)。
2.3 HLS 介绍
- HLS,英文全称为:HTTP Live Streaming,由苹果公司提出,它是基于Http的流媒体网络传输协议,主要传输TS格式流,最大的特点是安卓、苹果都能兼容,通用性强,而且码流切换流畅,满足不同网络、不同画质的用户播放需要,但是因为该种视频流协议也存在较为致命的缺陷,那就是网络延时太高。
- 本质上HLS视频流传输是将整个视频流分成一个个小切片,可理解为切土豆片,这些小片都是基于HTTP文件来下载——先下载,后观看。
- 用户观看视频实际上是下载这些小的视频切片,每次只下载一些,苹果官方建议是请求到3个片之后才开始播放,若是直播,时延将超10秒,所以比较适合于点播。因此HLS视频的切片一般建议10s,时间间隔太短就切容易造成碎片化太严重不方便数据存储和处理,太长容易造成时延加重。
三 、RTSP、RTMP、HLS对比总结
- 从网络上接收视频时首先要解协议(RTSP/RTMP/HTTP),然后是解格式(MKV,RMVB),之后才是将视频(H264)和音频(AAC)格式数据分别解码为图像(RGB/YUV)和声音(PCM),再根据时间戳同步播放。
- RTSP+RTP主要用于IPTV,原因是传输数据使用的是UDP,在网络环境比较稳定的情况下,传输效率是比较高的;
- RTMP主要用于互联网音视频传输,它使用的是TCP传输,因为互联网环境相对较差,采用RTMP保证了视频的传输质量,但是其传输延迟相对较高,传输效率相对较低。
- 使用RTMP技术的流媒体系统有一个非常明显的特点:使用 Flash Player 作为播放器客户端,而Flash Player 现在已经安装在了全世界将近99%的PC上,因此一般情况下收看RTMP流媒体系统的视音频是不需要安装插件的。用户只需要打开网页,就可以直接收看流媒体,十分方便。直播服务普遍采用了RTMP作为流媒体协议,FLV作为封装格式,H.264作为视频编码格式,AAC作为音频编码格式。FLV是RTMP使用的封装格式,H.264是当今实际应用中编码效率最高的视频编码标准,AAC则是当今实际应用中编码效率最高的音频编码标准。
- librtmp是RTMP协议的实现,可以使用librtmp来实现协议的解析和数据的收发。直播服务器可以基于nginx+rtmp实现;直播客户端方面采用librtmp负责推流,FFmpeg负责编码;收看客户端采用VLC即可,因为VLC本身既可以解析RTMP流,又可以解析编码后的视频数据。