Tous les produits
Search
Centre de documentation

ApsaraVideo VOD:Android player FAQ

Dernière mise à jour :Aug 10, 2026

Problèmes courants et solutions pour le SDK ApsaraVideo Player pour Android.

Problèmes liés à la licence

Résolvez les problèmes de licence invalide ou expirée dans la FAQ sur les licences.

Problèmes courants multiplateformes

Problèmes de développement

Obtenir la progression actuelle de la lecture

Par défaut, le SDK du lecteur signale la progression de la lecture toutes les 500 ms. Ajustez l'intervalle de rappel selon vos besoins :

// Modify the callback interval.
PlayerConfig config = mAliyunLivePlayer.getConfig();
config.mPositionTimerIntervalMs = 100;// The callback interval in ms.
mAliyunLivePlayer.setConfig(config);

mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        @Override
        public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.CurrentPosition){
            // The current playback progress.
            long currentPosition = infoBean.getExtraValue();
        }
    }
});

Obtenir les données audio et vidéo sources

Pour récupérer les données audio et vidéo brutes, basculez vers le décodage logiciel et lisez une vidéo non chiffrée :

// Switch to software decoding.
mAliPlayer.enableHardwareDecoder(false);
IPlayer.RenderFrameCallbackConfig renderFrameCallbackConfig = new IPlayer.RenderFrameCallbackConfig();
// Specifies whether to return only the underlying video data address. Default value: true.
renderFrameCallbackConfig.mVideoDataAddr = false;
// Specifies whether to return only the underlying audio data address. Default value: false.
renderFrameCallbackConfig.mAudioDataAddr = false;
mAliPlayer.setRenderFrameCallbackConfig(renderFrameCallbackConfig);

mAliPlayer.setOnRenderFrameCallback(new IPlayer.OnRenderFrameCallback() {
    @Override
    public boolean onRenderFrame(FrameInfo frameInfo) {
        return false;
    }
});

Obtenir la width et la height de la vidéo

Récupérez la width et la height de la vidéo à l'aide de l'une des méthodes suivantes :

  • Une fois que l'instance AliPlayer est passée à l'état prepared :

    mAliyunPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
        @Override
        public void onPrepared() {
              mAliyunPlayer.getVideoWidth();
                  mAliyunPlayer.getVideoHeight();
        }
    });
  • Écoutez le rappel de modification de la taille de la vidéo :

    mAliyunPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
        @Override
        public void onVideoSizeChanged(int width, int height) {
    
        }
    });
  • Utilisez les informations de piste :

    mAliyunPlayer.setOnTrackReadyListener(new IPlayer.OnTrackReadyListener() {
        @Override
        public void onTrackReady(MediaInfo mediaInfo) {
        List<TrackInfo> trackInfos = mediaInfo.getTrackInfos();
            for (TrackInfo trackInfo : trackInfos) {
            if(trackInfo.getType() == TrackInfo.Type.TYPE_VIDEO){
            trackInfo.getVideoWidth();
            trackInfo.getVideoHeight();
            }
        }
        }
    });

Obtenir les données de pixels pour chaque image vidéo

Récupérez les données de pixels en écoutant le rappel OnRenderFrameCallback :

player.setOnRenderFrameCallback(frameInfo -> {
    if (frameInfo.frameType == FrameInfo.FrameType_video) {
        // Video data
    } else {
        // Audio data
    }
    return false;
});

Logique de commutation automatique du débit binaire

Lorsque vous appelez mAliPlayer.selectTrack(TrackInfo.AUTO_SELECT_INDEX) pour activer la commutation automatique du débit binaire, le SDK du lecteur calcule la vitesse du réseau. Si la vitesse maintient le niveau de débit binaire suivant pendant 10 secondes, le lecteur effectue la commutation. Sinon, il reste au débit binaire actuel.

  • Du haut vers le bas : si la vitesse du réseau atteint le niveau de débit binaire suivant dans un délai de 10 secondes, le lecteur termine la mise en cache du contenu à haut débit binaire avant d'effectuer la commutation.

  • Du bas vers le haut : le lecteur effectue la commutation immédiatement dès que la vitesse maintient le débit binaire supérieur pendant 10 secondes.

Pour utiliser la commutation automatique du débit binaire, transcodez la vidéo en un flux à débit adaptatif dans la console, puis configurez le lecteur pour le récupérer. Exemple avec VidAuth :

VidAuth vidAuth = new VidAuth();
List<Definition> list = new ArrayList<>();
list.add(Definition.DEFINITION_AUTO);
vidAuth.setDefinition(list);

Logique de nouvelle tentative personnalisée

