最近由於項目平台需求,要將H264 NALU封裝為PS再用RTP發送,PS封裝按照ISO DEC-13818-1標准。一個PS包包含PS Header, PES Header, PS system header, PS system map等。
針對H264做如下PS封裝:
1、每個IDR NALU前一般都會包含SPS、PPS等NALU,因此將SPS、PPS、IDR 的NALU封裝為一個PS包,包括ps頭,然后加上PS system header,PS system map,PES header+h264 raw data。所以一個IDR NALU PS包由外到內順序是:PS header | PS system header | PS system Map | PES header | h264 raw data。
2、對於其它非關鍵幀的PS包,就簡單多了,直接加上PS頭和PES頭就可以了。順序為:PS header | PES header | h264 raw data。
還有就是用rtp協議發送時,如果一個PS包大於MTU時,會有分包問題。只需要簡單的分包發送就可以了,但是同一個PS包的時間戳是相同的,需要注意。
以上是對只有視頻video的情況,如果要把音頻Audio也打包進PS封裝,也可以。當有音頻數據時,將數據加上PES header 放到視頻PES后就可以了。順序如下:
PS包=PS頭|PES(video)|PES(audio),再用RTP封裝發送就可以了。
以上是H264 PS封裝的大致流程。PS一些頭的定義,在我的下載中,有需要的可以參考。
或者,加QQ群(219128816)一起探討流媒體方面的開發。
