github上有个ShiftMediaProject(https://github.com/ShiftMediaProject)工程里面直接支持VS编译(牛逼PLUS)。直接下载下来的时候编译还是会有一些问题,当然有一定的语言基础这个也不是什么问题,接下来说明一下本人的编译过程以及遇到的问题。
1、下载工程以及子工程,这个大家自己去下载,有个梯子可能快点,本人无下了很久,附上一张自己下载的目录图片
打开FFmpeg\SMP目录下的ffmpeg_deps.sln工程文件
打开后如图
接下来就是设置编译环境以及设置头文件位置就行底下就是编译后的目录
其他就不附加图片了
2、执行VSNASM和VSYASM目录里面的install_script.bat
3、下载nvcodec(https://github.com/FFmpeg/nv-codec-headers)。这个主要是为了支持N卡的硬件编解码
4、下载AMF(https://github.com/GPUOpen-LibrariesAndSDKs/AMF)。这个主要是为了支持A卡的硬件编解码
5、因为我要编译的是ffmpeg静态库所以,可能直接对代码做了一些修改(比较流氓),大家自己参考(直接改工程目录也行,如果大家做下来有不行的 可以私信我 ,相互学习)
libavcodec\libx264.c 屏蔽这一行 //#define X264_API_IMPORTS 1
nettle\cipher.c 将#include <nettle/version.h>修改成#include <version.h>
nettle\pk.c 将#include <nettle/version.h>修改成#include <version.h>
x264\common\base.c屏蔽x264_log_default函数的// x264_vfprintf( stderr, psz_fmt, arg );代码
x264\common\common.c屏蔽x264_log实现函数
void x264_log( x264_t *h, int i_level, const char *psz_fmt, ... )
{
/*if( !h || i_level <= h->param.i_log_level )
{
va_list arg;
va_start( arg, psz_fmt );
if( !h )
x264_log_default( NULL, i_level, psz_fmt, arg );
else
h->param.pf_log( h->param.p_log_private, i_level, psz_fmt, arg );
va_end( arg );
}
*/
}
ffmpeg工程头文件目录添加$(ProjectDir)\..\..\prebuilt\include;
ffplay工程头文件目录添加$(ProjectDir)\..\..\prebuilt\include\SDL;.\;..\;$(OutDir)\include;$(ProjectDir)\..\..\prebuilt\include;
ffprobe工程头文件目录添加$(ProjectDir)\..\..\prebuilt\include;
libass工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include\freetype2;$(ProjectDir)\..\..\prebuilt\include\harfbuzz;$(ProjectDir)\..\..\prebuilt\include\fribidi;
libavcodec工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include\opus;.\;..\;$(OutDir)\include;$(ProjectDir)\..\..\prebuilt\include;
libavdevice工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include\SDL;.\;..\;$(OutDir)\include;$(ProjectDir)\..\..\prebuilt\include;
libavfilter工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include\freetype2;$(OutDir)\include\fribidi;$(ProjectDir)\..\..\prebuilt\include\fribidi;.\;..\;$(OutDir)\include;$(ProjectDir)\..\..\prebuilt\include;
libavformat工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include\libxml2;.\;..\;$(OutDir)\include;$(ProjectDir)\..\..\prebuilt\include;
libavutil工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include;
libbluray工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include\freetype2;$(ProjectDir)\..\..\prebuilt\include\libxml2;
libfontconfig工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include\libxml2;$(ProjectDir)\..\..\prebuilt\include\freetype2;
libharfbuzz工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include\freetype2;
libpostproc工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include;
libswresample工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include;
libswscale工程头文件目录添加 $(ProjectDir)\..\..\prebuilt\include;