vc2005编译ffmpeg.c成功 (2012-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 1235456
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: c/c

2012-10-12 16:38:17

编译过程:
1  
下载官方提供的源码,win32库和dll。
2 新建vc2005 console空工程,把ffmpeg.h,ffmpeg.c,cmdutils.c,cmdutils.h,cmdutils_common_opts.h,
ffmpeg_filter.c,ffmpeg_opt.c加到工程。
从这里生成 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参考 
在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编译比ffmpeg简单的多,新建工程,加上代码,稍改几行就ok了。然后ffplay rtsp,出了一个黑窗口,播放效果不错。再新生成一个mfc工程,给sdl指定一个窗口,视频就在指定窗口播放了。不过这时有个问题,拖动窗口时,视频就花掉了。估计sdl需要一些参数,以后有空再研究了。



阅读(15409) | 评论(4) | 转发(2) |
0

上一篇:ffplay vc2005编译成功

下一篇:centos安装lucene

给主人留下些什么吧!~~

sxcong2012-11-09 17:18:46

小尾巴鱼: 编辑器里有上传附件一件,如果超过2mb的话,可以分卷压缩上传。.....
多谢,以前没注意到
|

小尾巴鱼2012-11-08 14:56:32

sxcong: 下载地址:
cu怎么不支持下载.....
编辑器里有上传附件一件,如果超过2mb的话,可以分卷压缩上传。
|

sxcong2012-10-22 10:57:23

下载地址:
cu怎么不支持下载

|

sxcong2012-10-12 16:54:48

编译ffmpeg的原因,用ffplay播放视频流,抓图非常成功。不过保存文件的时候,当流信息不完整(比如bitrate为0等),原始视频流怎么也保存不成功。而ffmpeg保存的很好。新版的ffmpeg代码搞的非常复杂,直接看代码没有结果,debug一下ffmpeg来看看保存过程很重要。linux直接用gdb就行了,顺便试了一下vc编译。vc6需要改的太多,vc2008序列号过期,2010生成的文件听说不好移植,只好选2005了。不过,如果时间充足,还是用vc6 sdk 2003编译的最轻便。

|
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图