Win11+ VS2022编译 FFmpeg6.0 静态库
2023-8-17
| 2023-8-21
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password

编译前言

编译作为自己持有的稳定版本 用来练习
网上有使用cygwin版本,在把ffmpeg作为静态库依赖的时候要添加iconv等其他的库,非常麻烦,有很长的打包链条,编译出来的库不能独自成军。
网上其他的编译环境也太杂太乱了,目前有个开源项目致力解决ffmpeg编译的问题,暂时拿来用,如果这个项目不维护或者坏了,再考虑其他。
 

为什么编译ffmpeg?

编译作为自己持有的稳定版本 用来练习ffmpeg的一些方法,音视频同步等操作。

前期准备

使用github 上 开源项目的解决方案编译 ShiftMediaProject

环境配置

先创建代码目录,作者建议的。
进入source目录打开git bash 克隆代码
notion image
这里因为我已经git 拉到本地过了,所以报错,不影响。

ffmpeg外部库

代码拉取完毕后 ,如果一切顺利,/vs2022/source/FFmpeg/SMP目录可以查看readme.txt,里面介绍了如何编译配置整个项目,包括外部库:x264、x264、vpx等,可以使用脚本下载,路径
vs2022\\source\\FFmpeg\\SMP\\project_get_dependencies.bat,感兴趣可以看一下他这个bash脚本,它会按照脚本中配置的外部库名字
按顺序
拉取。如果万一下载失败 ,可以根据输出日志跟脚本内容排查问题,手动下载或者重新运行脚本。运行情况如下:
notion image
好了经过漫长的下载与数次执行./project_get_dependencies.bat
,所有的库也都下下来了。
notion image

额外的编译选项-for渲染

根据readme.txt先在/vs2022/msvc/下创建include目录,include里创建glAMF两个目录,用来放openglnv-codecAMF的头文件。
notion image

opengl (需要glext)

  • a. OpenGL-Registry\\api\\GL\\ 里的glext.hwglext.h放入 /vs2022/msvc/include/gl/
  • b. EGL-Registry\\api\\KHR 将KHR整个文件夹放入/vs2022/msvc/include/

ffnvcodec (需要nv-codec-headers)

  • a. nv-codec-headers\\include里的ffnvcodec目录复制到/vs2022/msvc/include

AMF sdk头文件

  • a. AMF\\amf\\public\\include里的两个文件夹复制到/vs2022/msvc/include/AMF

编译工具链

配置 NASMYASM,这两个是汇编的编译工具
nasm
yasm
同样我们查看脚本可知它会根据不同VS的大版本去做适配安装,我们的是VS2022,vs17,如果有报错可以往这方面去排查。 执行安装
notion image

开始编译

到这一步,所有的准备工作基本完成,打开工程文件
notion image

step1. 选择编译类型 Debug/Release Dll/lib

这里我们先选择的Debug,因为只是练习用,需要调试什么的。 接下来就是直接生成了,生成时间稍微有点长,我这里10分钟左右,而且中间果不其然出现了错误。 让我们来分析一下: 在libavcodec 编译的过程中提示找不到好几个宏 都是NV_ENC_PARAMS打头的,我们找一下他的同类型,大概是这么一个枚举类型
notion image
,这里我们替换一下ffnvcode的版本,退回到5月份的版本,跟ffmpeg6r1保持一致
notion image
重新生成就能成功了。
notion image
lib库在`/msvc/lib/x64下面,我们可以看到生成的各种lib库
notion image

step2. 打包SDK

把上述生成的include、lib打包带走,直接放到应用的项目下就可以直接用了
notion image

验证

notion image
结果如下,我们在这里输出了ffmpeg的编译配置,可以看到 其他的一些基础库都是enable的状态,说明都编进去了,本次编译宣告成功。如需要在项目中使用到这些外部库诸如x265之类的,在项目中加上这些库的lib连接就可以。
notion image

结尾

如果上述方式失效了,要回到手动编译配置的老路子,脏路子,也不用慌,相信经过这些配置编译的历程,作为老手,相信诸君也能轻松应对,处变不惊,将正确的东西放到正确的篮子里面。
最后,感谢你的阅读,若能带来些许启发就更好了,与君共勉。

参考链接:

技术分享
  • 技术研究
  • FFMpeg
  • 编译
  • SDP协议理解RTP的H264载荷分析
    • Twikoo
    • Giscus
    目录