FFMPEGP 入門之所以很難,很大一部分是環(huán)境難以搭配。
有時(shí)候照著別人的資料明明完全一樣,還是不行。
這不光是環(huán)境搭配的問(wèn)題,還有FFM存在著各個(gè)版本,且不兼容導(dǎo)致的。
還有一個(gè)是 頭文件、DLL、LIB 要對(duì)應(yīng)一致才可以。
另外一開(kāi)始肯定不熟悉,不直接引入哪些頭文件
自己編譯的話,可能還要區(qū)分DEBUG、RELEASE版本
這些導(dǎo)致了,F(xiàn)FM很難入門,可能你花了很長(zhǎng)時(shí)間,自己搭配環(huán)境時(shí),總是出現(xiàn)這樣那樣的問(wèn)題。
我也是在搭建環(huán)境時(shí),遇到了很多問(wèn)題,現(xiàn)在記錄下來(lái),也供大家做個(gè)參考。
MFC-FFM環(huán)境搭建
首先下載編譯好的,我就不再費(fèi)精力編譯了,你如果想和我一樣省事,可以下載這個(gè)編譯好的。
下載地址:https://github.com/gudianxiaoshuo/FFMPEGP
我之前用過(guò)其它版本的,然后再用這個(gè)時(shí)候,發(fā)現(xiàn)很多問(wèn)題,后來(lái)研究,是版本不一致導(dǎo)致的。所以將工程中,之前版本的ffm頭文件、DLL、LIB都刪除了,尤其是工程目錄下的LIB,容易忽略掉。
目的就是,只用一個(gè)版本,不要多版本沖突,否則,你死都不知道怎么死的。
好,現(xiàn)在已經(jīng)將其他版本清理干凈了,開(kāi)始環(huán)境搭建。
1 項(xiàng)目屬性設(shè)置
VC++目錄設(shè)置
avcodec.lib
avdevice.lib
avfilter.lib
avformat.lib
avutil.lib
postproc.lib
swresample.lib
swscale.lib
2 添加頭文件
extern "C" //一定要以C的形式,加入頭文件
{
#include "libavcodec\\avcodec.h"
#include "libavformat\\avformat.h"
#include "libswscale\\swscale.h"
#include "libavdevice\\avdevice.h"
#include "libavutil\\audio_fifo.h"
};
//因?yàn)樵陧?xiàng)目屬性中,已經(jīng)設(shè)置了頭文件ffm\\include目錄,所以這里頭文件,會(huì)從ffm\\include目錄里查找
3 運(yùn)行
目前來(lái)看,你添加了頭文件,添加了LIB
寫了一段示例程序
那應(yīng)該可以了,但你運(yùn)行時(shí),有可能會(huì)碰到這樣的鏈接錯(cuò)誤
: error LNK2019: 無(wú)法解析的外部符號(hào) "void __cdecl av_free(void *)" (?av_free@@YAXPAX@Z),該符號(hào)在函數(shù)
當(dāng)然,如果沒(méi)有這種錯(cuò)誤,正常運(yùn)行,那就沒(méi)問(wèn)題了。
但是,如果你和我一樣,總是遇到最壞的情況,就像趕公交,急急忙忙趕到達(dá)公交站點(diǎn),而要坐的那趟公交正好剛走,不得不再等一循環(huán)。
如果遇到這種情況,可以試試這種方式,添加LIB
//以C的方式引入
extern "C"
{
#pragma comment (lib, "avcodec.lib")
#pragma comment (lib, "avdevice.lib")
#pragma comment (lib, "avfilter.lib")
#pragma comment (lib, "avformat.lib")
#pragma comment (lib, "avutil.lib")
#pragma comment (lib, "swresample.lib")
#pragma comment (lib, "swscale.lib")
};
如果,你還是遇到錯(cuò)誤,就像我一樣,總是遇到最壞的情景。
提示沒(méi)有對(duì)應(yīng)的DLL,這可能就是版本沖突了。
不同版本的LIB,需要的DLL文件名不同。
我就遇到了這個(gè)問(wèn)題,后來(lái)查了下,原來(lái)我工程主目錄下,有別的版本的LIB文件,這樣,工程加載時(shí),先搜索的工程主目錄下的LIB,找到了就不再搜索別的了,導(dǎo)致了我用的這個(gè)版本的LIB沒(méi)有正確加載。
這就是一開(kāi)始說(shuō)的,一定要清理干凈其它版本的文件和DLL以及LIB,否則就夠你頭疼的,尤其是剛?cè)腴T的,可能你都找不到到底哪里錯(cuò)了,明明和資料配置一樣,還是錯(cuò)誤,以致于讓你懷疑人生。