操作系统:WIN10-64位
编译平台:VS2015
FFmpeg版本:3.3.1
解决方案配置:DEBUG (看个人需要选择DEBUG,RELEASE,DEBUG DLL等)
解决方案平台:X64
1、下载 依赖包源码,依赖包 ShiftMediaProject.rar(内含51个依赖包,包含 nvidia_video_sdk_6.0.1)。
百度网盘 下载地址:
链接:百度网盘 请输入提取码 密码:rbeq
2、下载 yasm、vsyasm、nasm 执行程序及脚本文件 包 yasm_vsasm_32_64_exe.rar,百度网盘下载地址:
链接: 百度网盘 请输入提取码 密码:ks8t
3、解压缩 依赖包源码:将压缩包直接在某个磁盘的根目录下解压,解压后的生成文件夹 G:\ShiftMediaProject,各依赖包存放在此文件夹。
4、解压缩 yasm_vsasm_32_64_exe.rar 到任意目录,分别复制以下文件:
64位 windows:
bin_amd64_win64:将 目录下 的3个exe 文件 复制 到 D:\Microsoft Visual Studio 14.0\VC\bin\amd64 文件夹下。其他版本的 vs 自己找下。
BuildCustomizations:将 目录下的 9个文件 复制到 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations 文件夹下。其他版本的 vs 自己找下。
vc64:将 目录下 的1个exe文件复制到 D:\Microsoft Visual Studio 14.0\VC\ 文件夹下。其他版本的 vs 自己找下。
vcbin_win32:将 目录下 的3个exe文件复制到 D:\Microsoft Visual Studio 14.0\VC\bin 文件夹下。其他版本的vs自己找下。
32位 windows:(估计的):
BuildCustomizations:将 目录下的 9个文件 复制到 C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations 文件夹下。其他版本的 vs 自己找下。
vc32:将 目录下 的1个exe文件复制到 D:\Microsoft Visual Studio 14.0\VC\ 文件夹下。其他版本的 vs 自己找下。
vcbin_win32:将 目录下 的3个exe文件复制到 D:\Microsoft Visual Studio 14.0\VC\bin 文件夹下。其他版本的vs自己找下。
5、启动 ShiftMediaProject\FFmpeg\SMP\ffmpeg_deps.sln,配置 nvidia_video_sdk_6.0.1 的 包含目录和库目录:
libavdevice项目右键 - Properties (属性) - VC++ Directories(VC++目录)- 包含目录,添加:D:\ShiftMediaProject\nvidia_video_sdk_6.0.1\Samples\common\inc
libavdevice项目右键 - Properties (属性) - VC++ Directories(VC++目录)- 库目录,添加:D:\ShiftMediaProject\nvidia_video_sdk_6.0.1\Samples\common\lib\Win32
libavcodec项目右键 - Properties (属性) - VC++ Directories(VC++目录)- 包含目录,添加:D:\ShiftMediaProject\nvidia_video_sdk_6.0.1\Samples\common\inc
libavcodec项目右键 - Properties (属性) - VC++ Directories(VC++目录)- 库目录,添加:D:\ShiftMediaProject\nvidia_video_sdk_6.0.1\Samples\common\lib\Win32
6、右键-》解决方案ffmpeg_deps.sln,选择 “生成解决方案”。
这时候就要进入漫长的等待时间,如果电脑配置差的话估计干不了别的,因为会卡,不妨看看视频休息一下。
编译完成后,如果在输出目录G:\msvc\bin\x64(G:ShiftMediaProject所在根目录)有ffmpeg.exe,ffprobe.exe.ffplay.exe,那么就成功了,但是我都是会有错:
错误 C1083 无法打开包括文件: “GL/glext.h”: No such file or directory libavdevice
G:\ShiftMediaProject\FFmpeg\libavdevice\opengl_enc.c43
错误 C1083 无法打开包括文件: “mfx/mfxvideo.h”: No such file or directorylibavutil
G:\ShiftMediaProject\FFmpeg\libavutil\hwcontext_qsv.c22
错误 LNK1181 无法打开输入文件“libavdeviced.lib” ffplayG:\ShiftMediaProject\FFmpeg\SMP\LINK1
错误 LNK1181 无法打开输入文件“libavdeviced.lib” ffprobeG:\ShiftMediaProject\FFmpeg\SMP\LINK1
错误 LNK1181 无法打开输入文件“libavdeviced.lib” ffmpegG:\ShiftMediaProject\FFmpeg\SMP\LINK1
发现明明有GL/glext.h这个头文件,但是它偏偏说找不到,蛋疼。解决方法:
将glext.h从G:\ShiftMediaProject\nvidia_video_sdk_6.0.1\Samples\common\inc\GL拷贝到C:\Program Files (x86)\Windows Kits\8.1\Include\um\gl
然后重新生成解决方案进入漫长等待,最终成功生成ffmpeg.exe三个可执行文件。
但是很奇怪的是:还有些头文件说找不到,如果实在要用那就像上面一样放到VS的任意一个包含目录下吧。
然后F11进入单步调试的时候提示找不到G:\msvc\ffmpeg.exe, 因为ffmpeg.exe是在G:\msvc\bin\x64目录下
右键ffmpeg项目,属性,拷贝 链接器->输出文件 ($(OutDir)\bin\x64\$(TargetName)$(TargetExt))到 调试->命令 (覆盖),ffplay,ffprobe项目同理
最后大功告成,可以进行单步调试 了,折腾了好久,看个源码容易么?
各位如果成功了记得顶一下
WIN7编译完成出现的问题:
在WIN7-64位下编译完成后出现错误:无法打开包括文件: “GL/glext.h”
然后也是将该文件拷贝到C:\Program Files (x86)\Windows Kits\8.1\Include\um --- $(VC_IncludePath):VC++包含目录
然后重新编译成功,F5调试提示:系统找不到vcomp140d.dll
自己找vcomp140d.dll,然后放在C:\Windows\SysWOW64和C:\Windows\System32下