Android(安卓)PCM音频的采集和编码成AAC
16lz
2021-01-26
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蓝牙开发中电话音频(HSP,HFP)和媒体音频(A2DP,AVRCP)到底是个什
- Android之使用SoundPool播放一小段音频,实现猜歌的功能
- Android游戏编程之音频编程
- 基于Android的点对点视频通信/RTSP/RTP/H.264
- Android视频编辑器(五)音频编解码、从视频中分离音频、音频混音、
- Android视频通话(即时通讯,可视电话,视频通讯,监控,电视直播)推荐
- Android第五十一期 - 即时通讯视频聊天
- android实现MP3音频录制(lame,支持暂停)
- 视频演示索尼爱立信XPERIA X10