標籤:
手機一般都有麥克風和網路攝影機,而Android系統就可以利用這些硬體來錄製音視頻了。
為了增加對錄製音視頻的支援,Android系統提供了一個MediaRecorder的類。該類的使用也非常簡單,下面讓我們來瞭解一下這個類:
一、類結構:
java.lang.Object |
? |
android.media.MediaRecorder |
二、類概述:
用於錄製音頻和視頻的一個類。
三、狀態圖:
vcmRlcl9zdGF0ZV9kaWFncmFt">
說明:
與MediaPlayer類非常相似MediaRecorder也有它自己的狀態圖。下面是關於MediaRecorder的各個狀態的介紹:
Initial:初始狀態,當使用new()方法建立一個MediaRecorder對象或者調用了reset()方法時,該MediaRecorder對象處於Initial狀態。在設定視頻源或者音頻源之後將轉換為Initialized狀態。另外,在除Released狀態外的其它狀態通過調用reset()方法都可以使MediaRecorder進入該狀態。
Initialized:已初始化狀態,可以通過在Initial狀態調用setAudioSource()或setVideoSource()方法進入該狀態。在這個狀態可以通過setOutputFormat()方法設定輸出格式,此時MediaRecorder轉換為DataSourceConfigured狀態。另外,通過reset()方法進入Initial狀態。
DataSourceConfigured:資料來源配置狀態,這期間可以設定編碼方式、輸出檔案、旋轉螢幕、預覽顯示等等。可以在Initialized狀態通過setOutputFormat()方法進入該狀態。另外,可以通過reset()方法回到Initial狀態,或者通過prepare()方法到達Prepared狀態。
Prepared:就緒狀態,在DataSourceConfigured狀態通過prepare()方法進入該狀態。在這個狀態可以通過start()進入錄製狀態。另外,可以通過reset()方法回到Initialized狀態。
Recording:錄製狀態,可以在Prepared狀態通過調用start()方法進入該狀態。另外,它可以通過stop()方法或reset()方法回到Initial狀態。
Released:釋放狀態(官方文檔給出的詞叫做Idle state 空閑狀態),可以通過在Initial狀態調用release()方法來進入這個狀態,這時將會釋放所有和MediaRecorder對象綁定的資源。
Error:錯誤狀態,當錯誤發生的時候進入這個狀態,它可以通過reset()方法進入Initial狀態。
提示:與MediaPlayer相似使用MediaRecorder錄音錄影時需要嚴格遵守狀態圖說明中的函數調用先後順序,在不同的狀態調用不同的函數,否則會出現異常。
下面一個執行個體描述了的建立過程:
MediaRecorder recorder=newMediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile(PATH_NAME); recorder.prepare(); recorder.start(); // Recording is now started ... recorder.stop(); recorder.reset(); // You can reuse the object by going back to setAudioSource() step recorder.release();// Now the object cannot be reused |
四、構造方法和公有方法
Public Constructors |
| |
MediaRecorder() Default constructor. |
Public Methods |
final static int |
getAudioSourceMax() 擷取音頻源的最大值。 |
int |
getMaxAmplitude() 擷取在前一次調用此方法之後錄音中出現的最大振幅。 |
void |
prepare() 準備錄製。 |
void |
release() 釋放資源。 |
void |
reset() 將MediaRecorder設為空白閑狀態,即Initial狀態。 |
void |
setAudioChannels(int numChannels) 設定錄製的音頻通道數。 |
void |
setAudioEncoder(int audio_encoder) 設定所錄製的聲音的編碼格式。 |
void |
setAudioEncodingBitRate(int bitRate) 設定所錄製的聲音的編碼位率。 |
void |
setAudioSamplingRate(int samplingRate) 設定所錄製的聲音的採樣率。 |
void |
setAudioSource(int audio_source) 設定聲音來源,一般傳入 MediaRecorder. AudioSource.MIC參數指定錄製來自麥克風的聲音。 |
void |
setCamera(Camera c) 設定一個網路攝影機用於錄製。 |
void |
setCaptureRate(double fps) 設定視訊框架捕獲率。 |
void |
setLocation(float latitude, float longitude) 設定並儲存在輸出檔案中的地理資料(經度和緯度)。 |
void |
setMaxDuration(int max_duration_ms) 設定錄製會話的最長期間(以ms為單位)。 |
void |
setMaxFileSize(long max_filesize_bytes) 設定錄製檔案的最大檔案大小。 |
void |
setOnErrorListener(MediaRecorder.OnErrorListener l) 註冊一個用於記錄錄製時出現的錯誤的監聽器。 |
void |
setOnInfoListener(MediaRecorder.OnInfoListener listener) 註冊一個用於記錄錄製時出現的資訊事件。 |
void |
setOrientationHint(int degrees) 設定輸出的視頻播放的方向提示。 |
void |
setOutputFile(FileDescriptor fd) 設定錄製的音頻檔案的儲存位置。 |
void |
setOutputFile(String path) 設定錄製的音頻檔案的儲存位置。 |
void |
setOutputFormat(int output_format) 設定所錄製的音視頻檔案的格式。 |
void |
setPreviewDisplay(Surface sv) 設定使用哪個SurfaceView來顯示視頻預覽。 |
void |
setProfile(CamcorderProfile profile) 指定CamcorderProfile對象。 |
void |
setVideoEncoder(int video_encoder) 設定所錄製視頻的編碼格式。 |
void |
setVideoEncodingBitRate(int bitRate) 設定所錄製視頻的編碼位率。 |
void |
setVideoFrameRate(int rate) 設定錄製視頻的捕獲畫面播放速率。 |
void |
setVideoSize(int width, int height) 設定要拍攝的寬度和視頻的高度。 |
void |
setVideoSource(int video_source) 設定用於錄製的視頻來源。 |
void |
start() 開始錄製。 |
void |
stop() 停止錄製。 |
五、應用執行個體使用MediaRecorder錄製音樂使用MediaRecorder錄製視頻
Android開發之MediaRecorder類詳解