AndroidMediaRecorder架构详解

AndroidMediaRecorder架构详解

1.     简介

在android中录制音频有两种方式,MediaRecorder和AudioRecord。两者的区别如下:

(1)      MediaRecorder

简单方便,不需要理会中间录制过程,结束录制后可以直接得到音频文件进行播放;录制的音频文件是经过压缩的,需要设置编码器;录制的音频文件可以用系统自带的播放器播放。

(2)      AudioRecorder

在声音录制过程中,可以处理采集的声音数据,如降噪、合成等。过程为一段一段进行录制然后得到数据分别进行处理。录制的是PCM格式的音频文件,需要用AudioTrack来播放,AudioTrack更接近底层。

本文主要详解MediaRecorder架构,从上层调到StagefrightRecorder的流程以及应用层录音接口调用的流程。(注:本次分析基于android4.4.2源码)

 

2.     应用层录音接口调用流程

(1)    调用new MediaRecorder()构造函数得到实例。

(2)    调用setOutputFormat()设定媒体文件的输出格式。

(3)    调用setAudioSource()设定音频的录入源以及调用setAudioEncoder()设定音频的编码方式。

(4)    调用setOutputFile()设定记录的媒体文件保存的路径。

(5)    调用prepare()准备录制。

(6)    调用start()开始录制。

(7)    记录完成后,调用stop()停止录制。

 

3.     应用层调到StagefrightRecorder的流程

如图1所示,MediaRecorder在运行时,可以分成Client和Server两个部分,它们分别在两个进程中运行,它们之间使用Binder机制实现IPC通讯。


图1 录音从Java层调到StagefrightRecorder的流程图


(1)      手机启动时会启动进程/system/bin/mediaserver。该进程会把media相关服务注册到ServiceManager中,如MediaPlayerService。

(/frameworks/av/media/mediaserver/main_mediaserver.cpp)

124        sp<ProcessState> proc(ProcessState::self());
125        sp<IServiceMa
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值