IVS-Broadcast-SDK: Benutzerdefinierte Bildquellen (Streaming mit niedriger Latenz) - Amazon Interactive Video Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

IVS-Broadcast-SDK: Benutzerdefinierte Bildquellen (Streaming mit niedriger Latenz)

Dieses Handbuch geht davon aus, dass Sie mit der Einrichtung einer Broadcast-Sitzung (Android,iOS) und mit der Verwendung der Mixer-API vertraut sind.

Benutzerdefinierte Image-Eingabequellen ermöglichen es einer Anwendung, eine eigene Image-Eingabe für das Broadcast-SDK bereitzustellen, anstatt sich auf die voreingestellten Kameras oder die Bildschirmfreigabe zu beschränken. Eine benutzerdefinierte Image-Quelle kann so einfach sein wie ein halbtransparentes Wasserzeichen oder eine statische „Bin gleich zurück“-Szene, oder es kann der App ermöglichen, zusätzliche benutzerdefinierte Verarbeitungen wie das Hinzufügen von Schönheitsfiltern zur Kamera durchzuführen.

Sie können mehrere benutzerdefinierte Image-Quellen haben, wie ein Wasserzeichen sowie eine Kamera mit Schönheitsfiltern. Wenn Sie eine benutzerdefinierte Image-Eingangsquelle zur benutzerdefinierten Steuerung der Kamera verwenden (z. B. die Verwendung von Schönheitsfilter-Bibliotheken, die Kamerazugriff erfordern), ist das Broadcast-SDK nicht mehr für die Verwaltung der Kamera verantwortlich. Stattdessen ist die Anwendung dafür verantwortlich, den Lebenszyklus der Kamera korrekt zu handhaben. Lesen Sie die offizielle Plattformdokumentation darüber, wie Ihre Anwendung die Kamera verwalten soll.

Android

Erstellen Sie nach dem Erstellen einer Broadcast-Sitzung eine Image-Eingabequelle:

SurfaceSource surfaceSource = broadcastSession.createImageInputSource();

Diese Methode gibt ein SurfaceSource zurück, welche eine Image-Quelle ist, die von einem Standard-Android-Surface unterstützt wird. Es wird automatisch an die Broadcast-Sitzung angehängt, sodass Sie die Methode attachDevice(...) danach nicht mehr verwenden müssen. Das SurfaceSource muss an einen Slot gebunden sein, dies wird weiter unten erläutert. Das SurfaceSource kann in der Größe geändert und gedreht werden. Sie können auch ein ImagePreviewView erstellen, um eine Vorschau seines Inhalts anzuzeigen.

So rufen Sie das zugrundeliegende Surface ab:

Surface surface = surfaceSource.getInputSurface();

Dieses Surface kann als Ausgabepuffer für Image-Produzenten wie Camera2, OpenGL ES und andere Bibliotheken verwendet werden. Der einfachste Anwendungsfall ist das direkte Zeichnen einer statischen Bitmap oder Farbe in den Canvas des Surface. Viele Bibliotheken (wie Schönheitsfilter-Bibliotheken) bieten jedoch eine Methode, mit der eine Anwendung ein externes Surface zum Rendern angeben kann. Sie können eine solche Methode verwenden, um dieses Surface an die Filterbibliothek zu übergeben, die es der Bibliothek ermöglicht, verarbeitete Frames für das Streamen der Broadcast-Sitzung auszugeben.

Schließlich muss die SurfaceSource an ein Mixer.Slot gebunden sein, um von der Broadcast-Sitzung gestreamt zu werden:

broadcastSession.getMixer().bind(surfaceSource, "customSlot");

