好久沒更新blog了,最近一直在看ffmpeg方面的資料,也是應急,學的也是皮毛。我只是把我學習的一些彎路跟大家分享一下,希望能對大家有些許協助,如果哪裡說的不對,還請大神指點啊。
首先,當然還是開發工具的選擇,我去ffmpeg的官網看了一下,嚇死人,竟然都更新到0.11.1,真是版本更新的快啊,我看網上廣泛使用的都是6.0以下的版本,即使我們最愛的OpenCV也是用FFmpeg0.7.x進行的開發。於是去http://ffmpeg.org/看了一下。n多的下載連結讓我淩亂了,下載下來也發現是n多原始碼,淚奔啊。我只是想用用其中的dll和lib開發一下而已,他們藏哪去了,還好我找到了組織,在一個中文開發網站http://www.ffmpeg.com.cn,我找到了我想要的利器——FFmpeg
SDK。現在這個SDK的版本做到了3.2,對應的FFmpeg版本是0.4.9,雖然有些古老,但我還是忍忍用了吧。說白了SDK其實就是幾個lib,幾個dll,幾個對應的標頭檔,特別是有個FFmpeg SDK 開發手冊,可以讀讀。
這個SDK的安裝也比較容易,我想對於配置過OpenCV的大蝦們肯定不在話下。也就是把lib和標頭檔添加到vs開發環境的目錄裡,還有把dll所在的路徑添加到系統的環境變數path中。
配置好了,感覺自己還是不太會用,網上關於FFmpeg的資料都沒有很系統的,估計跟FFmpeg版本更新的太快也有關。只好自己搜集了一些。
首先,關於編碼解碼,大家普遍推薦的是直接看ffmpeg.c,關於播放器,看ffplay.c。當然,看這兩個檔案完全是高端選手,因為它們實在是太大了。。。
其次,我這裡推薦http://dranger.com/ffmpeg/。網站的開頭就提醒大家,他這個教程有些過時,但我感覺裡面的內容對於入門級選手和輕量級的ffmpeg開發是很不錯的。
這裡還要提一點,如果想實現視頻播放,必須得和硬體打交道了,大多數的方案是結合SDL進行的開發,關於SDL,有百度百科哦,親,我就不多介紹了。我這裡推薦的學習SDL的連結,http://lazyfoo.net/SDL_tutorials/index.php。
最後還要介紹我的一點心得,因為我源檔案是cpp檔案,但是FFmpeg是c風格的代碼,所以在標頭檔的包含時要使用extern “C”,聲明為c編譯連結方式。例如:
extern "C"{#include <libavcodec\avcodec.h>#include <libavformat\avformat.h>#include <libswscale\swscale.h>};
還有一點就是如果要添加stdio.h等其他標頭檔的話,一定要放在上述extern “C”代碼的前面,不然也會報錯。讓人很煩惱。
最後祝大家開發的愉快,見笑啦