rtp h264注意點(FU-A分包方式說明)


  之前寫過一篇文章,分析了h264使用rtp進行封包的格式介紹:RTP封裝h264。但里面好像沒有把拆分以及一些需要注意的情況說清楚,因此這里做補充,也作為自己的備忘(自己記性好像不太好)。

 

    1. 關於時間戳,需要注意的是h264的采樣率為90000HZ,因此時間戳的單位為1(秒)/90000,因此如果當前視頻幀率為25fps,那時間戳間隔或者說增量應該為3600,如果幀率為30fps,則增量為3000,以此類推。
    2. 關於h264拆包,按照FU-A方式說明:
      1)第一個FU-A包的FU indicator:F應該為當前NALU頭的F,而NRI應該為當前NALU頭的NRI,Type則等於28,表明它是FU-A包。FU header生成方法:S = 1,E = 0,R = 0,Type則等於NALU頭中的Type。
      2)后續的N個FU-A包的FU indicator和第一個是完全一樣的,如果不是最后一個包,則FU header應該為:S = 0,E = 0,R = 0,Type等於NALU頭中的Type。
      3)最后一個FU-A包FU header應該為:S = 0,E = 1,R = 0,Type等於NALU頭中的Type。

      因此總結就是:同一個NALU分包厚的FU indicator頭是完全一致的,FU header只有S以及E位有區別,分別標記開始和結束,它們的RTP分包的序列號應該是依次遞增的,並且它們的時間戳必須一致,而負載數據為NALU包去掉1個字節的NALU頭后對剩余數據的拆分,這點很關鍵,你可以認為NALU頭被拆分成了FU indicator和FU header,所以不再需要1字節的NALU頭了。
    3. 關於SPS以及PPS,配置幀的傳輸我采用了先發SPS,再發送PPS,並使用同樣的時間戳,或者按照正常時間戳增量再或者組包發送的形式處理貌似都可以,看播放器怎么解碼了,另外提一下,如果我們使用vlc進行播放的話,可以在sdp文件中設置SPS以及PPS,這樣就可以不用發送它們了。
    4. 使用VLC播放時,sdp文件中的分包模式選項:packetization-mode=1,否則有問題。另外sdp里面設置的編碼type必須和rtp包中的一致。


轉自 http://blog.csdn.net/jwybobo2007/article/details/7235942

 

項目中的總結

  (1) FU-A 還原的時候,也是0x00 00 00 01 開始,不需要自己額外添加0x00 00 00 01

(2)FU-A 的的解析,start end等數據要解析好

(3)single nal unit 也是以0x00 00 00 01開始,也不需要自己添加分隔符

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM