android之mediarecorder(2)

    录音与录像由MediaRecorder.java中提供的android.media.MediaRecorder类完成,应用程序可以调用该Java类提供的API进行录音录像的操作,包括指定录音源、录像源、

输出文件、音视频编码、视频尺寸、持续时间、声道数和采样率等。MediaRecorder调用方向,首先,最上层的应用程序调用 Java API类MediaRecorder,经过JNI层,调用到

C++类MediaRecorder;后者通过代理对象,即IMediaRecorder的子类对象,跨进程调用到MediaPlayerService中的MediaRecorderClient。在MediaPlayerService中会创建

MediaRecorderClient,MediaRecorderClient中会创建出StagefrightRecorder,最终是StagefrightRecorder完成音视频录制任务。

    自Android2.3版本,开始使用StagefrightRecorder,以前版本使用PVRecorder。

Mediarecorder对应上层应用主要的API接口如下所示:

Public Method:

status_t    initCheck();

status_t    setCamera(const sp<ICamera>& camera, const   sp<ICameraRecordingProxy>& proxy);

status_t    setPreviewSurface(const sp<Surface>& surface);

 status_t    setVideoSource(int vs);

status_t    setAudioSource(int as);

status_t    setOutputFormat(int of);

status_t    setVideoEncoder(int ve);

 status_t    setAudioEncoder(int ae);

status_t    setOutputFile(const char* path);

status_t    setVideoSize(int width, int height);

status_t    setVideoFrameRate(int frames_per_second);

status_t    setParameters(const String8& params);

 status_t    setListener(const sp<MediaRecorderListener>& listener);

status_t    prepare();

status_t    getMaxAmplitude(int* max);

status_t    start();

status_t    stop();

status_t    reset();

status_t    init();

status_t    close();

status_t    release();

    在meidarecorder的上层接口中,基本不涉及数据流的处理,但是需要设置两个重要的部分,一个是输入的设备ICamera,另一个是ICamera的预览(preview)Surface:

status_t   setCamera(const sp& camera);

status_t   setPreviewSurface(const sp& surface);

   这两个类需要通过上层的接口设置,其中设置的Surface在下层的处理中也会被设置到ICamera的接口中,ICamera则作为这种mediarecorder视频输入的设备,在mediarecorder底层的实现中,通过这个Icamera获取视频流。

  prepare(),start(),stop()和reset()等几个函数用于设置控制媒体记录的运行。另外的几个接口用于设置音频、视频的输入和格式,输出的格式。

     MediaRecorder从调用关系来说一共分为6层调用,依次顺序表示为java apps -> java frameworks -> libmedia_jni.so-> libmedia.so -> libmediaplayerservice.so ->

libstagefrightrecorder.so。

    未完待续~~

 

 

 

 

 

你可能感兴趣的:(android之mediarecorder(2))