vc2005编译ffmpeg以及ffplay
以及 编译 FFMPEG ffplay
2023-09-27 14:29:31 时间
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加到工程。
或
project- [setting]- [c/c++]- Preprocessor definitions:编辑框里输入inline=__inline
6 找不到colorspace.h等一些文件,从源码里找到复制过来。
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}
或者,在用到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 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
保存的质量非常好。
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
或
或
project- [setting]- [c/c++]- Preprocessor definitions:编辑框里输入inline=__inline
6 找不到colorspace.h等一些文件,从源码里找到复制过来。
7 有几个系统文件找不到,注释掉config.h相关定义,如
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)
再加:
或者,在用到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 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
相关文章
- 编译Android内核 For nexus 5 以及绕过Android的反调试
- FPGA逻辑综合的原则以及可综合的代码设计风格
- 如何在Vue3+js项目(脚手架)中使用(下载安装及运行)element-plus以及解决使用过程中遇到的问题
- Qt 配置文件QSettings读取以及中文问题
- musl libc库的编译以及malloc & mutex实现简析
- tomcat7源码编译过程以及问题解决
- 概率分布之间的距离度量以及python实现(四)
- Docker环境搭建与使用:docker的简介与架构以及安装docker
- iOS viewController添加导航条以及返回跳转选择
- 百度地图检索以及路径规划
- docker容器下tomcat 不向catalina.out输出日志解决以及支持中文字符集
- 偏序关系以及最大元,最小元,极大,极小元和上下界与上下确界
- Shell脚本逻辑与条件判断以及字符串的相关操作
- 教你如何在VMware上创建虚拟机以及安装Linux操作系统
- AT24C02介绍以及存储器分类
- ANSYS——查看剖面图的应力分布云图以及工作平面的相关设置