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

时间:2014-05-09 09:11:34

标签: c ubuntu ffmpeg

我试图在Ubuntu上第一次使用ffmpeg进行编程。非中性似乎有点乱,但这与libavformat,libavcodec相同,对吧?

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

首先,我想在avcodec_get_nameaudio_codec_id成员上拨打AVFormatContext,但该名称的功能不会出现在/ usr / include / libav {codec,format中的任何标头中,UTIL}。

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

令人困惑的是,this documentation省略了avcodec_get_class而this documentation省略了avcodec_get_name。看看网址,前者应该是最新版本,对应于我从GitHub查看的内容,后者应该过时,但反过来似乎是真的。

有人可以告诉我

  1. 我应该使用哪些API文档来a)ubuntu库和b)最新的GitHub?
  2. 如果我构建了最新的源代码,我是否需要静态链接才能分发它?
  3. 如果我想根据提供的Ubuntu标头动态链接和构建,如果avocodec_get_name不可用,如何获取编解码器的名称(如果avocodec_get_name不可用?)

1 个答案:

答案 0 :(得分:2)

  1. 如果在Ubuntu框中运行ffmpeg,您应该会看到随软件包一起安装的库的版本。如果包是理智的,那将是ffmpeg的长期版本(例如1.1.x)。然后,您可以通过以下方式查找该版本的文档:从ffmpeg repo中检出相应的版本。您还可以找到tarball here附带的文档。 请注意,我不确定您的Ubuntu版本中包含的ffmpeg软件包是真正的ffmpeg还是所谓的ffmpeg的libav分支。如果您对此不了解,请now would be a good time to learn。如果你没有真正的ffmpeg,不幸的是所有的赌注都会被取消。 libav人可能已经删除了avcodec_get_name(),而且你无能为力。另请注意,我刚刚尝试使用ffmpeg的最新(< 2周)旧git checkout编译基于ffmpeg的应用程序,并且我对avcodec_get_name()的使用没有弃用警告。这告诉我,调用avcodec_get_name()是当前ffmpeg的有效做法。

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

  3. 我相信这已在1中得到解答。