Par défaut, le SDK du lecteur effectue deux nouvelles tentatives avec un délai d'expiration du réseau de 15 secondes par tentative. Si les deux nouvelles tentatives échouent, un rappel Error est déclenché.

Pour personnaliser la logique de nouvelle tentative, définissez le nombre de nouvelles tentatives sur 0 et gérez les événements de nouvelle tentative en externe :

PlayerConfig config = mAliPlayer.getConfig();
// 1. Set the number of retries. In this example, it is set to 0.
config.mNetworkRetryCount = 0;
mAliPlayer.setConfig(config);

mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        // 2. Listen for the retry event.
       if(infoBean.getCode() == InfoCode.NetworkRetry){
            // TODO: Process the logic as needed.
        }
    }
});

Une erreur unsupported protocol se produit lors de la lecture du flux ARTC

Cause 1 : Le SDK du lecteur est intégré, mais la couche de pont (AlivcArtc) et le composant Real-Time Streaming (RTS) (RtsSDK) ne le sont pas.

Solution : Intégrez les composants requis. Implémenter la récupération de flux RTS sur Android.

Cause 2 : La version de la couche de pont (AlivcArtc) ne correspond pas à la version du lecteur.

Solution : Assurez-vous que la couche de pont (AlivcArtc) et le lecteur utilisent la même version. Implémenter la récupération de flux RTS sur Android.

Cause 3 : Le composant RTS (RtsSDK) n'est pas chargé.

Solution : Chargez le composant RTS (RtsSDK) dans le fichier Application ou dans l'Activity cible selon les besoins.

static {
    System.loadLibrary("RtsSDK");
}

Cause 4 : La version minSDK est trop élevée et la couche de pont (AlivcArtc) n'est pas chargée correctement.

// 1. Modify minSdk
Downgrade minSdk to 21

// 2. Manually load the ARTC library
static {
    System.loadLibrary("RtsSDK");
    System.loadLibrary("cicada_plugin_artcSource");
}

La barre de progression revient en arrière après une opération de seek

Cause : Par défaut, le lecteur utilise une recherche imprécise et démarre la lecture à partir de l'image clé la plus proche.

Solution : Basculez vers le mode de recherche précise.

Comment basculer entre les modes de recherche précise et imprécise

Basculez entre les modes de recherche :

// Inaccurate seek.
mAliPlayer.seekTo(1000);
mAliPlayer.seekTo(1000, IPlayer.SeekMode.Inaccurate);
// Accurate seek.
mAliPlayer.seekTo(1000,IPlayer.SeekMode.Accurate);

La barre de progression revient toujours en arrière après le basculement vers le mode de recherche précise

Cause : Si la distance entre le point de recherche et l'image clé la plus proche dépasse l'intervalle maximal de recherche précise, le SDK du lecteur revient à la recherche imprécise, ce qui entraîne un saut de la barre de progression.

Solution : Augmentez l'intervalle maximal de recherche précise pour réduire le retour à la recherche imprécise. Un intervalle plus long améliore la précision, mais peut augmenter le temps de recherche :

// Unit: ms.
mAliPlayer.setMaxAccurateSeekDelta(10000);

Cache local : le répertoire de cache peut-il être défini sur le répertoire de stockage interne ?

Oui. Définissez le répertoire de cache sur le stockage interne, mais assurez-vous que l'application dispose des autorisations d'accès requises.

Une erreur encrypt check fail se produit lors de la mise en cache de la vidéo

Si le téléchargement sécurisé est activé, le fichier de vérification du chiffrement doit correspondre aux informations de votre application. Téléchargez le fichier depuis Téléchargement hors ligne et enregistrez-le dans le SDK du lecteur. Téléchargement de vidéos. Des fichiers non correspondants entraînent des échecs de mise en cache ou de téléchargement.

Problèmes de lecture

Un plantage se produit lors de la création du lecteur

Procédez au dépannage comme suit :

  1. Vérifiez si l'architecture CPU est x86.

    Le SDK du lecteur prend uniquement en charge les architectures arm64-v8a et armeabi-v7a. Il ne prend pas en charge l'architecture x86.

  2. Vérifiez si les fichiers .so et les dépendances Maven du SDK du lecteur sont tous deux intégrés dans le projet.

    Par exemple, vous avez peut-être intégré le SDK du lecteur à l'aide d'une dépendance Maven dans build.gradle et également intégré les bibliothèques dynamiques liées au lecteur dans le répertoire libs du module du projet.

    Recommandation : Supprimez les bibliothèques dynamiques et utilisez uniquement la dépendance Maven. Si vous devez utiliser des bibliothèques dynamiques, assurez-vous que tous les fichiers .so proviennent de la même version. Intégrer le SDK. Les fichiers de bibliothèque dynamique suivants sont liés au lecteur : libalivcffmpeg.so, libsaasCorePlayer.so et libsaasDownloader.so.

  3. Si vous avez intégré un package partiel, confirmez que la dépendance de version AlivcFFmpeg est correcte.

    Pour plus d'informations sur les dépendances de version AlivcFFmpeg, consultez Dépendances de version AlivcFFmpeg.

