Android開發之MediaRecorder類詳解

來源:互聯網
上載者:User

標籤:

手機一般都有麥克風和網路攝影機,而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類詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.