1. 程式人生 > >ffmpeg入門--基礎知識【2】

ffmpeg入門--基礎知識【2】

bin檔案中可以看到8個庫:

在這裡插入圖片描述

一、FFmpeg的8個庫

  1. avdevice : 硬體的音視訊採集、加速和顯示。
  2. avfilter:濾鏡特效處理。
  3. avformat:用於各種音視訊封裝格式的生成和解析,包括獲取解碼所需資訊、讀取音視訊資料等功能。各種流媒體協議程式碼(如rtmpproto.c等)以及音視訊格式的(解)複用程式碼(如flvdec.c、flvenc.c等)都位於該目錄下
  4. avcodec:編解碼,音視訊各種格式的編解碼。各種格式的編解碼程式碼(如aacenc.c、aacdec.c等)都位於該目錄下。
  5. postproc: 用於後期效果處理,如影象的去塊效應等。
  6. swresample:音訊取樣資料格式轉換,提供音訊重取樣,取樣格式轉換和混合等功能。
  7. swscale:提供原始視訊的比例縮放、色彩對映轉換、影象顏色空間或格式轉換的功能。
  8. 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

    time_base
    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。

在這裡插入圖片描述