ffmpeg入門--基礎知識【2】
bin檔案中可以看到8個庫:
一、FFmpeg的8個庫
- avdevice : 硬體的音視訊採集、加速和顯示。
- avfilter:濾鏡特效處理。
- avformat:用於各種音視訊封裝格式的生成和解析,包括獲取解碼所需資訊、讀取音視訊資料等功能。各種流媒體協議程式碼(如rtmpproto.c等)以及音視訊格式的(解)複用程式碼(如flvdec.c、flvenc.c等)都位於該目錄下
- avcodec:編解碼,音視訊各種格式的編解碼。各種格式的編解碼程式碼(如aacenc.c、aacdec.c等)都位於該目錄下。
- postproc: 用於後期效果處理,如影象的去塊效應等。
- swresample:音訊取樣資料格式轉換,提供音訊重取樣,取樣格式轉換和混合等功能。
- swscale:提供原始視訊的比例縮放、色彩對映轉換、影象顏色空間或格式轉換的功能。
- avutil:包含一些公共的工具函式的使用庫,包括算數運算,字元操作等。
二、FFmpeg的常用資料結構
1. 封裝格式
-
AVFormatContext
描述媒體檔案的構成及基本資訊,封裝格式上下文結構體,是統領全域性的基本結構體,很多函式需要使用它作為引數,儲存了視訊檔案封裝格式相關資訊。主要變數
struct AVInputFormat *iformat:輸入資料的封裝格式
AVIOContext *pb:輸入資料快取
unsigned int nb_streams:音視訊流個數(輸入視訊的AVStream 個數)
AVStream **streams:音視訊流(輸入視訊的AVStream []陣列)
char filename[1024]:檔名
int64_t duration:時長(單位:us)(輸入視訊的時長(以微秒為單位))
int bit_rate:位元率(輸入視訊的位元速率)
AVDictionary *metadata:元資料 -
AVInputFormat
解複用器物件,每種作為輸入的封裝格式對應一個該結構體。主要變數
long_name:封裝格式的長名稱
extensions:封裝格式的副檔名
id:封裝格式ID
一些封裝格式處理的介面函式 -
AVOutputFormat
複用器物件,每種作為輸出的封裝格式對應一個該結構體。 -
AVStream
用於描述一個視訊或者音訊流的相關資料資訊,視訊檔案中每個視訊(音訊)流對應一個該結構體。主要變數
AVCodecContext codec:視訊/音訊流的AVCodecContext
AVRational time_base:時間基準,真正的時間 =PTS
int64_t duration:該視訊/音訊流時間長度
AVDictionary *metadata:元資料資訊
AVRational avg_frame_rate:幀率
AVPacket attached_pic:附加圖片
2. 編解碼
-
AVCodecContext
描述編解碼器上下文的資料結構,包含了眾多編解碼器需要的引數資訊。主要變數
codec:編解碼器的AVCodec
width, height:影象的寬高(只針對視訊)
pix_fmt:畫素格式(只針對視訊)
sample_rate:取樣率(只針對音訊)
channels:聲道數(只針對音訊)
sample_fmt:取樣格式(只針對音訊) -
AVCodec
編解碼器物件,每種編解碼格式對應一個該結構體,每一個AVCodecContext都包含一個AVCodec;主要變數
name:編解碼器名稱
long_name:編解碼器長名稱
type:編解碼器型別
id:編解碼器ID
一些編解碼的介面函式 -
AVCodecParameters
編解碼引數,每個AVStream中都含有一個AVcodecParameters,用於存放當前流的編解碼引數。主要變數
enum AVMediaType codec_type 編碼資料的一般型別;
enum AVCodecID codec_id 特定型別的編碼資料(使用的編解碼器);
uint32_t codec_tag 有關編解碼器的其他資訊;
uint8_t *extradata 初始化解碼器所需的額外二進位制資料,依賴於編解碼器;
int extradata_size extradata內容的大小(以位元組為單位);
int64_t bit_rate 編碼資料的平均位元率(以每秒位數為單位)
3. 網路協議
-
AVIOContext
管理輸入輸出的結構體。位元組IO 上下文。主要變數
unsigned char * buffer 啟動緩衝區
int buffer_size 最大緩衝區大小
unsigned char * buf_ptr 緩衝區當前位置
unsigned char * buf_end 如果讀取函式返回的資料少於請求資料,則資料結束可能小於buffer + buffer_size -
URLProtocol
描述音視訊資料傳輸所使用的協議,每種傳輸協議對應一個URLContext結構。主要變數
-
AVPacket
,儲存一幀壓縮編碼資料。存放編碼後,解碼前的壓縮資料,即ES資料。主要變數
uint8_t *data:壓縮編碼資料,一個AVPacket的data通常對應一個NAL。
int size:data的大小
int64_t pts:顯示時間戳
int64_t dts:解碼時間戳
int stream_index:標識該AVPacket所屬的視訊/音訊流。 -
AVFrame
該結構描述瞭解碼的(原始)音訊或視訊資料。存放編碼前,解碼後的原始資料,如YUV格式的視訊資料或PCM|格式的音訊資料等.主要變數
data:解碼後的影象畫素資料(音訊取樣資料)。
linesize:對視訊來說是影象中一行畫素的大小;對音訊來說是整個音訊幀的大小。
width, height:影象的寬高(只針對視訊)。
key_frame:是否為關鍵幀(只針對視訊) 。
pict_type:幀型別(只針對視訊) 。例如I,P,B。