NDK编译ffmpeg源码-在vs2019中将ffmpeg源码编译成静态库和动态库【完整步骤,个人测试可行】

目录

ffmpeg从大约两年前的版本开始,不再提供编译好的lib、dll,需要开发者自己编译,linux下编译ffmpeg可能比较简单,windows稍微复杂一点,很多文章介绍使用msys2编译,但大多数都未能正确编译lib,只添加了x264。 然而,ffmpeg支持很多依赖库。 使用命令行,如果命令错误,编译就会失败。 本博客介绍如何使用vs2019编译最新的ffmpeg源码,可以编译成静态库和动态库,支持x64和win32版本。 比如下面是我的vs2019编译结果:

lib库路径

我的编译方法不是在网上的windows linux环境下编译的。 我之前也是按照那个方法编译的,结果要么编译成.a库,vs2019链接失败,要么编译成.dll,因为项目需要使用ffmpeg进行静态链接。 因为不能使用ffmpeg的所有API,所以编译好静态库后,可以自己打包一个dll,这样安装包就会小很多。 相信大家在很多软件中都见过libffmpeg.dll这样的文件。 这是你自己打包的dll。 不是 ffmpeg 原始库。

由于ffmpeg依赖库太多,用msys64方式编译,如果参数太少,可能会编译不完整。 大多数fmpeg windows编译教程错误很多,根本无法编译,而且由于msys64的linux环境和windows Visual Studio环境差别很大,c/c++编译器会冲突。 还需要更改link.exe等文件的名称,比较复杂,而且编译时会出现各种乱七八糟的错误,费时费力。

本文使用github的开源项目ShiftMediaProject进行编译,开发环境是Win11 64bit,VS2019,经过多台笔记本测试,一次性全部通过,没有任何错误。

很多人评论说很难完整下载源码,导致无法编译成功。 下面提供ffmpeg vs2019项目的完整代码。

关联:

提取码:7kqi

下载代码后,只需按照下面的步骤4进行编译即可。 如果您有可靠的网络环境,可以自行自动下载。 具体步骤如下:

1.ffmpeg代码克隆

在克隆代码之前,先创建一个代码目录,比如创建ffmpeg_vs2019目录,并在这个目录下再创建两个目录,msvc、source,为什么要这样创建呢,这是项目作者的建议,照着做就可以了。

*OutputDir is the "Output Directory" specified in the project properties. 
The default value of OutputDir is "....msvc" relative to the FFmpeg source directory. An example of the expected 
directory structure is:
    -  msvc          (OutputDir)
    -> source
        - FFmpeg
        - ..Any other libraries source code..

NDK编译ffmpeg源码-在vs2019中将ffmpeg源码编译成静态库和动态库【完整步骤,个人测试可行】

进入源码目录,打开git bash克隆代码

项目地址:

代码克隆

git clone https://github.com/ShiftMediaProject/FFmpeg.git

克隆长度约为355M。 如果网络环境不好,克隆可能会失败。

2.ffmpeg依赖库下载

ffmpeg克隆完成后,在ffmpeg_vs2019sourceFFmpegSMP目录下有一个readme.txt,介绍了如何编译和配置整个项目,比如x264、265、vpx等开源的,可以自动编译在ShiftMediaProject中克隆,或者运行脚本克隆,建议使用脚本克隆来节省时间。 方法如下:

在ffmpeg_vs2019sourceFFmpegSMP路径下打开git bash并执行

./project_get_dependency.bat

如下所示

如果网络不好,第一次克隆可能会失败。 可以继续执行该命令。

3.下载其他文件

首先在ffmpeg_vs2019/msvc中创建include目录,并在include中创建gl和AMF两个目录。 后面还需要存放opengl、egl、nv-codec、AMF的头文件。

(1)opengl头文件

opengl仓库

代码克隆:

git clone https://github.com/KhronosGroup/OpenGL-Registry.git

