0、為什麼要在vs中編譯ffmpeg.c
用ffmpeg有很多的用途,比如可以用來轉碼,也可以用來解碼,光是通過上一章的博文,得到幾個對應的dll,其實作用并不大,你可以通過在vs中編譯ffmpeg.c來看看,是如何使用這些dll的,當然,也可以通過編譯ffplay.c來看看一個播放器是如何做成的
1、先把ffmpeg.c加入在vs中
建立一個空的工程,然後把ffmpeg.c加進來,嘗試一下編譯,看看都需要加入些什麼
2、修改ffmpeg.c
注釋掉40行,然後把對應的頭檔案拷過來
因為我是通過mingw來編譯的,是以在當時生成出來dll的時候,也順便把頭檔案給拷貝出來了,是以這裡可以直接放到vs的這個工程中:
然後在工程設定中,給他包含進來
還缺少的頭檔案,可以去ffmpeg的源代碼裡面搜尋:
3、解決一些别的問題
這裡的34行注釋掉,類似的後面遇到#include 的也都注釋掉
提示“error C2054: 在“inline”之後應輸入“(””這個錯誤的,全都去掉incline即可
在剛才加入的config.h檔案的最前面加入:
這樣就解決了下面的問題
100行的HAVE_STRUCT_POLLFD修改成POLLIN
4、在繼續添加需要的檔案
然後看到下面的錯誤
其實是這個錯:
把所有用到這個宏的地方都修改成:
AVRationalr= {1,AV_TIME_BASE };
用r這個變量來替代這個宏
使用_read,凡是提示這樣的錯誤,都是這麼解決
遇到這個錯誤:
用以下語句替換:
char error_[1024];
av_make_error_string(error_,1024,ret);
error_
這個語句
用以下語句替換:
AVRationalr2= {1,1000 };
還需要改這裡:
1874行還需要修改這裡:
3226添加下面幾行
第一個if(debug_ts){}應該這麼樣修改:
最後一個if(debug_ts){}應該這麼樣修改:
4、其他的一些問題
比如snprintf修改成_snprintf、read修改成_read等,這些都容易解決
5、測試使用一下生成出來的ffmpeg.exe
在工程目錄中放一個測試視訊檔案video.mp4,設定調試的指令行為-i video.mp4 -vframes 300 -y -f gif a.gif
這個指令行的意思是,把video.mp4的前300幀做成一個a.gif(一些另外的使用指令,可以參考ffmpeg官網或者google、baidu)
這就是得到的a.gif:
6、整個測試工程csdn下載下傳
csdn的下載下傳位址:http://download.csdn.net/detail/zengraoli/7610219
或許還需要到x264、x265的dll:http://download.csdn.net/detail/zengraoli/9461306
改動比較多,花了大概一個晚上解決的問題,是以收取的下載下傳分比較高,請盡量自己動手修改!