使用FFMpeg获取样本总数

时间:2016-06-21 03:28:22

标签: c++ c audio ffmpeg

目前我的应用程序基于while-realloc循环读取音频文件:

// Pseudocode
float data* = nullptr;
int size = 0;
AVFrame* frame;
while(readFrame(formatContext, frame))
{
    data = realloc(data, size + frame.nSamples);
    size += frame.nSamples;
    /* Read frame samples into data */
}

有没有办法在开始时获取流中的样本总数?我希望能够使用new[]而不是malloc来创建数组。

1 个答案:

答案 0 :(得分:0)

供参考,请在此处回答: FFmpeg: How to estimate number of samples in audio stream?

我在代码中使用了以下内容:

int total_samples = (int) ((format_context->duration / (float) AV_TIME_BASE) * SAMPLE_RATE * NUMBER_CHANNELS);

注意:我的测试显示此计算很可能会超过实际找到的样本数量,因此请确保在代码中对此进行补偿。我将所有剩余的“未设置”样本设置为零。