在 OpenGL-RegistryapiGL 中找到 glext.h 和 wglext.h 并将其放入目录:ffmpeg_vs2019msvcincludegl

(2)EGL头文件

东瀛仓库

代码克隆:

git clone https://github.com/KhronosGroup/EGL-Registry.git

找到EGL-RegistryapiKHR,将KHR目录复制到ffmpeg_vs2019msvcinclude

(3)nv-codec头文件

git clone https://github.com/FFmpeg/nv-codec-headers.git

将nv-codec-headersinclude中的ffnvcodec目录复制到ffmpeg_vs2019msvcinclude

(4)AMF头文件

NDK编译ffmpeg源码-在vs2019中将ffmpeg源码编译成静态库和动态库【完整步骤,个人测试可行】

安普仓库

克隆代码

git clone https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git

将 AMFamfpublicinclude 中的两个文件夹复制到 ffmpeg_vs2019msvcincludeAMF

4.配置NASM、YASM NASM下载地址:

如下所示

YASM下载地址:

将下载的VSNASM和VSYASM解压在

ffmpeg_vs2019msvc 目录。

找到vs2019的命令行工具,

右键以管理员模式运行,cd到对应路径,执行安装脚本,如右图

5.开始编译ffmpeg

做完以上步骤后,使用vs2019打开SMP目录下的ffmpeg_deps.sln,一个47项的工程。 本项目配置了静态库、动态库、win32、x64,非常方便,如下图:

比如我要编译x64版本的lib,不带dll,选择Debug x64,F7编译,19:11开始编译,19:30完成编译,大约20分钟,这只是Debug版本,编译发布可能需要20分钟,例如生成的结果是:

lib库路径

上面生成的debug lib,本项目在debug生成的文件中添加了后缀d,而release文件没有,这样更容易区分。 可以看到libavformatd.lib大小为137M,使用时不需要dll,链接lib即可。

如何使用这个lib需要一个头文件。 头文件目录如下:

您可以直接复制lib并包含在之前的路径中并将其用作sdk。

生成的ffmpeg.exe在以下目录

可以看到ffmpegd.exe有90多M,是静态编译的结果,使用时不需要依赖dll。

6.创建项目验证ffmpeg lib

有了include和lib,创建一个vs2019 c++控制台项目,配置好include和lib,然后就可以写代码了。 例如获取ffmpeg代码版本:

/*
ffmpeg lib 测试程序
*/
#include 
extern "C"
{
#include "libavformat/avformat.h"
}
#ifdef _DEBUG
#pragma comment(lib, "libavformatd.lib")
#pragma comment(lib, "libavutild.lib")
#else
#pragma comment(lib, "libavformat.lib")
#pragma comment(lib, "libavutil.lib")
#endif
using namespace std;
int main()
{
    cout << av_version_info() << endl;
    return 0;
}

运算结果

如果要调试ffmpeg代码,将pdb文件放到lib所在目录下即可跟踪ffmpeg源码,如下图:

7. 哪些项目使用了ffmpeg

除了使用lib开发外,还可以使用dll,只需修改编译选项DebugDLL/ReleasdDLL即可。 FFmpeg 是一个开源项目。 大多数国产软件已经踏上了FFmpeg的耻辱。 没办法,音视频只是开源项目的一大集合NDK编译ffmpeg源码NDK编译ffmpeg源码,很多软件包编译ffmpeg lib后的dll,例如:

腾讯会议

它没有具体指这两个项目。 99%的音视频项目都应该使用ffmpeg,比如视频客户端优酷、爱奇艺、腾讯视频、格式工厂、QQ、微信、钉钉等。

当然,开发时如果需要265、vpx支持也是可以的,开发时带上对应的lib即可,如下图:

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 NDK编译ffmpeg源码-在vs2019中将ffmpeg源码编译成静态库和动态库【完整步骤,个人测试可行】 https://www.wkzy.net/game/189315.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务