1. 程式人生 > >多媒體之播放視訊——VideoView和MediaPlayer(MediaPlayer和SurfaceView結合)

多媒體之播放視訊——VideoView和MediaPlayer(MediaPlayer和SurfaceView結合)

VideoView

一、簡介:

這裡寫圖片描述
後面講解SurfaceView。
VideoView將視訊的顯示和控制集於一身,它的用法和MediaPlayer很相似,因為VideoView只是做好了一個封裝而已,它的背後仍然是MediaPlayer來對視訊檔案進行的控制。而且VideoView並不是萬能的視訊播放工具,只支援3gp和MP4格式的視訊格式的播放,但如果只是用於播放一些遊戲的片頭動畫,或者某個應用的視訊宣傳,使用VideoView還是綽綽有餘的,但編寫強大的視訊播放器就不太現實了呢。

二、使用:

VideoView的使用非常簡單,佈局只需要新增VideoView元件,設定寬高即可,程式碼中,主要用到下面劃紅線的方法
這裡寫圖片描述


注:不要忘了加許可權,這裡播放手機中儲存的視訊,需要讀許可權:

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  • 常用的其他方法:
    resume():將視訊重頭開始播放。
    seekTo()
    setVideoPath()
    start()
    isPlaying()
    getDuration()

  • 釋放資源:
    在onDestroy中需要調研過年suspend()方法,將資源釋放掉。

不過一般我們不使用VideoView來播放視訊,會用到第三方的播放器

三、範例:

功能:播放SD卡下名稱為my.3gp的視訊

MediaView:
這裡寫圖片描述


讀SD卡的許可權:
這裡寫圖片描述

MediaPlayer和SurfaceView結合


這裡介紹一下SurfaceView和View的區別:

  • View:
    View必須由UI主執行緒去繪製。

  • SurfaceView:
    SurfaceView是自帶繪製執行緒,獨立於UI主執行緒之外;一些遊戲介面,例如五子棋、飛機大戰、貪吃蛇等可以用 SurfaceView來做,視訊的播放也可以用 SurfaceView(此時它是獨立的執行緒來繪製的視訊介面。)

    這裡我們僅展示一下SurfaceView中視訊播放這樣一個小功能,和MediaPlayer相結合。

用法:

  • 讀許可權:
  • 用法:
    1)佈局中新增SurfaceView控制元件
    2)其他是MediaPlayer的用法,設定資源地址,型別,唯一不同的是需要設定setdisplay,在SurfaceView上進行播放視訊。

範例:

總程式碼:

public class MainActivity extends Activity {
    private Button mButtonsurface;
    private SurfaceView surface;
    private MediaPlayer mediaPlayer;//全域性變數,避免每次點選都建立新物件

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButtonsurface = (Button) findViewById(R.id.buttonsurface);
        surface = (SurfaceView) findViewById(R.id.surfaceView);
        mButtonsurface.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mediaPlayer == null) {
                    mediaPlayer = new MediaPlayer();
                }
                mediaPlayer.reset();
                try {
                    //設定視訊地址
                    mediaPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/my.3gp");
                    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//設定播放聲音型別
                    mediaPlayer.setDisplay(surface.getHolder());//設定在surfaceView上播放
                    mediaPlayer.prepare();
                    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mp) {
                            mediaPlayer.start();//準備需要一段時間,所以用監聽
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }


            }
        });
    }

}


功能:點選按鈕時,相應的視訊在SurfaceView上進行播放。