视频处理 -- MediaPlayer

一、概念

MediaPlayer主要用于播放音频,没有提供图像输出界面,所以我们需要借助其他组件来显示MediaPlayer播放的图像输出,我们可以使用SurfaceView 来显示。

二、使用

//[0]找到控件用来显示播放视频的内容
final SurfaceView sfv = (SurfaceView) findViewById(R.id.sfv);

//获取holder 对象 用来维护视频播放的内容
SurfaceHolder holder = sfv.getHolder();

//[0.1]添加holder 生命周期 方法 
holder.addCallback(new Callback() {
    //当surface view 销毁 
    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        System.out.println("surfaceDestroyed");
        //停止播放视频 
        if (mediaPlayer!=null && mediaPlayer.isPlaying()) {
            //获取到当前播放视频的位置 
            currentPosition = mediaPlayer.getCurrentPosition();
            mediaPlayer.stop();
        }
    }
    
    //这个方法执行了 说明sufaceView准备好了 
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        //[1]初始化mediaplayer 
        System.out.println("surfaceCreated");
         mediaPlayer = new MediaPlayer();
        //[2]设置要播放的资源位置  path 可以是网络 路径 也可是本地路径
        try {
            mediaPlayer.setDataSource("http://192.168.11.86:8080/cc.MP4");
            //[3]准备播放
            mediaPlayer.prepareAsync();
            //[3.0]设置显示给sfv sufraceholder 是用来维护视频播放的内容
            mediaPlayer.setDisplay(holder);
            //[3.1]设置一个准备完成的监听 
            mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    //[4]开始播放
                    mediaPlayer.start();
                    //[5]继续上次的位置继续播放
                    mediaPlayer.seekTo(currentPosition);
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

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

你可能感兴趣的:(视频处理 -- MediaPlayer)