FFmpeg 學習(一):FFmpeg 簡介


一、FFmpeg 介紹

FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,並能將其轉化為流的開源計算機程序。采用LGPL或GPL許可證。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫。

二、FFmpeg 組成

  • libavformat:用於各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結構和讀取音視頻幀等功能;
  • libavcodec:用於各種類型聲音/圖像編解碼;
  • libavutil:包含一些公共的工具函數;
  • libswscale:用於視頻場景比例縮放、色彩映射轉換;
  • libpostproc:用於后期效果處理;
  • ffmpeg:該項目提供的一個工具,可用於格式轉換、解碼或電視卡即時編碼等;
  • ffsever:一個 HTTP 多媒體即時廣播串流服務器;
  • ffplay:是一個簡單的播放器,使用ffmpeg 庫解析和解碼,通過SDL顯示;

三、FFmpeg包含類庫說明

2.1 類庫說明

  • libavformat - 用於各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息、讀取音視頻數據等功能。各種流媒體協議代碼(如rtmpproto.c等)以及音視頻格式的(解)復用代碼(如flvdec.c、flvenc.c等)都位於該目錄下。
  • libavcodec - 音視頻各種格式的編解碼。各種格式的編解碼代碼(如aacenc.c、aacdec.c等)都位於該目錄下。
  • libavutil - 包含一些公共的工具函數的使用庫,包括算數運算,字符操作等。
  • libswscale - 提供原始視頻的比例縮放、色彩映射轉換、圖像顏色空間或格式轉換的功能。
  • libswresample - 提供音頻重采樣,采樣格式轉換和混合等功能。
  • libavfilter - 各種音視頻濾波器。
  • libpostproc - 用於后期效果處理,如圖像的去塊效應等。
  • libavdevice - 用於硬件的音視頻采集、加速和顯示。

如果您之前沒有閱讀FFmpeg代碼的經驗,建議優先閱讀libavformat、libavcodec以及libavutil下面的代碼,它們提供了音視頻開發的最基本功能,應用范圍也是最廣的。

2.2 常用結構

FFmpeg里面最常用的數據結構,按功能可大致分為以下幾類(以下代碼行數,以branch: origin/release/3.4為准):

1. 封裝格式

  • AVFormatContext - 描述了媒體文件的構成及基本信息,是統領全局的基本結構體,貫穿程序始終,很多函數都要用它作為參數;
  • AVInputFormat - 解復用器對象,每種作為輸入的封裝格式(例如FLV、MP4、TS等)對應一個該結構體,如libavformat/flvdec.c的ff_flv_demuxer;
  • AVOutputFormat - 復用器對象,每種作為輸出的封裝格式(例如FLV, MP4、TS等)對應一個該結構體,如libavformat/flvenc.c的ff_flv_muxer;
  • AVStream - 用於描述一個視頻/音頻流的相關數據信息。

2.編解碼

  • AVCodecContext - 描述編解碼器上下文的數據結構,包含了眾多編解碼器需要的參數信息;
  • AVCodec - 編解碼器對象,每種編解碼格式(例如H.264、AAC等)對應一個該結構體,如libavcodec/aacdec.c的ff_aac_decoder。每個AVCodecContext中含有一個AVCodec;
  • AVCodecParameters - 編解碼參數,每個AVStream中都含有一個AVCodecParameters,用來存放當前流的編解碼參數。

3. 網絡協議

  • AVIOContext - 管理輸入輸出數據的結構體;
  • URLProtocol - 描述了音視頻數據傳輸所使用的協議,每種傳輸協議(例如HTTP、RTMP)等,都會對應一個URLProtocol結構,如libavformat/http.c中的ff_http_protocol;
  • URLContext - 封裝了協議對象及協議操作對象。

4. 數據存放

  • AVPacket - 存放編碼后、解碼前的壓縮數據,即ES數據;
  • AVFrame - 存放編碼前、解碼后的原始數據,如YUV格式的視頻數據或PCM格式的音頻數據等;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM