当前位置: 首页 > news >正文

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在同一目录

      3. 按照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下; 

      4. 有些项目有汇编代码需要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,执行结果如下图所示:

      5. 使用vs2022打开FFmpeg/SMP/ffmpeg_deps.sln,47个项目均加载成功 ,如下图所示:

      6. 可选择编译静态库/动态库,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"

ffmpegd.exe -list_devices true -f dshow -i dummy

 

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

ffplayd.exe -i abc.mp4

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

ffprobed.exe abc.mp4

      8. 新建一个test_ffmpeg项目,参考源码中doc/examples中示例代码:设置断点后,即可进入源码,如下图所示:

 

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

http://www.lryc.cn/news/136037.html

相关文章:

  • 【tkinter 专栏】菜单组件
  • 【LeetCode-经典面试150题-day10】
  • Transformer在医学影像中的应用综述-分类
  • 新服务器基本环境下载conda + docker + docker-compose + git
  • Matlab论文插图绘制模板第108期—特征渲染的标签散点图
  • 设计模式之中介者模式(Mediator)的C++实现
  • css弹性布局的方式
  • 阿里云源 Python、npm、git、goproxy
  • 微服务架构1.0
  • iOS开发Swift-基础部分
  • 【LeetCode-经典面试150题-day11】
  • 深度学习入门(三):卷积神经网络(CNN)
  • 网站是如何识别网络爬虫的?
  • TP-Link 智能灯泡缺陷能让黑客窃取用户 WiFi 密码
  • 接口测试,如何测试?
  • React源码解析18(11)------ 实现多次setState的批处理
  • 评测凯迪仕K70「千里眼」智能锁:不忘安全初心,便捷体验更上一层
  • mysql数据库root密码遗忘后,修改root密码
  • 网络安全(黑客)快速入门~
  • 华为OD机试 - 数字颠倒(Java 2023 B卷 100分)
  • leetcode做题笔记87扰乱字符串
  • 第一章 初识Linux(含VMware安装Ubuntu、CentOS、Windows、FinalShell、快照)
  • MATLAB算法实战应用案例精讲-【图像处理】OCR识别方法-CRNN
  • 无涯教程-PHP - preg_grep()函数
  • 【Linux】Nginx解决跨域问题
  • 无涯教程-PHP - preg_split()函数
  • B. Spreadsheets
  • matlab面向对象
  • 01、Cannot resolve MVC View ‘xxxxx前端页面‘
  • 时空智友企业流程化管控系统文件上传漏洞复现