《FFMPEG/FFPLAY 源碼剖析》學習筆記(一)

《FFMPEG/FFPLAY 源碼剖析》是由楊書良2011年于上海所著,作者博客地址:MCODEC,以及這本書籍的電子版下載地址
注:原作者保留本電子書修改和正式出版的所有權利。最終讀者可以自由復制和傳播本電子書,但不得修改其內容,并且要保證內容的完整性。

1 目錄

這段時間想要學習一下播放器的搭建,于是住準備開始學習播放器的“王者核心”——FFmpeg。師兄推薦了一本解讀源碼的大作——FFMPEG/FFPLAY 源碼剖析,于是便開始了對這本書的大致探索。

最初整體一翻給我的感覺就像是正在看FFmpeg的API文檔一樣,從目錄分模塊份文件的形式上就感到了一股“技術字典”般濃濃的觀感。全書除前言外總體分了五部分講解作者眼中的FFmpeg的“靈魂”,分別是概述、libavutil、libavformat、libavcodec以及ffplay。總體分為了三個部分:原理介紹、代碼介紹、項目示例。這樣一看,這本“技術字典”好像還是很有可讀性的。

2 概述

該部分主要講解了ffplay源碼的文件結構、播放原理、SDL的使用以及AVI格式封裝和典型壓縮算法的介紹。

  • 首先是有關FFplay的總體結構,先大致對作者“提取”出的“靈魂”文件們有一個大致了解。
    注:本處暫時沒有按原書詳細列出各個文件功能,詳細內容會在下面部分給出,圖中帶有 “ * ” 的節點表示文件夾,沒有星號也沒有后綴的節點是.c/.h文件的合寫。

    文件層次圖

  • 播放器原理
    播放器播放一般分為七個基本模塊(過濾器),按廣度順序:讀文件模塊,解復用模塊 ,視頻解碼模塊,音頻解碼音頻,顏色空間轉換模塊,視頻顯示模塊,音頻播放模塊。

    各模塊流程

    其中讀文件模塊是將文件不斷以流的形式輸送到后面的各個模塊中。解復用模塊主要作用就是識別文件的類型和媒體數據的格式(遍歷),并針對類型做出一些簡單的預處理,同時負責后續的時鐘同步。后續的音視頻解碼模塊主要任務就是解碼數據包并傳遞時鐘的同步信息,最終通過音視頻播放模塊根據同步信息播放出音畫信息。顏色空間轉換模塊主要針對YUV與RGB兩種數據的轉換,根據不同要求進行輸出。

  • FFplay播放器
    FFplay本質上也遵循上述的播放流程:
    讀文件模塊(libavformat):最底層是解協議(本地/tcp/udp/http/pipe/...),中間抽象層負責中轉(URLContext),最上層實現讀媒體文件功能(ByteIOContext)。
    解復用模塊(libavformat):底層是解復用結構(AVIContext/TCPContext/...),上層通過priv_data獲取下層數據并分離出音視頻裸數據(AVFormatContext)通過streams傳遞下去。
    解碼模塊(libavcodec):可由AVCoder統一表述,上層是AVCoderContext相關的結構及基礎程序,下層是具體解碼器的結構和相關程序。
    顏色空間轉換模塊(libavcodec):將解碼出的YUV格式數據轉換成目的系統支持的色彩格式。
    渲染模塊(SDL):調用SDL庫進行音視頻渲染播放。
    ffplay.c文件:相當于 directShow里面的 GraphEdit,可以簡單理解成一個支撐大平臺,支撐大框架。它聲明并 實例化其他的數據結構/模塊,并且把其他數據結構/模塊串聯起來,最后把其他數據結構/模塊關聯到VideoState數據結構,同時控制程序的啟動暫停停止等。

  • FFmpeg瘦身時的具體變動
    1)只保留簡單的兩個壓縮算法和avi格式
    2)樣例視頻從神奇的321×321轉壓常見的320×320
    3)刪除不用支撐的文件格式和媒體編解碼算法相關代碼
    4)刪除不支持的平臺相關代碼
    5)刪除一些不用支撐的功能
    6)寫死某些參數又精簡了很多函數的實現
    7)把沒有實際使用的幾乎所有變量和函數也刪掉了
    8)為便于理解修改了部分函數命名
    8)其他必要改動

  • ffplay框架詳講、AVI格式介紹、SDL使用及壓縮算法介紹詳見原書,不作贅述

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378