Win7 VS2017 NASM编译FFMPEG
今天无意中在gayhub发现个牛逼工程,全VS工程编译FFMPEG库,包括依赖库全是VS生成的,无需Mingw等Linux环境。 简单记录下过程,以防将来重装系统等情况,备忘。 https://github.com/ShiftMediaProject/FFmpeg git clone 此项目,运行SMPproject_get_dependencies.bat 下载。 不过我之前并不知道这个自动下载依赖,我直接clone了这个人的所有项目...... 查看SMPreadme.txt,可知,除了相关库外,还需要单独下载一些他没有带的内容。 你需要建一个目录,包含这些单独的头文件。 比如叫__FFMPEG_Need,建立一个include目录,再在其下建立4个目录 AMF ffnvcodec gl KHR 在gl目录中放入以下2个文件 https://www.khronos.org/registry/OpenGL/api/GL/glext.h https://www.khronos.org/registry/OpenGL/api/GL/wglext.h KHR放入 https://www.khronos.org/registry/EGL/api/KHR/khrplatform.h 然后clone这个项目 https://github.com/FFmpeg/nv-codec-headers 把这个项目include下的内容,直接放到我们当前include目录即可,也就是复制那个ffnvcodec目录 最后clone AMF https://github.com/GPUOpen-LibrariesAndSDKs/AMF 把 amf/public/include 内容放到你的AMF目录下,也就是把 components core 复制到AMF目录下 至此,include目录准备完毕,等会编译工程,把这个目录加入所有工程include路径即可,你可以选择加入VS全局include目录里。 ======================================== 接下来下载YASM和NASM http://yasm.tortall.net/Download.html ?YASM只需下载exe即可,32还是64位随意,我只需要32位, http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win32.exe 下好后改名yasm.exe 建个目录,比如 E:Yasm 把yasm.exe放入 新建环境变量YASMPATH,写入路径地址 注意路径最后要有反斜杠结尾 然后下载NASM https://www.nasm.us/pub/nasm/releasebuilds/2.14/ 要下载安装器,不知道为什么,我下载zip好像失败了,所以只能用exe安装版本。 https://www.nasm.us/pub/nasm/releasebuilds/2.14/win32/nasm-2.14-installer-x86.exe 把nasm安装一下,比如 E:nasm-2.14 之后同上,新建环境变量NASMPATH,加入路径 ? 因为我是单独clone的所有工程,所以 https://github.com/ShiftMediaProject/VSYASM https://github.com/ShiftMediaProject/VSNASM 在这2个工程里,把每个工程的 .props 类型配置文件,1个工程有3个文件,总共6个文件,复制到类似下面的目录中,也就是你VS2017的配置目录,VS默认只有masm的配置 D:Program Files (x86)Microsoft Visual Studio2017EnterpriseCommon7IDEVCVCTargetsBuildCustomizations 然后打开SMPffmpeg_deps.sln工程,如果提示更新一些VS组件就都选是更新。 如果工程全都可以打开,不缺少工程的话,那么配置就OK了。如果有加载不了的项目,分2种情况 1.如果是少工程就补全工程。 其他工程都与ffmpeg同级。 如 ffmpeg libass 这样同级目录 2.如果工程文件目录都正常存在,但是还是加载不了,可能就是YASM和NASM配置有问题,但是现在应该都配置好了,我是先有问题,才后装的NASM。 最后,你应该得到一个可以打开 FFmpegSMPffmpeg_deps.sln 之后,所有工程都可以加载上的,没有Load Fail的Solution 此时如果编译libav之类的库,一定会提示缺少头文件,因为最开始单独下载的那些include头文件没有放进VS全局目录,加入即可。 比如 E:PProjectsGitDownloads__FFMPEG_Needinclude 然后再次编译,直接编译debug即可,因为主要是学习原理,而非测试运行效率。 如果全都编译通过没有错误,就可以再打开 FFmpegSMPffmpeg.sln 把ffplay之类的也编译了,对我来说ffplay才是重点,因为这是播放器应用实例,我个人能在网上找到播放视频最实用的例子了。 展开ffplay工程,ffplay.c文件,如果直接编译这个ffplay,生成的ffplay.exe播放视频会提示音频初始化失败而播放不出声音,似乎是因为dsound初始化失败了。 根据之前2次编译ffplay的经验,在文件头加入window头 #include <Windows.h> 搜索SDL_OpenAudioDevice 在这行前加入 CoInitialize(NULL); 再编译即可修复音频问题。 我的FFMPEG工程目录在 E:PProjectsGitDownloadsFFmpeg 那么生成的文件在 E:PProjectsmsvcbinx86ffplay.exe 这个msvc目录似乎是自动生成的 ? 还不算完,现在要测试一个带字幕的视频文件,并且用ffplay播放字幕。 一般的命令,比如ffplay mv.mkv是不会播放视频的字幕的。 想播放字幕,正确的用法是 ffplay -vf subtitles=filename=mv.mkv mv.mkv 这样才行 ? 至此结束,可以开始断点跟踪代码走向了,最叼的是全VS工程,完全可控的代码,让你有心情看到每一个库的内容,而不是像屎一样的那种一堆源码,自动编译完就能用的那种垃圾。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows搭建solr8.1.1
- 使用Skype API的Java bot
- windows-server-2008 – 如何为Windows 2008安装Active Dir
- windows-phone-8 – Windows Phone 8网络信息
- 模拟 – 确定Windows Phone 8.1应用程序是否在模拟器中运行
- Windows下通过命令行 获取文件版本号
- 窗口 – 允许在资源管理器样式的列表视图中选择从第一列开始
- Windows 7 QueryPerformanceFrequency返回2.4 MHz-ish?
- 如何在Windows上使用提升的权限运行.msi安装程序
- Windows Powershell 对于布尔值的处理
- 适用于WIndows 7 x64的Cisco VPN客户端
- batch-file – 用于循环的DOS批处理文件中的变量
- 在Windows Server 2008上设置域和电子邮件帐户的
- windows-phone-7 – 是否可以使用不同的Isolated
- windows安装kafka过程 【本地测试】外赋快速启动
- 可以从Windows机器上在iPad上远程调试javascript
- windows-server-2008 – 在KVM下安装Windows Ser
- windows-7 – 为什么停止chkdsk坏?
- 如何检测Microsoft Bing Maps中的缩放更改
- Microsoft SQL Server 不同系统版本支持和下载说