本篇原始出处也在 我的有道云笔记 中。
参考的资料主要是下面两篇
1、http://www.vcmfc.com/portal.php?mod=view&aid=27
2、(要翻墙)http://siliconandlithium.blogspot.jp/2014/01/building-ffmpeg-in-visual-studio.html
我的系统是Win10 LTSB企业版,一开始在VS2013上编译,遇到点问题,求教第一篇文章的作者,他建议我用VS2015。后来发现其实用VS2013是没有问题的,因此笔记中的截图有可能是2013,也有可能是2015。
步骤如下:
1、从这里完整下载所有源代码
https://github.com/ShiftMediaProject
一共48个,实际用到了哪些我也没管,总之我全部clone到本地了。
注意:
用git clone,这样下载下来的源代码目录无需改名,后续在VS里加载很方便。如果下载的zip,解压后注意去掉"-master "的后缀。
建议在根目录新建个目录,比如我建了D:\ShiftMediaProject这个目录,在这个目录下面git clone,一来好管理,二来生成的exe会在代码目录的上两级。
2、打开“FFmpeg\SMP\ffmpeg_deps.sln”解决方案文件,有部分工程项目加载失败
这个时候,如果你通过菜单尝试手工添加失败的项目,会提示出错
什么都不要做!直接退出VS。
3、从这里下载“vsyasm-1.3.0-win32.zip”。
如果是vs2013,将“vsyasm-1.3.0-win32.zip”解压到“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations”,
如果是vs2015,将“vsyasm-1.3.0-win32.zip”解压到“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations“。
4、修改”vsyasm.props“文件,将文中”$(Platform) “ 修改为 ”win$(PlatformArchitecture)“,保存。
5、再次打开“FFmpeg\SMP\ffmpeg_deps.sln”解决方案文件,会发现所有项目均正常加载。
6、直接开始编译,很不幸,错误很多啊。
7、其中一个错误是(截图是别人的,我出问题后忘了截图,这里借用下,但都是类似的关于vsyasm的)
很好解决,将第3、4步改好的BuildCustomizations目录下的vsyasm工具文件同时要拷贝一份到另一个目录:
如果用的是vs2013,是“C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin”,
如果用的是vs2015,是“C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin”。
8、rebuild,第一个错误是这个
google了很久也没找到原因,后来直接把第100行给注释了,freetype2就编译通过了
谁能告诉我为什么?
9、接着处理编译错误,是这个
从这个页面的左下角下载“nvidia_video_sdk_6.0.1.zip”,解压到 D:\ShiftMediaProject 目录下。
10、libavdevice项目右键 - Properties - VC++ Directories,添加
Include Directories:D:\ShiftMediaProject\nvidia_video_sdk_6.0.1\Samples\common\inc
Library Directories:D:\ShiftMediaProject\nvidia_video_sdk_6.0.1\Samples\common\lib\Win32
11、libavcodec项目右键 - Properties - VC++ Directories,同上添加inc和lib。
12、接下来build就成功了,输出的可执行文件目录在D:\msvc下。
13、如果直接debug,会提示
原因是项目设置的输出文件(Link.OutputFile)与Debugging的Command不一致,Debugging Command初始的设置是
$(TargetPath)是"D:\ShiftMediaProject\FFmpeg\SMP\..\..\..\msvc\ffplay.exe"
实际的可执行文件按下面的设置输出在 "D:\ShiftMediaProject\FFmpeg\SMP\..\..\..\msvc\bin\x86\ffplay.exe"
修改一下Debugging中的Command如下
注意在Command Arguments添加要播放的文件或者网络路径。
补充一下:有时候编译失败,会发现在编译输出目录msvc下bin不是个目录,而是个文件。应该是某个project里的Post build Event中,copy命令中目标地址bin后没有\,导致系统认为将某个文件拷贝改名为bin。比如
网友评论