用FFmpeg API加载G.729解码器的问题

Problems loading G.729 decoder with FFmpeg API

本文关键字:解码器 问题 FFmpeg API 加载      更新时间:2023-10-16

我使用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

好的,那么给定原始注释序列,我尝试了我能想到的最简单的示例:

#include "libavcodec/avcodec.h"
int main() {
    avcodec_register_all();
    AVCodec *codec = avcodec_find_decoder(AV_CODEC_ID_G729);
    if (!codec) {
        fprintf(stderr, "Codec not foundn");
        exit(1);
    }
    fprintf(stderr, "Codec foundn");
    return 0;
}

并针对我的本地ffmpeg树编译它,并且运行良好:

$ /tmp/x
Codec found

所以,在你的特定情况下一定发生了一些奇怪的事情。你能提供更多的信息,例如你如何编译你的自编译的ffmpeg树(特别是,你的配置参数,也做"grep 729 config.h",你如何试图运行你的代码的完整示例代码(它不会自己运行,因为它缺少avcodec_register_all(),但因为你提到api_example我假设你的完整代码没有这个问题,否则mp3/ogg将不起作用),和编译器行用来编译/链接它到你的ffmpeg版本。