Benutzerdefiniertes Video-Rendering (Android)

Übersicht

Dieses Tutorial führt Sie durch die Schritte, die erforderlich sind, um geringfügige Änderungen am Videorenderer vorzunehmen, der von einem Subscriber Objekt. Mit denselben Techniken können Sie auch den von einem Publisher Objekts (obwohl dieses Beispiel nur einen benutzerdefinierten Renderer für einen Abonnenten veranschaulicht).

Einrichten Ihres Projekts

Der Code für diesen Abschnitt ist im Basic-Video-Renderer-Java-Projekt des opentok-android-sdk-Beispiele Repo. Wenn Sie dies noch nicht getan haben, müssen Sie das Projektarchiv in ein lokales Verzeichnis klonen. Führen Sie in der Befehlszeile Folgendes aus:

git clone git@github.com:opentok/opentok-android-sdk-samples.git

Öffnen Sie die Basic-Video-Renderer-Java Projekt in Android Studio, um die Entwicklung zu verfolgen.

Den Code erkunden

In diesem Beispiel verwendet die Anwendung einen benutzerdefinierten Videorenderer, um eine invertierte Farbversion des Videos anzuzeigen.

InvertedColorsVideoRenderer ist eine benutzerdefinierte Klasse, die die BaseVideoRenderer Klasse (definiert im OpenTok Android SDK). Die BaseVideoRenderer Mit dieser Klasse können Sie einen benutzerdefinierten Video-Renderer definieren, der von einem OpenTok-Publisher oder -Subscriber verwendet wird:

subscriber = new Subscriber.Builder(this, stream)
    .renderer(new InvertedColorsVideoRenderer(this))
    .build();
publisher = new Publisher.Builder(MainActivity.this)
    .renderer(new InvertedColorsVideoRenderer(MainActivity.this))
    .build();

Die InvertedColorsVideoRenderer() Konstruktor setzt eine renderer Eigenschaft zu einer GLSurfaceView Objekt. Die App verwendet dieses Objekt, um das Video mit OpenGL ES 2.0 anzuzeigen. Der Renderer für dieses GLSurfaceView Objekt wird auf ein MyRenderer Objekt. MyRenderer ist eine benutzerdefinierte Klasse, die die GLSurfaceView.Rendererund wird zum Rendern des Videos auf dem Computer verwendet. GLSurfaceView Objekt:

public InvertedColorsVideoRenderer(Context context) {
    view = new GLSurfaceView(context);
    view.setEGLContextClientVersion(2);

    renderer = new MyRenderer();
    view.setRenderer(renderer);

    view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}

Die onFrame() Methode des Video-Renderers wird 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 nimmt sie den Bildpuffer des Bildes (YUV Darstellung des Rahmens), übergibt sie 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();
}

Um die Videobilder zu rendern, verwendet die Renderer-Klasse OpenGL-Shader. In diesem Beispiel erzeugt der Shader den invertierten Farbeffekt, genauer gesagt wird dies durch diese Zeile erreicht, die sich innerhalb der fragmentShaderCode String:

"y=1.0-1.1643*(y-0.0625);\n"

Herzlichen Glückwunsch! Du hast das Tutorial zum benutzerdefinierten Rendern von Videos für Android abgeschlossen.
Du kannst den Code, den du hier entwickelt hast, weiter ausprobieren und anpassen oder dir die Nächste Schritte unten.

Nächste Schritte

Wenn Sie hier fertig sind, können Sie Ihre OpenTok-Application mit diesen hilfreichen Ressourcen weiter ausbauen und verbessern: