2011年12月份的時候發了這篇博客 http://blog.csdn.net/qq316293804/article/details/7107049 ,博文最后說會開源一個播放器,沒想到快兩年了,才有時間發博客。
兩年前的博客和大部分博客一樣,以結果為主,也就是開源一個軟件,直接把代碼一扔,效果圖一截,發一篇介紹性的博客就完事,里面沒有任何技術分析。而Alberl在學習的過程中,雖然找到的絕大部分資料也都是這種類型的,幫助也很大,但還是感覺缺點什么。這就是Alberl喜歡CodeProject的原因,因為幾乎每一篇文章都提供了以下資料:1、源碼下載。 2、使用教程、3、技術分析。 這樣不管是新手還是高手,都可以得到自己想要的。 但是國內的資料連第一點都很難做到,就更別說后面的了。 所以Alberl要是開源個什么東西,會盡量向這三點靠攏。
不過本節教程除外~O(∩_∩)O~,因為ffmpeg實在是個蛋疼的東西,下面會有介紹~~~
嘮叨完畢,進入正題:
一、ffmpeg資料 -- 無語
2011年, 看的是2003年的這個教程
http://dranger.com/ffmpeg/。 2013年的時候,還是只有這個教程,就算是谷歌【ffmpeg Tutorial】,第一篇出來的還是這個家伙,說明連英文資料都少(Aberl沒有仔細去找啦)。
人家dranger.com上用這么大的字體說了這個教程已經過時了,但國內現在還是到處轉載這個教程,並且人家有8個教程,不知道翻譯過來怎么只有7個了。
其實過時不是最重要的,畢竟現在國內絕大部分資料都是10年前老外就玩過的,重要的是,ffmpeg的封裝性太差,每隔一段時間就會升級,換API,所以導致很多人按那8個教程來做,要么錯誤太多,要么編譯通過但是運行不正確。而國內某視頻論壇居然最新的SDK還是2006年的,但是有什么辦法呢,好歹能正常運行啊,就只能用這個了。
不過值得欣慰的是,2013年Alberl再找資料的時候,發現國內有個別大神已經在2012年5月更新了
這些教程,不過依然很多人說有問題,並且現在是2013年10月份來,ffmpeg都出2.0和1.1了,顯然不適合再去看那個資料。
不過呢,ffmpeg終於人性化了,在官網給出了這8個教程的
更新
(2012.08.15的時候第一版)
,而且會跟着ffmpeg更新哦,目前最新的是2013年8月份的,夠新吧,所以入門就不用愁啦~~~
入門之后怎么深入?
去看ffplay.c,那里面是一個完整的播放器,官方給出了
說法:
外部開發者請直接看doxygen生成的API文檔,然后去看doc/example目錄下的例子。這些例子還算好,比ffplay.c的代碼要少多了~~~
二、ffmpeg的編譯 -- 蛋疼
Alberl當年搞這個的時候半途放棄了,對於只用過Ubuntu嘗鮮的人來說,交叉編譯實在太蛋疼了,當然,對於用慣的大神來說,這就是小菜一碟~~~
記得當時要編譯ffmpeg的話,要先去下載十幾個開源庫,然后才開始編譯ffmpeg,反正編譯的過程都寫了一大篇文章,看着就頭大。 后來Alberl看到老外提供了一個腳本,會自動下載這些庫,並把目錄組織好,剩下就只需要編譯啦。 由於Alberl保存了兩三百個ffmpeg相關的網頁,所以一時找不到那個鏈接,就不貼出來了,不知道現在編譯是不是依舊蛋疼。。。
不過呢,ffmpeg提供了已經編譯好的動態庫,而且隨時更新,所以如果只是入個門,就不用自己去編譯啦。去
這里下載Dev版和Shared版,其中dll在Shared版本里面,lib和頭文件在Dev版里面,里面的SDK帶了詳細的文檔和例子。
三、ffmpeg的使用 -- 郁悶
雖然ffmpeg相比以前已經非常人性化了,但是Alberl更新了dll和API,卻發現API兼容性太差,使用新的ffmpeg版本就必須使用新的API,而新的API又不兼容以前的API,不僅要換函數名,還要加參數,換的還不止一兩個函數,好不容易編譯通過了,結果運行2.0就崩潰,換成1.1版本的ffmpeg就是雜音,反正很郁悶。 注意:linux的版本一般從0.1開始,所以2.0相當於windows下習慣的20.0,從1.0到2.0就相當於windows下從10.0 到 20.0,所以變化是很大的。
這就意味着Alberl又得去看那8個教程了,而且又得搗鼓音視頻同步了。作為一個業余人士,Alberl顯然不願意去干這些,所以Alberl在這里只給出2011年做過的ffmpeg播放器,其中主要是做了C++版的封裝,外部調用者根本無需關心內部的處理,和微軟API一樣簡潔明了易上手,
學生作品,希望能夠幫助初學者
~O(∩_∩)O~
代碼下載(除了mp3播放有問題外,像wma、rmvb等等都OK):
SVN庫下載(包含了Alberl從第一個教程開始,到做成播放器的過程,對初學者應該也很有用,要使用這個庫請用svnadmin load命令, 或者下載VisualSVN導入SVN庫):
效果如圖:
下面章節將會介紹其他的播放器核心。



