我一直在玩https://github.com/FFmpeg/FFmpeg的编译版本。但是,在使用avio_close
关闭打开的流期间,它存在一些问题(关闭它需要很长时间)。
我一直在尝试通过阅读实现来理解可能出了什么问题,但却找不到任何东西。
我想做的是实际拥有一个使用c文件的C ++控制台应用程序,并在运行代码时调试它们(使用断点等)。
很遗憾,我找不到有关如何进行设置的任何信息。仅在新的控制台应用程序中复制文件是不够的。
提前感谢您的任何建议。
编辑:我已经可以看到结束表决。如果此问题不适合该网站,我将其删除。但是请指出正确的发布方向,尽管这是一个普遍的问题,但我认为它很清楚并且已经提供了足够的信息。
Edit2:是的,我不清楚自己在使用什么。
我正在Windows 10上使用Visual Studio Community 2017创建C ++控制台应用程序。
Edit3:
我已经在使用DLL的控制台应用程序中使用源文件的步骤。
Edit4:
我对avio_close
没有任何实际错误,关闭流只是花费太长时间。我在进行设置时发现,设置了fifo_size
参数后,关闭流的速度要快得多,具体取决于设置值的大小。由于fifo_size
与数据包的大小有关,因此这是有道理的,但是我还没有发现此大小在代码中的影响范围。
fifo_size =单位 设置UDP接收循环缓冲区的大小,表示为188个字节的数据包数量。如果未指定,则默认为7 * 4096。
Edit5:我仍然没有找到将开源ffmpeg项目编译成libs,dll和pdbs的方法。我是第一个需要此类文件的人(似乎不现实)吗?
到目前为止,唯一能够提供这些功能的工具是vcpkg
。唯一的问题是它可以编译3.3.3版本,而最新版本是4.0.2。
我试图修改vcpkg\ports\ffmpeg\portfile.cmake
文件以包括ffmpeg的最新版本,但没有构建它。
还有其他建议吗?
答案 0 :(得分:3)
为了使用调试器从源代码调试应用程序,您需要使用一些工具和工作流程。
首先,您需要知道如何构建应用程序。通常可以通过运行以下命令来实现:
$ ./configure
$ make
由于要调试,因此必须设置一些编译器标志,这些标志将指示编译器生成调试信息,调试器将使用这些信息将机器指令与相关的源代码行相关联。在FFmpeg的情况下,你只需要配置commad更改为:
$ ./configure --enable-debug
请查看$ configure --help
来查看所有选项,configure
在该项目中有很好的记录。
运行make
后,您将拥有一个包含调试信息的可执行文件,然后您需要学习如何使用调试器。 gdb
调试器是最常用的调试器,实际上是大多数GUI调试器的后端。有很多有关如何使用gdb的信息和教程,请在Google上搜索gdb tutorial
,然后选择最容易理解的一个。
您需要学习的最相关的任务是如何设置断点,打印变量和堆栈跟踪。
使用像纯gdb这样的命令行界面进行调试具有一些优势,但是即使是老派人士也必须承认GUI派上了用场。因此,作为最后的建议,在您理解并熟悉gdb工作流程之后,您可以搜索GUI调试器或什至是一个完整的IDE,这肯定会使您的生活变得更加轻松。
答案 1 :(得分:0)
您可以使用来自github的开源打包程序vcpkg来构建许多开源项目,包括ffmpeg,而不会遇到任何麻烦。 vcpkg最近也提供了对非Windows平台的支持,请查看。
仅需要Powershell提示符.\vcpkg install ffmpeg
上的一个衬板命令即可。与往常一样,vs控制台项目也可以进行调试。
答案 2 :(得分:0)
我最终使用了vcpkg
。
作为构建此特定的指南(不知道它是否适用于其他开源项目)
1)下载vcpkg并按照README文件中的说明进行安装过程
2)转到
.. \ vcpkg \ ports \ ffmpeg \
并编辑portfile.cmake
文件。
默认情况下,vcpkg将构建ffmpeg的3.3.3版本,并使用
vcpkg_download_distfile(ARCHIVE
URLS "http://ffmpeg.org/releases/ffmpeg-3.3.3.tar.bz2"
FILENAME "ffmpeg-3.3.3.tar.bz2"
SHA512 1cc63bf73356f4e618c0d3572a216bdf5689f10deff56b4262f6d740b0bee5a4b3eac234f45fca3d4d2da77903a507b4fba725b76d2d2070f31b6dae9e7a2dab
)
将其更改为
vcpkg_download_distfile(ARCHIVE
URLS "http://ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2"
FILENAME "ffmpeg-4.0.2.tar.bz2"
SHA512 92a3bedcd070df72b26dbe3ebf4a3faea0a02289fbefdb6a6c73d65801cf60a7e11cd832d29ab46b7749a1ffd0a31505cf75bb46bd01ea06423b454ca04e9b7b
)
这将下载最新的ffmpeg版本。 为了使构建正常工作,您还必须注释以下行:
if("ffserver" IN_LIST FEATURES)
set(OPTIONS "${OPTIONS} --enable-ffserver")
else()
set(OPTIONS "${OPTIONS} --disable-ffserver")
endif()
我认为自版本3.3.3起,此选项已被删除/禁用,并且不再起作用。
3)运行(需要一段时间)
。\ vcpkg安装ffmpeg
您现在应该拥有FFMPEG的4.0.2调试和发行版本,其中包含DLL,PDB,lib和包含文件夹。
不能完全确定此过程是否正确,但是我的项目运行正常,现在可以对其进行调试。