Kotlin

Creación del renderizador de vídeo invertido

InvertedColorsVideoRenderer es tu principal renderizador personalizado. Esta clase se conecta directamente a Vonage Video SDK. NO renderiza video por sí misma, delega toda la renderización a MyRenderer.

Responsabilidades principales:

  • Crear y configurar un GLSurfaceView
  • Recibir fotogramas de vídeo desde Vonage Video SDK (onFrame)
  • Páselos al OpenGL motor de renderizado
  • Escalado de vídeo ("fit", "fill")`.
  • Pause/resume renderización
  1. Crea un archivo Kotlin independiente con el InvertedColorsVideoRenderer

El InvertedColorsVideoRenderer() El constructor establece una propiedad del renderizador en un GLSurfaceView objeto. La aplicación utiliza este objeto para mostrar el vídeo utilizando OpenGL ES 2.0. El motor de renderizado para esto GLSurfaceView el objeto se establece en un MyRenderer objeto. MyRenderer es una clase personalizada que crearemos extiende GLSurfaceView.Renderery se utiliza para renderizar el vídeo en el GLSurfaceView objeto

class InvertedColorsVideoRenderer(private val context: Context) : BaseVideoRenderer() {

    private val view: GLSurfaceView
    private val renderer: MyRenderer

    interface InvertedColorsVideoRendererMetadataListener {
        fun onMetadataReady(metadata: ByteArray)
    }

    init {
        view = GLSurfaceView(context)
        view.setEGLContextClientVersion(2)

        renderer = MyRenderer()
        view.setRenderer(renderer)

        view.renderMode = GLSurfaceView.RENDERMODE_WHEN_DIRTY
    }

    override fun onFrame(frame: Frame) {
        renderer.displayFrame(frame)
        view.requestRender()
    }

    override fun setStyle(key: String, value: String) {
        if (BaseVideoRenderer.STYLE_VIDEO_SCALE == key) {
            when (value) {
                BaseVideoRenderer.STYLE_VIDEO_FIT -> renderer.enableVideoFit(true)
                BaseVideoRenderer.STYLE_VIDEO_FILL -> renderer.enableVideoFit(false)
            }
        }
    }

    override fun onVideoPropertiesChanged(videoEnabled: Boolean) {
        renderer.disableVideo(!videoEnabled)
    }

    override fun getView(): View {
        return view
    }

    override fun onPause() {
        view.onPause()
    }

    override fun onResume() {
        view.onResume()
    }
}
  1. Explora el código creado y descubre para qué sirve.
  • Vonage Video SDK llamadas onFrame() para cada trama entrante
  • Entregamos el marco al OpenGL renderizador renderer.displayFrame()
  • Pedimos GLSurfaceView sortear de inmediato requestRender()
  • Esto establece una clara separación entre Vonage Video SDK lógica y OpenGL lógica.
  1. Echemos un vistazo más de cerca a la onFrame() método del renderizador de vídeo

Se hereda de la 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 (representación YUV del fotograma), lo pasa a la función 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();
}