1 / 19

CH16 音訊與視訊

CH16 音訊與視訊. Android SDK 提供許多種方式可以處理音訊與視訊 ( 播放與錄製 ) 其中以「 MediaPlayer 」為音訊播放的主要方法 視訊播放方面則以「 VideoView 」元件較為方便 對錄製而言,音訊與視訊均以「 MediaRecorder 」為標準方式. 一、 Android 平台支援的媒體格式. Android 平台支援的基本媒體格式. 二、 播放音訊. MediaPlayer 類別支援音訊與視訊播放,使用時會依媒體類型自動選擇適當的解碼器 。 MediaPlayer 類別的主要狀態依序說明如下:

ianna
Download Presentation

CH16 音訊與視訊

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CH16 音訊與視訊

  2. Android SDK提供許多種方式可以處理音訊與視訊(播放與錄製) • 其中以「MediaPlayer」為音訊播放的主要方法 • 視訊播放方面則以「VideoView」元件較為方便 • 對錄製而言,音訊與視訊均以「MediaRecorder」為標準方式

  3. 一、Android平台支援的媒體格式 • Android平台支援的基本媒體格式

  4. 二、播放音訊 • MediaPlayer類別支援音訊與視訊播放,使用時會依媒體類型自動選擇適當的解碼器。 • MediaPlayer類別的主要狀態依序說明如下: • 待命(Idle):MediaPlayer類別建立實體物件後進入此狀態;執行「reset()」方法也會回到此狀態。 • 初始化(Initialized):完成媒體資料設定,即執行「setDataSource()」方法後進入此狀態。 • 準備中(Preparing):MediaPlayer物件以「prepare()」或「prepareAsync()」方法準備要播放的媒體來源。 • 完成準備(Prepared):完成準備後會觸發「onPrepared」事件,到這階段才能執行「start()」方法播放媒體。 • 播放中(Started):執行「start()」方法後開始播放媒體並進入播放中狀態。

  5. 暫停(Pause):在播放中狀態執行「pause()」方法,則進入暫停狀態,暫時停止媒體播放。從此狀態執行「start()」方法可以再次進入播放中狀態,並從停止位置繼續往下播放;若執行「stop()」方法則進入停止狀態。暫停(Pause):在播放中狀態執行「pause()」方法,則進入暫停狀態,暫時停止媒體播放。從此狀態執行「start()」方法可以再次進入播放中狀態,並從停止位置繼續往下播放;若執行「stop()」方法則進入停止狀態。 • 播完(Playback Completed):完成媒體內容播放,會觸發「onCompletion」事件,從此狀態執行「start()」方法可以回到播放中狀態,執行「stop()」方法則進入停止狀態。 • 停止(Stopped):MediaPlayer物件不再準備好媒體資料,若要再次播放必須重新執行「prepare()」或「prepareAsync()」方法恢復完成準備狀態。 • 終結(End):當MediaPlayer物件執行「release()」方法後,會釋放它所有的資源而終結自己。

  6. 有2點需要注意: • MediaPlayer物件的prepare()或prepareAsync()方法都是用以準備要播放媒體來源,這2者的差別是prepare()必須完成所有媒體來源準備後才進入準備狀態,這對較大的媒體來源或從網路下載來源,需要等待的時間比較久;而prepareAsync()則屬於非同步方法,可以一邊準備媒體來源,一邊播放。

  7. MediaPlayer物件播放的媒體可以有不同的來源,可以是存在專案的資源、存在行動裝置SD卡的媒體檔、或是即時從網路下載的檔案;要特別注意的是,如果媒體來源是在專案資源中,則執行MediaPlayer.create(this,R.raw.test)方法後,會同時建立MediaPlayer實體物件並準備好媒體來源,因此不必也不能執行prepare()或prepareAsync()方法。MediaPlayer物件播放的媒體可以有不同的來源,可以是存在專案的資源、存在行動裝置SD卡的媒體檔、或是即時從網路下載的檔案;要特別注意的是,如果媒體來源是在專案資源中,則執行MediaPlayer.create(this,R.raw.test)方法後,會同時建立MediaPlayer實體物件並準備好媒體來源,因此不必也不能執行prepare()或prepareAsync()方法。

  8. MediaPlayerAudio Test範例 • 在活動佈局中佈置了3個按鈕分別控制音訊播放、暫停與停止功能。 • 範例詳細內容請參考原書code 16-2。 • 如果媒體不是來自專案本身,不論是來自行動裝置SD卡或網路(都稱為外來媒體),則媒體必須完成準備後才能播放,否則會產生錯誤。

  9. 三、錄音 • 錄音最方便的方式是透過MediaRecorder類別所提供的方法處理。 • MediaRecorder類別在生命循環中的不同的狀態: • 待命(Initial):MediaRecorder類別建立實體物件後進入此狀態;執行「reset()」方法也會回到此狀態。 • 初始化(Initialized):MediaRecorde實體物件完成備便,執行「setAudioSource()」方法後進入此狀態;這裡的主要設定是聲音來自那個裝置,一般設定為「MediaRecorder.AudioSource.MIC」,表示聲音來自行動裝置的麥克風。

  10. 資料來源建構(DataSource Configured):完成輸出格式設定,執行「setOutputFormat()」方法後進入此狀態,這裡的設定是聲音存檔格式;在這狀態中還要設定編碼器與存檔位置(一般是SD卡)。 • 完成準備(Prepared):到這階段才能執行「start()」方法開始錄音。 • 錄音中(recording):執行「start()」方法後開始錄音。 • 釋放(Released):執行「release()」方法釋放MediaRecorder物件所有的資源。

  11. 錄音應用設計最容易犯的錯誤是忘了AndroidManifest.xml這個檔案。因為錄音需要用到行動裝置的硬體,而且要將錄音後的檔案存到SD卡,這2件工作都必須先在AndroidManifest.xml檔案申請對應的使用者許可(uses-permission)。錄音應用設計最容易犯的錯誤是忘了AndroidManifest.xml這個檔案。因為錄音需要用到行動裝置的硬體,而且要將錄音後的檔案存到SD卡,這2件工作都必須先在AndroidManifest.xml檔案申請對應的使用者許可(uses-permission)。 • MediaRecorderAudio Test範例 • 活動佈局設計,在佈局中增加1個文字顯示視圖與3個按鈕,3個按鈕將用以控制錄音、停止錄音與播放剛錄的聲音等功能。 • 範例詳細內容請參考原書 code 16-5。

  12. 四、用VideoView播放視訊 • 視訊播放與音訊播放原理是一樣的,但它們之間有一個最大的差別,就是視訊播放時需要一個視圖顯示播放的內容。 • 針對視訊播放需要顯示介面的需求,Android SDK很貼心的提供了一個便利的元件--「VideoView」,它已經將視訊播放控制的方法與顯示介面結合在一起,讓程式開發者可以更專心於控制流程的設計;更好的是,透過「MediaController」類別的協助,還能為VideoView提供類似一般播放軟體的控制介面,讓視訊播放程式開發更加的輕而易舉。

  13. VideoPlay Test範例 • 要使用VideoView播放視訊,首先必須將它加到應用程式的活動佈局中,在活動的程式中只要設定要播放的檔案,以及建立MediaController與VideoView彼此之間的關係,就可以利用MediaController提供的控制介面,控制視訊播放。 • 範例詳細內容請參考原書 code 16-7。

  14. 五、用MediaPlayer與SurfaceView播放視訊 • 如果要用MediaPlayer類別播放視訊,必須為它找一個顯示介面。 • 「SurfaceView」類別能夠控制它的格式、大小與在佈局中的位置,很適合用於媒體播放,但是這些控制還需要藉由「SurfaceHolder」抽象介面的協助。

  15. MediaPlayVideo Test範例 • 在專案活動佈局中加入SurfaceView與2個控制播放與停止的按鈕。 • 程式設計的邏輯是當SurfaceHolder控制的顯示介面(SurfaceView)建立完成之後,才讓播放鈕可以動作;這點很重要,如果在顯示介面尚未備妥前就要求播放視訊,會產生錯誤而使程式意外中止。 • 當視訊開始播放則取消播放鈕的功能同時讓停止鈕可以動作,以便使用者可以隨時敲此鈕終止播放。 • 範例詳細內容請參考原書 code 16-9。

  16. 六、錄影 • 錄影是透過行動裝置的攝影機進行,因此如同錄音一樣也要在專案的AndroidManifest.xml檔案中設定使用許可,但因為不會只錄影像不錄聲音,所以連同聲音與外部存檔功能也要一併申請。 • 基本上透過MediaRecorder類別錄影與錄音是一樣的步驟,只不過一般在錄影時會多出一個顯示畫面,讓使用者預覽它錄影中的內容。

  17. 如果要以模擬器測試錄影,在模擬器中必須先設定使用WebCam來模擬行動裝置的攝影機。如果要以模擬器測試錄影,在模擬器中必須先設定使用WebCam來模擬行動裝置的攝影機。 • MediaRecorderVideo Test範例 • 在佈局中加入一個SurfaceView做為預覽視窗,並提供錄影(Record)與停止(Stop)二個按鈕控制錄影過程。 • 範例詳細內容請參考原書code 16-10。 • 視訊與音訊播放比較耗費系統資源,如果情況允許,則建議最好直接以實機測試。

More Related