前兩篇文章通過麥克風硬體和攝像頭硬體分別采集音頻和視頻的多媒體資料,在得到的多媒體資料通常是以編碼檔案的格式存盤,在用戶需要展示時,可通過設備的內置擴音器或藍牙耳機等硬體播放音頻,通過設備的顯示屏或外接投影儀等硬體播放照片、影片或視頻,
可以將這些展示類設備分為兩類,
一類是內置類多媒體硬體,是通過線路硬連接到設備CPU控制中心,所以在應用程式中可直接調取系統提供的相關介面直接使用這類設備,比如移動手機的內置擴音器、聽筒、有線耳機、螢屏等硬體,
另一類是外接類多媒體硬體,是通過配合下文即將介紹的藍牙或網路等通訊類硬體,通過無線軟連接到設備CPU控制中心,在使用這類設備前,必須先配合通訊類硬體的使用,比如藍牙耳機、投影儀等硬體,
本篇只介紹在內置類多媒體硬體上的使用流程,
播放音頻
對于音頻的播放,主要借助內置擴音器,使用系統提供的android.media.MediaPlayer類,
使用其無參構造方法后,呼叫該物件的setDataSource(String path)等系列方法,設定要播放的音頻源,該系列方法有多個重寫,除了上邊引數 path 所表示的本地檔案格式的音頻源,還可以設定遠程網路 Uri 格式的音頻源,
除此之外,還需要設定播放的音頻流型別,不過設定方法在不同版本上有所區別,
在Android5.0即API級別21之前,呼叫setAudioStreamType(int streamtype)方法,引數 streamtype 是由android.media.AudioManager音頻管理類定義的常量,其值包括標記為語音通話音頻流的AudioManager.STREAM_VOICE_CALL=0,標記為系統音頻流的AudioManager.STREAM_SYSTEM=1,語音鈴聲的AudioManager.STREAM_RING=2,或者多媒體音樂流的AudioManager.STREAM_MUSIC=3等多種音頻流型別,
從Android5.0即API級別21開始,改用setAudioAttributes(AudioAttributes attributes)方法,引數 attributes 是android.media.AudioAttributes音頻屬性類構造的物件,而AudioAttributes物件則是通過android.media.AudioAttributes.Builder建造者模式構造的,在無參構造建造者AudioAttributes.Builder物件后,呼叫setUsage(int usage)方法設定音頻屬性的使用者,呼叫setContentType(int contentType)方法設定音頻流內容型別,上述方法中的引數 usage 和引數 contentType 都是AudioAttributes定義的常量值,之后通過build()方法回傳AudioAttributes音頻屬性類的實體化物件,
在音頻相關引數設定之后,就可以準備音頻以通過系統獲取相關硬體設備了,
在加載本地的小檔案時,可以直接呼叫 prepare() 方法,代碼執行到此處時會停止后續代碼運行,直到獲取到相關資源,才會繼續執行音頻準備完成之后的相關操作,因此在系統主執行緒中呼叫該方法時需要注意ANR例外,
通常在加載網路資源或過大的檔案時,呼叫prepareAsync()方法,該方法會異步獲取相關資源,后續代碼繼續執行,而當應用程式獲取到相關資源后,將回呼setOnPreparedListener(MediaPlayer.OnPreparedListener listener)中傳入的 listener 引數物件的onPrepared(MediaPlayer mp)方法,而這里的引數 mp 也就是上文呼叫prepareAsync()的MediaPlayer物件,因此在實作android.media.MediaPlayer.OnPreparedListener介面的onPrepared(MediaPlayer mp)方法中,可以繼續執行音頻準備完成之后的相關操作,
在音頻準備完成之后,便可以在合適的時機執行音頻的播放流程了,
呼叫start()方法即可開始播放;
在音頻播放程序中,同樣可以呼叫pause()方法暫停播放;
呼叫seekTo(long msec, int mode)方法可以將播放位置移動到引數 msec 指定的毫秒級同步時刻,引數 mode 是MediaPlayer中的常量值,包括實際定位到引數 msec 指定的同步位置之前的MediaPlayer.SEEK_PREVIOUS_SYNC=0,實際定位到引數 msec 指定的同步位置之后的MediaPlayer.SEEK_NEXT_SYNC=1,實際定位到引數 msec 指定的同步位置最近的MediaPlayer.SEEK_CLOSEST_SYNC=2等幾種可選模式;
呼叫stop()方法停止播放,將會釋放應用程式所獲取的包括硬體的相關資源,
顯示圖片或視頻
對于靜態圖片的展示,通常使用android.widget.ImageView類似控制元件,直接加載靜態圖片,
對于無聲的動態圖展示,通常使用android.view.SurfaceView控制元件,在該控制元件上可以繪制幾乎任何你能想到的效果,
對于自帶音頻的有聲動圖(即視頻)展示,可以使用上述方案的結合,也可使用系統提供的android.widget.VideoView控制元件,可以更方便的加載視頻并展示,
同時,由于圖片或視頻展示都只是借助螢屏繪制,所以使用界面繪制展示一文中的相關知識內容即可實作,而且其他開發者和團隊也開發了一系列的相關庫以供使用,這在學習程序中并不算難點,故不再贅述,
———————————————————————————————轉載請注明出處:白少木丿—————————————————轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/384116.html
標籤:其他
上一篇:HDD深圳站:全生命周期賦能開發者,華為引領應用生態升級
下一篇:button點擊事件的四種方式
