使用 FFmpeg 加载 G.729 解码器时出现问题 API
Problems loading G.729 decoder with FFmpeg API
我使用 FFmpeg API 构建了一个 class 来解码多个音频文件(mp3、ogg、G.729 等)并将它们作为原始音频数据加载到数据结构中。现在例如当我 运行 以下代码时:
codec = avcodec_find_decoder(AV_CODEC_ID_G729);
if (codec == NULL){
printf("Codec not found");
exit(1);
}
程序确实会输出错误消息,但如果我加载 mp3 或 ogg 编解码器,则没有问题。
所以为了仔细检查我在终端 ffmpeg -decoders
中执行以查看是否支持解码器(我也在网上检查过)和输出:
A....D g729 G.729
我需要 G.729 的解码器。我有什么遗漏或做错了什么吗?有没有不同的方式来加载这个解码器?任何建议将不胜感激。
在Debian系统上安装的FFmpeg版本是2.7.1
API 使用示例:https://www.ffmpeg.org/doxygen/2.7/decoding_encoding_8c-example.html
好的,鉴于原始评论顺序,我尝试了我能想到的最简单的例子:
#include "libavcodec/avcodec.h"
int main() {
avcodec_register_all();
AVCodec *codec = avcodec_find_decoder(AV_CODEC_ID_G729);
if (!codec) {
fprintf(stderr, "Codec not found\n");
exit(1);
}
fprintf(stderr, "Codec found\n");
return 0;
}
并根据我本地的 ffmpeg 树编译它,并且工作正常:
$ /tmp/x
Codec found
所以,在您的具体情况下一定发生了一些奇怪的事情。您能否提供更多信息,例如您如何编译自编译的 ffmpeg 树(特别是您的配置参数,以及 "grep 729 config.h",您如何尝试 运行 的完整示例代码你的一段代码(它本身不会 运行 因为它缺少 avcodec_register_all(),但是因为你提到了 api_example 我假设你的完整代码没有这个问题,否则 mp3/ogg 将不起作用),并且编译器行用于 compile/link 它针对您的 ffmpeg 版本。
我使用 FFmpeg API 构建了一个 class 来解码多个音频文件(mp3、ogg、G.729 等)并将它们作为原始音频数据加载到数据结构中。现在例如当我 运行 以下代码时:
codec = avcodec_find_decoder(AV_CODEC_ID_G729);
if (codec == NULL){
printf("Codec not found");
exit(1);
}
程序确实会输出错误消息,但如果我加载 mp3 或 ogg 编解码器,则没有问题。
所以为了仔细检查我在终端 ffmpeg -decoders
中执行以查看是否支持解码器(我也在网上检查过)和输出:
A....D g729 G.729
我需要 G.729 的解码器。我有什么遗漏或做错了什么吗?有没有不同的方式来加载这个解码器?任何建议将不胜感激。
在Debian系统上安装的FFmpeg版本是2.7.1
API 使用示例:https://www.ffmpeg.org/doxygen/2.7/decoding_encoding_8c-example.html
好的,鉴于原始评论顺序,我尝试了我能想到的最简单的例子:
#include "libavcodec/avcodec.h"
int main() {
avcodec_register_all();
AVCodec *codec = avcodec_find_decoder(AV_CODEC_ID_G729);
if (!codec) {
fprintf(stderr, "Codec not found\n");
exit(1);
}
fprintf(stderr, "Codec found\n");
return 0;
}
并根据我本地的 ffmpeg 树编译它,并且工作正常:
$ /tmp/x
Codec found
所以,在您的具体情况下一定发生了一些奇怪的事情。您能否提供更多信息,例如您如何编译自编译的 ffmpeg 树(特别是您的配置参数,以及 "grep 729 config.h",您如何尝试 运行 的完整示例代码你的一段代码(它本身不会 运行 因为它缺少 avcodec_register_all(),但是因为你提到了 api_example 我假设你的完整代码没有这个问题,否则 mp3/ogg 将不起作用),并且编译器行用于 compile/link 它针对您的 ffmpeg 版本。