一、前言
音频的保存相对来说比视频的要简单,具有通用性,不需要经过ffmpeg的编码,ffmpeg解码出来后一般会转换成pcm原始的数据用来播放,所以对数据直接写文件即可,但是这种格式是无法用播放器直接播放的,因为采样率、通道等参数未知,除非手动指定,所以就多出来一个wav格式,这个格式就是在pcm格式前面加上44字节的文件头,所以wav格式的音频文件永远比pcm的文件大44字节,简单来说pcm加上wav头文件就变成了wav。所以这些就好办了,在开始存储的时候先写入这个文件头就行,后面一直插入pcm音频数据即可。
由于wav文件体积很大,所以需要一个压缩的播放器可以直接播放的,这样就需要用aac格式存储。ffmpeg收到后还没有解码出来在没有转换前默认的数据一般以aac格式居多,也有部分的是mp3之类的,所以如果要存储为aac格式,直接存储最原始的packet的数据即可,这个数据是aac格式的压缩过的音频数据,每个数据包前面插入ADTS头即可。可能你会有疑问每个包都插入了头部字节,那不是文件体积更大,其实不是的,毕竟aac格式是一种声音数据的文件压缩格式,有着极高的压缩比,这点头部字节数据简直是毛毛雨。
终上所述,三种格式的音频数据可以满足所有的情况,如果检测到音频解码器用的aac则存储aac格式,非aac则全部存储成wav格式,如果不需要播放器支持就存储成pcm格式即可。
公众号:Qt实战,各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发。
公众号&#