android videoview属性,Android VideoView
VideoView,用于播放一段視頻媒體,它繼承了SurfaceView,位于"android.widget.VideoView",是一個視頻控件。
既然是播放一段視頻,那么不可避免的要涉及到一些開始、暫停、停止等操作,VideoView也為開發人員提供了對應的方法,這里簡單介紹一些常用的:
int getCurrentPosition():獲取當前播放的位置。
int getDuration():獲取當前播放視頻的總長度。
isPlaying():當前VideoView是否在播放視頻。
void pause():暫停
void seekTo(int msec):從第幾毫秒開始播放。
void resume():重新播放。
void setVideoPath(String path):以文件路徑的方式設置VideoView播放的視頻源。
void setVideoURI(Uri uri):以Uri的方式設置VideoView播放的視頻源,可以是網絡Uri或本地Uri。
void start():開始播放。
void stopPlayback():停止播放。
setMediaController(MediaController controller):設置MediaController控制器。
setOnCompletionListener(MediaPlayer.onCompletionListener l):監聽播放完成的事件。
setOnErrorListener(MediaPlayer.OnErrorListener l):監聽播放發生錯誤時候的事件。
setOnPreparedListener(MediaPlayer.OnPreparedListener l)::監聽視頻裝載完成的事件。
上面的一些方法通過方法名就可以了解用途。和MediaPlayer配合SurfaceView播放視頻不同,VideoView播放之前無需編碼裝載視頻,它會在start()開始播放的時候自動裝載視頻。并且VideoView在使用完之后,無需編碼回收資源。
有播放視頻時需要獲取視頻的某一幀的圖片進行操作,這時MediaMetadataRetriever類就派上了用場:
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(dataPath);
獲取一幀的關鍵代碼為:
Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(timeMs * 1000, MediaMetadataRetriever.OPTION_CLOSEST);
public Bitmap getFrameAtTime(long timeUs, int option)
第一個參數是傳入時間,只能是us(微秒)
第二個參數:
OPTION_CLOSEST 在給定的時間,檢索最近一個幀,這個幀不一定是關鍵幀。
OPTION_CLOSEST_SYNC 在給定的時間,檢索最近一個同步與數據源相關聯的的幀(關鍵幀)。
OPTION_NEXT_SYNC 在給定時間之后檢索一個同步與數據源相關聯的關鍵幀。
OPTION_PREVIOUS_SYNC 顧名思義,同上
這里為了提取我們想要的幀,不使用關鍵幀,所以用 OPTION_CLOSEST .
最終的測試結果并不理想,連續取20幀畫面,其中真正有效的只有7張,其余都是重復的,原因為即使是使用參數OPTION_CLOSEST,程序仍然會去取指定時間臨近的關鍵幀,如10s-15s總是取同一幀,因此這種方法不可用。
提高視頻的質量或許有效,未嘗試。
補充MediaMetadataRetriever的其他知識
// 取得視頻的總長度(單位為毫秒)
String time = mediaMetadataRetriever. extractMetadata( MediaMetadataRetriever. METADATA_KEY_DURATION);
MediaMetadataRetriever主要用來取縮略圖。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的android videoview属性,Android VideoView的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mac android studio 打
- 下一篇: 常用android的smali注入代码,