ffmpeg3.2在win7上编译后,运行仍旧提示缺少api-ms-win-core-processtopology-obsolete-l1-1-0dll.dll
写了测试程序依旧提示:
刚开始将我的电脑上的dll复制到目标电脑上,发现又报错0x0007的问题,这就很棘手了,折腾了好久,其实是因为这个dll的问题,api-ms-win-core-processtopology-obsolete-l1-1-0dll.dll在win7上是不存在的,这个win10上的确有,所以乱用dll才导致了这个问题。
注意尽量不要乱用DLL!
找的网上一个开源游戏引擎,可以在win7上正常运行,发现它使用的ffmpeg比较低
- panda3d-1.10.13-tools-win64\thirdparty\win-libs-vc14-x64\ffmpeg
这个版本号在ffmpeg源码中的位置: libavutil\version.h
#define LIBAVUTIL_VERSION_MAJOR 55 #define LIBAVUTIL_VERSION_MINOR 34 #define LIBAVUTIL_VERSION_MICRO 101
钉钉在win10、win7上使用的dll版本也是不一致的。
- ffmpeg release 2.0
#define LIBAVUTIL_VERSION_MAJOR 52 #define LIBAVUTIL_VERSION_MINOR 38 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_MAJOR 55 #define LIBAVCODEC_VERSION_MINOR 18 #define LIBAVCODEC_VERSION_MICRO 102
- ffmpeg n 2.0.7
#define LIBAVUTIL_VERSION_MAJOR 52 #define LIBAVUTIL_VERSION_MINOR 38 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_MAJOR 55 #define LIBAVCODEC_VERSION_MINOR 18 #define LIBAVCODEC_VERSION_MICRO 102
- ffmpeg release 2.1
#define LIBAVUTIL_VERSION_MAJOR 52 #define LIBAVUTIL_VERSION_MINOR 48 #define LIBAVUTIL_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_MAJOR 55 #define LIBAVCODEC_VERSION_MINOR 39 #define LIBAVCODEC_VERSION_MICRO 101
- ffmpeg n 2.1.1
#define LIBAVUTIL_VERSION_MAJOR 52 #define LIBAVUTIL_VERSION_MINOR 48 #define LIBAVUTIL_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_MAJOR 55 #define LIBAVCODEC_VERSION_MINOR 39 #define LIBAVCODEC_VERSION_MICRO 101
使用的是介于2.0.7~R2.1的一个中间版本
解决方案:
如果要降低使用的FFMpeg版本,感觉适配又是一堆坑,最后才发现微软其实有解决这个编译问题,使用 github.com/tidys/FFmpe… 不用切换版本!
FFmpegInterop是一个开源项目,旨在为Windows 10、Windows 8.1和Windows Phone 8.1应用程序提供一种简单的使用FFmpeg播放各种媒体内容的方法。该项目通过实现MediaStreamSource,利用FFmpeg处理媒体,并使用Windows媒体管道进行播放。
这种方法的优点之一是,音频和视频同步由Windows媒体管道处理。您还可以使用Windows内置的音频和视频解码器,这有助于改善移动设备的能量消耗。
仓库将FFMpeg作为了子模块,使用的是某个版本,我这里没有使用它的子模块,直接将我想要编译的FFMpeg版本放到了ffmpeg目录,反正原理都是一样的,然后在根目录下执行脚本
BuildFFmpeg.bat win7
如果不知道都有哪些选项,可以执行
BuildFFmpeg.bat /?
打印结果里面会展示详细的选项内容,这个我也是看源码才知道的,readme里面是没有写win7的,只有阅读源码才会发现这个选项。
一切顺利就会在ffmpeg/Build/<platform\>/<architecture\>
生成想要的dll,实测发现的确是可以在win7上运行的。