FFmpeg 7 在 Windows 7 上不能运行的问题
问题
我们的项目中 FFmpeg 升级到了版本 7.0,结果有用户反馈在 Windows7 系统上出现访问错误(0xc0000005)。
经过简单分析,发现 FFmpeg 中的 avcodec-61.dll
依赖了 API-MS-WIN-CORE-SYNCH-L1-2-0.DLL
这个文件中的 3 个导出函数实现缺失导致出了问题。
API-MS-WIN
开头的这些文件是在 Windows8 引入的,目的是为了提升程序的兼容性,上面的这个 dll 实际上是将导出函数重定向到了 kernel32.dll 中了,但是这 3 个函数: WakeByAddressAll
, WakeByAddressSingle
和 WakeOnAddress
在 Windows 7 的 kernel32.dll 中是没有实现的。
解决方法
方法 1:裁剪 FFmpeg,移除使用这些 API 的功能。
暂时不考虑此方案。
方法 2:解决函数定义缺失问题
我们可以自己编译一个 API-MS-WIN-CORE-SYNCH-L1-2-0.DLL
,将其放置在 avcodec-61.dll
同目录下并实现相关功能。在 Github 上,我找到了一个专门解决此问题的项目(原本用于使 Qt Creator 能在 Win7 上运行)。
https://github.com/z4none/api-ms-win-core-synch-Win7
参考资料
https://www.reddit.com/r/ffmpeg/comments/1ejm2e8/ffmpeg_not_running_on_windows_7/
FFmpeg 7 在 Windows 7 上不能运行的问题