首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

FFmpeg 核心結構體關係圖解:協議、封裝、解碼、數據流

     編輯:關於C語言

前言

FFmpeg 結構體眾多,初學者易迷失。本文將核心結構體按功能分為四類,梳理它們的層級關係與數據流向,附官方架構圖說明。

四大類核心結構體

a) 解協議層

  • AVIOContext:I/O 操作上下文,封裝讀寫操作;
  • URLProtocol:協議註冊表項,每種協議(http, rtmp, file 等)對應一個;
  • URLContext:具體協議實例,存儲狀態、私有數據。

注意:FFmpeg 將本地文件視為 `file` 協議。

b) 解封裝層

  • AVFormatContext:封裝格式上下文,統領全局,包含流列表、元數據等;
  • AVInputFormat:解封裝器註冊表項(如 flv, mp4, mkv),每種格式一個。

c) 解碼層

  • AVStream:每條音視頻流對應一個,含時間基、編解碼參數;
  • AVCodecContext:編解碼器上下文,存儲具體編解碼參數(分辨率、採樣率等);
  • AVCodec:編解碼器註冊表項(如 h264, aac),含編解碼函數指針。

關係:`AVFormatContext` → 多個 `AVStream` → 各自一個 `AVCodecContext` → 對應一個 `AVCodec`。

d) 數據存儲層

  • AVPacket:壓縮數據包(解碼前),通常一幀視頻或多幀音頻;
  • AVFrame:解碼後原始數據(YUV/RGB/PCM),視頻一幀,音頻多幀。

結構體關係圖

FFmpeg 核心結構體關係圖

數據流向總結

  1. 協議層讀取字節流 →
  2. 封裝層解析容器 → 產生 `AVPacket` →
  3. 解碼層 `AVCodecContext` 解碼 `AVPacket` → 產生 `AVFrame` →
  4. 上層應用渲染/播放 `AVFrame`。

學習建議

  • 從 `AVFormatContext` 入手,理解 `avformat_open_input`/`avformat_find_stream_info` 流程;
  • 重點掌握 `AVCodecContext` 配置與 `avcodec_send_packet`/`avcodec_receive_frame` 新 API;
  • 結合 `leixiaohua1020` 博客系列文章逐模塊攻克。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved