天天看點

H264 NALU 使用PS封裝 RTP發送

最近由于項目平台需求,要将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)一起探讨流媒體方面的開發。