FFMPEG是一個很好的庫,能夠用來建立視頻應用或者生成特定的工具。FFMPEG幾乎爲你把全部的繁重工做都作了,好比解碼、編碼、複用和解複用。這使得多媒體應用程序變得容易編寫。它是一個簡單的,用C編寫的,快速的而且可以解碼幾乎全部你能用到的格式,固然也包括編碼多種格式。編程
惟一的問題是它的文檔基本上是沒有的。有一個單獨的指導講了它的基本原理另外還有一個使用doxygen生成的文檔。這就是爲何當我決定研究FFMPEG來弄清楚音視頻應用程序是如何工做的過程當中,我決定把這個過程用文檔的形式記錄而且發佈出來做爲初學指導的緣由。工具
在FFMPEG工程中有一個示例的程序叫做ffplay。它是一個用C編寫的利用ffmpeg來實現完整視頻播放的簡單播放器。這個指導將從原來Martin Bohme寫的一個更新版本的指導開始(我借鑑了一些),基於Fabrice Bellard的ffplay,我將從那裏開發一個能夠使用的視頻播放器。在每個指導中,我將介紹一個或者兩個新的思想而且講解咱們如何來實現它。每個指導都會有一個C源文件,你能夠下載,編譯並沿着這條思路來本身作。源文件將向你展現一個真正的程序是如何運行,咱們如何來調用全部的部件,也將告訴你在這個指導中技術實現的細節並不重要。當咱們結束這個指導的時候,咱們將有一個少於1000行代碼的能夠工做的視頻播放器。編碼
在寫播放器的過程當中,咱們將使用SDL來輸出音頻和視頻。SDL是一個優秀的跨平臺的多媒體庫,被用在MPEG播放、模擬器和不少視頻遊戲中。你將須要下載並安裝SDL開發庫到你的系統中,以便於編譯這個指導中的程序。spa
這篇指導適用於具備至關編程背景的人。至少至少應該懂得C而且有隊列和互斥量等概念。你應當瞭解基本的多媒體中的像波形一類的概念,可是你沒必要知道的太多,由於我將在這篇指導中介紹不少這樣的概念。視頻
更新:我修正了在指導7和8中的一些代碼錯誤,也添加-lavutil參數。歡迎給我發郵件到dranger@gmail.com,討論關於程序問題、疑問、註釋、思路、特性等任何的問題。隊列