目录
前言
由于项目需求,需要开发一个私有播放器,所以就无法使用ffmpeg通用的取流接口:avformat_open_input()(埋下祸根)其中遇上了一个坑在创建音频解码器的时候返回失败;反复对比视频解码器的创建流程,按理说不应出现问题才对。
解决过程
查阅资料根本原因:主要是由于AVCodecContext中赋值的不匹配,主要设置参数:codec_type、sample_fmt、channel_layout、sample_rate、channels。
最终,经过多方探索终于找到了问题所在:对比网上一些解码播放音频的demo,进入调试可以发现,在调用avcodec_open2()之前,AVCodecContext 结构体已经保存有音频的sample_rate及channels这两个变量已经被赋值了;对比我自己的调用了avcodec_alloc_context3()之后AVCodecContext 结构体里面这两个值都是为空的。所以,尝试着在调用avcodec_alloc_context3()之后对上述两个变量进行手动赋值;果然,avcode_open2()能够正确执行返回了。
其中创建解码器的常规流程如下图所示:


在开发私有播放器过程中,遇到音频解码器创建失败的问题。深入分析发现,音频解码相较于视频解码,额外需要sample_rate和channels等参数。通过手动赋值这些关键参数,成功解决了avcodec_open2()的返回失败问题。
最低0.47元/天 解锁文章
2956

被折叠的 条评论
为什么被折叠?



