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

相关推荐
橘子味的茶二17 小时前
ffmpeg内存模型
ffmpeg
TPCloud17 小时前
windows 11编译安装ffmpeg(包含ffplay)
windows·ffmpeg·源码安装·mysys
runing_an_min1 天前
ffmpeg视频滤镜:缓入缓出-fade
ffmpeg·音视频·fade·缓出·缓入
ssslar2 天前
FFMPEG录屏(22)--- Linux 下基于X11枚举所有显示屏,并获取大小和截图等信息
linux·运维·ffmpeg
MonkeyKing_sunyuhua2 天前
FFmpeg 怎么裁剪m4a的音频,从一个时间点开始,裁剪15秒钟的视频
ffmpeg·音视频
DO_Community2 天前
教程:FFmpeg结合GPU实现720p至4K视频转换
ffmpeg·音视频
x66ccff2 天前
使用NVIDIA GPU加速FFmpeg视频压制:完全指南
ffmpeg·音视频
冷眼Σ(-᷅_-᷄๑)3 天前
如何使用ffmpeg命令行进行录屏
ffmpeg
Lary_Rock3 天前
ubuntu22.04 安装ffmpeg
ffmpeg
m0_623171553 天前
Windows搭建流媒体服务并使用ffmpeg推流播放rtsp和rtmp流
windows·ffmpeg