Мы используем точно такой же подход, чтобы добавить прозрачность к видео в нашем приложении для Android. Мы используем OpenGL ES с шейдерами, и он работает безупречно.
То, что вам нужно сделать, это просто визуализировать это видео на текстуру поверхности (это можно легко сделать с помощью ExoPlayer), а затем к нему можно получить доступ из OpenGL как к обычной текстуре. Для шейдера вы можете начать что-то вроде этого
private static final String VERTEX_SHADER = "attribute vec4 position;\n" +
"attribute vec4 inputTextureCoordinate;\n" +
" \n" +
"varying vec2 textureCoordinate;\n" +
"varying vec2 textureCoordinate2;\n" +
" \n" +
"void main()\n" +
"{\n" +
" gl_Position = position;\n" +
" textureCoordinate.x = inputTextureCoordinate.x;\n" +
" textureCoordinate.y = inputTextureCoordinate.y * 0.5;\n" +
" textureCoordinate2.x = inputTextureCoordinate.x;\n" +
" textureCoordinate2.y = inputTextureCoordinate.y * 0.5 + 0.5;\n" +
"}";
public static final String FRAGMENT_SHADER = "#extension GL_OES_EGL_image_external : require\n"+
"varying highp vec2 textureCoordinate;\n"+
"varying highp vec2 textureCoordinate2;\n"+
"uniform samplerExternalOES inputImageTexture;\n" +
"void main() {\n"+
" lowp vec4 rgbcolor = texture2D(inputImageTexture, textureCoordinate);\n"+
" lowp vec4 alphaValue = texture2D(inputImageTexture, textureCoordinate2);\n"+
" gl_FragColor.a = alphaValue.g;\n"+
" gl_FragColor.rgb = rgbcolor.rgb * alphaValue.g;\n" +
"}";
и не забудьте сделать это в TextureView и включить прозрачность с помощью TextureView.setOpaque(false);