ffmpeg aac转pcm

本文详细介绍使用FFmpeg从AAC编码格式解码为PCM原始音频数据的过程。文章按步骤解析了创建输入文件、查找音频流、设置解码器、重采样等关键环节,并提供了完整的代码实现。

我们首先明确一点aac是编码后的数据,pcm是原始数据。所以我们也就是要对aac进行解码操作。

我们先上解码的流程图,然后一步一步进行解析。

                                                                       

第一步创建输入文件AVFormatContext

    fmt_ctx = avformat_alloc_context();
    if (fmt_ctx == NULL)
    {
        ret = -1;
        printf("alloc fail");
        goto __ERROR;
    }
    if (avformat_open_input(&fmt_ctx, in_file, NULL, NULL) != 0)
    {
        ret = -1;
        printf("open fail");
        goto __ERROR;
    }

第二步 查找文件相关流,并初始化AVFormatContext中的流信息

 if (avformat_find_stream_info(fmt_ctx, NULL) < 0)
     {
        ret = -1;
        printf("find stream fail");
        goto __ERROR;
    }

    av_dump_format(fmt_ctx, 0, in_file, 0);

avformat_find_stream_info这一步很重要,不然AVFormatContext中的流信息是空的。

 

第三步查找音频流索引和解码器

    int stream_index = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &cod, -1);

这一步我们就可以获得音频流的索引和解码所需要的解码器

 

第四步设置解码器上下文并打开解码器

AVCodecParameters *codecpar = fmt_ctx->streams[stream_index]->codecpar;
    if (!cod)
    {
        ret = -1;
        printf("find codec fail");
        goto __ERROR;
    }
    cod_ctx = avcodec_alloc_context3(cod);
    avcodec_parameters_to_context(cod_ctx, codecpar);
    ret = avcodec_open2(cod_ctx, cod, NULL);
    if (ret < 0)
    {
        printf("can't open codec");
        goto __ERROR;
    }

打开解码器需要解码上下文,解码器上下文的参数我们通过avcodec_parameters_to_context从AVFormatContext对应流的codecpar参数获取

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值