Tous les produits
Search
Centre de documentation

ApsaraVideo Live:Implement RTS stream pulling on Android

Dernière mise à jour :Aug 19, 2026

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 pause sur un flux RTS en direct n'est pas pris en charge. Appelez stop pour arrêter la lecture, puis appelez prepare pour 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.

  1. Ajoutez le dépôt Maven au fichier build.gradle situé 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' }
  2. 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"
Remarque

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.

Remarque

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");
Remarque

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();
Remarque

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 :

  1. N'effectuez aucune autre opération sur l'objet lecteur pendant la destruction.

  2. Il est inutile d'appeler stop avant releaseAsync() 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.

Remarque

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