Android中利用MediaPlay+SurfaceView播放视频的时候,我们一般都会在视频开始播放之前先展示的是视频的首帧预览图,这时候我们一般都是通过在surfaceview上面覆盖一个ImageVIew来显示预览图(imageView的显示与隐藏),而下面我们要说的是可以通过OpenGL来绘制预览图。
首先第一步我们要创建一个sufaceview
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated( SurfaceHolder holder) {
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
drawBitmapTOSurface(holder.getSurface(), vedioBitmap);//这个就是我们将视频的首帧bitmap绘制到surfaceview上的方法
startPlay();//表示的是播放视频
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
第二部,创建EGL环境
/**
* 向surfaceview中绘制bitmap
*
* EGL是介于诸如OpenGL 或OpenVG的Khronos渲染API与底层本地平台窗口系统的接口。
* 它被用于处理图形管理、表面/缓冲捆绑、渲染同步及支援使用其他Khronos API进行的高效、加速、混合模式2D和3D渲染。
*/
private void drawBitmapTOSurface(Surface surface, Bitmap bitmap) {
//1. 取得EGL实例
EGL10 egl = (EGL10) EGLContext.getEGL();
//2. 选择Display
EGLDisplay display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
egl.eglInitialize(display, null);
int[] attribList = {
EGL10.EGL_RED_SIZE, 8,
EGL10.EGL_GREEN_SIZE, 8,
EGL10.EGL_BLUE_SIZE, 8,
EGL10.EGL_ALPHA_SIZE, 8,
EGL10.EG