RTP包的结构:
RTP头在 “RTP载荷H264(实战细节)”讲的很清楚了,不了解的可以从上面链接进入查看,AAC中RTP头的使用方法和H264一样,下面介绍下RTP载荷AAC的载荷结构:
RTP载荷AAC
载荷和H264的载荷方式是一样的,根据帧数据的大小分为:单包,分片包,聚合包。具体的解释请参考“RTP载荷H264(实战细节)”。一般情况下音频帧只有几百字节,不会使用分片包,又由于聚合包不常用,所以本章说下单包封装AAC的载荷协议:
载荷标识四字节,也就是封装AAC的时候,需在在AAC载荷数据前添加四字节的标识,每个字节填充如下:
payload[0] = 0x00; //固定0x00
payload[1] = 0x10; //固定0x10
payload[2] = (frameLength & 0x1FE0) >> 5;//frameLength为去掉ADTS头后的长度
payload[3] = (frameLength & 0x1F) << 3。
之后就可以填充AAC载荷数据,该数据是去除掉AAC头的数据。
实例:
AAC数据:
01 02 03 04 05 06 07 xx xx xx xx ...
RTP封装数据:
RTP头 载荷标识 xx xx xx xx...(去掉ADTS头)。
具体的ADTS头信息参考上面的链接。