文档章节

vc2005编译ffmpeg以及ffplay

abcijkxyz
 abcijkxyz
发布于 2016/08/06 11:54
字数 605
阅读 2
收藏 0
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相关定义,如

//#define HAVE_SYS_RESOURCE_H 1

  另外,需要用到socket,修改:
#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"


//#define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}

改成

 #define AV_TIME_BASE_Q          _AVRational(1, AV_TIME_BASE)



再加:

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

本文转载自:http://blog.csdn.net/leixiaohua1020/article/details/12029697

abcijkxyz
粉丝 63
博文 6196
码字总数 1876
作品 0
深圳
项目经理
私信 提问

暂无文章

在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
2
0
高德API入门教程

项目需求 1、实现打开地图就能定位到中心显示标注点 2、点击标注显示保利可爱岛的详细信息 3、实现导航功能 <!doctype html><html><head> <meta charset="utf-8"> <meta http-......

我叫小糖主
昨天
7
0
聊聊Elasticsearch的MonitorService

序 本文主要研究一下Elasticsearch的MonitorService MonitorService elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/MonitorService.java public class MonitorServic......

go4it
昨天
3
0
二、Docker

1、Docker - The TLDR(Too Long,Don't Read,Linxu 终端工具 ) Docker是在Linux和Windows上运行的软件。它创建、管理和编排容器。该软件以开源方式开发,在Github上作为Moby开源项目的一部分。...

倪伟伟
昨天
3
0
Python猫荐书系列之七:Python入门书籍有哪些?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一...

豌豆花下猫
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部