请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

编码aac无法播放

问题: 因为ffmpeg命令行操作时, 无法使用libfdk_aac, 但是能使用aac编码器,所以aac编码实战我也是用aac编码器的.
我的代码逻辑是: 采样s16le —重采样----> fltp --------> frame ----------->aac编码器 --------------> aac文件

在采样实战中,我发现录制下来的pcm通过s16le播放的时候是正确的, 所以可以认为格式是s16le.
我通过gdb调试, 发现aac编码器接受的采样率codec->supported_samplerates=96000, 格式codec->sample_fmt=AV_SAMPLE_FMT_FLTP,
所以我就把44100/s16le的pcm重采样成96000/fltp.
图片描述
然后把输入到aac编码器中的frame也相应的设置成96000/fltp.
图片描述
分配resample的输入输出缓冲区时也相应设置
图片描述
最后开始编码, 把编码的数据写入文件.

疑问:

  1. FLTP是planr, 如果是双声道, 内存布局是LLLLLLLRRRRRRR, 分配在frame的frame[0], frame[1], 那resample之后需要把dst_data数据拷贝到frame的各自的索引中的数组吗??
    图片描述
  2. 在av_samples_alloc_array_and_samples中, FLTP是32bit, 需要调整单通道采样个数吗? 调整为4096/2/4 = 512 ???

最后: 因为环境和老师的不一样, 所以编码器也不一样, 导致代码也不一样, 我怀疑就是resample之后的参数和输入到编码器的数据不一致导致的. ,但是运行可以运行播放就不行了

运行结束:
图片描述
播放ffplay audio.acc
图片描述

音视频资料太少了, 比学os还难!! 文章有点长, 老师帮帮忙!!! aac编码如果卡住了,对后续学习有没有影响??

正在回答 回答被采纳积分+3

1回答

李超 2023-11-08 16:23:04

你用ffmpeg 自带的AAC 我基本没用过,工作中也没人用它,它的质量和fdkaac 还有很大差距. 所以怎么用它我也不是很清楚,我建议你还是编译带fdkaac 的ffmpeg, 你可以加入课程QQ群,到群里沟通比较方便

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信