首页 > 解决方案 > ffmpeg 如何使用 AV_SAMPLE_FMT_FLT 从 AVFrame 获取 PCM 浮点数

问题描述

我有一个通过解码器获得的 AVFrame,其格式为AVSampleFormat::AV_SAMPLE_FMT_FLT. 我的问题是我想转换存储在里面的数据

avFrame->data; // returns uint8_t *

到 [-1, +1] 之间的浮点数组。我看到avFrame->data;返回uint8_t *如何使用它来获取音频每个通道的浮点 pcm 数据?

我尝试了以下方法:

auto *floatArrPtr = (float *)(avResampledDecFrame->data[0]);

    for (int i = 0; i < avResampledDecFrame->nb_samples; i++) {
        // TODO: store interleaved floats somewhere
        floatArrPtr++;
    }

但我不确定这是否是获取数据的正确方法

标签: ffmpeg

解决方案


auto *floatArrPtr = (float *)(avResampledDecFrame->data[0]);

    for (int i = 0; i < avResampledDecFrame->nb_samples * avResampledDecFrame->channels; i++) {
        // TODO: do as you please with data
        floatArrPtr[i];
    }

推荐阅读