ǰλãҳ > 关于android电话录音问题的详细分?- 百度文库
android绰¼ϸ
ߣè
һֱϿ˵£ʵʵDZˮԱһʱд㶫ϣԴҪͬ·
ǹAndroid¼ķ϶˵Android¼ʱ¼µźŶǻźšǶûиϸ˵Ϊʲô
֪Android½е绰¼Ĵܼ
£
recorder = new MediaRecorder();
//modeΪ VOICE_UPLINK|VOICE_DOWNLINK|VOICE_CALL recorder.setAudioSource(mode);
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); recorder.setOutputFile(recFile.getAbsolutePath()); //¼
recorder.prepare(); //¼
recorder.start(); //ֹͣ¼
recorder.stop();
MediaRecorder.AudioSourceж³
recorder.setAudioSource
͵绰¼ص3 Voice_call ¼··
Voice_uplink ¼·ӦǶԷ Voice_downlink ¼·Ӧҷ
ϹjavaεnativeĽֻܺܶ࣬ܡJAVAMediaRecorderķñC++룬ЩΪlibmedia.so,̼ͨͨŻBinderMediaServerͨţMediaServerյЩתopencore
Androidýͼصġ
ͼԿͻ˵õıشλlibmedia.soУý̵õĴλlibmediaplayerservice.soСlibmediaplayerservice.soٵõײlibopencoreplayer.soɾ幦ܡ
ͨýתopencoreСڿͻmediarecorderý̽磬ⷽºܶ࣬Ͳܡ ֮ܶͻ˵һmediarecorderͷ˵MediaRecorderClientӦͻͨmediarecorder͵̼ͨͨŻնᷢ͵˵MediaRecorderClientСڲclientλframeworks\\base\\media\\libmediaplayerservice\\MediaRecorderClient.h
class MediaRecorderClient : public BnMediaRecorder { public: virtual
status_t
setCamera(const sp
virtual status_t setPreviewSurface(const sp
virtual status_t setOutputFile(const char* path);
virtual status_t setOutputFile(int fd, int64_t offset, int64_t length); virtual status_t setVideoSize(int width, int height); virtual status_t setVideoFrameRate(int frames_per_second);
virtual status_t setParameters(const String8& params);
virtual status_t setListener(const sp
virtual status_t getMaxAmplitude(int* max); virtual status_t start(); virtual status_t stop(); virtual
status_t reset();
virtual status_t init(); virtual status_t close(); virtual status_t release(); }
Կֿͻ˷MediaRecorderClientжжӦǵÿͻ˵recorder.start();ʱõMediaRecorderClientеstart
status_t MediaRecorderClient::start() {
LOGV(\);
Mutex::Autolock lock(mLock); if (mRecorder == NULL) {
LOGE(\); return NO_INIT; }
return mRecorder->start(); //תmRecorder }
//mRecorderMediaRecorderClient캯дġ
MediaRecorderClient::MediaRecorderClient(const sp
#ifndef NO_OPENCORE {
//PVMediaRecorder¼
mRecorder = new PVMediaRecorder(); } #else {
mRecorder = NULL; } #endif
mMediaPlayerService = service; }
ĵҲһеתPVMediaRecorderPVMediaRecorderopencoreеĶӦ¼ࡣ
ǾֱӽopencoreȿPVMediaRecorderλ
frameworks\\base\\include\\media\\PVMediaRecorder.hԿͻ˵ķжӦķ
class PVMediaRecorder : public MediaRecorderBase { public:
PVMediaRecorder();
virtual ~PVMediaRecorder();
virtual status_t init();
virtual status_t setAudioSource(audio_source as); virtual status_t setVideoSource(video_source vs); virtual status_t setOutputFormat(output_format of); virtual status_t setAudioEncoder(audio_encoder ae); virtual status_t setVideoEncoder(video_encoder ve); virtual status_t setVideoSize(int width, int height); virtual status_t setVideoFrameRate(int frames_per_second); virtual status_t setCamera(const sp
virtual status_t setPreviewSurface(const sp
virtual status_t setOutputFile(int fd, int64_t offset, int64_t length); virtual status_t setParameters(const String8& params);
virtual status_t setListener(const sp
virtual status_t getMaxAmplitude(int *max);
private:
status_t doStop();
AuthorDriverWrapper* mAuthorDriverWrapper;
PVMediaRecorder(const PVMediaRecorder &);
PVMediaRecorder &operator=(const PVMediaRecorder &); };
Opencoreһ3Ŀ⣬ϵȽϸӣopencoreϸandroidԴµexternal\\opencore\\docҲⷽϣȫ
֮ܶOpencoreṩһý忪ܣҪʹOpencoreжýӦãԱӦڶṩװӿڣڵײṩӲӿڣOpencoreṩм㹦ܡն㷢͵սײӲandroidϵͳϣ
92ƪĵ