1、VS2019编译ffmpeg源码

1、ffmpeg代码克隆
    在clone代码之前,创建代码目录,例如创建ffmpeg_vs2019目录,在该目录里再创建两个目录,msvc,source
    进入source目录,打开git bash克隆代码
  项目地址: https://github.com/ShiftMediaProject/FFmpeg
  代码克隆
git clone https://github.com/ShiftMediaProject/FFmpeg.git
或者
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
     1、VS2019编译ffmpeg源码_第1张图片
    clone完毕大概355M,如果网络环境不好,可能会clone failed。
2、ffmpeg依赖库下载
    ffmpeg clone结束后,在ffmpeg_vs2019\source\FFmpeg\SMP目录有个readme.txt介绍了如何编译配置整个项目,比如需要x264、265、vpx等开源,可以手动去ShiftMediaProject里clone, 或者运行脚本clone, 建议使用脚本clone,比较节省时间,方法如下:
  在路径 ffmpeg_vs2019\source\FFmpeg\SMP 里打开git bash, 执行 ./project_get_dependencies.bat
    失败的状态
     1、VS2019编译ffmpeg源码_第2张图片
    如果网络不好,第一次可能clone失败,可以继续执行该命令
   1、VS2019编译ffmpeg源码_第3张图片
     1、VS2019编译ffmpeg源码_第4张图片
3、其它文件下载
  先在ffmpeg_vs2019/msvc里创建include目录,include里创建gl、AMF这两个目录,待会儿需要存放opengl、egl、nv-codec、AMF的头文件。
(1)opengl头文件
  opengl仓库  https://github.com/KhronosGroup/OpenGL-Registry
  代码克隆:
git clone https://github.com/KhronosGroup/OpenGL-Registry.git
1、VS2019编译ffmpeg源码_第5张图片
找到OpenGL-Registry\api\GL里的glext.h 和 wglext.h放到目录:ffmpeg_vs2019\msvc\include\gl
(2)EGL头文件
  EGL仓库  GitHub - KhronosGroup/EGL-Registry: EGL API and Extension Registry
  代码克隆:
git clone https://github.com/KhronosGroup/EGL-Registry.git
1、VS2019编译ffmpeg源码_第6张图片
找到EGL-Registry\api\KHR,复制KHR目录到ffmpeg_vs2019\msvc\include
(3)nv-codec 头文件
    仓库: https://github.com/FFmpeg/nv-codec-headers
git clone https://github.com/FFmpeg/nv-codec-headers.git
1、VS2019编译ffmpeg源码_第7张图片
将nv-codec-headers\include里的ffnvcodec目录复制到ffmpeg_vs2019\msvc\include
(4)AMF 头文件
  AMP仓库  https://github.com/GPUOpen-LibrariesAndSDKs/AMF
  clone代码
git clone https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git
访问失败
1、VS2019编译ffmpeg源码_第8张图片
访问成功
将AMF\amf\public\include里的两个文件夹复制到ffmpeg_vs2019\msvc\include\AMF
4、配置NASM、YASM
NASM下载地址:
Release 0.9 · ShiftMediaProject/VSNASM · GitHub
1、VS2019编译ffmpeg源码_第9张图片
YASM下载地址:
   Releases · ShiftMediaProject/VSYASM · GitHub
1、VS2019编译ffmpeg源码_第10张图片
将下载的VSNASM和VSYASM解压后放到 ffmpeg_vs2019\msvc目录。
  找到vs2019的命令行工具,右键管理员运行
1、VS2019编译ffmpeg源码_第11张图片
cd到相应的路径,执行安装脚本,如下图
1、VS2019编译ffmpeg源码_第12张图片
5、开始编译ffmpeg
  做好以上步骤后,用vs2019打开SMP目录的ffmpeg_deps.sln,一个47个项目,该工程对静态库、动态库、win32、x64都做了配置,很方便,如下图:
1、VS2019编译ffmpeg源码_第13张图片
这几项需要说明下,Debug,Release这两项编译出来的只有include和lib,就没有dll文件,其余3项编译出来的都是有dll文件的
一般的做法就是不需要dll,直接使用include和lib文件就好了,所以这里就只需要选择debug和release
1、VS2019编译ffmpeg源码_第14张图片
lib库路径:msvc/lib/x64
1、VS2019编译ffmpeg源码_第15张图片
debug生成的lib是带d的,release生成的lib是不带d的
头文件路径:msvc/include
1、VS2019编译ffmpeg源码_第16张图片
可以将上面路径的lib、include直接拷贝走,当作sdk
生成的dll文件路径:msvc/bin/x64
1、VS2019编译ffmpeg源码_第17张图片
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;
}
运行结果
7、哪些项目用到了ffmpeg
  除了使用lib开发,也可以用dll, 修改编译选项位DebugDLL/ReleasdDLL即可,FFmpeg是开源项目,国内大部分的软件都进入了FFmpeg耻辱柱,没办法,音视频仅此一个伟大的集大成开源项目,很多软件都是编译ffmpeg lib后,自己封装dll,例如:
  腾讯会议
     1、VS2019编译ffmpeg源码_第18张图片
    也不是专指这两个项目,99%的音视频项目应该都会用到ffmpeg, 
    例如视频客户端优酷、爱奇艺、腾讯视频,格式工厂、QQ、微信、钉钉等。
    当然在开发时,如果需要265,vpx的支持也是可以的,在开发时带上相应的lib即可,如下图:
         1、VS2019编译ffmpeg源码_第19张图片
8、设置环境变量
    ffmpeg_vs2019\msvc\bin\x64
     1、VS2019编译ffmpeg源码_第20张图片
    主要是便于直接使用ffmpeg命令行

你可能感兴趣的:(音视频,ffmpeg,c++)