Intégrez le SDK ApsaraVideo Player dans votre application Android pour recevoir des flux en direct via Real-Time Streaming (RTS) avec une latence ultra-faible.
Avant de commencer
Vérifiez que vous disposez des éléments suivants :
Une URL de streaming RTS utilisant le protocole
artc://ApsaraVideo Player SDK version 5.4.5.0 ou ultérieure. Pour les liens de téléchargement, consultez la rubrique Téléchargement du SDK
Limitations de RTS
RTS présente les limitations suivantes :
Pas de prise en charge de la pause. L'appel à la méthode
pausesur un flux RTS en direct n'est pas pris en charge. Appelezstoppour arrêter la lecture, puis appelezpreparepour la reprendre.Pas de recherche temporelle. La fonction de recherche (glissement de la barre de progression) n'est pas prise en charge.
Intégrer le SDK
Ajoutez le SDK ApsaraVideo Player et les dépendances RTS via Maven.
-
Ajoutez le dépôt Maven au fichier
build.gradlesitué dans le répertoire racine du projet.// Maven repository for Alibaba Cloud SDKs (ApsaraVideo Player) maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases' } -
Ajoutez les dépendances suivantes au fichier
app/build.gradle.def player_sdk_version = "x.x.x" // We recommend using the latest version. def rts_sdk_version = "7.12.0" // Independent version number, currently the latest version. // Player main library implementation "com.aliyun.sdk.android:AliyunPlayer:$player_sdk_version-full" // RTS bridge component (AlivcArtc). The version number must match the player version exactly. // Must be integrated together with the RTS component. implementation "com.aliyun.sdk.android:AlivcArtc:$player_sdk_version" // RTS component implementation "com.aliyun.rts.android:RtsSDK:$rts_sdk_version"
La version du composant pont RTS (AlivcArtc) doit correspondre exactement à celle du lecteur. Intégrez-le conjointement avec le composant RTS. Pour les questions fréquentes, consultez la rubrique FAQ sur le lecteur Android.
Implémenter la lecture RTS
Utilisez les méthodes du SDK ApsaraVideo Player pour lire un flux RTS. Pour découvrir les autres fonctionnalités du lecteur, reportez-vous aux rubriques Fonctionnalités avancées et Référence API.
Les exemples de code ci-dessous sont simplifiés. Pour obtenir le code complet, consultez le module Lecture de flux en temps réel RTS dans le projet API-Example.
Étape 1 : Charger la bibliothèque RTS
Ajoutez l'initialiseur statique suivant à votre Activity :
static {
System.loadLibrary("RtsSDK");
}
Étape 2 : Créer un lecteur
Créez une instance AliPlayer via la classe AliPlayerFactory.
// Create a player instance
AliPlayer mAliPlayer = AliPlayerFactory.createAliPlayer(context);
// Optional: Set a trace ID for single-point tracing
// Use a unique identifier for the user or device, such as a user ID, IMEI, or IDFA.
mAliPlayer.setTraceId("traceId");
Le lecteur prend en charge la Surveillance de la qualité de lecture, le Dépannage ponctuel et les Statistiques de lecture vidéo. Ces trois fonctionnalités s'appuient sur la génération de journaux d'instrumentation. Le paramètre setTraceId détermine quelles fonctionnalités sont disponibles :
**Valeur de setTraceId** |
Génération de journaux | Surveillance de la qualité | Traçage ponctuel | Statistiques de lecture |
|---|---|---|---|---|
| Non définie (par défaut) | Activée | Disponible | Non disponible | Disponible |
| Valeur personnalisée (par exemple, ID utilisateur) | Activée | Disponible | Disponible | Disponible |
DisableAnalytics |
Désactivée | Non disponible | Non disponible | Non disponible |
Étape 3 : Définir la vue d'affichage
Le lecteur prend en charge trois types de vues : AliDisplayView (recommandé), SurfaceView et TextureView. Choisissez l'une des options suivantes.
Option A : AliDisplayView (recommandé)
Déclarez la vue dans la mise en page XML :
<!-- Player rendering view -->
<com.aliyun.player.videoview.AliDisplayView
android:id="@+id/ali_display_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
Lie la vue au lecteur :
AliDisplayView mAliDisplayView = findViewById(R.id.display_view);
// Set the playback view type using setPreferDisplayView()
mAliDisplayView.setPreferDisplayView(AliDisplayView.DisplayViewType.SurfaceView);
mAliPlayer.setDisplayView(mAliDisplayView);
Option B : SurfaceView
Déclarez la vue dans la mise en page XML :
<!-- Player rendering view -->
<SurfaceView
android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
Lie la surface au lecteur :
SurfaceView mSurfaceView = findViewById(R.id.surface_view);
mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(@NonNull SurfaceHolder holder) {
mAliPlayer.setSurface(holder.getSurface());
}
@Override
public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {
mAliPlayer.surfaceChanged();
}
@Override
public void surfaceDestroyed(@NonNull SurfaceHolder holder) {
mAliPlayer.setSurface(null)
}
});
Option C : TextureView
Déclarez la vue dans la mise en page XML :
<!-- Player rendering view -->
<TextureView
android:id="@+id/texture_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center" />
Lie la surface au lecteur :
TextureView mTextureView = findViewById(R.id.texture_view);
mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(@NonNull SurfaceTexture surface, int width, int height) {
mAliPlayer.setSurface(new Surface(surface));
}
@Override
public void onSurfaceTextureSizeChanged(@NonNull SurfaceTexture surface, int width, int height) {
mAliPlayer.surfaceChanged();
}
@Override
public boolean onSurfaceTextureDestroyed(@NonNull SurfaceTexture surface) {
mAliPlayer.setSurface(null);
return true;
}
@Override
public void onSurfaceTextureUpdated(@NonNull SurfaceTexture surface) {
}
});
Étape 4 : Définir la source de lecture
Le lecteur prend en charge quatre types de sources de lecture : VidSts, VidAuth, VidMps et UrlSource. Pour la lecture RTS, utilisez UrlSource avec une URL artc:// :
UrlSource urlSource = new UrlSource();
urlSource.setUri("artc://<Streaming URL>");
mAliPlayer.setDataSource(urlSource);
Pour plus de détails sur les autres types de sources de lecture, consultez la rubrique Fonctionnalités de base.
Étape 5 : Configurer les paramètres de faible latence
À partir de la version 6.3.0 du SDK ApsaraVideo Player, les paramètres optimaux de faible latence sont automatiquement appliqués lorsque l'URL de lecture commence par artc:// et que les paramètres mMaxDelayTime, mHighBufferDuration et mStartBufferDuration dans PlayerConfig n'ont pas été modifiés manuellement. Les valeurs automatiques sont les suivantes :
| Paramètre | Valeur | Description |
|---|---|---|
mMaxDelayTime |
1000 ms | Délai maximal |
mStartBufferDuration |
10 ms | Durée de mise en mémoire tampon pour le démarrage de la lecture |
mHighBufferDuration |
10 ms | Durée de mise en mémoire tampon pour la récupération après saccades |
Pour remplacer ces valeurs par défaut, configurez-les manuellement :
// 1. Get and modify the configurations
PlayerConfig config = mAliPlayer.getConfig();
if (playUrl.startWith("artc://")) {
// Maximum delay: 1000 milliseconds
config.mMaxDelayTime = 1000;
// Buffer duration for playback startup: 10 milliseconds
config.mStartBufferDuration = 10;
// Buffer duration for stuttering recovery: 10 milliseconds
config.mHighBufferDuration = 10;
} else {
// Use default configurations or customize to other configurations
}
// 2. Apply the configurations
mAliPlayer.setConfig(config);
Étape 6 : Démarrer la lecture
// Prepare for playback
mAliPlayer.prepare();
// Start playback
mAliPlayer.start();
Contrôler la lecture
Démarrer
mAliPlayer.start();
Arrêter
mAliPlayer.stop();
Détruire le lecteur
Détruisez l'instance du lecteur via une destruction synchrone ou asynchrone.
// Synchronous destruction. The system automatically calls the stop interface.
mAliPlayer.release();
// Asynchronous destruction. The system automatically calls the stop interface.
mAliPlayer.releaseAsync();
La méthode synchrone release() bloque l'exécution jusqu'à ce que toutes les ressources du lecteur soient libérées. Pour une réponse plus rapide de l'interface utilisateur, utilisez plutôt releaseAsync(). Lors de l'utilisation de la destruction asynchrone :
N'effectuez aucune autre opération sur l'objet lecteur pendant la destruction.
Il est inutile d'appeler
stopavantreleaseAsync()car le processus inclut en interne un flux d'arrêt asynchrone.
Dégradation RTS
Lorsque la réception du flux RTS échoue en raison d'un délai d'attente, le lecteur peut automatiquement basculer vers un protocole alternatif. La dégradation s'applique uniquement aux scénarios de délai d'attente. D'autres erreurs, telles que 404, 403 ou la déconnexion de l'émetteur, déclenchent plutôt le rappel onError.
La dégradation automatique utilise le même nom de domaine pour le basculement de RTS vers FLV. Si vos noms de domaine RTS et FLV diffèrent, configurez une dégradation personnalisée pour spécifier le domaine FLV cible.
Dégradation automatique (activée par défaut)
Lorsque la réception du flux RTS échoue et qu'aucune dégradation personnalisée n'est configurée, le lecteur bascule automatiquement vers l'adresse FLV par défaut dérivée de l'URL RTS :
// 1 means enabled, 0 means disabled. Enabled by default.
AliPlayerGlobalSettings.setOption(AliPlayerGlobalSettings.ALLOW_RTS_DEGRADE, 1);
Dégradation personnalisée
Spécifiez une URL de dégradation (telle qu'une adresse HLS ou FLV) en cas d'échec de la réception du flux RTS :
PlayerConfig config = mAliPlayer.getConfig();
// Optional: Configure other items in config
UrlSource urlSource = new UrlSource();
urlSource.setUri(downgradeUrl);
// Set the degradation URL
mAliPlayer.enableDowngrade(urlSource, config);
Récupérer le TraceID
Chaque session de lecture RTS génère un TraceID pour le dépannage. Récupérez-le via le rappel d'événement du lecteur :
// Listen for the player's onInfo callback and parse the DemuxerTraceID message
mAliPlayer.setOnInfoListener(infoBean -> {
if (infoBean.getCode() == InfoCode.DemuxerTraceID) {
String traceId = infoBean.getExtraMsg();
}
});
Journalisation
Activez ou désactivez la journalisation de la console pour le débogage :
// Enable logging
Logger.getInstance(context).enableConsoleLog(true);
Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_TRACE);
// Disable logging
Logger.getInstance(context).enableConsoleLog(false);
Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_NONE);