基于FFmpeg的视频播放器之七:音频解码

Posted 草上爬

tags:

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

一.流程

 音频解码的流程和视频解码几乎一样,最大的区别是解码后需要进行重采样。因为解码出的AVSampleFormat格式是AV_SAMPLE_FMT_FLTP(float, planar),该格式无法直接使用SDL进行播放,需要转换成SDL支持的AV_SAMPLE_FMT_S16(signed 16 bits)格式。关于重采样,详见下篇博客。

1.avcodec_find_decoder

提供两种方式查找解码器,通过codecId查找avcodec_find_decoder与通过名字查找avcodec_find_decoder_by_name,这里使用的是AVCodec *avcodec_find_decoder(enum AVCodecID id)
这个ID号从哪里获取呢?就像之前我们解封装之后,可以发现我们的AVStream里面其实是有一个codecID, 那个ID号就是我们要用到的解码器的ID号。当然如果本身知道格式的ID号,也可以直接传进去(一般我们用h264,那这个codecID就是27)。如果找到解码器,然后返回该解码器AVCodec,如果没找到则返回nullptr

2.avcodec_open2

int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
该函数用于初始化 一个音视频编解码器的AVCodecContext,所做的工作如下所示:
(1)为各种结构体分配内存(通过各种av_mal

以上是关于基于FFmpeg的视频播放器之七:音频解码的主要内容,如果未能解决你的问题,请参考以下文章

QT软件开发-基于FFMPEG设计视频播放器-解码音频

FFmpeg之ffplay源码简要分析

FFmpeg之ffplay源码简要分析

QT软件开发-基于FFMPEG设计视频播放器-支持软解与硬解

QT软件开发-基于FFMPEG设计视频播放器-支持软解与硬解

(四)Android通过ffmpeg解码音频