7d8822dae1976a6a82a0e1554aae1eba.ppt
- Количество слайдов: 19
CH 16 音訊與視訊
+ Android SDK提供許多種方式可以處理音訊 與視訊(播放與錄製) + 其中以「Media. Player」為音訊播放的主要 方法 + 視訊播放方面則以「Video. View」元件較為 方便 + 對錄製而言,音訊與視訊均以「 Media. Recorder」為標準方式
一、ANDROID平台支援的媒體格式 + Android平台支援的基本媒體格式 媒體 格式 編碼 解碼 AAC LC √ √ HE-AACv 1 √註 1 (AAC+) HE-AACv 2 (AAC+ 增強) × √ √ 檔案格式 • 3 GPP (. 3 gp) • MPEG-4 (. mp 4, . m 4 a) • ADTS raw AAC • MPEG-TS ADTS raw AAC 音訊 (Android 3. 1以上 AAC ELD (AAC增 強低延遲) √註 1 支援. aac解碼, , Android 4. 0以上支 援編碼) • MPEG-TS (. ts)
媒體 音訊 格式 編碼 解碼 檔案格式 AMR-NB √ √ 3 GPP (. 3 gp) AMR-WB √ √ 3 GPP (. 3 gp) FLAC × √註 2 FLAC (. flac) MP 3 × √ MP 3 (. mp 3) • Type 0 and 1 (. mid, . xmf,. mxmf) MIDI × √ • RTTTL/RTX (. rtttl,. rtx) • OTA (. ota) • i. Melody (. imy) • Ogg (. ogg) Vorbis × √ • Matroska (. mkv, Android 4. 0以上) PCM/WAVE √註 1 √ WAVE (. wav)
媒體 Video 格式 編碼 解碼 H. 263 √ √ 檔案格式 • 3 GPP (. 3 gp) • MPEG-4 (. mp 4) • 3 GPP (. 3 gp) H. 264 AVC √註 3 √ • MPEG-4 (. mp 4) • MPEG-TS (. ts) MPEG-4 SP × √ 3 GPP (. 3 gp) • Web. M (. webm) VP 8 × √註 4 • Matroska (. mkv, Android 4. 0以上)
二、播放音訊 • Media. Player類別支援音訊與視訊播放,使用時會依 媒體類型自動選擇適當的解碼器。 • Media. Player類別的主要狀態依序說明如下: – 待命(Idle):Media. Player類別建立實體物件後進入此狀 態;執行「reset()」方法也會回到此狀態。 – 初始化(Initialized):完成媒體資料設定,即執行「 set. Data. Source()」方法後進入此狀態。 – 準備中(Preparing):Media. Player物件以「prepare()」或 「prepare. Async()」方法準備要播放的媒體來源。 – 完成準備(Prepared):完成準備後會觸發「on. Prepared 」事件,到這階段才能執行「start()」方法播放媒體。 – 播放中(Started):執行「start()」方法後開始播放媒體 並進入播放中狀態。
– 暫停(Pause):在播放中狀態執行「pause()」方法, 則進入暫停狀態,暫時停止媒體播放。從此狀態執 行「start()」方法可以再次進入播放中狀態,並從 停止位置繼續往下播放;若執行「stop()」方法則 進入停止狀態。 – 播完(Playback Completed):完成媒體內容播放,會 觸發「on. Completion」事件,從此狀態執行「 start()」方法可以回到播放中狀態,執行「stop()」 方法則進入停止狀態。 – 停止(Stopped):Media. Player物件不再準備好媒體資 料,若要再次播放必須重新執行「prepare()」或「 prepare. Async()」方法恢復完成準備狀態。 – 終結(End):當Media. Player物件執行「release()」方 法後,會釋放它所有的資源而終結自己。
• 有2點需要注意: – Media. Player物件的prepare()或prepare. Async()方 法都是用以準備要播放媒體來源,這 2者的差別 是prepare()必須完成所有媒體來源準備後才進 入準備狀態,這對較大的媒體來源或從網路下 載來源,需要等待的時間比較久;而 prepare. Async()則屬於非同步方法,可以一邊準 備媒體來源,一邊播放。
+ Media. Player物件播放的媒體可以有不同的來源, 可以是存在專案的資源、存在行動裝置SD卡的媒 體檔、或是即時從網路下載的檔案;要特別注意 的是,如果媒體來源是在專案資源中,則執行 Media. Player. create(this, R. raw. test)方法後,會同時 建立Media. Player實體物件並準備好媒體來源,因 此不必也不能執行prepare()或prepare. Async()方法。
+ Media. Player. Audio Test範例 – 在活動佈局中佈置了3個按鈕分別控制音訊播放、 暫停與停止功能。 – 範例詳細內容請參考原書code 16 -2。 + 如果媒體不是來自專案本身,不論是來自 行動裝置SD卡或網路(都稱為外來媒體),則 媒體必須完成準備後才能播放,否則會產 生錯誤。
三、錄音 • 錄音最方便的方式是透過Media. Recorder類別 所提供的方法處理。 • Media. Recorder類別在生命循環中的不同的狀 態: – 待命(Initial):Media. Recorder類別建立實體物件後 進入此狀態;執行「reset()」方法也會回到此狀態。 – 初始化(Initialized):Media. Recorde實體物件完成備 便,執行「set. Audio. Source()」方法後進入此狀態; 這裡的主要設定是聲音來自那個裝置,一般設定為 「Media. Recorder. Audio. Source. MIC」,表示聲音來 自行動裝置的麥克風。
– 資料來源建構(Data. Source Configured):完成輸 出格式設定,執行「set. Output. Format()」方法 後進入此狀態,這裡的設定是聲音存檔格式; 在這狀態中還要設定編碼器與存檔位置(一般是 SD卡)。 – 完成準備(Prepared):到這階段才能執行「 start()」方法開始錄音。 – 錄音中(recording):執行「start()」方法後開始 錄音。 – 釋放(Released):執行「release()」方法釋放 Media. Recorder物件所有的資源。
+ 錄音應用設計最容易犯的錯誤是忘了 Android. Manifest. xml這個檔案。因為錄音需 要用到行動裝置的硬體,而且要將錄音後 的檔案存到SD卡,這 2件 作都必須先在 Android. Manifest. xml檔案申請對應的使用者 許可(uses-permission)。 + Media. Recorder. Audio Test範例 – 活動佈局設計,在佈局中增加 1個文字顯示視圖 與3個按鈕,3個按鈕將用以控制錄音、停止錄 音與播放剛錄的聲音等功能。 – 範例詳細內容請參考原書 code 16 -5。
四、用VIDEOVIEW播放視訊 • 視訊播放與音訊播放原理是一樣的,但它們之 間有一個最大的差別,就是視訊播放時需要一 個視圖顯示播放的內容。 • 針對視訊播放需要顯示介面的需求,Android SDK很貼心的提供了一個便利的元件--「 Video. View」,它已經將視訊播放控制的方法 與顯示介面結合在一起,讓程式開發者可以更 專心於控制流程的設計;更好的是,透過「 Media. Controller」類別的協助,還能為 Video. View提供類似一般播放軟體的控制介面, 讓視訊播放程式開發更加的輕而易舉。
+ Video. Play Test範例 – 要使用Video. View播放視訊,首先必須將它加到 應用程式的活動佈局中,在活動的程式中只要 設定要播放的檔案,以及建立Media. Controller 與Video. View彼此之間的關係,就可以利用 Media. Controller提供的控制介面,控制視訊播放。 – 範例詳細內容請參考原書 code 16 -7。
五、用MEDIAPLAYER與 SURFACEVIEW播放視訊 + 如果要用Media. Player類別播放視訊,必須 為它找一個顯示介面。 + 「Surface. View」類別能夠控制它的格式、 大小與在佈局中的位置,很適合用於媒體 播放,但是這些控制還需要藉由「 Surface. Holder」抽象介面的協助。
• Media. Play. Video Test範例 – 在專案活動佈局中加入Surface. View與2個控制播 放與停止的按鈕。 – 程式設計的邏輯是當Surface. Holder控制的顯示 介面(Surface. View)建立完成之後,才讓播放鈕 可以動作;這點很重要,如果在顯示介面尚未 備妥前就要求播放視訊,會產生錯誤而使程式 意外中止。 – 當視訊開始播放則取消播放鈕的功能同時讓停 止鈕可以動作,以便使用者可以隨時敲此鈕終 止播放。 – 範例詳細內容請參考原書 code 16 -9。
六、錄影 • 錄影是透過行動裝置的攝影機進行,因此 如同錄音一樣也要在專案的 Android. Manifest. xml檔案中設定使用許可, 但因為不會只錄影像不錄聲音,所以連同 聲音與外部存檔功能也要一併申請。 • 基本上透過Media. Recorder類別錄影與錄音 是一樣的步驟,只不過一般在錄影時會多 出一個顯示畫面,讓使用者預覽它錄影中 的內容。
+ 如果要以模擬器測試錄影,在模擬器中必 須先設定使用Web. Cam來模擬行動裝置的攝 影機。 + Media. Recorder. Video Test範例 – 在佈局中加入一個Surface. View做為預覽視窗, 並提供錄影(Record)與停止(Stop)二個按鈕控制 錄影過程。 – 範例詳細內容請參考原書code 16 -10。 + 視訊與音訊播放比較耗費系統資源,如果 情況允許,則建議最好直接以實機測試。
7d8822dae1976a6a82a0e1554aae1eba.ppt