聲明:此文章根據 雷霄驊(Leixiaohua1020)的專欄 整理所得;參考網址:http://blog.csdn.net/leixiaohua1020/article/details/11693997。以此向雷致敬!
ffmpeg中關鍵的結構體可以分成以下三類:
a) 解協議(http,rtsp,rtmp,mms)
AVIOContext,URLPRotocol,URLContext主要存儲視音頻使用的協議的類型以及狀態。URLProtocol存儲輸入視音頻使用的封裝格式。每種協議都對應一個URLProtocol結構。(注意:FFMPEG中文件也被當做一種協議“file”)
b) 解封裝(flv,avi,rmvb,mp4)
AVFormatContext主要存儲視音頻封裝格式中包含的信息;AVInputFormat存儲輸入視音頻使用的封裝格式。每種視音頻封裝格式都對應一個AVInputFormat 結構。
c) 解碼(h264,mpeg2,aac,mp3)
每個AVStream存儲一個視頻/音頻流的相關數據;每個AVStream對應一個AVCodecContext,存儲該視頻/音頻流使用解碼方式的相關數據;每個AVCodecContext中對應一個AVCodec,包含該視頻/音頻對應的解碼器。每種解碼器都對應一個AVCodec結構。
d) 存數據
視頻的話,每個結構一般是存一幀;音頻可能有好幾幀
解碼前數據:AVPacket
解碼后數據:AVFrame
ffmpeg關鍵結構體對應關系如下所示:
AVFrame結構體一般用于存儲原始數據(即非壓縮數據,例如對視頻來說是YUV,RGB,對音頻來說是PCM),此外還包含了一些相關的信息。比如說,解碼的時候存儲了宏塊類型表,QP表,運動矢量表等數據。編碼的時候也存儲了相關的數據。因此在使用FFMPEG進行碼流分析的時候,AVFrame是一個很重要的結構體。
具體結構體定義:
FFMPEG結構體分析:AVFrame
在使用FFMPEG進行開發的時候,AVFormatContext是一個貫穿始終的數據結構,很多函數都要用到它作為參數。它是FFMPEG解封裝(flv,mp4,rmvb,avi)功能的結構體。
具體結構體定義:
FFMPEG結構體分析:AVFormatContext
AVCodecContext一般在編解碼的時候用的。
具體結構體定義:
FFMPEG結構體分析:AVCodecContext
AVIOContext是FFMPEG管理輸入輸出數據的結構體。
具體結構體定義:
FFMPEG結構體分析:AVIOContext
AVCodec是存儲編解碼器信息的結構體。
具體結構體定義:
FFMPEG結構體分析:AVCodec
AVStream是存儲每一個視頻/音頻流信息的結構體。
具體結構體定義:
FFMPEG結構體分析:AVStream
AVPacket是存儲壓縮編碼數據相關信息的結構體。
具體結構體定義:
FFMPEG結構體分析:AVPacket
新聞熱點
疑難解答