RTMP中的數據就是由FLV的TAG中的數據區構成。
壹般情況下,組裝的RTMPPacket(RTMPDump中的結構體)為:
NALU就是NAL UNIT,nal單元。NAL全稱Network Abstract Layer, 即網絡抽象層,H.264在網絡上傳輸的結構。壹幀圖片經過 H.264 編碼器之後,就被編碼為壹個或多個片(slice),而裝載著這些片(slice)的載體,就是 NALU 了 。
? 我們通過x264編碼獲得壹組或者多組 x264_nal_t 。結合RTMP,我們需要區分的是SPS、PPS、關鍵幀與普通幀:
壹段h264視頻由N組GOP(group of picture)組成,GOP指的就是畫面組,壹個GOP是壹組連續的畫面 。之前的學習中我們知道I幀能夠獨立解碼,而P、B需要參考其他幀。
屬於I幀的子集,有壹種特殊的I幀,被稱之為IDR幀,IDR幀的作用為即時刷新。
上面的這張圖片描述的是2組GOP。其他I幀與IDR幀的區別就在於:刷新。當解碼器解碼幀5的時候,可以跨過幀4參考到幀3,普通I幀不會導致解碼器的解碼信息數據刷新。而IDR幀則會刷新解碼需要的SPS、PPS數據,所以幀8不可能跨幀7參考解碼。
往RTMP包中填充的是H.264數據,但不是直接將x264編碼出來的數據填充進去。
壹段包含了N個圖像的H.264裸數據,每個NAL之間由:00 00 00 01 或者 00 00 01進行分割。
在分割符之後的第壹個字節,就是表示這個nal的類型。
即為上面的
在將數據加入RTMPPacket的時候是需要去除分割符的。