我们可以使用exoplayer在opengl SurfaceTexture上渲染视频吗?

时间:2018-01-26 13:47:21

标签: android-mediaplayer exoplayer

我们可以使用exoplayer在opengl SurfaceTexture上渲染视频,就像我们可以使用mediaPlayer一样吗?我需要这个,因为我想在OpenGL纹理上绘制视频的每一帧......

3 个答案:

答案 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