Un plantage se produit pendant l'exécution du lecteur

Procédez au dépannage comme suit :

  1. Confirmez si le plantage s'est produit dans le SDK du lecteur.

    Recherchez une pile de plantage avec le préfixe AliyunPlayer. Si une pile avec ce préfixe existe, le problème réside dans le SDK du lecteur.

  2. Mettez à niveau vers la dernière version du SDK du lecteur et vérifiez si le problème est résolu.

  3. Si le problème persiste, collectez les fichiers de plantage (y compris tous les threads), les journaux de plantage et les détails du scénario. Comment récupérer les journaux des problèmes.

Des barres noires apparaissent pendant la lecture vidéo

Procédez au dépannage comme suit :

  1. Vérifiez si la vidéo source comporte elle-même des barres noires.

  2. Vous pouvez ajuster le mode de mise à l'échelle du lecteur à l'aide de l'interface suivante.

    /*
    SCALE_ASPECT_FILL: Fills the screen proportionally. The video is cropped.
    SCALE_ASPECT_FIT: Scales the video proportionally. Black bars may appear.
    SCALE_TO_FILL: Fills the screen without maintaining proportions. The video is distorted.
    */
    mAliPlayer.setScaleMode();
  3. Si le mode de mise à l'échelle ne répond pas à vos besoins, vous pouvez ajuster la taille de SurfaceView ou TextureView au niveau de la couche application.

L'audio est lu mais aucune vidéo n'apparaît

Procédez au dépannage comme suit :

  1. Lisez la vidéo avec un autre lecteur pour vérifier s'il s'agit d'un fichier audio uniquement.

  2. Vérifiez que la vue d'affichage est correctement configurée et n'a pas été supprimée de l'interface de lecture. Définissez la vue d'affichage comme décrit à l'étape 4 de Fonctionnalités de base.

Une erreur Invalid argument se produit lors de la lecture d'une vidéo locale avec des autorisations de lecture

Vérifiez le nom du fichier et le chemin absolu. Évitez de combiner des caractères chinois et des espaces dans le chemin.

Une erreur Permission denied se produit lors de la lecture d'une vidéo locale avec des autorisations de lecture

Sur Android 10 (Android Q) ou version ultérieure, ajoutez android:requestLegacyExternalStorage="true" à la balise application dans AndroidManifest.xml pour gérer la fonctionnalité de stockage étendu.

Une erreur Redirect to a url se produit occasionnellement pendant la lecture vidéo

Cette erreur peut se produire en raison d'un détournement DNS. Activez HTTPDNS pour la résoudre. Configurer HTTPDNS pour Android.

Une barre de notification noire clignote sur les écrans à encoche pendant la lecture en plein écran

Vous pouvez résoudre ce problème en définissant une barre d'état immersive.

Échec de la lecture d'une vidéo MOV

Le SDK du lecteur prend en charge les vidéos MOV. La lecture peut échouer si l'atome moov est situé après l'atome mdat dans le fichier source. Transcodez la vidéo pour déplacer l'atome moov avant l'atome mdat. Étape 2 : Résoudre les problèmes de flux.

Une erreur se produit lors de l'initialisation ou de la lecture, indiquant que la bibliothèque dynamique .so du SDK du lecteur est introuvable

Procédez au dépannage comme suit :

  1. Vérifiez si l'architecture CPU répond aux exigences.

    Le SDK du lecteur prend en charge les bibliothèques dynamiques uniquement pour les architectures arm64-v8a et armeabi-v7a.

  2. Vérifiez si la version du SDK du lecteur est trop ancienne.

    Si vous utilisez le SDK du lecteur V5.4.6.0-full ou une version antérieure, mettez à niveau vers V5.4.6.0-full-15467853 ou une version ultérieure. Notes de version du SDK Android.

Une erreur se produit lors de l'utilisation d'AliListPlayer pour lire des vidéos HLS (m3u8)

Le lecteur de liste AliListPlayer prend en charge les vidéos HLS (m3u8) à partir de la version V5.4.5.0, mais la mise en cache locale doit être activée. Cache local.

