我们可以使用exoplayer在opengl SurfaceTexture上渲染视频,就像我们可以使用mediaPlayer一样吗?我需要这个,因为我想在OpenGL纹理上绘制视频的每一帧......
答案 0 :(得分:1)
class SurfaceTextureWrapper extends SurfaceTexture {
public SurfaceTextureWrapper() {
super(genSurfaceTexture());
}
private static int genSurfaceTexture() {
int[] args = new int[1];
GLES20.glGenTextures(args.length, args, 0);
int textureHandle = args[0];
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, textureHandle);
GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
GLES20.glTexParameterf(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
return textureHandle;
}
}
使用样本
exoPlayer.setVideoSurface(new Surface(new SurfaceTextureWrapper());
答案 1 :(得分:0)
其实是的,你可以。我不知道你是否已经解决了这个问题,但你可以用surfaceTexture来解决这个问题。
resetOffsets
做你通常做的设置你的exoPlayer
surfaceTexture = new SurfaceTexture(yourOpenGlTextureId);
Surface surface = new Surface(surfaceTexture);
然后简单地
exoPlayer = new SimpleExoPlayer...
我希望它有所帮助。
答案 2 :(得分:0)
渲染有效,但是比例不正确,即使您已设置 videoScalingMode = C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING