首先学习一个小例子,参考雷神博客《最简单的基于FFMPEG + SDL的音频播放器ver2》。 对于一个刚开始学习的音视频小白,边看例子边学习进步应该是非常快的。所以我参考雷神的音频播放器,自己写一个一个解码音频并将数据写入到pcm文件的小例子,通过例子学习才是能够理解最深刻以及学习最快的。
首先看一下代码:
1 |
|
主要步骤如下:
使用av_register_all() 注册编解码器
申请AVFormatContext()作为操作的上下文线索
使用avformat_open_input()打开输入信息
使用avformat_find_stream_info()找到文件的流信息
使用av_dump_format()为AVFormatContext中得streams填上正确信息
找到AVFormatContext中得音频信息流索引
通过AVFormatContext找到对应的解码器环境AVCodecContext
通过avcodec_find_decoder()和AVCodecContext找到对应的解码器
使用avcodec_open2()设置解码环境并打开解码器
使用av_packet_alloc()和av_init_packet()初始化AVPacket
初始化 SwrContext并设置音频输出参数(频率,声道,采样格式,采样率声道布局等)
使用av_read_frame()读取每一个AVPacket,判断每一个AVPacket是否是audio stream如果是就使用avcodec_decode_audio4解码每一帧,并使用swr_convert()将每一帧的数据转换为uint8_t的buff并将其写入到文件中
释放所申请的所有资源