我第一次尝试在Ubuntu上用ffmpeg编程。这个不规则看起来有点混乱,但这和libavformat,libavcodec是一样的,对吧?
我可以编译并运行一个在mp3文件上调用avformat_open_input
的程序,显然是成功的,现在我正试图从中获取一些信息。
首先,我想对avcodec_get_name的audio_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_类,而this documentation忽略avcodec_get_名称。看看这些url,前者应该是最新的版本,与我从GitHub签出的内容相对应,后者应该是过时的,但反过来似乎是正确的。
有人能告诉我吗
我应该为a)ubuntu库和b)GitHub最新版本使用什么API文档?
如果我根据最新的源代码进行构建,是否必须静态链接才能分发它?
如果我想根据提供的Ubuntu头动态链接和构建,那么如果avocodec_get_name不可用,如何根据给定的枚举获取编解码器的名称?
最佳答案
如果在你的Ubuntu盒子上运行ffmpeg
,你应该会看到与包一起安装的库的版本如果包是正常的,它将是ffmpeg(例如1.1.x)的长期版本。然后,您可以通过从ffmpeg repo中签出相应的版本来查找该版本的文档。您还可以找到tarballhere附带的文档。
请注意,我不确定您的Ubuntu版本中包含的ffmpeg包是真正的ffmpeg还是所谓的ffmpeg的libav fork。如果你不知道这个,now would be a good time to learn。如果你没有真正的ffmpeg,不幸的是,所有的赌注都被取消了。libav的人可能已经删除了avcodec_get_name()
,你对此无能为力。另外请注意,我刚刚尝试用最近(avcodec_get_name()的不推荐警告。这表明在当前的ffmpeg中调用avcodec_get_name()
是有效的实践。
不。你可以用你的应用建立共享和分发.so动态链接库。然后,只要修改ffmpeg源代码,就可以分发它,而不必分发源代码。More info.我不是律师,这不是法律建议。
我相信这已经在1中得到了回答。