CH16
Download
1 / 19

CH16 音訊與視訊 - PowerPoint PPT Presentation


  • 174 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' CH16 音訊與視訊' - ianna


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

CH16 音訊與視訊


  • Android SDK提供許多種方式可以處理音訊與視訊(播放與錄製)

  • 其中以「MediaPlayer」為音訊播放的主要方法

  • 視訊播放方面則以「VideoView」元件較為方便

  • 對錄製而言,音訊與視訊均以「MediaRecorder」為標準方式


Android
一、Android平台支援的媒體格式

  • Android平台支援的基本媒體格式


二、播放音訊

  • MediaPlayer類別支援音訊與視訊播放,使用時會依媒體類型自動選擇適當的解碼器。

  • MediaPlayer類別的主要狀態依序說明如下:

    • 待命(Idle):MediaPlayer類別建立實體物件後進入此狀態;執行「reset()」方法也會回到此狀態。

    • 初始化(Initialized):完成媒體資料設定,即執行「setDataSource()」方法後進入此狀態。

    • 準備中(Preparing):MediaPlayer物件以「prepare()」或「prepareAsync()」方法準備要播放的媒體來源。

    • 完成準備(Prepared):完成準備後會觸發「onPrepared」事件,到這階段才能執行「start()」方法播放媒體。

    • 播放中(Started):執行「start()」方法後開始播放媒體並進入播放中狀態。


  • 暫停(Pause):在播放中狀態執行「pause()」方法,則進入暫停狀態,暫時停止媒體播放。從此狀態執行「start()」方法可以再次進入播放中狀態,並從停止位置繼續往下播放;若執行「stop()」方法則進入停止狀態。

  • 播完(Playback Completed):完成媒體內容播放,會觸發「onCompletion」事件,從此狀態執行「start()」方法可以回到播放中狀態,執行「stop()」方法則進入停止狀態。

  • 停止(Stopped):MediaPlayer物件不再準備好媒體資料,若要再次播放必須重新執行「prepare()」或「prepareAsync()」方法恢復完成準備狀態。

  • 終結(End):當MediaPlayer物件執行「release()」方法後,會釋放它所有的資源而終結自己。


  • 2點需要注意:

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


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


  • MediaPlayerAudio Test範例

    • 在活動佈局中佈置了3個按鈕分別控制音訊播放、暫停與停止功能。

    • 範例詳細內容請參考原書code 16-2。

  • 如果媒體不是來自專案本身,不論是來自行動裝置SD卡或網路(都稱為外來媒體),則媒體必須完成準備後才能播放,否則會產生錯誤。


三、錄音

  • 錄音最方便的方式是透過MediaRecorder類別所提供的方法處理。

  • MediaRecorder類別在生命循環中的不同的狀態:

    • 待命(Initial):MediaRecorder類別建立實體物件後進入此狀態;執行「reset()」方法也會回到此狀態。

    • 初始化(Initialized):MediaRecorde實體物件完成備便,執行「setAudioSource()」方法後進入此狀態;這裡的主要設定是聲音來自那個裝置,一般設定為「MediaRecorder.AudioSource.MIC」,表示聲音來自行動裝置的麥克風。


  • 資料來源建構(DataSource Configured):完成輸出格式設定,執行「setOutputFormat()」方法後進入此狀態,這裡的設定是聲音存檔格式;在這狀態中還要設定編碼器與存檔位置(一般是SD卡)。

  • 完成準備(Prepared):到這階段才能執行「start()」方法開始錄音。

  • 錄音中(recording):執行「start()」方法後開始錄音。

  • 釋放(Released):執行「release()」方法釋放MediaRecorder物件所有的資源。


  • 錄音應用設計最容易犯的錯誤是忘了AndroidManifest.xml這個檔案。因為錄音需要用到行動裝置的硬體,而且要將錄音後的檔案存到SD卡,這2件工作都必須先在AndroidManifest.xml檔案申請對應的使用者許可(uses-permission)。

  • MediaRecorderAudio Test範例

    • 活動佈局設計,在佈局中增加1個文字顯示視圖與3個按鈕,3個按鈕將用以控制錄音、停止錄音與播放剛錄的聲音等功能。

    • 範例詳細內容請參考原書 code 16-5。


Videoview
四、用VideoView播放視訊

  • 視訊播放與音訊播放原理是一樣的,但它們之間有一個最大的差別,就是視訊播放時需要一個視圖顯示播放的內容。

  • 針對視訊播放需要顯示介面的需求,Android SDK很貼心的提供了一個便利的元件--「VideoView」,它已經將視訊播放控制的方法與顯示介面結合在一起,讓程式開發者可以更專心於控制流程的設計;更好的是,透過「MediaController」類別的協助,還能為VideoView提供類似一般播放軟體的控制介面,讓視訊播放程式開發更加的輕而易舉。


  • VideoPlay Test範例

    • 要使用VideoView播放視訊,首先必須將它加到應用程式的活動佈局中,在活動的程式中只要設定要播放的檔案,以及建立MediaController與VideoView彼此之間的關係,就可以利用MediaController提供的控制介面,控制視訊播放。

    • 範例詳細內容請參考原書 code 16-7。


Mediaplayer surfaceview
五、用MediaPlayer與SurfaceView播放視訊

  • 如果要用MediaPlayer類別播放視訊,必須為它找一個顯示介面。

  • 「SurfaceView」類別能夠控制它的格式、大小與在佈局中的位置,很適合用於媒體播放,但是這些控制還需要藉由「SurfaceHolder」抽象介面的協助。


  • MediaPlayVideo Test範例

    • 在專案活動佈局中加入SurfaceView與2個控制播放與停止的按鈕。

    • 程式設計的邏輯是當SurfaceHolder控制的顯示介面(SurfaceView)建立完成之後,才讓播放鈕可以動作;這點很重要,如果在顯示介面尚未備妥前就要求播放視訊,會產生錯誤而使程式意外中止。

    • 當視訊開始播放則取消播放鈕的功能同時讓停止鈕可以動作,以便使用者可以隨時敲此鈕終止播放。

    • 範例詳細內容請參考原書 code 16-9。


六、錄影

  • 錄影是透過行動裝置的攝影機進行,因此如同錄音一樣也要在專案的AndroidManifest.xml檔案中設定使用許可,但因為不會只錄影像不錄聲音,所以連同聲音與外部存檔功能也要一併申請。

  • 基本上透過MediaRecorder類別錄影與錄音是一樣的步驟,只不過一般在錄影時會多出一個顯示畫面,讓使用者預覽它錄影中的內容。


  • 如果要以模擬器測試錄影,在模擬器中必須先設定使用如果要以模擬器測試錄影,在模擬器中必須先設定使用WebCam來模擬行動裝置的攝影機。

  • MediaRecorderVideo Test範例

    • 在佈局中加入一個SurfaceView做為預覽視窗,並提供錄影(Record)與停止(Stop)二個按鈕控制錄影過程。

    • 範例詳細內容請參考原書code 16-10。

  • 視訊與音訊播放比較耗費系統資源,如果情況允許,則建議最好直接以實機測試。