Kotlin

Création du moteur de rendu vidéo inversé

InvertedColorsVideoRenderer est votre principal moteur de rendu personnalisé. Cette classe se branche directement sur le SDK vidéo de Vonage. Elle n'effectue PAS elle-même le rendu de la vidéo - elle délègue tout le rendu à MyRenderer.

Principales responsabilités :

  • Créer et configurer un GLSurfaceView
  • Recevoir des images vidéo de Vonage Video SDK (onFrame)
  • Les transmettre au OpenGL moteur de rendu
  • Gestion de la mise à l'échelle de la vidéo ("fit", "fill")`
  • Pause/resume l'équarrissage
  1. Créer un fichier kotlin séparé avec le InvertedColorsVideoRenderer

Les InvertedColorsVideoRenderer() Le constructeur définit une propriété de rendu à une valeur de GLSurfaceView objet. L'application utilise cet objet pour afficher la vidéo à l'aide de OpenGL ES 2.0. Le moteur de rendu pour ce GLSurfaceView est défini comme étant un MyRenderer objet. MyRenderer est une classe personnalisée que nous allons créer et qui étend la classe GLSurfaceView.Rendereret il est utilisé pour rendre la vidéo à l'écran. GLSurfaceView objet

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. Explorer le code créé et ce qu'il fait.
  • Vonage Video SDK appels onFrame() pour chaque trame entrante
  • Nous remettons le cadre au OpenGL moteur de rendu renderer.displayFrame()
  • Nous demandons GLSurfaceView de dessiner immédiatement requestRender()
  • Cela permet d'établir une séparation nette entre Vonage Video SDK logique et OpenGL logique.
  1. Regardons de plus près onFrame() du moteur de rendu vidéo

Elle est héritée de la BaseVideoRenderer classe. Les BaseVideoRenderer.onFrame() est appelée lorsque l'éditeur (ou l'abonné) rend une image vidéo au moteur de rendu vidéo. La méthode InvertedColorsVideoRenderer de cette méthode, elle prend le tampon d'image de la trame (représentation YUV de la trame), le passe à la fonction displayFrame de la méthode MyRenderer et appelle l'objet requestRender() de la méthode GLSurfaceView objet :