天天看點

FFmpeg深入分析之零-基礎

​​http://blog.chinaunix.net/uid-26611383-id-3976154.html​​

FFmpeg是相當強大的多媒體編解碼架構,在深入分析其源代碼之前必須要有基本的多媒體基礎知識,否則其源代碼會非常晦澀難懂。本文将從介紹一些基本的多媒體隻是,主要是為研讀ffmpeg源代碼做準備,比如一些編解碼部分,隻有真正了解了多媒體處理的基本流程,研讀ffmpeg源代碼才能事半功倍。

下面分析一下多媒體中最基本最核心的視訊解碼過程,平常我們從網上下載下傳一部電影或者一首歌曲,那麼相應的多媒體播放器為我們做好了一切工作,我們隻用欣賞就ok了。目前幾乎所有的主流多媒體播放器都是基于開源多媒體架構ffmpeg來做的,可見ffmpeg的強大。下面是對一個媒體檔案進行解碼的主要流程:

FFmpeg深入分析之零-基礎

1.   解複用(Demux)

當我們打開一個多媒體檔案之後,第一步就是解複用,稱之為Demux。為什麼需要這一步,這一步究竟是做什麼的?我們知道在一個多媒體檔案中,既包括音頻也包括視訊,而且音頻和視訊都是分開進行壓縮的,因為音頻和視訊的壓縮算法不一樣,既然壓縮算法不一樣,那麼肯定解碼也不一樣,是以需要對音頻和視訊分别進行解碼。雖然音頻和視訊是分開進行壓縮的,但是為了傳輸過程的友善,将壓縮過的音頻和視訊捆綁在一起進行傳輸。是以我們解碼的第一步就是将這些綁在一起的音頻和視訊流分開來,也就是傳說中的解複用,是以一句話,解複用這一步就是将檔案中捆綁在一起的音頻流和視訊流分開來以友善後面分别對它們進行解碼,下面是Demux之後的效果。

FFmpeg深入分析之零-基礎

2.   解碼(Decode)

這一步不用多說,一個多媒體檔案肯定是經過某種或幾種格式的壓縮的,也就是通常所說的視訊和音頻編碼,編碼是為了減少資料量,否則的話對我們的儲存設備是一個挑戰,如果是流媒體的話對網絡帶寬也是一個幾乎不可能完成的任務。是以我們必須對媒體資訊進行盡可能的壓縮。

3.    FFmpeg中解碼流程對應的API函數

了解了上面的一個媒體檔案從打開到解碼的流程,就可以很輕松的閱讀ffmpeg代碼,ffmpeg的架構也基本是按照這個流程來的,但不是每個流程對應一個API,下面這副圖是我分析ffmpeg并根據自己的了解得到的ffmpeg解碼流程對應的API,我想這幅圖應該對了解ffmpeg和編解碼有一些幫助。