FFmpeg解码音频代码

Posted zuguorui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFmpeg解码音频代码相关的知识,希望对你有一定的参考价值。

工程请访问DecodeTest。用c++写的,使用FFmpeg-4.1.0。比较完善的是OfficalDecodeAudio.cpp,它是我研究了一下ffplay.c的源码得来的。该代码按照统一的44.1kHz、双声道、16位int去解码音频文件。通常的wav、mp3、FLAC、aac、m4a、ogg等文件都可以解码。

既然提到了代码,还是稍微讲解一下。
对于FFmpeg,解码并不是每个AVPacket都能得到一个AVFrame。因此,有时候可能你给了codec一个packet,但codec并不能立马给出一个frame,它需要更多的packet来解码。同样的,也可能存在的情况就是codec已经满了,需要你先读取frame才能继续喂packet。换句话说,有时候多个packet才能得到一个frame,有时候一个packet可以产生多个frame,因此最好是根据api的返回值决定流程。不光是codec,对于重采样SwrContext也是一样的。

运行之前需要按照FFmpeg wiki上面指示的去安装FFmpeg以及相关的依赖。安装FFmpeg有两种方式,一种是使用包安装器去安装,另一种是自己手动编译。我是自己在macOS上手动编译FFmpeg的,不过尽管如此,对于依赖我也是直接使用brew安装的。wiki中有这一篇章,里面详解了如何安装和编译FFmpeg。

以上是关于FFmpeg解码音频代码的主要内容,如果未能解决你的问题,请参考以下文章

iOS利用FFmpeg解码音频数据并播放

FFmpeg进行音频的解码和播放

FFMPEG 音频解码和绘制波形

ffmpeg 音频解码数据为零

FFMPEG 音频封装编码

如何在 Android 中通过 FFmpeg 解码音频