本篇文章用libavcodec API来解码一个音频文件(纯编码的音频文件),将其解码成pcm格式,然后播放。
和之前的解复用解码不一样,由于没有解复用的步骤,需要手动选择解码器ID。读入文件的方式也不一样了,是先把文件读入内存,然后调用av_parser_parse2填充AVPacket的data和size等数据。
分离出来的pcm数据,可以用ffplay命令进行播放,示例如下:
ffplay -f f32le -ac 2 -ar 48000 ./sintel.pcm
参考15.FFmpeg学习笔记 - 解复用和解码(新的解码API)
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
#include <libavutil/imgutils.h>
#include <libavutil/samplefmt.h>
#include <libavutil/timestamp.h>
#define AUDIO_INBUF_SIZE 20480
#define AUDIO_REFILL_THRESH 4096
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame,
FILE *outfile)
{
int i, ch;
int ret, data_size;
/* send the packet with the com