h264组包结构表如下
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
AAC
AAC的音频文件格式有 ADIF & ADTS
一种是在连续的音频数据的开始处存有解码信息,一种是在每一小段音频数据头部存放7个或者9个字节的头信息用于播放器解码。
RTMP推流需要的是aac的裸数据。所以如果编码出adts格式的数据,需要去掉7个或者9个字节的adts头信息。faac 可以配置是否编码裸aac数据。
RTMPPacket组装aac = 2bit+faac裸数据 或者 2bit+解码数据
类似于推送视频,第一个包总是包含sps和pps的音频序列包,推送音频同样第一个包是包含了接下来数据的格式的音频序列包,第一个字节定义如下:
第一个字节,包含音频的一些编码参数信息,第二个字节0x00代表是解码数据,0x01代表音频数据