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

标签 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

最佳答案

好的,鉴于原始评论顺序,我尝试了我能想到的最简单的例子:

#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 版本编译/链接它。

关于c++ - 使用 FFmpeg API 加载 G.729 解码器时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31483533/

相关文章:

C++ 使用两个附加堆栈反转堆栈

c# - 如何播放要在设定的延迟下重复播放的音频片段阵列?

c - 如何调用需要一个指向缓冲区的双指针的 Rust 函数

video - ffmpeg 过滤器的可变大小

c++ - 如何在 CMake 项目中使用外部 DLL

c++ - 我可以通过它的字节指定一个整数常量吗?

java - 如何获取/调用资源文件中.wav的路径

video - 如何使用 ffmpeg 修剪大视频?

java - NDK : Does GetByteArrayElements copy data from Java to C++?

encoding - 流短声音文件