Windows10上VS2022单步调试FFmpeg 4.2源码

之前在 https://blog.csdn.net/fengbingchun/article/details/103735560 介绍过通过VS2017单步调试FFmpeg源码的方法,这里在Windows10上通过VS2022单步调试FFmpeg 4.2的方法:基于GitHub上ShiftMediaProject/FFmpeg项目,下面对编译过程进行说明:

  1. 从https://github.com/ShiftMediaProject/FFmpeg clone项目到E:/FFmpeg/4.2目录下,执行git checkout 4.2.r94368 切换到tag 4.2.r94368;注意:不要直接从https://github.com/ShiftMediaProject/FFmpeg/releases/tag/4.2.r94368 下载FFmpeg-4.2.r94368.tar.gz,这样下载下来的不能执行project_get_dependencies.bat;

  2. 下载依赖项,执行SMP目录下的project_get_dependencies.bat,执行结果如下,可能需要等待较长时间,而且可能需要执行多次,直到所有的依赖项全部clone下来,注意:clone的项目在E:/FFmpeg/4.2目录下,与clone FFmpeg在同一目录

  1. 按照SMP/readme.txt中的说明,下载额外依赖文件,手动创建新目录:E:/FFmpeg/msvc:

(1). 从https://www.khronos.org/registry/OpenGL/index_gl.php 下载glext.h和wglext.h,将其保存到新创建的目录msvc/include/gl下;

(2). 从https://www.khronos.org/registry/OpenGL/index_gl.php 下载khrplatform.h,将其保存到新创建的目录msvc/include/KHR下;

(3). 从https://github.com/FFmpeg/nv-codec-headers 下载include/ffnvcodec,将ffnvcodec整个目录拷贝到目录msvc/include下;注意:不能使用最新的master,要使用tag为n9.1.23.1的版本 ;

(4). 从https://github.com/GPUOpen-LibrariesAndSDKs/AMF 下载amf/public/include,将include下的内容保存到新创建的目录msvc/include/AMF下;

  1. 有些项目有汇编代码需要ASM编译,如libavutil需要NASM,依赖项libvpx需要YASM:

(1). 从https://github.com/ShiftMediaProject/VSNASM clone VSNASM,以管理员身份运行install_script.bat,执行结果如下图所示:本机有vs2019和vs2022两个版本

(2). 从https://github.com/ShiftMediaProject/VSYASM clone VSYASM,以管理员身份运行install_script.bat,执行结果如下图所示:

  1. 使用vs2022打开FFmpeg/SMP/ffmpeg_deps.sln,47个项目均加载成功 ,如下图所示:
  1. 可选择编译静态库/动态库,Debug/Release,x86/x64:这里选择x64 动态库 Debug,选中解决方案"ffmpeg_deps",点击重新生成解决方案,解决编译error,最终执行结果如下图所示:

(1).依赖nasm的项目编译不过,原因是在C:\Program Files\Microsoft Visual Studio\2022\Community\VC目录下不知什么原因并没有nasm.exe,只有yasm.exe,解决方法:从https://www.nasm.us/pub/nasm/releasebuilds/2.16.01/win64/ 下载nasm-2.16.01-installer-x64.exe,安装后,将安装目录下的nasm.exe拷贝到C:\Program Files\Microsoft Visual Studio\2022\Community\VC目录下即可;

(2).编译libavcodec项目时,会报error C2065: "NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ"等未声明的标识符,原因是从https://github.com/FFmpeg/nv-codec-headers 下载的最新的master分支的code已不兼容FFmpeg 4.2版本,使用FFmpeg/nv-codec-headers tag为n9.1.23.1即可解决;

(3).libvpxdec.obj : error LNK2001: 无法解析的外部符号 vpx_codec_vp8_dx_algo:解决方法:libvpx不使用最新的master分支,使用tag v1.8.1-1,并将libvpx的工程更新到vs2022,重新编译即可解决

成功编译后:E:\FFmpeg\msvc\include目录下存放头文件;E:\FFmpeg\msvc\lib\x64目录下存放静态库;E:\FFmpeg\msvc\bin\x64目录下存放动态库和可执行文件;

7.验证可执行文件的正确性:

(1).验证ffmpegd.exe:获取视频设备名,执行如下命令,执行结果如下图所示:检测到的视频设备名为"Integrated Webcam"

bash 复制代码
ffmpegd.exe -list_devices true -f dshow -i dummy

(2).验证ffplayed.exe:播放一个编码格式为h264,像素格式为bgr24,帧大小为640*360的文件,执行如下命令,执行结果如下图所示:可正常播放

bash 复制代码
ffplayd.exe -i abc.mp4

(3).验证ffprobed.exe:查看abc.mp4视频文件信息,执行如下命令,执行结果如下图所示:可正常显示视频文件信息

bash 复制代码
ffprobed.exe abc.mp4
  1. 新建一个test_ffmpeg项目,参考源码中doc/examples中示例代码:设置断点后,即可进入源码,如下图所示:

GitHub:https://github.com/fengbingchun/OpenCV_Test

相关推荐
白搞电子16 小时前
ESP-Mosaico 音乐驱动动画:节拍检测、RMS 包络与预制动作编排
ffmpeg
FlightYe18 小时前
视界原理之3D视频(三):解码和显示
android·linux·3d·ffmpeg·音视频·android runtime
FlightYe19 小时前
linux系统编程(十七):内存管理基础
android·linux·ffmpeg·音视频·android runtime
信可维20 小时前
用无头 Chrome 逐屏截图 + ffmpeg 拼竖版视频:1080×1920 全流程与 4 个坑
chrome·ffmpeg·音视频
FlightYe21 小时前
音视频修炼之容器与协议(二):HLS和DASH流媒体
android·linux·ffmpeg·音视频·android runtime·dash
GreenHandBruce1 天前
基于Qt 6.12.0 + FFmpeg 9.0.2的4k视频播放器
qt·ffmpeg·音视频
Android系统攻城狮2 天前
Linux FFmpeg深度解析之avformat_open_input调用流程与实战(一)
linux·运维·ffmpeg·车载音视频·ffmpeg音视频·音视频进阶手册
开开心心就好2 天前
本地文件搜索工具,双击Ctrl就能呼出搜索
java·服务器·前端·支持向量机·ffmpeg·音视频·模拟退火算法
OH_TPC4 天前
【鸿蒙优选三方库】@ohos/ffmpeg-kit:把 FFmpeg 的全部能量带进鸿蒙
华为·ffmpeg·harmonyos·鸿蒙
是jin奥4 天前
最新 FFmpeg 安装脚本:Linux x86_64
linux·运维·ffmpeg