Der Android-Beispiel-Code hat mehrere Beispiele, die eine benutzerdefinierte Image-Quelle auf verschiedene Arten verwenden:

  • Ein halbtransparentes Wasserzeichen wird in der MixerActivity hinzugefügt.

  • Eine MP4-Datei wird in der MixerActivity eingefügt.

  • Die Utility-Klasse CameraManager führt die benutzerdefinierte Verwaltung der Gerätekamera mit der Camera2-Methode in der CustomActivity durch, die einen einfachen Sepia-Filter anwendet. Dieses Beispiel ist besonders hilfreich, da es zeigt, wie Sie die Kamera verwalten und die benutzerdefinierte SurfaceSource der Broadcast-Sitzung an die Kameraaufnahmeanforderung übergeben. Wenn Sie andere externe Bibliotheken verwenden, folgen Sie deren Dokumentation zur Konfiguration der Bibliothek für die Ausgabe an Android Surface, bereitgestellt von der Broadcast-Sitzung.

iOS

Erstellen Sie nach dem Erstellen der Broadcast-Sitzung eine Image-Eingabequelle:

let customSource = broadcastSession.createImageSource(withName: "customSourceName")

Diese Methode gibt eine IVSCustomImageSource zurück, welche eine Image-Quelle ist, die es der Anwendung ermöglicht, CMSampleBuffers manuell abzusenden. Informationen zu unterstützten Pixelformaten finden Sie in der iOS-Broadcast-SDK-Referenz; ein Link zur aktuellsten Version befindet sich in den Versionshinweisen zu Amazon IVS für die neueste Broadcast-SDK-Version. Die Quelle wird nicht automatisch an die Broadcast-Sitzung angehängt, daher müssen Sie die Image-Quelle an die Sitzung anhängen und an einen Slot binden, bevor die Quelle streamen wird:

broadcastSession.attach(customSource, toSlotWithName: "customSourceSlot", onComplete: nil)

Nachdem die benutzerdefinierte Quelle angehängt und gebunden ist, kann die Anwendung CMSampleBuffers direkt zur benutzerdefinierten Quelle absenden. Sie können wählen, ob Sie den onComplete-Rückruf verwenden, um damit zu beginnen.

An die benutzerdefinierte Quelle übermittelte Beispiele werden in der Broadcast-Sitzung gestreamt:

customSource.onSampleBuffer(sampleBuffer)

Verwenden Sie diese Methode zum Streamen von Videos in einem Rückruf. Wenn Sie beispielsweise die Kamera verwenden, kann die Anwendung jedes Mal, wenn ein neuer Beispielpuffer von einer AVCaptureSession erhalten wird, den Beispielpuffer an die benutzerdefinierte Image-Quelle weiterleiten. Falls gewünscht, kann die Anwendung eine weitere Verarbeitung (wie einen Schönheitsfilter) anwenden, bevor sie das Beispiel an die benutzerdefinierte Image-Quelle absendet.

Für ein statisches Image muss die Anwendung nach dem ersten Beispiel das Beispiel erneut absenden, wenn die Slot-Bindung der benutzerdefinierten Image-Quelle geändert wird oder die Quelle getrennt und wieder an die Broadcast-Sitzung angehängt wird. Wenn Sie beispielsweise den Slot aus dem Mixer entfernen und dann den Slot zum Mixer hinzufügen, müssen Sie das Beispiel erneut absenden.

Die iOS-Beispiel-App hat mehrere Beispiele, die eine benutzerdefinierte Image-Quelle auf verschiedene Arten verwenden:

  • Ein halbtransparentes Wasserzeichen wird in MixerViewController hinzugefügt.

  • Eine MP4-Datei wird in MixerViewController eingefügt.

  • Eine CIFilter-Implementierung mit einer Gerätekamera wird in CustomSourcesViewController hinzugefügt. Dies ermöglicht es einer Anwendung, eine Gerätekamera unabhängig vom Amazon IVS Broadcast SDK zu verwalten. Sie verwendet AVCaptureSession, um ein Image von der Gerätekamera aufzunehmen, das Image mit einer CIFilter-Implementierung zu verarbeiten und CMSampleBuffers an customSource für Live-Streaming zu übermitteln.