如何實現H.264的實時傳輸?
#01
基本格式
01
H.264的RTP報頭
圖1 RTP報頭
02
H.264的RTP負載型別
H.264的RTP負載可分為三大類,型別如下:
此類RTP負載中僅包含單個NAL單元。負載報頭型別編號等於原始NAL單元型別,即從 1 到 23 的範圍值,詳見H.264規範。
此型別用於聚合多個NAL單元成為單個 RTP 負載。這類資料包有四個細分版本:單時間聚合包A (STAP-A)、單時間聚合包B (STAP-B)、16位偏移多時間聚合包 (MTAP16) 和24位偏移多時間聚合包 (MTAP24)。負載型別編號分配給 STAP-A、STAP-B、MTAP16 和 MTAP24 的值分別為 24、25、26 和27。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
03
H.264的RTP打包模式
單NAL單元模式
所有的接收端都必須支援這種模式,主要應用於相容低時延應用中的硬體裝置。只有單NAL單元資料包可以在這種模式下使用。
非交錯模式
建議接收端去支援這種模式,主要應用於低時延應用。只有單NAL單元、STAP-A和FU-A資料包可以在這種模式下使用。
交錯模式
有需求的接收端可以去支援這種模式,主要應用於非低延時應用。STAP-B、兩種MTAP、FU-A和FU-B資料包可以在這種模式下使用。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
單NAL單元和非交錯模式中,NAL單元必須以NAL單元解碼順序傳輸,這兩種模式更適合低延時需求的互動系統。
交錯模式中NAL單元的傳輸順序和解碼順序可以是不一致的,導致接收端的解包過程中需要按照解碼順序重新排序,引入更多的時延,因此並不適合需要低時延的互動系統。
04
H.264的RTP負載報頭
H.264的RTP負載報頭位於負載的第1個位元組,分成三個欄位:
05
H.264的RTP負載格式
因為只有單NAL單元模式和非交錯模式打包模式更適合應用於低時延互動系統中,而這兩種打包模式所涉及的只有單NAL資料包、單時間聚合包A(STAP-A)和分片單元A(FU-A)三種RTP負載,所以在這裡只對這三種負載格式做個簡單的介紹。
單NAL資料包就是將原始的NAL單元直接放置到RTP的負載中,NAL單元頭就是作為單NAL資料包的負載型別。
單時間聚合包A(STAP-A)
聚合資料包的負載中包含一個或者多個聚合單元。一個聚合包可以攜帶儘可能多的聚合單元;不過聚合資料包中的總資料量應該選擇合適大小,以便生成的IP資料包小於MTU大小。聚合資料包負載報頭中的NRI欄位的值必須是所有聚合NAL單元中最大值。
#02
實踐分享

圖9 視訊流工作流程
01
H.264打包
H.264的打包的基本流程大致如下:
-
輸入H.264 NAL,判決當前的H.264 NAL的打包格式,可以選擇單NAL單元包格式、STAP-A包格式,或者是FU-A格式。MTAP格式一般不在實時系統中使用,考量的重點在於兼顧打包效率和傳輸效率。 -
Single-NAL-Unit 打包比較簡單,一個NAL封裝為一個RTP包。 -
STAP-A在NAL包比較小的時候採用,多個相同時間戳的NAL包被打到一個RTP包。 FU在NAL包比較大的時候採用,限制RTP包的大小小於MTU。一個NAL包被拆成多個碎片(Fragment), 碎片被打成RTP包。
02
H.264解包
在此只對三種打包模式下的解包過程做一個大致的介紹。
參考文獻
2、RFC 6184 – RTP Payload Format for H.264 Video
本文分享自微信公眾號 - 音視訊開發進階(glumes_blog)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。
- 音視訊進階教程-實現直播間的自定義視訊渲染
- 音視訊開發進階|第六講:色彩和色彩空間·上篇
- H264 視訊檔案如何縮放解析度?
- 星球專享 | 播放器 FFmpeg 依賴庫的配置
- 乾貨收藏 || Vulkan Game Engine 視訊教程
- HDR技術趨勢淺析
- WebRTC 實現 Android 傳屏 demo
- 技術群裡如何提問才能獲得更高的回覆率呢?
- 【建議收藏】30 分鐘入門 Vulkan (中文翻譯版)
- 淺談音視訊自動化測試
- 揭祕版權保護下的視訊隱形水印演算法(下篇)
- 如何用研發效能搞垮一個團隊
- 如何實現H.264的實時傳輸?
- 短視訊中解決音視訊混音出現雜音的問題
- 位元組跳動招聘:30-60k 不限工作經驗!什麼崗位這麼香?
- 進擊的斜槓程式設計師 | 音視訊技術內容變現
- 面試官:RecyclerView佈局動畫原理了解嗎?
- 音視訊開發進階-學習筆記3-使用LAME編碼mp3檔案
- 音視訊開發進階-學習筆記2-LAME交叉編譯
- 網際網路寒冬之下,Android開發的港灣:音視訊進階學習