正常的一個編碼器架構及其模塊構成
在音視頻編碼器(Video Encoder)中,通常包括多個核心模塊,整個編碼器架構遵循 輸入 -> 預處理 -> 編碼核心 -> 碼流封裝 的流程。
1. 編碼器的整體架構
編碼器的主要架構如下:
┌──────────────────────────────────┐ │ **視頻輸入 (RAW/YUV)** │ │ 傳感器、視頻文件、攝像頭數據等 │ └──────────────┬─────────────┘ │ ┌──────────────┴──────────────┐ │ **預處理模塊 (Preprocessing)** │ │ 顏色空間轉換、縮放、去噪、幀率調整 │ └──────────────┬──────────────┘ │ ┌──────────────┴──────────────┐ │ **編碼核心 (Encoding Core)** │ │ (1) 幀內/幀間預測 │ │ (2) 變換量化 │ │ (3) 熵編碼 │ └──────────────┬──────────────┘ │ ┌──────────────┴──────────────┐ │ **碼流封裝 (Bitstream Packaging)** │ │ 組幀、NALU 組包、RTP 打包等 │ └──────────────┬──────────────┘ │ ┌──────────────┴──────────────┐ │ **網絡/存儲 (Network/Storage)** │ │ 傳輸(RTMP/SRT)或存儲(MP4/TS) │ └────────────────────────────┘
2. 主要模塊詳解
(1) 預處理模塊(Preprocessing)
主要功能:
- 顏色空間轉換(RGB -> YUV420P)
- 圖像縮放(如 1080P 轉 720P)
- 去噪(降噪濾波)
- 幀率調整(如 30fps 降到 15fps)
技術實現:
- FFmpeg
swscale
進行顏色轉換:
(2) 編碼核心(Encoding Core)
主要模塊:
- 幀內預測(Intra Prediction)
- 只利用當前幀信息,適用于靜態場景。
- H.264 支持 9 種方向預測模式。
- 幀間預測(Inter Prediction)
- 使用 P 幀(前向參考)或 B 幀(前后參考)減少數據量。
- 運動估計算法:塊匹配算法(Block Matching Algorithm)。
- 變換量化(Transform & Quantization)
- 使用 DCT(離散余弦變換) 提取重要信息。
- 量化(Quantization)降低數據精度以減少比特率。
- 熵編碼(Entropy Coding)
- 采用 CABAC/CAVLC 進行無損壓縮,降低碼率。
技術實現:
- H.264 采用 CAVLC 或 CABAC 算法進行熵編碼:
(3) 碼流封裝(Bitstream Packaging)
主要功能:
- 將編碼后的數據封裝成標準 NALU(Network Abstraction Layer Unit) 格式。
- 組成 GOP(Group of Pictures),提高解碼效率。
- 支持不同封裝格式:
- RTMP 直播流:封裝為 FLV
- RTP 傳輸:封裝為 RTP 包
- 存儲:封裝為 MP4 或 TS
技術實現:
- 使用 FFmpeg 將編碼數據封裝為 MP4:
(4) 網絡傳輸(Streaming / Storage)
主要功能:
- 直播:RTMP / SRT / RTP
- 存儲:MP4 / TS / FLV
- 碼率控制(CBR / VBR)
技術實現:
- FFmpeg 推 RTMP 流:
3. 編碼器的技術難點
(1) 碼率控制(Bitrate Control)
- CBR(固定碼率):適合直播,碼率固定,但質量可能下降。
- VBR(可變碼率):適合本地存儲,質量更好但碼率波動大。
- 解決方案:
- 使用 QP 調節,適當降低復雜幀的 QP 值
(2) 低延遲優化(Low Latency Encoding)
- 關鍵問題:
- H.264 默認有 B 幀(雙向預測幀),導致延遲增加。
- 解決方案:
- 禁用 B 幀:
- 使用超快編碼模式:
(3) 音視頻同步(A/V Synchronization)
- 問題:
- 視頻幀率和音頻采樣率不同,可能導致 音畫不同步。
- 解決方案:
- 計算 音視頻時間戳(PTS/DTS),確保時間基一致:
總結
編碼器的核心架構
- 視頻采集 & 預處理(去噪、縮放、格式轉換)
- 編碼核心(幀內/幀間預測、變換量化、熵編碼)
- 碼流封裝(H.264/H.265 NALU 結構)
- 網絡傳輸 & 存儲(RTMP/SRT 推流、MP4 錄制)
常見技術難點
- 碼率控制(CBR/VBR 調優)
- 低延遲優化(禁用 B 幀、減少緩沖)
- 音視頻同步(時間戳調整)
掌握 FFmpeg、H.264/H.265 編碼技術、SRT/RTMP 傳輸,能更好地進行音視頻編碼優化!