Erste Schritte mit dem IVS-Android-Broadcast-SDK | Streaming mit niedriger Latenz
Dieses Dokument führt Sie durch die Schritte zum Einstieg in das Android-Broadcast-SDK für Amazon-IVS-Streaming mit niedriger Latenz.
Bibliothek installieren
Wenn Sie der Android-Entwicklungsumgebung die Amazon-IVS-Android-Broadcast-Bibliothek hinzufügen möchten, fügen Sie die Bibliothek der build.gradle
– wie hier gezeigt – (für die neueste Version des Amazon-IVS-Broadcast-SDK) zu Ihren Modulen hinzu:
repositories { mavenCentral() } dependencies { implementation 'com.amazonaws:ivs-broadcast:1.25.0' }
Um das SDK manuell zu installieren, laden Sie alternativ die neueste Version von diesem Speicherort herunter:
Verwenden des SDK mit Debug-Symbolen
Wir veröffentlichen auch eine Version des Android-Broadcast-SDK, die Debug-Symbole enthält. Sie können diese Version verwenden, um die Qualität von Debug-Berichten (Stack-Traces) in Firebase Crashlytics zu verbessern, falls im IVS-Broadcast-SDK Abstürze auftreten, d. h. libbroadcastcore.so
. Wenn Sie diese Abstürze dem SDK-Team von IVS melden, erleichtern die qualitativ hochwertigeren Stack-Traces die Behebung der Probleme.
Um diese Version des SDK zu verwenden, fügen Sie Folgendes in Ihre Gradle-Build-Dateien ein:
implementation "com.amazonaws:ivs-broadcast:$version:unstripped@aar"
Verwenden Sie die obige Zeile anstelle von:
implementation "com.amazonaws:ivs-broadcast:$version@aar"
Hochladen von Symbolen zu Firebase Crashlytics
Stellen Sie sicher, dass Ihre Gradle-Build-Dateien für Firebase Crashlytics eingerichtet sind. Folgen Sie den Anweisungen von Google hier:
https://firebase.google.com/docs/crashlytics/ndk-reports
Achten Sie darauf, com.google.firebase:firebase-crashlytics-ndk
als Abhängigkeit anzugeben.
Wenn Sie Ihre App für die Veröffentlichung erstellen, muss das Firebase-Crashlytics-Plugin Symbole automatisch hochladen. Führen Sie einen der folgenden Befehle aus, um Symbole manuell hochzuladen:
gradle uploadCrashlyticsSymbolFileRelease
./gradlew uploadCrashlyticsSymbolFileRelease
(Es schadet nicht, wenn Symbole zweimal hochgeladen werden, sowohl automatisch als auch manuell.)
Verhindern, dass Ihre APK-Version größer wird
Vor dem Verpacken der .apk
-Release-Datei versucht das Android-Gradle-Plugin automatisch, Debug-Informationen aus gemeinsam genutzten Bibliotheken (einschließlich der libbroadcastcore.so
-Bibliothek des IVS-Broadcast-SDK) zu entfernen. Manchmal geschieht dies jedoch nicht. Infolgedessen könnte Ihre .apk
-Datei größer werden und Sie könnten vom Android-Gradle-Plugin eine Warnmeldung erhalten, dass es Debug-Symbole nicht entfernen kann und die .so
-Dateien unverändert verpackt. Wenn dies passiert, gehen Sie wie folgt vor:
-
Installieren Sie ein Android-NDK. Jede aktuelle Version funktioniert.
-
Fügen Sie
ndkVersion <your_installed_ndk_version_number>
zurbuild.gradle
-Datei Ihrer Anwendung hinzu. Tun Sie dies auch dann, wenn Ihre Anwendung selbst keinen nativen Code enthält.
Weitere Informationen finden Sie in diesem Problembericht
Erstellen Sie den Ereignis-Listener
Durch das Einrichten eines Ereignis-Listener können Sie Statusaktualisierungen, Geräteänderungsbenachrichtigungen, Fehler und Sitzungsaudio-Informationen erhalten.
BroadcastSession.Listener broadcastListener = new BroadcastSession.Listener() { @Override public void onStateChanged(@NonNull BroadcastSession.State state) { Log.d(TAG, "State=" + state); } @Override public void onError(@NonNull BroadcastException exception) { Log.e(TAG, "Exception: " + exception); } };
Berechtigungen anfordern
Ihre App muss die Berechtigung für den Zugriff auf die Kamera und das Mikrofon des Benutzers anfordern. (Dies ist nicht spezifisch für Amazon IVS; es ist für alle Anwendungen erforderlich, die Zugriff auf Kameras und Mikrofone benötigen.)
Hier prüfen wir, ob der Benutzer bereits Berechtigungen erteilt hat und fragen, wenn nicht, nach ihnen:
final String[] requiredPermissions = { Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO }; for (String permission : requiredPermissions) { if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { // If any permissions are missing we want to just request them all. ActivityCompat.requestPermissions(this, requiredPermissions, 0x100); break; } }
Hier erhalten wir die Antwort des Benutzers:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 0x100) { for (int result : grantResults) { if (result == PackageManager.PERMISSION_DENIED) { return; } } setupBroadcastSession(); } }
Broadcast-Sitzung erstellen
Die Broadcast-Schnittstelle ist com.amazonaws.ivs.broadcast.BroadcastSession
. Initialisieren Sie sie mit einer Voreinstellung wie unten gezeigt. Wenn während der Initialisierung Fehler auftreten (z. B. ein Fehler bei der Konfiguration eines Codecs), wird Ihr BroadcastListener
eine Fehlermeldung erhalten und broadcastSession.isReady
wird false
sein.
Wichtig: Alle Anrufe an das Amazon IVS Broadcast SDK for Android müssen auf dem Thread erstellt werden, auf dem das SDK instanziiert wird. Ein Aufruf von einem anderen Thread führt dazu, dass das SDK einen schwerwiegenden Fehler auslöst und die Übertragung stoppt.
// Create a broadcast-session instance and sign up to receive broadcast // events and errors. Context ctx = getApplicationContext(); broadcastSession = new BroadcastSession(ctx, broadcastListener, Presets.Configuration.STANDARD_PORTRAIT, Presets.Devices.FRONT_CAMERA(ctx));
Lesen Sie auch Erstellen der Broadcast-Sitzung (Advanced-Version).
Festlegen der ImagePreviewView für die Vorschau
Wenn Sie eine Vorschau für ein aktives Kameragerät anzeigen möchten, fügen Sie die Vorschau ImagePreviewView
für das Gerät zu Ihrer View-Hierarchie hinzu.
// awaitDeviceChanges will fire on the main thread after all pending devices // attachments have been completed broadcastSession.awaitDeviceChanges(() -> { for(Device device: session.listAttachedDevices()) { // Find the camera we attached earlier if(device.getDescriptor().type == Device.Descriptor.DeviceType.CAMERA) { LinearLayout previewHolder = findViewById(R.id.previewHolder); ImagePreviewView preview = ((ImageDevice)device).getPreviewView(); preview.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); previewHolder.addView(preview); } } });
Starten eines Broadcastings
Dem Hostnamen, den Sie im Antwortfeld ingestEndpoint
des Vorgangs GetChannel
erhalten, muss rtmps://
vorangestellt und /app
angehängt werden. Die vollständige URL sollte sich in folgendem Format sein: rtmps://{{ ingestEndpoint }}/app
broadcastSession.start(IVS_RTMPS_URL, IVS_STREAMKEY);
Das Android-Broadcast-SDK unterstützt nur RTMPS-Ingest (kein unsicheres RTMP-Ingest).
Anhalten eines Broadcastings
broadcastSession.stop();
Broadcast-Sitzung freigeben
Die broadcastSession.release()
-Methode muss aufgerufen werden, wenn der Player nicht mehr verwendet wird, um die Ressourcen freizugeben, die von der Bibliothek verwendet werden.
@Override protected void onDestroy() { super.onDestroy(); previewHolder.removeAllViews(); broadcastSession.release(); }