Erstellen des Renderers für invertierte Videos
InvertedColorsVideoRenderer ist Ihr wichtigster benutzerdefinierter Renderer. Diese Klasse ist direkt mit dem Vonage Video SDK verbunden. Sie rendert das Video NICHT selbst, sondern delegiert das gesamte Rendering an MyRenderer.
Hauptaufgaben:
- Erstellen und Konfigurieren eines
GLSurfaceView - Empfangen von Videobildern von
Vonage Video SDK(onFrame) - Geben Sie sie an die
OpenGLRenderer - Handhabung der Skalierung von Videos ("fit", "fill")`
Pause/resumeRendering
- Erstellen Sie eine separate Kotlin-Datei mit dem InvertedColorsVideoRenderer
Die InvertedColorsVideoRenderer() Konstruktor setzt eine Renderer-Eigenschaft auf eine GLSurfaceView Objekt. Die App verwendet dieses Objekt, um das Video mithilfe von OpenGL ES 2.0. Der Renderer für diese GLSurfaceView Objekt wird auf ein MyRenderer Objekt. MyRenderer ist eine benutzerdefinierte Klasse, die wir erstellen werden und die GLSurfaceView.Rendererund wird zum Rendern des Videos auf dem Computer verwendet. GLSurfaceView Objekt
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()
}
}
- Erkunden Sie den erstellten Code und seine Funktionen.
Vonage Video SDKruft auf.onFrame()für jedes eingehende Bild- Wir übergeben den Rahmen an die
OpenGLRendererrenderer.displayFrame() - Wir fragen
GLSurfaceViewsofort zu zeichnenrequestRender() - Dadurch wird eine saubere Trennung zwischen
Vonage Video SDKLogik undOpenGLLogik.
- Werfen wir einen genaueren Blick auf die
onFrame()Methode des Video-Renderers
Sie wird geerbt von der BaseVideoRenderer Klasse. Die Website BaseVideoRenderer.onFrame() Methode wird aufgerufen, wenn der Herausgeber (oder Abonnent) ein Videobild an den Videorenderer überträgt. Die InvertedColorsVideoRenderer Implementierung dieser Methode wird der Bildpuffer des Bildes (YUV-Darstellung des Bildes) genommen und an die displayFrame Methode der MyRenderer Objekt und ruft das Objekt requestRender() Methode der GLSurfaceView Objekt:
@Override
public void onFrame(Frame frame) {
renderer.displayFrame(frame);
view.requestRender();
}
Grundlegendes Video-Rendering
Erfahren Sie, wie Sie einen benutzerdefinierten Videorenderer in Kotlin verwenden, um eine Schwarz-Weiß-Version eines Videostreams mit dem Vonage Video Android SDK anzuzeigen.