h264组包结构表如下

h264、AAC组装RTMPPacketh264、AAC组装RTMPPacket

 

H.264数据

往RTMP包中填充的是H.264数据,但不是直接将x264编码出来的数据填充进去。

一段包含了N个图像的H.264裸数据,每个NAL之间由:

00 00 00 01 或者 00 00 01  这四个字节或三个字节应该去掉后才可以放入RTMP数据中

进行分割。在分割符之后的第一个字节,就是表示这个nal的类型。

0x67:sps 0x68:pps 0x65:IDR

h264、AAC组装RTMPPacket

AAC

AAC的音频文件格式有 ADIF & ADTS

h264、AAC组装RTMPPacket

一种是在连续的音频数据的开始处存有解码信息,一种是在每一小段音频数据头部存放7个或者9个字节的头信息用于播放器解码。

RTMP推流需要的是aac的裸数据。所以如果编码出adts格式的数据,需要去掉7个或者9个字节的adts头信息。faac 可以配置是否编码裸aac数据。

 

RTMPPacket组装aac = 2bit+faac裸数据 或者 2bit+解码数据

类似于推送视频,第一个包总是包含sps和pps的音频序列包,推送音频同样第一个包是包含了接下来数据的格式的音频序列包,第一个字节定义如下:

 

h264、AAC组装RTMPPacket

第一个字节,包含音频的一些编码参数信息,第二个字节0x00代表是解码数据,0x01代表音频数据

h264、AAC组装RTMPPacket

 

相关文章: