Android底層系統服務開發:以MediaRecorder模組為例
此範例是在Android裡添增了一個MediaRecorder的服務,讓Android的Java層應用軟體能呼叫MediaRecorder服務而進行錄音的工作。MediaRecorder服務的主要架構圖(由韓超先生所提供)如下:

圖 1
在Android裡已經有一個MediaPalyerService類別了。就是上圖1裡的:

圖 2
在這個MediaPalyerService類別裡添加一個內部(Inner)類別:MediaRecorderClient類別,如下圖:

圖 3
於是,這個擴充之後的MediaPalyerService類別就能提供錄音的服務了。為什麼這麼地簡單呢?因為他把錄音工作委託給幕後的OpenCodeAuthor,由它配合硬件來進行真正的錄音工作。如下圖:

圖 4
很多人會問到:既然有OpenCodeAuthor模組來進行錄音工作,為何還需要MediaPalyerService及其內含的MediaRecorderClient類別呢?
其原因是:MediaPalyerService及其內含的MediaRecorderClient類別才具有遠距(即跨進程的IPC溝通)服務的能力。為了進行遠距服務,所以MediaPalyerService原來就提供了IMediaPlayerService介面(內包IBinder標準IPC介面)來給遠距的組件使用。由於C++沒有Interface機制,所以使用繼承來實現介面之角色。

圖 5
上圖所敘述的IMediaPlayerService介面,是原來就有的,它提供播音的服務,但沒有錄音服務。因此,韓先生替MediaRecorderClient類別定義了IMediaRecorder介面,讓遠距的模組能透過此介面而使用MediaRecorderClient類別的錄音服務。如下圖:

圖 6
寫完了MediaRecorderClient類別,也提供了IMediaRecorder介面之後,系統層級(System-level)的錄音服務就算完成了。
此時,你很容易想到一個問題:Java層級的類別(如Activity或Service等)如何使用這個MediaRecorderClient類別服務呢? 於是,韓先生在撰寫一個mediarecorder類別(是C++類別),來遠距使用MediaRecorderClient類別的服務。

圖 7
然後,Java類別就能透過JNI介面來呼叫mediarecorder類別的函數,進而使用到MediaRecorderClient類別的服務了。其JNI介面如下圖:

