ffmepg在VS開發環境中的設置以及常見問題

1.先下載ffmpeg的 dev版本(這個比較好)

2.解壓

3.使用VS建立一個cpp工程

4.設置引用文件的位置


5.設置lib文件位置


[特別注意:一開始少了avcodec.lib和 avformat.lib , 連接的時候提示找不到一些符號,但是有一些別的符號是能找到的,

而且找不到的符號,一看就是avXXXXX,所以想到可能是沒有包含avcodec.lib,加上後就能編譯過。]



6. 缺少宏定義

 fatal error C1189: #error : missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS

解決方法:

 

6.編譯,可能出問題:

1>test01.obj : error LNK2001: unresolvedexternal symbol "void __cdecl sws_freeContext(struct SwsContext *)"(?sws_freeContext@@YAXPAUSwsContext@@@Z) 
1>test01.obj : error LNK2001: unresolved external symbol "void __cdeclav_freep(void *)" (?av_freep@@YAXPAX@Z
1>test01.obj : error LNK2001: unresolved external symbol "int __cdeclsws_scale(struct SwsContext *,unsigned char const * const * const,int const *const,int,int,unsigned char * const * const,int const * const)"(?sws_scale@@YAHPAUSwsContext@@QBQBEQBHHHQBQAE2@Z
1>test01.obj : error LNK2001: unresolved external symbol "int __cdeclav_image_alloc(unsigned char * * const,int * const,int,int,enumAVPixelFormat,int)" (?av_image_alloc@@YAHQAPAEQAHHHW4AVPixelFormat@@H@Z
1>test01.obj : error LNK2001: unresolved external symbol "char const *__cdecl av_get_pix_fmt_name(enum AVPixelFormat)"(?av_get_pix_fmt_name@@YAPBDW4AVPixelFormat@@@Z) 
1>test01.obj : error LNK2001: unresolved external symbol "structSwsContext * __cdecl sws_getContext(int,int,enum AVPixelFormat,int,int,enumAVPixelFormat,int,struct SwsFilter *,struct SwsFilter *,double const *)"(?sws_getContext@@YAPAUSwsContext@@HHW4AVPixelFormat@@HH0HPAUSwsFilter@@1PBN@Z
1>test01.obj : error LNK2001: unresolved external symbol "int __cdeclav_parse_video_size(int *,int *,char const *)" (?av_parse_video_size@@YAHPAH0PBD@Z

 

經過查找,因爲ffmpeg是 C程序編譯的。

所以需要在包含頭文件的時候加上 

extern "C"

 

如下:

extern "C"{

#include <libavutil/imgutils.h>

#include <libavutil/parseutils.h>

#include <libswscale/swscale.h>

};

 

7.能夠編譯過,到cmd命令下,運行, 提示缺少avutil-54.dll,等,

  在下載的ffmpeg 的dev版本中,沒有發現這個,

去下載shared 版本的ffmpeg, 找到對應的dll文件,全部拷貝到編譯的Debug目錄下,能夠運行。

8. 按照提示,輸入相應的參數,

E:\test\FFMpeg\test01\Debug>test01.exetest.jpg 80*80

提示 

ffplay -f rawvideo -pix_fmt rgb24 -video_size80x80 test.jpg

 

能夠看出運行效果來。

 

9.如果編譯能夠通過,鏈接的時候,如果發現有些函數找不到,則是沒有添加足夠的庫,

 

1>recordDestop.obj : error LNK2019:unresolved external symbol _avcodec_alloc_frame referenced in function _main

1>recordDestop.obj : error LNK2019:unresolved external symbol _avcodec_open2 referenced in function _main

1>recordDestop.obj : error LNK2019:unresolved external symbol _avcodec_find_decoder referenced in function _main

1>recordDestop.obj : error LNK2019: unresolvedexternal symbol _av_dump_format referenced in function _main

1>recordDestop.obj : error LNK2019:unresolved external symbol _avformat_find_stream_info referenced in function_main

》》》avutil.lib swscale.lib avfilter.libavformat.lib avcodec.lib avdevice.lib 這些庫應該就比較全了,

如果不全,再把其他的加上。

其實也可以看看這幾個函數是在哪個頭文件裏面定義的,根據相應的頭文件,找到對應的庫加上就可以。

 

 

-========================================



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章