您的位置:首页 > 移动开发 > Android开发

Android SurfaceView相关概念及原理

2017-08-06 10:33 309 查看
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简单本地视频播放器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: