Android PCM音频的采集和编码成AAC

Android原生的视频录制是不能做到分段不漏秒的,所以需要定制一套录制系统。

该系统的核心步骤如下:

(A)同步采集视频帧数据(YV12)和音频帧数据(PCM);

(B)通过硬件编码器对所述视频帧数据和音频帧数据进行编码;(视频:YV12->H.264,音频:PCM->AAC)

(C)将编码后的视频帧数据和音频帧数据及其时间戳传输给分段录像模块;

(D)将时间戳对应的视频帧数据和音频帧数据写入多媒体文件;

(E)判断所述多媒体文件的时长是否达到预设的最大时长,若达到最大时长则保存多媒体文件并进入下一步,否则保持步骤(D);

(F)新建多媒体文件,采用前一多媒体文件的最后一视频帧作为第一视频帧,跳转至步骤(D)。


今天看一下音频的处理。

PCM(脉冲编码调制)

AAC(高级音频编码)


相关基础:

* 一般情况下,一帧PCM是由2048次采样组成;

* 16位PCM,每一个样本2字节。立体声的PCM数据左右声道交替存储,用L表示左声道的一个PCM样本,R表示右声道的一个PCM样本,PCM数据在WAV文件中的存放序列是这样的:LRLRLRLR……


“Android SDK 提供了两套音频采集的API,分别是:MediaRecorder 和 AudioRecord,前者是一个更加上层一点的API,它可以直接把手机麦克风录入的音频数据进行编码压缩(如AMR、MP3等)并存成文件,而后者则更接近底层,能够更加自由灵活地控制,可以得到原始的一帧帧PCM音频数据。”

我们并没有采用这两种API方法,而是直接把相关功能集成到了mediaserver,定制性更胜一筹。


待续。




你可能感兴趣的:(Android)