介绍
我这个系列讲解音视频相关的协议,这部分内容比较多,我打算分成好几篇讲,感兴趣的读者可以关注一下。有了以上的基础,我就打算做一个音视频的网络服务器。如果您觉得读起来有点困难,可以先补一下计算机网络的知识,主要是TCP,UDP,HTTP相关的知识。
讲解
这篇文章讲解 RTP 协议中的载荷(payload),是报头(Header)接下来的数据结构,对 Header 感兴趣的朋友可以看一下音视频协议解析(RTP/RTCP/RTSP/RTMP)——(2)。
RTP 的 payload 根据帧数据大小分成:单包,分片包,聚合包这三类。
单包:
一个 RTP 包含有一帧数据,Header 和帧数据不超过网络最大传输单元(MTU)。
分片包:
如果帧数据比较大,传输时超过了网络最大传输单元(MTU),则需要分片传输,就是将帧数据分为多个 RTP 包传输。
我们可以看到在 payload 前还有 FU indicator 和 FU header,我讲解一下。
FU indicator:
sttuct FU_indicator{
forbidden_zero_bit; //F 禁止位 占 1 bit
nal_ref_idc; //NRI 占 2 bits
nal_unit_type; //NALU类型 占 5 bits
};
FU header:
sttuct FU_header{
Start; //帧数据的第一个RTP包,该标志置1, 其他RTP包置0,占 1 bit
End; //帧数据的最后一个RTP包,该标志置1,其他RTP包置0,占 1 bit
R; //设置为0,占 1 bit
Type; //H264的NALU的第一个字节的类型,占 5 bits
};
聚合包:
当帧数据比较少是,组合在一个 RTP 包中传输。
好了,做个总结,由于传输帧的数据大小不固定,有的大有的小,于是就分了3种 RTP 包,对于帧数据小的选择聚合包,刚好的选择单包,太大的选择聚合包。
下一篇,我们接着讲与 RTP 配合使用的 RTCP 协议。
欲知后事如何,请听下回分解。