Android SurfaceView相关概念及原理

来源:互联网 发布:网站源码下载 编辑:程序博客网 时间:2024/05/27 19:27

SurfaceView
* 对画面的实时更新要求较高
* 双缓冲技术:内存中有两个画布,A画布显示至屏幕,B画布在内存中绘制下一帧画面,绘制完毕后B显示至屏幕,A在内存中继续绘制下一帧画面
* 播放视频也是用MediaPlayer,不过跟音频不同,要设置显示在哪个SurfaceView

    SurfaceView sv = (SurfaceView) findViewById(R.id.sv);    SurfaceHolder sh = sv.getHolder();    MediaPlayer player = new MediaPlayer();    player.reset();    try {        player.setDataSource("sdcard/2.3gp");        player.setDisplay(sh);        player.prepare();    } catch (Exception e) {        e.printStackTrace();    }    player.start();

* SurfaceView是重量级组件,可见时才会创建
* 给SurfaceHolder设置CallBack,类似于侦听,可以知道SurfaceView的状态

    sh.addCallback(new Callback() {        //SurfaceView销毁时调用        @Override        public void surfaceDestroyed(SurfaceHolder holder) {            // TODO Auto-generated method stub        }        //SurfaceView创建时调用        @Override        public void surfaceCreated(SurfaceHolder holder) {            // TODO Auto-generated method stub        }        @Override        public void surfaceChanged(SurfaceHolder holder, int format, int width,                int height) {            // TODO Auto-generated method stub        }    });

* SurfaceView一旦不可见,就会被销毁,一旦可见,就会被创建,销毁时停止播放,再次创建时再开始播放

SurfaceView
* 视频播放在SurfaceView上
* SurfaceView应用了双缓冲技术,适用于对画面实时刷新要求较高的场景
* FFMPEG:开源免费音视频编解码器
* 重量级组件
* 可见时才会创建
* 不可见时就会销毁,可见时再次创建
* vitamio
参考:Android SurfaceView

Android简单本地视频播放器

原创粉丝点击