使用FFmpeg API加载G.729解码器时出现问题

时间:2015-07-17 19:41:31

标签: c++ audio ffmpeg decoding g729

我使用 FFmpeg API构建了一个类来解码多个音频文件(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

1 个答案:

答案 0 :(得分:1)

好的,所以考虑到原始评论序列,我尝试了最简单的例子:

#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将无法工作)和编译器行用于根据你的ffmpeg版本编译/链接它。