实现JfGLSurfaceView
package com.example.myplayer.opengl;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.util.AttributeSet;
public class JfGLSurfaceView extends GLSurfaceView {
private JfRender jfRender;
public JfGLSurfaceView(Context context) {
this(context,null);
}
public JfGLSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
setEGLContextClientVersion(2);
jfRender = new JfRender(context);
setRenderer(jfRender);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);//requestRender()时不会重复渲染
}
public void setYUVData(int width,int height,byte[] y,byte[] u,byte[] v){
if (jfRender != null) {
jfRender.setYUVRenderData(width, height, y, u, v);
requestRender();
}
}
}
JfPlayer.java中调用

private JfGLSurfaceView jfGLSurfaceView;
public void setJfGLSurfaceView(JfGLSurfaceView jfGLSurfaceView) {
this.jfGLSurfaceView = jfGLSurfaceView;
}
/**
*
* @param width
* @param height
* @param y
* @param u
* @param v
*/
public void onCallRenderYUV(int width,int height,byte[] y,byte[] u,byte[] v){
JfLog.d("获取到视频的数据");
if (jfGLSurfaceView != null) {
jfGLSurfaceView.setYUVData(width, height, y, u, v);
}
}
MainActivity中设置WlGLSurfaceView:
private WlGLSurfaceView wlGLSurfaceView;
jfGLSurfaceView = (JfGLSurfaceView) findViewById(R.id.jfglsfv);
jfPlayer.setJfGLSurfaceView(jfGLSurfaceView);
因为在JfRender.java中的private void renderYUV()方法中有一个判断语句,
if(width_yuv > 0 && height_yuv > 0 && y != null && u != null && v != null){}
有也许视频中的那些AVFrame可能不满足某些条件,比如y、u、v数据某一个为空,
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);

导致这句不执行万能播放器java版,所以没有画上去矩形;
@Override
public void onDrawFrame(GL10 gl) {
//用黑色清屏
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
renderYUV();
}
在onDrawFrame回调方法中就用红色清了一次屏,所以会闪黑屏!
如果改为
@Override
public void onDrawFrame(GL10 gl) {
//用黑色清屏
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
renderYUV();
}
会很明显的闪红屏!
解决方法:
不管有没有渲染都把矩形画上去!
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-134507-2.html
司机坐在左边开车艾玛英国拍摄鉴定完毕
改变了历史哦
够早的啊