Windows (MSVC)VS2017编译FFmpeg并支持硬件编解码(NVSDK/AMF/QSV)

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;
 

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值