android中使用MediaPlayer和SurfaceView播放视频

package com.test.video;

import java.io.IOException;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.SurfaceHolder.Callback;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class MainActivity extends Activity implements OnClickListener {

    private MediaPlayer player;
    private SurfaceView view ;
    private int position = 0;
    private ImageButton paly, pause, stop;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        view = (SurfaceView) findViewById(R.id.surfaceView);
        player = new  MediaPlayer();
        paly = (ImageButton) findViewById(R.id.play);
        pause = (ImageButton) findViewById(R.id.pause);
        stop = (ImageButton) findViewById(R.id.stop);
        // 设置SurfaceView自己不管理缓冲区
        view.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        // 设置播放时打开屏幕
        view.setKeepScreenOn(true);
        view.getHolder().addCallback(new Surfacelistener());
        
        paly.setOnClickListener(this); 
        pause.setOnClickListener(this);  
        stop.setOnClickListener(this); 
    }


    @Override
    public void onClick(View v) {
     
        try {
            switch (v.getId()) {
            // 单击播放按钮
            case R.id.play:
                 play();
                break;
            // 暂停按钮
            case R.id.pause:
                 if (player.isPlaying()) {
                     player.pause();
                     position = player.getCurrentPosition();
                 } else {
                     if (position > 0) player.seekTo(position);
                     player.start();
                 }
                break;
            // 停止按钮
            case R.id.stop:
                 if (player.isPlaying()) {
                     player.stop();
                 }
                break;

            default:
                break;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    private void play() throws Exception {
        player.reset();
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        // 设置需要播放的视频
        Uri uri =  Uri.parse("android.resource://com.test.video/" + R.raw.video );
        player.setDataSource(this, uri);
        // 把视频画面输出到SurfaceView
        player.setDisplay(view.getHolder());
        player.prepare();
        player.start();
    }

    private  class Surfacelistener implements Callback {

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
             if (position > 0) {
                 try {
                     // 开始播放
                     play();
                     // 并直接从指定位置开始播放
                     player.seekTo(position);
                     position = 0;
                 } catch (Exception e ) {
                     
                 }
             }
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {}

    }

    // 当其他的Activity被打开时,暂停播放
    @Override
    protected void onPause() {
        if (player.isPlaying()) {
            position = player.getCurrentPosition();
            // 暂停播放
            player.stop();
        }
        super.onPause();
    }
    
    @Override
    protected void onDestroy() {
        if (player.isPlaying()) {
            player.stop();
        }
        player.release();
        super.onDestroy();
    }
}
原文地址:https://www.cnblogs.com/heml/p/3594105.html