c - avcodec_get_name 在 Ubuntu libavcodec 中不可用,我应该使用什么?

标签 c ubuntu ffmpeg

我第一次尝试在 Ubuntu 上使用 ffmpeg 进行编程。非语法看起来有点乱,但这和 libavformat、libavcodec 是一样的,对吧?

我可以编译并运行一个在 mp3 文件上调用 avformat_open_input 的程序,显然成功了,现在我试图从中获取一些信息。

首先我想调用 avcodec_get_nameAVFormatContextaudio_codec_id 成员上但/usr/include/libav{codec,format,util} 中的任何 header 中都没有出现该名称的函数。

我从 GitHub 上查看了最新的 ffmpeg,并将 avcodec.h 与我安装的版本进行了比较。这些文件显然大致相同,但除其他差异外,avcodec_get_name(AVCodecID) 已替换为 avcodec_get_class(void),尽管之间似乎没有任何对应关系两者。

令人困惑的是,this documentation省略 avcodec_get_class 而 this documentation省略 avcodec_get_name。从 url 来看,前者应该是最新版本,与我在 GitHub 上查看的版本相对应,后者应该是过时的,但事实似乎恰恰相反。

有人可以告诉我吗

  1. 对于 a) ubuntu 库和 b) 最新的 GitHub,我应该使用什么 API 文档?
  2. 如果我根据最新源代码进行构建,我是否必须静态链接才能分发它?
  3. 如果我想动态链接并针对提供的 Ubuntu header 进行构建,如果 avocodec_get_name 不可用,如何获取给定编解码器的名称?

最佳答案

  1. 如果您在 Ubuntu 机器上运行 ffmpeg,您应该会看到随软件包一起安装的库的版本。如果包是健全的,它将是 ffmpeg 的长期版本(例如 1.1.x)。然后,您可以通过以下方式找到该版本的文档:从 ffmpeg 存储库中查看相应的版本。您还可以找到 tarball here 中包含的文档。 请注意,我不确定您的 Ubuntu 版本中包含的 ffmpeg 软件包是真正的 ffmpeg 还是所谓的 ffmpeg 的 libav 分支。如果你不知道的话,now would be a good time to learn 。不幸的是,如果您没有真正的 ffmpeg,那么所有的赌注都会失败。 libav 的人可能已经删除了 avcodec_get_name() 并且你对此无能为力。另请注意,我刚刚尝试使用最近(< 2 周)旧的 ffmpeg git checkout 来编译基于 ffmpeg 的应用程序,并且我没有收到关于使用 avcodec_get_name() 的弃用警告。这对我来说,调用 avcodec_get_name() 对于当前 ffmpeg 来说是有效的做法。

  2. 没有。您可以使用您的应用程序构建共享和分发 .so 动态链接库。然后,如果您修改了 ffmpeg 源代码,则只需分发它,而不必分发您的源代码。 More info.我不是律师,这不是法律建议。

  3. 我相信这个问题已经在 1 中得到了回答。

关于c - avcodec_get_name 在 Ubuntu libavcodec 中不可用,我应该使用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23560748/

相关文章:

c - 读取文件并将值保存到结构上时出现问题

networking - 虚拟机可以访问内部网络但不能访问互联网

css - 模糊网站背景的 mp4 视频

video - 有没有办法在 ffmpeg 中使用外部过滤器?

ubuntu - 更新ubuntu内核的问题

ffmpeg - 使用 FFmpeg AutoGen 保存到位图适用于 Windows,但不适用于 Linux

c - sched_setscheduler 是针对所有线程还是主线程?

C 将文件中的数据加载到结构中进行编译,但在运行时崩溃

c - 尝试将文件解析为数组但获得额外的数字

ubuntu - 将 spec 文件转换为 debian