h264組包RTMPPACKAGE結構表如下
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9cWT4FFVNZnRHFmak1mYoR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1EDO2IjMxETMxIjMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
sps+pps資料區的組包結構如下:
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代表音頻資料