Mise en route avec le kit SDK de diffusion Android IVS | Diffusion à faible latence - Amazon IVS

Mise en route avec le kit SDK de diffusion Android IVS | Diffusion à faible latence

Ce document vous présente les étapes à suivre pour commencer à utiliser le kit SDK de diffusion Android à faible latence d’Amazon IVS.

Installer la bibliothèque

Pour ajouter la bibliothèque de diffusion Android Amazon IVS à votre environnement de développement Android, ajoutez la bibliothèque au fichier build.gradle de votre module, comme indiqué ici (pour la dernière version du kit SDK de diffusion Amazon IVS) :

repositories { mavenCentral() } dependencies { implementation 'com.amazonaws:ivs-broadcast:1.25.0' }

Vous pouvez également installer le kit SDK manuellement, en téléchargeant la dernière version à partir du lien suivant :

Utilisation du kit SDK avec des symboles de débogage

Nous publions également une version du kit SDK de diffusion Android incluant des symboles de débogage. Vous pouvez utiliser cette version pour améliorer la qualité des rapports de débogage (traces de pile) dans Firebase Crashlytics, en cas de plantages dans le kit SDK de diffusion IVS, par exemple libbroadcastcore.so. Lorsque vous signalez ces plantages à l’équipe SDK IVS, des traces de pile de meilleure qualité facilitent la résolution des problèmes.

Pour utiliser cette version du kit SDK, ajoutez la ligne suivante dans vos fichiers de configuration Gradle :

implementation "com.amazonaws:ivs-broadcast:$version:unstripped@aar"

Utilisez la ligne ci-dessus au lieu de celle-ci :

implementation "com.amazonaws:ivs-broadcast:$version@aar"

Téléchargement des symboles vers Firebase Crashlytics

Assurez-vous que vos fichiers de configuration Gradle sont bien configurés pour Firebase Crashlytics. Suivez les instructions de Google ici :

https://firebase.google.com/docs/crashlytics/ndk-reports

Veillez à ajouter com.google.firebase:firebase-crashlytics-ndk en tant que dépendance.

Lorsque vous créez votre application en vue de sa publication, le plug-in Firebase Crashlytics devrait automatiquement télécharger les symboles. Pour ce faire, exécutez l’une des commandes suivantes :

gradle uploadCrashlyticsSymbolFileRelease
./gradlew uploadCrashlyticsSymbolFileRelease

(Il n’y a aucun risque si les symboles sont téléchargés deux fois, automatiquement et manuellement.)

Prévention de l’augmentation de la taille du fichier .apk en version finale

Avant de générer le fichier .apk en version finale, le plug-in Android Gradle tente automatiquement de supprimer les informations de débogage des bibliothèques partagées (y compris la bibliothèque libbroadcastcore.so du kit SDK de diffusion IVS). Cependant, cela ne fonctionne pas toujours. En conséquence, votre fichier .apk pourrait augmenter en taille et vous pourriez recevoir un message d’avertissement du plug-in Android Gradle indiquant qu’il n’a pas pu supprimer les symboles de débogage et qu’il inclut les fichiers .so tels quels. Si cela se produit, procédez comme suit :

  • Installez un NDK Android. Toute version récente fonctionnera.

  • Ajoutez ndkVersion <your_installed_ndk_version_number> au fichier build.gradle de votre application. Procédez ainsi même si votre application elle-même ne contient pas de code natif.

Pour plus d’informations, consultez ce problème connu.

Créer l’écouteur d’événements

La configuration d’un écouteur d’événements vous permet de recevoir des mises à jour d’état, des notifications de modification de périphérique, des erreurs et des informations sur l’audio de la session.

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); } };

Demander des autorisations

Votre appli doit demander l’autorisation d’accéder à la caméra et au micro de l’utilisateur. (Ce n’est pas spécifique à Amazon IVS ; cette autorisation est requise pour toute application devant accéder aux caméras et aux micros.)

Ici, nous vérifions si l’utilisateur a déjà accordé des autorisations et, dans le cas contraire, nous les demandons :

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; } }

Ici, nous obtenons la réponse de l’utilisateur :

@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(); } }

Créer la session de diffusion

L’interface de diffusion est com.amazonaws.ivs.broadcast.BroadcastSession. Initialisez-la avec un préréglage, comme indiqué ci-dessous. S’il y a des erreurs lors de l’initialisation (comme un échec lors de la configuration d’un codec), votre BroadcastListener recevra un message d’erreur et broadcastSession.isReady sera false.

Important : tous les appels vers le kit SDK for Android de diffusion Amazon IVS doivent être faits sur le thread sur lequel le kit SDK est instancié. Si un appel est réalisé à partir d’un thread différent, le kit SDK lèvera une erreur critique et arrêtera la diffusion.

// 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));

Voir aussi Créer la session de diffusion (version avancée).

Définir ImagePreviewView pour la prévisualisation

Si vous souhaitez afficher une prévisualisation pour une caméra active, ajoutez une prévisualisation ImagePreviewView pour le périphérique à votre hiérarchie de vues.

// 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); } } });

Démarrer une diffusion

Le nom d’hôte que vous recevez dans le champ de réponse ingestEndpoint de l’opération GetChannel doit avoir rtmps:// comme préfixe et /app comme suffixe. L’URL complète doit être au format suivant : rtmps://{{ ingestEndpoint }}/app

broadcastSession.start(IVS_RTMPS_URL, IVS_STREAMKEY);

Le kit SDK de diffusion Android prend en charge uniquement l’ingestion RTMPS (et non l’ingestion RTMP non sécurisée).

Arrêter une diffusion

broadcastSession.stop();

Publier la session de diffusion

Vous devez appeler la méthode broadcastSession.release() lorsque la session de diffusion n’est plus utilisé, pour libérer les ressources utilisées par la bibliothèque.

@Override protected void onDestroy() { super.onDestroy(); previewHolder.removeAllViews(); broadcastSession.release(); }