在做视频处理的时候,通常需要对视频数据进行编解码,这时利用开源的FFmpeg视频音频处理方案是大多数程序员的选择,毕竟自己去进行编解码器的编写实在是太太太没效率了,而且大多数情况下还满满的都是写不出来。。。然决定用FFmpeg只是最开始的一步,因为后面如何去搭建这个环境是个比较麻烦的问题。
通常在VS上搭建FFmpeg开发环境有两种方法,一是从FFmpeg的官网下载源码然后自己进行编译。其复杂度之高实在是令本人望而却步,看了几篇教程之后感觉不会再爱了,当然如果你是立志要在视频上干一番大事业的,还建议去下载最新的源码进行研究;二则是从网上下载别人已经编译过的直接在VS上面可用的FFmpeg包,这个是本人采取的也是这篇博客将要介绍的方法。
对于这个方法来说,网上本身是有一些教程的,然问题在于FFmpeg版本很多,而通常的教程仅仅只是给出配置的方法而没给出其版本,导致配置完了有些东西不能用或者说配置完成之后后面跟着的测试代码并不适用于该版本,有时更崩溃的在于该代码包有些功能或者是因为编译者的疏忽什么的直接就是不能用的。本人被这个情况坑了很久,之前下载的版本已经用了快一年以为没问题,却在最近做编码的时候出现问题(之前一直做的只是解码),所以在找到问题并解决之后,决定写这篇博客,在介绍如何配置环境的同时放上本人现在所用的暂时没问题的FFmpeg包,并在后面的博文中陆续介绍本人用该版本的FFmpeg包所做的一些编解码代码,以供大家参考和指正。
对于FFmpeg如何配置在VS上本身其实是非常简单的,所需要做的只有五步(本人是在VS2013上面配置的,在低版本的VS上面也基本一样)。
第一步:下载FFmpeg包,本人提供的FFmpeg包地址如右:点击打开链接 。将下载完成的包解压到你想要存放的路径即可,本人存放在F盘即“F:\”这个路径中。
(由于这个开发包是比较久的,在写这篇文章之后一个项目中发现开发包中的avcodec_encode_video函数是有问题的,在编码一段时间后会出现卡死的现象,所以如果是希望做编码的朋友请到点击打开链接下载最新版本的ffmpeg,其中 Previous FFmpeg 32-bit Static Versions 主要包含了ffmpeg的使用例子(十分有用!!!)Previous FFmpeg 32-bit Shared Versions 主要包含所用到的dll文件,而 Previous FFmpeg 32-bit Dev Versions 则为lib文件,下载之后可按照本教程的方法进行配置,本教程所提供的例子由于是用的老版本,可能部分的代码需要修改为新版本的样式才能使用,之后本人会放上修改过的用最新ffmpeg库的例子上来)
第二步:在VS上面新建一个工程,打开工程的属性页面(在解决方案资源管理器中右键工程名在弹出的菜单中选择属性),如下图所示:
选择:配置属性->C/C++,在该页面中的“附加包含目录”中添加FFmpeg包下面的include文件夹路径(本人的路径为F:\ffmpeg_lib\include),如下图所示:
选择:配置属性->链接器->常规,在该页面中的“附加库目录”中添加FFmpeg包下面的win32文件夹下面的lib文件夹路径(本人的路径为F:\ffmpeg_lib\win32\lib),如下图所示:
第三步:选择:配置属性->链接器->输入,在该页面的“附加依赖项”中添加swscale.lib;avcodec.lib;avutil.lib;avformat.lib; 这些库即可(如果后面还要用到其他的,可以再接着添加,上面的四个库已经能够完成视频的编解码了),结构如下图所示:
第四步:在工程的头文件中包含FFmpeg包中要被用到的文件,如下:
#ifndef INT64_C第五步:将FFmpeg包下面的win32文件夹下面的bin文件夹(本人路径为:F:\ffmpeg_lib\win32\bin)中的dll全部拷到VS所建的工程中(如果你所建的工程名为ffmpegtest,则拷到.\ffmpegtest\ffmpegtest文件夹中),如果要发行出来也要拷到相应的release文件夹中。
#define INT64_C(c) (c ## LL)
#define UINT64_C(c) (c ## ULL)
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*Include ffmpeg header file*/
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
#include <libavutil/imgutils.h>
#include <libavutil/opt.h>
#include <libavutil/mathematics.h>
#include <libavutil/samplefmt.h>
#ifdef __cplusplus
}
#endif
OK,到此FFmpeg在VS上的配置工作全部完成,接下来就可以进行相关代码的编写了。本人会在近期写关于视频编解码的博客,一旦完成就将链接补上:
用FFmpeg进行视频编码:点击打开链接
用FFmpeg进行视频解码:点击打开链接