本文聚集于RTSP、RTMP、HLS这3种主流的流媒体协议介绍,从协议起源、协议特点、优点、缺点、应用场景等多维度进行解析,希望能给大家带来收获。
为了便于大家理解本次的内容,我们先要了解一些必备知识。
首先,我们要知道,网络可以用于给我们传输数据,最简单的例子就是我们给对方发送微信信息。那么这些信息在网络的世界到底是如何传输的呢?是谁在背后默默的付出耕耘,帮我们传递信息呢?
答案是:UDP/TCP
他们是TCP/IP协议族的成员,处于网络信息的传输层,我们可以理解,数据传输的事情就是他们两个人干,当然也包括音、视频数据的传输。
UDP/TCP本质上是一种网络传输协议,负责、并规范了信息的传递。
它们有什么特点呢?
如果将要传输的信息比作我们网上购买的商品,UDP和TCP分别是2个快递小哥,UDP这个快递小哥的特点是,送东西快,但是偶尔丢件(数据丢包直接忽略),把东西放在你家门口就不管了,只管送,你收没收到货、有没有搞丢被人拿走也不管。
而TCP这个快递小哥的特点是,送东西慢,先打电话确认业主是否在家、是否能够收件,再过去送件,很靠谱,几乎不会丢件,而且他送的快递都是标了序号的,便于排序整理,UDP那个快递小哥则不管这么多,送的快递都没有标序号。
因此一些重要的、且时效性要求不是非常高的信息传输都会采用TCP传输,而对一些强调块、重要性一般的信息数据会选择UDP,如音视频通话。
他们的特点总结如下:
RTSP,是目前三大流媒体协议之一,英文全称为:Real Time Streaming Protocol,即实时流传输协议,它是由Real Networks 和 Netscape2家公司共同创立。它本身并不传输数据,传输数据的动作可以让UDP/TCP协议完成,而且RTSP可以选择基于RTP协议传输。
RTSP对流媒体提供了诸如暂停,快进等控制,它不仅提供了对于视频流的控制还定义了流格式,如TS、 mp4 格式。通常应用于安防视频监控等场景,如公安调查监控进行视频的查看、回放、快进、后退等操作,十分友好。
RTSP流媒体协议还有哪些特点呢?
最大的特点除了控制视频操作外还具有低延时的特点,通常可实现毫秒级的延时,但是也存在一些弊端,如该视频流技术实现复杂,而且对浏览器很挑剔,且flash插件播不了,这也极大的限制了它的发展。
CSDN站内私信我,领取最新最全C++音视频学习提升资料,内容包括(C/C++,Linux 服务器开发,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)
RTMP,英文全称为:Real Time Messaging Protocol,即实时消息传输协议,由Adobe公司创立。RTMP主要基于TCP协议传输,主要传输 flv, f4v 格式流,最大的特点是装个插件可以在各大浏览器进行播放,播放门槛相对不高,可在手机上得到充分的应用、推广,因此比较受欢迎,目前也是视频云服务的主推流协议。此外RTMP时延也比较低,目前常用于手机直播、语音通话等场景。
那么这种RTMP流协议是这么传输数据的呢?
这种视频流协议传输的数据主要包含2部分,第一,基本单元为Message(消息),第二,最小单元是Chunk(消息块),发送端会把需要传输的媒体数据封装成消息,然后把消息拆分成消息块,每一个消息具有特定的id号,后面将根据这个id号,将一个个零散的Chunk(消息块)又重新拼接成消息(有点小蝌蚪找妈妈的感觉,拆散又合体)。
HLS,英文全称为:HTTP Live Streaming,由苹果公司提出,它是基于Http的流媒体网络传输协议,主要传输TS格式流,最大的特点是安卓、苹果都能兼容,通用性强,而且码流切换流畅,满足不同网络、不同画质的用户播放需要,但是因为该种视频流协议也存在较为致命的缺陷,那就是网络延时太高。
本质上HLS视频流传输是将整个视频流分成一个个小切片,可理解为切土豆片,这些小片都是基于HTTP文件来下载——先下载,后观看。
用户观看视频实际上是下载这些小的视频切片,每次只下载一些,苹果官方建议是请求到3个片之后才开始播放,若是直播,时延将超10秒,所以比较适合于点播。
因此HLS视频的切片一般建议10s,时间间隔太短就切容易造成碎片化太严重不方便数据存储和处理,太长容易造成时延加重。
从网络上接收视频时首先要解协议(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流,又可以解析编码后的视频数据。