Le SDK du lecteur Android prend-il en charge la lecture de vidéos depuis les dossiers assets et raw d'un projet Android ?

Non. Copiez la vidéo dans le stockage de l'appareil et utilisez le chemin absolu pour la lecture.

Une erreur 403 se produit et la lecture échoue après avoir configuré la mise en cache locale pour un flux vidéo HLS

Symptôme : Lorsque vous lisez un flux vidéo HLS (M3U8) à l'aide de la méthode de lecture VidAuth avec la mise en cache locale activée, la lecture échoue et une erreur 403 est signalée.

Cause : Après l'activation de la mise en cache locale, si vous quittez la lecture avant que la vidéo ne soit entièrement mise en cache, la partie non mise en cache est demandée à l'aide des informations VidAuth expirées de la session précédente lors du prochain démarrage de la lecture. Cela entraîne un échec d'authentification et une erreur 403.

Solution : Pour le SDK du lecteur V5.5.4.0 et versions ultérieures, si l'URL de lecture de la vidéo contient des paramètres d'authentification et que le protocole de lecture est HLS, vous pouvez définir le champ PlayerConfig.mEnableStrictAuthMode pour sélectionner un mode d'authentification différent. La valeur par défaut est false.

  • Authentification non stricte (false) : L'authentification est mise en cache. Si seule une partie du média a été mise en cache précédemment, le lecteur utilise l'authentification mise en cache pour les demandes suivantes. Si l'authentification URL a une courte période de validité ou si la lecture reprend après une longue pause, l'authentification peut expirer. Intégrez-vous avec l'actualisation automatique des sources de lecture pour gérer l'expiration de l'authentification.

  • Authentification stricte (true) : L'authentification n'est pas mise en cache. L'authentification a lieu à chaque démarrage, ce qui entraîne un échec de démarrage sans réseau.

Le SDK du lecteur Android prend-il en charge la lecture pendant le téléchargement ?

Non. Le SDK du lecteur met en cache et télécharge les fichiers vidéo pendant la lecture lorsque la mise en cache locale est activée. Les fichiers mis en cache sont lus directement lors des lectures suivantes. Le déplacement des fichiers mis en cache depuis leur répertoire d'origine n'est pas pris en charge.

Le SDK du lecteur Android prend-il en charge l'obtention de la vitesse de mise en buffer d'une vidéo ?

Oui. Le SDK du lecteur fournit la vitesse de mise en buffer, le taux d'images de rendu en temps réel, les débits binaires audio et vidéo, ainsi que le débit binaire de téléchargement du réseau. Obtenir des informations de lecture.

Lecture anormale des vidéos HDR

Le SDK du lecteur ne prend actuellement pas en charge les vidéos HDR avec des angles de rotation. Des erreurs de lecture peuvent se produire pour ces vidéos.

Si une vidéo est transcódée en plusieurs définitions, quelle définition le SDK du lecteur lit-il par défaut ?

L'ordre de lecture par défaut est FD, LD, SD, HD, 2K, 4K, OD. Définition. Le SDK du lecteur lit la première définition disponible selon cet ordre.

Comment spécifier la définition de lecture par défaut

Exemple :

// The VidSts playback method is used as an example.
VidSts vidSts = new VidSts();
// The code for setting parameters such as vid, AccessKeyId, AccessKeySecret, and token is omitted. For more information, see the player creation settings in the Basic Features topic.
/*
    Parameter 1: The desired playback definition. Valid values: FD, LD, SD, HD, 2K, 4K, and OD.
    Parameter 2: Specifies whether to enforce playback of the desired definition. false: Does not enforce playback of the desired definition. The player SDK searches for a definition to play based on the default order. true: Enforces playback of the desired definition. If the desired definition is not found, the video is not played.
*/
vidSts.setQuality("",false);

Si une définition comporte plusieurs flux, quel flux le SDK du lecteur lit-il ?

Si une définition comporte plusieurs flux, le SDK du lecteur lit le flux le plus récent.

Autres problèmes

Comment lire une vidéo sans filigrane mais la télécharger avec un filigrane

Transcodez la vidéo en plusieurs définitions. Lisez la définition sans filigrane et téléchargez la définition avec filigrane.

Comment obtenir les journaux des problèmes

Soumettez les journaux des problèmes pour aider le support technique Alibaba Cloud à résoudre votre problème plus rapidement.

  1. Récupérez les journaux des problèmes.

    Définissez le niveau de journal sur AF_LOG_LEVEL_TRACE avant de collecter les journaux. Obtenir les journaux du SDK.

  2. Fournissez les journaux générés au support technique Alibaba Cloud.