vc2005編譯ffmpeg以及ffplay
ffmpeg編譯過程:
1 http://ffmpeg.zeranoe.com/builds/
下載官方提供的源碼,win32庫和dll。
2 新建vc2005 console空工程,把ffmpeg.h,ffmpeg.c,cmdutils.c,cmdutils.h,cmdutils_common_opts.h,
ffmpeg_filter.c,ffmpeg_opt.c加到工程。
3 http://drv.nu/ffmpeg/doxygen/config_8h-source.html
從這里生成 config.h
4 從mingw下復制stdint.h和inttypes.h
5 把.h里的inline換成__inline
或
- #if defined(WIN32) && !defined(__cplusplus)
- #define inline __inline
- #endif
或
project->[setting]->[c/c++]->Preprocessor definitions:編輯框里輸入inline=__inline
6 找不到colorspace.h等一些文件,從源碼里找到復制過來。
7 有幾個系統文件找不到,注釋掉config.h相關定義,如
[cpp] view plaincopy
- //#define HAVE_SYS_RESOURCE_H 1
另外,需要用到socket,修改:
[cpp] view plaincopy- #define HAVE_WINSOCK2_H 1
- #define HAVE_STRUCT_ADDRINFO 1
7 print_all_libs_info 里找不到什么東西,就注釋掉。
8參考 http://www.cnblogs.com/zyl910/archive/2012/08/08/c99int.html
在config.h里面加上
#define PRIu64 "I64u"
#define PRId64 "I64d"
9
//#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}
改成
#define AV_TIME_BASE_Q _AVRational(1, AV_TIME_BASE)
再加:
[cpp] view plaincopy
- AVRational _AVRational(int num, int den) {
- AVRational r = {num, den};
- return r;
- }
或者,在用到AV_TIME_BASE_Q 的地方,手寫AVRational r = {1,AV_TIME_BASE };,再用上這個r.
最麻煩就是const OptionDef options[] 這個數組的初值處理,主要是里面的函數,參考ffmpeg_vc5的代碼,把每一行改成這樣:{ "f", HAS_ARG | OPT_STRING | OPT_OFFSET, { (void*)OFFSET(format) },
就是把原來函數的地方{.fun = xxx}改成 {(void*)xxx}。編譯通過了,常規的一些輸入參數都好用。復雜的還沒試。
最后會提示幾個鏈接問題,手動加上const AVPixFmtDescriptor av_pix_fmt_descriptors[PIX_FMT_NB];
然后,在config.h里加:
- #define AVCONV_DATADIR "c:/ffmpeg1010/"
- #define snprintf _snprintf
- #define lrint(f) (f>=0?(int32_t)(f+(double)0.5):(int32_t)(f-(double)0.4))
- #define lrintf(f) (f>=0?(int32_t)(f+(float)0.5):(int32_t)(f-(float)0.4))
- #define llrintf(f) (f>=0?(int64_t)(f+(double)0.5):(int64_t)(f-(double)0.4))
- #define llrint(f) (f>=0?(int64_t)(f+(float)0.5):(int64_t)(f-(float)0.4))
- #define log2(x) (log(x) * 1.44269504088896340736)
這個AVCONV_DATADIR 是隨便寫的,暫時還沒用上。
到此,基本就完全成功了。編譯出來,運行ffmpeg -i rtsp://xxx/test.264 out.mp4
保存的質量非常好。
ffplay編譯過程
ffplay編譯比ffmpeg簡單的多,新建工程,加上代碼,稍改幾行就OK了。然后ffplay rtsp,出了一個黑窗口,播放效果不錯。再新生成一個mfc工程,給sdl指定一個窗口,視頻就在指定窗口播放了。不過這時有個問題,拖動窗口時,視頻就花掉了。估計sdl需要一些參數,以后有空再研究了。
源碼下載:http://download.csdn.net/detail/sxcong/4672795
原文地址:http://blog.csdn.net/sxcong/article/details/8097594
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成