制作FFmpeg SDK for MS Visual Studio
来源:互联网 发布:txt数据导入excel 编辑:程序博客网 时间:2024/05/18 03:49
作者:金海建
编译SDK
编译之后,运行make install后,在C:/MSYS/local会生成bin、include、lib等文件夹。这样ffmpeg的编译环境就帮我生成了一个SDK,这个SDK在linux上用C来开发是没有问题的,我们需要使这个SDK在MS Visual Studio 开发环境中能用,编译的时候会碰到一大堆问题。我的环境是VS2008。
建立工程:
我们用ffplay验证我们的SDK,如果发现SDK问题,就可以得到及时的解决。建立一个ffplay的空工程,把ffplay.c,cmdutils.c,cmdutils.h,config.h导入这个空工程中,然后在VS2008中配置头文件目录和lib库目录(注意:ffplay需要用sdl,把sdl也加进入)
编译并排错
下面是在VS2008中,编译ffplay出现的错误,有些错误时ffplay中出现的,有些事sdk的问题。
fatal error C1083: 无法打开包括文件:“inttypes.h”: No such file or directory
在vs2008下没有这个文件,实际上这个文件无非也就是一些整形定义而已,可以直接注释掉这个包含,自己创建这个文件,放到inclue/libavutil下,include改为#include "libavutil/inttypes.h"
fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory
copy C:/MSYS/include下的stdint.h到libavutil中。修改#include <stdint.h>为#include “stdint.h”
fatal error C1083: 无法打开包括文件:“libavdevice/avdevice.h”: No such file or directory
用不着,直接注释
ffplay.cpp中报错
fatal error C1083: 无法打开包括文件:“libavcodec/audioconvert.h”: No such file or directory
fatal error C1083: 无法打开包括文件:“libavcodec/colorspace.h”: No such file or directory
make install安装的头文件不全,从libavcodec中copy这两个头文件
fatal error C1083: 无法打开包括文件:“unistd.h”: No such file or directory
许多在Linux下开发的C程序都需要头文件unistd.h,但VC中没有个头文件,
所以用VC编译总是报错。把下面的内容保存为unistd.h,可以解决这个问题。
/** This file is part of the Mingw32 package.
* unistd.h maps (roughly) to io.h
*/
#ifndef _UNISTD_H
#define _UNISTD_H
#include <io.h>
#include <process.h>
#endif /* _UNISTD_H */
提示
static int wanted_stream[AVMEDIA_TYPE_NB]={
[AVMEDIA_TYPE_AUDIO]=-1,
[AVMEDIA_TYPE_VIDEO]=-1,
[AVMEDIA_TYPE_SUBTITLE]=-1,
};语法错误
VC的标准C++不支持这个赋值方式,我们改为
static int wanted_stream[AVMEDIA_TYPE_NB]=
{
-1,
-1,
0,
-1,
0
};
error C3861: “rint”: 找不到标识符
rint函数是个四舍五入的方法,我们自己实现
inline long rint(double x)
{
if(x >= 0.)
return (long)(x + 0.5);
else
return (long)(x - 0.5);
}
指示FFTSample data[2][2*nb_freq];表达式错误
我们知道标准C++不支持动态数组。修改为
FFTSample *data[2];
data[1] = malloc(sizeof(FFTSample) * 2*nb_freq);
data[0] = malloc(sizeof(FFTSample) * 2*nb_freq);
最后释放
free(data[0]);
free(data[1]);
error C3861: “usleep”: 找不到标识符
VC中没有usleep,usleep是微妙级别的,所以需要把代码改为
usleep(is->audio_st && is->show_audio ? rdftspeed*1000 : 5000);
to
Sleep (is->audio_st && is->show_audio ? rdftspeed*1 : 5);
指出 ap->time_base= (AVRational){1, 25};语法错误。
还是标准C++不支持这种语法,修改为
ap->time_base.num = 1;
ap->time_base.den = 25;
error C2054: 在“inline”之后应输入“(”
这是因为c不支持inline,我们把cmdutils.c改为cmdutils.cpp,把ffplay.c改为ffplay.cpp。
链接错误:
现在编译可以通过,但是现实一大堆库没有链接(好像有77个链接错误),把
avcodec-52.lib
avformat-52.lib
avutil-50.lib
swscale-0.lib
加进去还是没用,发现是我们用了ffplay.cpp,需要在ffmpeg所有头文件中加。
#ifdef __cplusplus
extern "C" {
#endif
…
#ifdef __cplusplus
}
#endif
这样就可以正确链接了。
最后可以正确编译出ffplay.exe。我们把include、lib和ffmpeg编译出来的dll打包,就可以发布了。
- 制作FFmpeg SDK for MS Visual Studio
- 制作FFmpeg SDK for MS Visual Studio
- 制作FFmpeg SDK for MS Visual Studio
- 制作FFmpeg SDK for MS Visual Studio
- 制作FFmpeg SDK for MS Visual Studio
- 制作FFmpeg SDK for MS Visual Studio
- 转载 从linux转到vs的问题(制作FFmpeg SDK for MS Visual Studio)
- Mercurial Source Control Plugin for MS Visual Studio
- Xamarin For Visual Studio第一坑 - Android SDK版本问题
- Visual Studio 2005 Article(MS)
- MS Visual Studio 6.0 tips
- Visual Studio的SDK
- Visual Studio SDK介绍
- Visual Studio For Mac
- Measurement Studio for Visual Studio
- Integracja Qt z MS Visual Studio 2008
- 堆异常检测-MS-Visual Studio
- Visual Studio Code 玩MS SQL
- videoInput样例
- div+css模仿框架布局
- 市民花百元装Win7“尝鲜”
- ASP.NET(C#)中web.config
- WinForm下的TextBox只能输入整数(可正可负)
- 制作FFmpeg SDK for MS Visual Studio
- oracle Constraint[类似 constraint用法总结 I]
- Script & Tool之CreateFetureClasses
- 百练2698 八皇后
- ECshop会员等级~
- 编程之美 2.18数组分割 将一个长度为2N的数组分割成2个长度为N的数组,且两数组的和的差的绝对值最小,即和最接近 动态规划?????????????????????????????????????
- ##(两个井号)和#(一个井号)都是什么意思
- 背包九讲
- javascript详解4