圖 8
此時,你很可能會繼續問到:寫好了MediaRecorderClient類別的服務之後,何時(When)安裝到Android執行環境裡呢?其答案是:當Android進行其系統啟動過程時,會執行MediaPalyerService類別的Instantiate()函數,透過天字第一號服務(即ServiceManager)來將此MediaPalyerService服務登錄到Binder Driver裡,成為一項可被遠距綁定(bind)的系統服務。
一旦系統啟動完成了,MediaPalyerService服務也登錄完成了。就可以執行Java層級的應用類別了,例如Java層級的Activity類別就能透過JNI介面而要求VM(Virtual Machine)去載入(load)共享類別庫(*.SO)裡的mediarecorder類別,進而遠距使用到已登錄的MediaPalyerService服務了。◆
分享到:
相关推荐
Android手机一般都提供麦克风的硬件,而Android系统可以利用该硬件来录制音频。 为了在Android应用中录制音频,Android提供了MediaRecorder类,使用MediaRecorder录制音频的过程很简单,步骤如下: Step1:创建...
Android的音频播放通常使用MediaPlayer类,但这里我们仍以MediaRecorder为例,因为它支持实时播放功能。播放流程如下: 1. 创建一个MediaRecorder对象,虽然它的名字是"Recorder",但在某些情况下,也可以用于播放...
在Android系统中,`MediaRecorder`是一个至关重要的类,它为开发者提供了录制音频、视频以及合成多媒体文件的能力。本资料包“Android应用源码之MediaRecorder.zip”包含了关于`MediaRecorder`的源码分析,是深入...
在Android应用开发中,MediaRecorder是一个至关重要的组件,它允许开发者录制音频、视频,并将其保存到本地文件。本篇将深入探讨MediaRecorder的使用方法,结合提供的"Android安卓经典设计例程源代码-MediaRecorder....
在Android平台上,MediaRecorder是一个非常重要的类,它用于录制音频、视频或同时录制。当我们想要在后台实现自动录视频的功能时,通常会结合Service来实现这一需求。Service是Android的一个组件,可以在没有用户...
在Android平台上,MediaRecorder是一个非常重要的类,它用于录制音频、视频或同时录制音频和视频。这个类提供了从数据源到输出文件的媒体流录制功能。在这个“Android 用MediaRecorder录像源码”主题中,我们将深入...
MediaRecorder是Android系统中用于音视频采集和录制的类,提供了一个通用的音视频录制解决方案。通过MediaRecorder,可以实现音频和视频的实时采集和录制。 二、音视频实时采集的主要思路 音视频实时采集的主要...
在你提到的场景中,Android MediaRecorder被用来实现一个后台服务,这个服务能够自动循环录制视频,并且在存储空间不足时,能够智能地删除最早的视频文件,以便为新的录制内容腾出空间。 首先,让我们深入了解...
在Android平台上,音频处理是应用程序开发中的重要组成部分,特别是对于音乐、语音聊天或者游戏应用。本文将深入探讨如何使用`AudioRecord`和`MediaRecorder`类进行录音,并实现实时获取音量大小的功能。 首先,`...
MediaRecorder的接口设计简洁且易于使用,开发者可以通过以下步骤配置和操作MediaRecorder: 1. 初始化MediaRecorder对象。 2. 设置源(setAudioSource和setVideoSource),确定音频和视频数据的来源,通常是从...
在Android平台上,MediaRecorder类是用于音频、视频录制的核心组件。它可以帮助开发者实现从麦克风捕获音频,从相机捕获视频,或者同时进行音频和视频的录制。本篇文章将深入探讨如何使用MediaRecorder在Android应用...
综上所述,Android MediaRecorder录制视频并通过Socket发送涉及到了多媒体处理、网络编程、多线程和权限管理等多个方面,需要对Android系统和网络通信有深入理解才能实现高效且稳定的解决方案。
Android 系统提供了多种方式来实现录音功能,其中 MediaRecorder 和 AudioRecord 是两种常用的方法。本文将详细介绍使用 MediaRecorder 实现录音功能的实例代码。 MediaRecorder 的优缺 MediaRecorder 是 Android ...
MediaRecorder是一个Android系统类,它允许开发者录制音频、视频或者从相机捕获图像。这个类提供了对多种输出格式的支持,如3GP、MP4等,并且可以配置不同的编码器、分辨率、比特率等参数。 **初始化MediaRecorder*...
1. 初始化MediaRecorder: - 创建MediaRecorder对象。 - 设置源:`mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);` - 设置输出格式:`mediaRecorder.setOutputFormat(MediaRecorder....
总之,`Android MediaRecorder Demo1` 是一个基础的音频录制示例,它可以帮助初学者快速掌握`MediaRecorder` 的基本用法,为后续的多媒体开发打下基础。而对于有经验的开发者,这个Demo则可以作为一个快速回顾`...
在Android开发中,创建一个能够显示录音波浪图的功能是一个有趣且实用的挑战。这个功能通常用于音乐应用、健康监测应用或任何需要实时音频反馈的场景。本篇将深入探讨如何利用`SurfaceView`和`MediaRecorder`来实现...
在Android平台上,MediaRecorder是一个非常重要的类,它用于处理...总的来说,Android的MediaRecorder为开发者提供了强大的录音功能,通过合理配置和正确使用,可以实现高质量的音频录制,满足各种应用场景的需求。
在Android平台上,MediaRecorder是一个非常重要的工具类,用于录制音频、视频或同时录制音频和视频。这个类提供了从各种输入源(如摄像头)到各种输出格式(如MP4文件)的录制功能。在本篇文章中,我们将深入探讨...
总之,通过MediaRecorder在Android Studio中开发视频录制应用是一项挑战,需要对音频和视频编码、Android权限管理以及服务有深入的理解。此项目提供了一个学习平台,帮助开发者掌握这些技能,但同时也要注意遵守平台...