Intégrez le SDK de push ApsaraVideo Live dans votre application Android pour capturer les entrées de la caméra et du microphone, puis diffuser un flux en direct vers un endpoint d'ingestion.
Fonctionnement
Le SDK de push gère l'intégralité du pipeline, de la capture des médias à leur diffusion :
Le SDK capture la vidéo via la caméra et l'audio via le microphone.
Votre application appelle le SDK pour initialiser un flux de push avec l'URL d'ingestion fournie par ApsaraVideo Live.
Le SDK encode et transmet le flux vers l'endpoint d'ingestion en temps réel.
Les spectateurs se connectent à l'URL de lecture pour regarder le flux en direct.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un compte Alibaba Cloud avec le service ApsaraVideo Live activé
Un projet Android ciblant Android 5.0 (niveau d'API 21) ou une version ultérieure
Android Studio 3.0 ou une version ultérieure
Une URL d'ingestion valide obtenue depuis la console ApsaraVideo Live
Intégrer le SDK
Ajouter la dépendance Maven
Le SDK de push est distribué via Maven. Ajoutez la dépendance en fonction de la version de votre plugin Android Gradle (AGP).
Pour AGP 7.1.0 ou une version ultérieure, ajoutez le dépôt Maven dans settings.gradle :
dependencyResolutionManagement {
repositories {
maven { url 'https://maven.aliyun.com/repository/central' }
}
}
Pour les versions d'AGP antérieures à 7.1.0, ajoutez le dépôt Maven dans le fichier build.gradle au niveau du projet :
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/repository/central' }
}
}
Si dependencyResolutionManagement n'est pas présent dans settings.gradle, votre version d'AGP est antérieure à 7.1.0. Utilisez plutôt l'approche via build.gradle.
Ensuite, ajoutez la dépendance du SDK dans le fichier build.gradle au niveau de l'application :
dependencies {
implementation 'com.aliyun.video.android:pusher:x.x.x'
}
Remplacez x.x.x par la dernière version du SDK. Pour connaître la version actuelle, consultez les notes de version d'ApsaraVideo Live.
Déclarer les permissions
Ajoutez les permissions suivantes à votre fichier AndroidManifest.xml :
<!-- Camera access for video capture -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- Microphone access for audio capture -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Network access for stream delivery -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Network state detection for adaptive bitrate -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Wi-Fi state detection -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Read local media files -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- Keep screen on during streaming -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- Background streaming support -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
Sur Android 6.0 (niveau d'API 23) et les versions ultérieures, les permissions CAMERA et RECORD_AUDIO sont considérées comme dangereuses et doivent être demandées au moment de l'exécution. Demandez-les avant de démarrer le flux de push.
Configurer ProGuard
Si votre application utilise la réduction de code, ajoutez les règles suivantes à votre fichier de configuration ProGuard :
-keep class com.alivc.** { *; }
-keep class com.aliyun.** { *; }
-dontwarn com.alivc.**
-dontwarn com.aliyun.**
Démarrer un flux de push
Initialiser le pusher
Créez une instance AlivcLivePusher et configurez-la avec AlivcLivePushConfig :
Java
AlivcLivePushConfig config = new AlivcLivePushConfig();
config.setResolution(AlivcResolutionEnum.RESOLUTION_540P);
config.setFps(AlivcFpsEnum.FPS_20);
config.setEnableBitrateControl(true);
AlivcLivePusher pusher = new AlivcLivePusher();
pusher.init(context, config);
Kotlin
val config = AlivcLivePushConfig().apply {
resolution = AlivcResolutionEnum.RESOLUTION_540P
fps = AlivcFpsEnum.FPS_20
isEnableBitrateControl = true
}
val pusher = AlivcLivePusher()
pusher.init(context, config)
Ajouter une surface de prévisualisation
Lieez une SurfaceView au pusher pour afficher l'aperçu de la caméra :
Java
SurfaceView previewView = findViewById(R.id.preview_surface);
pusher.startPreview(previewView);
Kotlin
val previewView = findViewById<SurfaceView>(R.id.preview_surface)
pusher.startPreview(previewView)
Démarrer et arrêter la diffusion
Appelez startPush avec votre URL d'ingestion pour commencer la diffusion. Remplacez <your-ingest-domain> et <stream-name> par les valeurs issues de votre console ApsaraVideo Live.
Java
String ingestUrl = "rtmp://<your-ingest-domain>/live/<stream-name>";
pusher.startPush(ingestUrl);
Kotlin
val ingestUrl = "rtmp://<your-ingest-domain>/live/<stream-name>"
pusher.startPush(ingestUrl)
Pour arrêter le flux et libérer les ressources :
Java
pusher.stopPush();
pusher.destroy();
Kotlin
pusher.stopPush()
pusher.destroy()
Gérer le cycle de vie du pusher
Appelez les méthodes suivantes dans les rappels du cycle de vie de votre Activity afin d'éviter les fuites de ressources :
Java
@Override
protected void onResume() {
super.onResume();
pusher.resumePush();
}
@Override
protected void onPause() {
super.onPause();
pusher.pausePush();
}
@Override
protected void onDestroy() {
super.onDestroy();
pusher.stopPush();
pusher.destroy();
}
Kotlin
override fun onResume() {
super.onResume()
pusher.resumePush()
}
override fun onPause() {
super.onPause()
pusher.pausePush()
}
override fun onDestroy() {
super.onDestroy()
pusher.stopPush()
pusher.destroy()
}
Vérifier le flux
Après avoir appelé startPush , confirmez que le flux est actif :
Ouvrez la console ApsaraVideo Live.
Accédez à Live Management > Streams.
Vérifiez que le nom de votre flux apparaît dans la liste des flux actifs.
Testez la lecture à l'aide de l'URL de lecture dans un lecteur multimédia ou un navigateur.
Étapes suivantes
Configurer la qualité du flux et le débit binaire — ajustez la résolution, la fréquence d'images et le débit binaire en fonction des différentes conditions réseau.
Ajouter des filtres de beauté — appliquez des filtres et des embellissements du visage en temps réel.
Gérer les événements de push et les erreurs — implémentez
AlivcLivePusherErrorListenerpour surveiller l'état du flux et récupérer après des échecs.