制作FFmpeg SDK for MS Visual Studio

制作FFmpeg SDK for MS Visual Studio

作者:金海建

编译SDK

编译之后,运行make install后,在C:/MSYS/local会生成binincludelib等文件夹。这样ffmpeg的编译环境就帮我生成了一个SDK,这个SDKlinux上用C来开发是没有问题的,我们需要使这个SDKMS Visual Studio 开发环境中能用,编译的时候会碰到一大堆问题。我的环境是VS2008

 

建立工程:

我们用ffplay验证我们的SDK,如果发现SDK问题,就可以得到及时的解决。建立一个ffplay的空工程,把ffplay.ccmdutils.ccmdutils.hconfig.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.hlibavutil中。修改#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安装的头文件不全,从libavcodeccopy这两个头文件

 

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中没有usleepusleep是微妙级别的,所以需要把代码改为

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。我们把includelibffmpeg编译出来的dll打包,就可以发布了。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
FFmpeg是一套开源的跨平台音视频处理工具库,提供了音视频编解码、格式转换、过滤器等功能,广泛应用于多媒体开发领域。FFmpeg SDK则是基于FFmpeg的开发包,为开发者提供了更加友好的接口和封装,简化了音视频处理的开发流程。 使用FFmpeg SDK,开发者可以轻松地实现音视频文件的读取、写入、编解码等操作。它支持众多音视频格式,包括但不限于MP4、AVI、FLV、MP3、AAC等,可以进行格式之间的转换和编码参数的调整。此外,FFmpeg SDK还支持多种常用编解码库,如x264、x265、libvpx、libaom等,使得开发者能够根据需要选用合适的编码方式。 FFmpeg SDK提供了一套完善的API文档,方便开发者查找和应用各种功能。开发者可以根据文档中的示例代码,快速上手并进行开发。同时,FFmpeg SDK还支持多线程和硬件加速等特性,可以提高音视频处理的效率和性能。 除了基本的音视频处理功能,FFmpeg SDK还支持视频截图、音频剪切、视频拼接等操作,满足了更多实际需求。而且,FFmpeg SDK的开源特性使得开发者可以根据自己的需要进行二次开发和优化,使其更加适用于自己的项目。 总之,FFmpeg SDK是一款强大的音视频处理开发包,提供了丰富的功能和灵活的接口,方便开发者进行各种音视频处理任务。无论是开发媒体播放器、视频编辑器还是实时流媒体处理,使用FFmpeg SDK都能有效简化开发流程,并获得高效的处理能力。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值