我第一次尝试在 Ubuntu 上使用 ffmpeg 进行编程。非语法看起来有点乱,但这和 libavformat、libavcodec 是一样的,对吧?
我可以编译并运行一个在 mp3 文件上调用 avformat_open_input
的程序,显然成功了,现在我试图从中获取一些信息。
首先我想调用 avcodec_get_name在 AVFormatContext 的 audio_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 上查看的版本相对应,后者应该是过时的,但事实似乎恰恰相反。
有人可以告诉我吗
- 对于 a) ubuntu 库和 b) 最新的 GitHub,我应该使用什么 API 文档?
- 如果我根据最新源代码进行构建,我是否必须静态链接才能分发它?
- 如果我想动态链接并针对提供的 Ubuntu header 进行构建,如果 avocodec_get_name 不可用,如何获取给定编解码器的名称?
最佳答案
如果您在 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 来说是有效的做法。没有。您可以使用您的应用程序构建共享和分发 .so 动态链接库。然后,如果您修改了 ffmpeg 源代码,则只需分发它,而不必分发您的源代码。 More info.我不是律师,这不是法律建议。
我相信这个问题已经在 1 中得到了回答。
关于c - avcodec_get_name 在 Ubuntu libavcodec 中不可用,我应该使用什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23560748/