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
OpenGLmoteur de rendu - Gestion de la mise à l'échelle de la vidéo ("fit", "fill")`
Pause/resumel'équarrissage
- 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()
}
}
- Explorer le code créé et ce qu'il fait.
Vonage Video SDKappelsonFrame()pour chaque trame entrante- Nous remettons le cadre au
OpenGLmoteur de rendurenderer.displayFrame() - Nous demandons
GLSurfaceViewde dessiner immédiatementrequestRender() - Cela permet d'établir une séparation nette entre
Vonage Video SDKlogique etOpenGLlogique.
- 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 :
Rendu vidéo de base
Apprenez à utiliser un moteur de rendu vidéo personnalisé en Kotlin pour afficher une version en noir et blanc d'un flux vidéo à l'aide du SDK Android Vonage Video.