Моя цель - отобразить цветное видеоизображение ExoPlayer как черно-белое.Как «применить фрагментарный шейдер к GLSurfaceView/TextureView»?
Согласно этому this Github issue я должен быть в состоянии добиться этого с Open GL:
ExoPlayer будет оказывать видео на любой поверхности. Вы можете использовать SurfaceTexture, после чего у вас будет видео, обработанное текстурой OpenGL ES . После этого вы можете делать все, что позволяет OpenGL , в том числе использовать пиксельный шейдер для преобразования видео в черно-белый.
В an older, but related, discussion in the Android Developers Google group Romain Guy дает некоторые подробности о том, как это должно быть сделано:
- Создать контекст OpenGL
- Генерирование OpenGL имя текстуры
- Создать SurfaceTexture с текстурой имя
- Передача поверхности на камеру
- Слушайте fo г Обновления на обновление SurfaceTexture, нарисовать текстуру с OpenGL с использованием затенения вы хотите
Простой :)
И играя с Google's Cardboard example project я определил, что фрагмент шейдера как следующий один должен быть о праве:
precision mediump float;
varying vec4 v_Color;
void main() {
float grayscale = v_Color[0] * 0.3 + v_Color[1] * 0.59 + v_Color[2] * 0.11;
gl_FragColor = vec4(grayscale, grayscale, grayscale, 0.1);
}
Я также сумел иметь ExoPlayer визуализации в TextureView
вместо обычного SurfaceView
:
mPlayer.sendMessage(
videoRenderer,
MediaCodecVideoTrackRenderer.MSG_SET_SURFACE,
new Surface(mVideoTextureView.getSurfaceTexture())
);
Теперь, как мне соединить все вместе?
Где я могу «применить» шейдер к TextureView
? Возможно ли это, или я должен использовать вместо этого GLSurfaceView
? Что мне нужно сделать в Renderer
?
Вы видели это: https://github.com/google/ExoPlayer/issues/1220 и ссылку в нем? –
Спасибо, связанное сообщение в блоге действительно обеспечило рабочее решение! Большое спасибо! –
Эй, Дэвид, я тоже пытаюсь сделать то же самое, но я застрял на этом последние 2 дня.Я взглянул на код VideoSurfaceView VidEffect, но когда я интегрирую exoplayer, видео становится черным, но со звуком. Если у вас все еще есть рабочее решение, это будет означать много, если вы можете поделиться этим. –