先介绍下RTP协议:
实时传输协议RTP(Real-time Transport Protocol)是一个网络传输协议 ,该协议详细说明了在互联网上传递音频和视频的标准数据包格式 。
RTP标准定义了两个子协议 ,RTP和RTCP
数据传输协议RTP,用于实时传输数据。该协议提供的信息包括:时间戳(用于同步)、序列号(用于丢包和重排序检测)、以及负载格式(用于说明数据的编码格式)。
控制协议RTCP,用于QoS反馈和同步媒体流。相对于RTP来说,RTCP所占的带宽非常小,通常只有5%。
TCP会通过超时和重传机制保证数据流的每一个bit的正确性,但这样会使得无论从协议的实现还是传输的过程都变得非常的复杂。而且,当传输过程中有数据丢失的时候,由于对数据丢失的检测(超时检测)和重传,会数据流的传输被迫暂停和延时。
RTP协议是一种基于UDP的传输协议,RTP本身并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。
对于那些丢弃的包,也可以由上层根据其重要性来选择性的重传。比如,对于I帧、P帧、B帧数据,由于其重要性依次降低。
RTP是建立在UDP之上的传输层协议。
RTP会话过程:
当应用程序建立一个RTP会话时,应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口组成,有两个端口:
一个给RTP包,一个给RTCP包,使得RTP/RTCP数据能够正确发送。RTP数据发向偶数的UDP端口,而对应的控制信号RTCP数据发向相邻的奇数UDP端口(偶数的UDP端口+1),这样就构成一个UDP端口对。
RTP协议从上层接收流媒体信息码流(如H.264),封装成RTP数据包;RTCP从上层接收控制信息,封装成RTCP控制包。
RTP将RTP 数据包发往UDP端口对中偶数端口;RTCP将RTCP控制包发往UDP端口对中的接收端口,即奇数端口。
接下来再介绍下标准流媒体协议:
流媒体(streaming media)是指将一连串数据压缩后,经过网络分段发送,即时传输以供观看音视频的一种技术。
通过使用 streaming media 技术,用户无需将文件下载到本地即可播放。由于媒体是以连续的数据流发送的,因此在媒体到达时即可播放。可以像下载的文件一样进行暂停、快进或后退操作。
对于流视频协议,大多数数字视频是为了两件事情:存储和播放。要满足这样的需求,视频需要满足小文件和通用播放这两点。
大多数视频文件都不适合流式传输。流式传输需要将音视频分割成小块(chunk),将这些小块按顺序发送,并在接收时播放。如果正在直播,则视频源来自于摄像机;否则,来自于文件。
流媒体协议是一种标准化的传递方法,用于将视频分解为多个块,将其发送给视频播放器,播放器重新组合播放。 大部分流协议是码率自适应(adaptive bitrate)的,这项技术可以在任一时间为用户提供最佳质量视频。
编、解码器(codec)指视频压缩技术。不同的编、解码器用于不同的目的。 即使不需要使用流式协议,视频也需要使用解编码器进行编码、解码。
通常,视频格式指视频文件格式(container format)。常见 container format 包括 .mp4、.m4v、.avi、.mov等,container format 只是一个框(box),框中通常包含视频文件、音频文件和元数据。视频文件格式并不是流式的核心概念。
形象比喻: 假设你是商人,需要批量运输衣服(衣服就是视频)。编解码器就是将衣服压缩成捆以节省空间的机器。容器格式就是装压缩后衣服的集装箱。流协议就是将其运输到目的地的铁轨、信号灯和驾驶员。
常见的流协议有:RTMP、MPEG-DASH、MSS、HDS、HLS
Reference:
https://www.cnblogs.com/yuweifeng/p/7563265.html
https://blog.csdn.net/zhangbijun1230/article/details/90407090
https://www.jianshu.com/p/d71ceef679de