基于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设计视频播放器-支持软解与硬解