[✔️]让FFMpeg 在Win7上运行

245 阅读2分钟

ffmpeg3.2在win7上编译后,运行仍旧提示缺少api-ms-win-core-processtopology-obsolete-l1-1-0dll.dll

写了测试程序依旧提示: 86003a195a8628b42d0a0c7b204e7a1.png

刚开始将我的电脑上的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

image.png

image.png

这个版本号在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上运行的。