android 视频播放

来源:互联网 发布:fastdfs java api文档 编辑:程序博客网 时间:2024/05/06 20:21

android 有三种视频播放方式
1 surfaceView + MediaPlayer 组合

   protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.play_activity);        seekBarVideo =(SeekBar)findViewById(R.id.seekBar_video);        mediaPlayer = new MediaPlayer();        pathString = "https://video.c-ctrip.com/videos/u00b0c00000065uyyBF17.mp4";        holder = surfaceView.getHolder();        holder.addCallback(this);        try {            mediaPlayer.setDataSource(pathString);            mediaPlayer.prepare();        } catch (IllegalArgumentException e1) {            e1.printStackTrace();        } catch (SecurityException e1) {            e1.printStackTrace();        } catch (IllegalStateException e1) {            e1.printStackTrace();        } catch (IOException e1) {            e1.printStackTrace();        }        mediaPlayer.start();    }    @Override    public void surfaceCreated(SurfaceHolder holder) {               mediaPlayer.setDisplay(holder);                int max=mediaPlayer.getDuration();                seekBarVideo.setMax(max);                //定时器更新进度条                timer=new Timer();                timeTask=new TimerTask() {                    @Override                    public void run() {                        // TODO Auto-generated method stub                        seekBarVideo.setProgress(mediaPlayer.getCurrentPosition());                    }                };                timer.schedule(timeTask, 0, 500);    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {    }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        if (mediaPlayer!=null&&mediaPlayer.isPlaying()) {                currentPosition=mediaPlayer.getCurrentPosition();                mediaPlayer.stop();                mediaPlayer.release();                mediaPlayer=null;                timer.cancel();                timeTask.cancel();                timer=null;                timeTask=null;            }    }

在这里容易出现问题
mediaPlayer.setDisplay(holder);
容易报 SurfaceHolder holder can not release
问题出现在mdiaPlayer 中没有初始化好,所以我门会实现 SurfaceHolder 中的CallBack 接口

public void surfaceCreated(SurfaceHolder holder) {}
中设置 mediaPlayer.setDisplay(holder);

0 0