main.xml的源碼如下:
Player.java是本文的核心,Player.java實現了“進度條更新”、“數據緩沖”、“SurfaceHolder生命周期”等功能,其中“SurfaceHolder生命周期”是視頻與音頻播放的最大區別,通過surfaceCreated()、surfaceDestroyed()、surfaceChanged()可以創建/釋放某些資源。下面這個地方需要注意一下:
有些視頻是android播放器不能播放的,不能播放時videoHeight=0,videoWidth=0,以此來判斷是否播放視頻。
Player.java源碼如下:
test_videoplayer.java是主程序,負責調用Player類,其中關鍵部分是SeekBarChangeEvent這個SeekBar拖動的事件:SeekBar的Progress是0~SeekBar.getMax()之內的數,而MediaPlayer.seekTo()的參數是0~MediaPlayer.getDuration()之內數,所以MediaPlayer.seekTo()的參數是(progress/seekBar.getMax())*MediaPlayer.getDuration()。
test_videoplayer.java源碼如下: