仿迅雷播放器教程 -- 基於ffmpeg的C++播放器 (1)


    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的代碼要少多了~~~
       如果還不夠用,官方給出了 上百款播放器相關的項目鏈接,其中包括大名鼎鼎的VLC、MPlayer、MPC-H等等,慢慢看吧^_^
 
二、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庫):
 
效果如圖:
 
 
 
 
下面章節將會介紹其他的播放器核心。
 
 






免責聲明!

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



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