Renderización de vídeo personalizada (Android)
Visión general
Este tutorial explica paso a paso los pasos necesarios para realizar modificaciones menores en el renderizador de vídeo que utiliza un Subscriber objeto. También puedes utilizar las mismas técnicas para modificar el renderizador de vídeo que utiliza un Publisher objeto (aunque este ejemplo solo ilustra un renderizador personalizado para un suscriptor).
Configuración de tu proyecto
El código de esta sección está disponible en el proyecto Basic-Video-Renderer-Java del archivo opentok-android-sdk-ejemplos repositorio. Si aún no lo has hecho, tendrás que clonar el repositorio en un directorio local. En la línea de comandos, ejecuta:
git clone git@github.com:opentok/opentok-android-sdk-samples.git
Abra el Basic-Video-Renderer-Java proyecto en Android Studio para seguir el tutorial.
Explorar el código
En este ejemplo, la aplicación utiliza un renderizador de vídeo personalizado para mostrar una versión en color invertida del vídeo.
InvertedColorsVideoRenderer es una clase personalizada que hereda de la BaseVideoRenderer clase (definida en el SDK de OpenTok para Android). La BaseVideoRenderer La clase te permite definir un renderizador de vídeo personalizado para que lo utilice un editor o un suscriptor de OpenTok:
subscriber = new Subscriber.Builder(this, stream)
.renderer(new InvertedColorsVideoRenderer(this))
.build();
publisher = new Publisher.Builder(MainActivity.this)
.renderer(new InvertedColorsVideoRenderer(MainActivity.this))
.build();
El InvertedColorsVideoRenderer() El constructor establece un renderer a una propiedad GLSurfaceView objeto. La aplicación utiliza este objeto para mostrar el vídeo mediante OpenGL ES 2.0. El motor de renderizado para este GLSurfaceView el objeto se establece en un MyRenderer objeto. MyRenderer es una clase personalizada que extiende GLSurfaceView.Renderery se utiliza para renderizar el vídeo en el GLSurfaceView objeto:
public InvertedColorsVideoRenderer(Context context) {
view = new GLSurfaceView(context);
view.setEGLContextClientVersion(2);
renderer = new MyRenderer();
view.setRenderer(renderer);
view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
El onFrame() El método del renderizador de vídeo se hereda del BaseVideoRenderer clase. En BaseVideoRenderer.onFrame() es llamado cuando el editor (o suscriptor) renderiza un fotograma de vídeo al renderizador de vídeo. La dirección InvertedColorsVideoRenderer de este método, toma el búfer de imagen del fotograma (YUV representación del marco), se la pasa al displayFrame método del MyRenderer objeto y llama a la requestRender() método del GLSurfaceView objeto:
@Override
public void onFrame(Frame frame) {
renderer.displayFrame(frame);
view.requestRender();
}
Para renderizar los fotogramas de vídeo, la clase renderer utiliza shaders OpenGL. En este ejemplo el shader produce el efecto de color invertido, más precisamente esto se logra por esta línea que está dentro de la clase fragmentShaderCode cadena:
"y=1.0-1.1643*(y-0.0625);\n"
¡Enhorabuena! Has completado el tutorial sobre renderización de vídeo personalizada para Android.
Puedes seguir probando y modificando el código que has creado aquí, o echar un vistazo a la Próximos pasos abajo.
Próximos pasos
Cuando hayas terminado aquí, sigue desarrollando y mejorando tu aplicación de OpenTok con estos útiles recursos:
- Conceptos básicos de la Video API: si aún no lo has hecho, dedica unos minutos a descubrir exactamente cómo funciona OpenTok
- Ejemplos de código: una recopilación de aplicaciones de ejemplo que exploran diversas funciones y casos de uso de OpenTok
- Guías para desarrolladores: documentación detallada sobre todas las características y funcionalidades de OpenTok
- Tutoriales adicionales: guías paso a paso para implementar otras funciones y casos de uso de OpenTok
- Referencia del SDK de Android: descubre los métodos y eventos asociados al SDK de OpenTok para Android