Tous les produits
Search
Centre de documentation

ApsaraVideo VOD:Configuration personnalisée

Dernière mise à jour :Sep 09, 2026

La configuration personnalisée est un mécanisme d'extension d'AliPlayerKit. AliPlayerKit intègre des configurations fondées sur les meilleures pratiques, offrant une expérience de haute qualité dans la plupart des scénarios sans configuration supplémentaire. Lorsque vous avez besoin de fonctionnalités du lecteur non exposées directement par l'interface AliPlayerKit, utilisez le mécanisme de configuration personnalisée pour appeler directement les API du SDK AliPlayer sous-jacent.

Concepts clés

Qu'est-ce que la configuration personnalisée ?

AliPlayerKit est un wrapper de haut niveau pour le SDK AliPlayer sous-jacent et intègre des configurations fondées sur les meilleures pratiques. Toutefois, le SDK sous-jacent offre un éventail plus large de fonctionnalités, telles que des stratégies de mise en mémoire tampon personnalisées, la protection contre le hotlinking par Referer et l'injection d'en-têtes HTTP. Toutes ces fonctionnalités ne sont pas exposées directement par AliPlayerKit.

Le mécanisme de configuration personnalisée fournit deux points d'entrée de rappel. Ils vous permettent d'accéder aux objets sous-jacents à des moments clés et d'appeler directement leurs API natives :

Niveau

API

Moment

Scénarios typiques

Configuration globale

+setOnGlobalInitBlock:

Après la finalisation de l'initialisation interne dans +setup (une seule fois)

Comportements globaux, tels que le niveau de journalisation et le multiplexage HTTP/2

Configuration du lecteur

onPlayerConfigBlock

Avant prepare à chaque appel de configure:

Comportements spécifiques à l'instance, tels que la stratégie de mise en mémoire tampon, le Referer et les en-têtes HTTP

Système de configuration à trois niveaux

Le système de configuration d'AliPlayerKit comporte trois niveaux :

┌─────────────────────────────────────────────────────────┐
│              1. Global Configuration (OnGlobalInitBlock)              │
│         Executes once at app launch, affecting all player instances                │
├─────────────────────────────────────────────────────────┤
│              2. Model Configuration (AliPlayerModel)                 │
│         Sets playback parameters via properties each time configure: is called               │
├─────────────────────────────────────────────────────────┤
│           3. Player Configuration (onPlayerConfigBlock)               │
│       Provides a callback to the underlying player before prepare each time configure: is called          │
└─────────────────────────────────────────────────────────┘

Configuration globale

Cas d'utilisation

  • Définir des options globales, telles que le niveau de journalisation global

  • Activer le multiplexage HTTP/2

  • Configurer une stratégie de résolution DNS globale

  • Implémenter d'autres comportements globaux qui doivent prendre effet avant la création de toute instance de lecteur

Fonctionnement

  • Enregistrez un bloc de rappel en utilisant +[AliPlayerKit setOnGlobalInitBlock:].

  • Le rappel se déclenche une fois après la finalisation de l'initialisation interne par +setup.

  • Après l'exécution, le système définit le bloc sur nil et il ne se déclenchera plus.

  • À ce stade, le SDK sous-jacent est prêt et vous pouvez appeler les API globales en toute sécurité.

Utilisation

Dans application:didFinishLaunchingWithOptions:, enregistrez le rappel avant d'appeler +setup :

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // 1. Register the global custom configuration callback.
    //    This must be called before setup.
    [AliPlayerKit setOnGlobalInitBlock:^{
        // Example: Enable HTTP/2 multiplexing.
        [AliPlayerFactory setOption:ALLOW_H2_MULTIPLEX value:1];

        // Example: Set the global log level.
        // [AliPlayerFactory setLogLevel:AF_LOG_LEVEL_INFO];
    }];

    // 2. Initialize the SDK. This triggers the callback registered above
    //    after internal initialization is complete.
    [AliPlayerKit setup];

    return YES;
}

Séquence de configuration

application:didFinishLaunchingWithOptions:
    │
    ├── [AliPlayerKit setOnGlobalInitBlock:block]   ← Register callback
    │
    └── [AliPlayerKit setup]
            │
            ├── [GlobalManager setup]    ← Initialize underlying SDK
            │
            ├── sInitialized = YES
            │
            └── block()                  ← Trigger global config callback (once only)

Remarques sur l'utilisation

Point clé

Description

Ordre d'appel

setOnGlobalInitBlock: doit être appelé avant +setup

Nombre d'exécutions

La configuration globale n'est exécutée qu'une seule fois. +setup utilise en interne dispatch_once pour la protéger.

Effacer avec nil

Passez nil pour annuler un rappel enregistré.

Idempotence

+setup n'est exécuté qu'une seule fois lors de plusieurs appels. Le rappel ne se déclenche pas après le premier appel.

Configuration du lecteur

Cas d'utilisation

  • Personnaliser la stratégie de mise en mémoire tampon (par exemple, maxBufferDuration et highBufferDuration).

  • Définir la protection contre le hotlinking par Referer.

  • Configurer les en-têtes HTTP.

  • Définir des options au niveau de l'instance.

  • Accéder à d'autres interfaces du lecteur non exposées directement par AliPlayerKit.

Fonctionnement

  • Définissez un bloc de rappel sur la propriété AliPlayerModel.onPlayerConfigBlock.

  • Le rappel se déclenche à chaque appel de [controller configure:model].

  • Le rappel s'exécute après setDataSource: et avant prepare.

  • Le paramètre du rappel est l'instance du lecteur sous-jacent, conforme au protocole MediaPlayer.

Utilisation

Lors de la construction de AliPlayerModel, définissez onPlayerConfigBlock :

VideoSource *source = [VideoSource urlSourceWithUrl:@"https://example.com/video.mp4"];
AliPlayerModel *model = [[AliPlayerModel alloc] initWithVideoSource:source];

// Set the instance-level custom configuration callback
model.onPlayerConfigBlock = ^(id<MediaPlayer> player) {
    // Example 1: Customize the buffering strategy
    AVPConfig *config = [player getConfig];
    config.maxBufferDuration = 50000;       // Max buffer duration: 50s
    config.highBufferDuration = 3000;       // High watermark: 3s
    config.startBufferDuration = 500;       // Start buffer duration: 500ms
    [player setConfig:config];

    // Example 2: Set Referer hotlink protection
    AVPConfig *refConfig = [player getConfig];
    refConfig.referer = @"https://your-domain.com";
    [player setConfig:refConfig];

    // Example 3: Set an instance-level option
    // [player setOption:key value:value];
};

// Configure and play the video
[controller configure:model];

Séquence de configuration

[controller configure:model]
    │
    ├── lifecycleStrategy.acquire()             ← Get player instance
    │
    ├── [mediaPlayer setDataSource:model]       ← Configure video source
    │
    ├── model.onPlayerConfigBlock(mediaPlayer)  ← Trigger player config callback
    │
    ├── [strategyManager start/reset]           ← Start strategy system
    │
    └── [mediaPlayer prepare]                   ← Start preparing for playback

Remarques sur l'utilisation

Point clé

Description

Fréquence de déclenchement

Se déclenche à chaque appel de configure:, ce qui convient aux scénarios de configuration dynamique.

Moment d'exécution

Le meilleur moment pour la configuration personnalisée se situe après setDataSource: et avant prepare.

Paramètre du rappel

L'instance id<MediaPlayer> vous permet d'appeler toutes les interfaces du SDK sous-jacent.

Configuration facultative

onPlayerConfigBlock est facultatif et n'affecte pas la lecture normale.

Éviter l'asynchronisme

Évitez les opérations longues ou asynchrones dans le rappel.

Éléments de configuration intégrés

Configuration globale AliPlayerKit

Utilisez les méthodes de la classe AliPlayerKit pour définir directement les options de configuration intégrées :

Paramètre

Méthode

Description

Initialisation

+setup

Initialise le SDK. dispatch_once garantit l'idempotence.

Statut d'initialisation

+isInitialized

Vérifie si le SDK a été initialisé.

Rappel de configuration globale

+setOnGlobalInitBlock:

Enregistre un rappel de configuration personnalisé qui s'exécute après l'initialisation globale.

Mode débogage

+setDebugModeEnabled: / +isDebugModeEnabled

Active ou désactive le mode débogage (Par défaut : NO)

Panneau de journaux

+setLogPanelEnabled: / +isLogPanelEnabled

Indique s'il faut afficher le panneau de journaux dans la vue du lecteur. La valeur par défaut est NO.

Niveau de journalisation

+setLogLevel: / +logLevel

Niveau de sortie des journaux du SDK (par défaut : LogLevelInfo)

Journal de la console

+enableConsoleLog: / +isConsoleLogEnabled

Indique s'il faut envoyer les journaux vers la console (Par défaut : YES)

Usine de lecteurs

+setPlayerFactory: / +playerFactory

Personnalisez l'usine de création de lecteurs. Passez nil pour restaurer la valeur par défaut.

Préchargeur

+setPreloader: / +preloader

Personnalisez le préchargeur, ou passez nil pour restaurer la valeur par défaut.

Effacer les caches

+clearCaches

Efface le cache multimédia local du lecteur (doit être appelé après setup)

Paramètre de langue

+setLanguageCode:

Spécifiez manuellement un code de langue (zh-Hans / en)

Localisation

+setLocaleProvider:

Injecte un fournisseur de localisation personnalisé.

Langue du système

+resetLocaleToSystemLanguage

Réinitialise la locale pour suivre la langue préférée du système.

Langue actuelle

+currentLanguageCode

Obtient le code de langue actuellement actif.

Informations de version

+getPlayerKitVersion / +getSdkVersion

Obtient le numéro de version d'AliPlayerKit ou du SDK sous-jacent.

Configuration du lecteur AliPlayerModel

Éléments de configuration au niveau de l'instance définis par la propriété AliPlayerModel :

Propriété

Type

Valeur par défaut

Description

videoSource

VideoSource *

—

Obligatoire. Source de données vidéo (readonly, définie via initWithVideoSource:)

sceneType

SceneType

SceneTypeVOD

Scénario de lecture, qui affecte les emplacements d'interface utilisateur et le comportement des gestes.

coverUrl

NSString *

nil

URL de l'image de couverture de la vidéo.

videoTitle

NSString *

nil

Titre affiché dans la barre supérieure.

autoPlay

BOOL

YES

Indique s'il faut démarrer la lecture automatiquement après la configuration.

traceId

NSString *

nil

Identifiant unique de votre application pour la surveillance de la qualité de lecture.

startTime

NSInteger

0

Position de départ de la lecture en millisecondes. Les valeurs négatives sont corrigées à 0.

hardwareDecode

BOOL

YES

Indique s'il faut activer le décodage matériel.

allowScreenSleep

BOOL

NO

Indique s'il faut autoriser la mise en veille de l'écran pendant la lecture.

disableScreenshot

BOOL

NO

Propriété spécifique à iOS pour désactiver les captures d'écran et l'enregistrement d'écran.

onPlayerConfigBlock

void (^)(id<MediaPlayer>)

nil

Rappel de configuration personnalisée au niveau de l'instance.

Configuration d'exécution AliPlayerController

Configurations ajustées dynamiquement au moment de l'exécution par AliPlayerController :

Méthode / propriété

Type

Description

-setRate:

float

Définit la vitesse de lecture. 1.0 correspond à la vitesse normale, 0.5 à la demi-vitesse et 2.0 à la double vitesse.

-setLoop:

BOOL

Active ou désactive la lecture en boucle.

-setMuted:

BOOL

Active ou désactive le mode muet.

-setMirrorMode:

MirrorMode

Mode miroir (None / Horizontal / Vertical)

-setScaleMode:

ScaleMode

Mode de mise à l'échelle (FitXY / FitCenter / CenterCrop)

-setRotateMode:

RotateMode

Angle de rotation (0 / 90 / 180 / 270 degrés)

-setControlsVisible:

BOOL

Affiche ou masque la barre de contrôle.

controlsVisibilityLocked

BOOL

Verrouillage de la visibilité de la barre de contrôle (si défini sur YES, setControlsVisible:NO est ignoré)

-setFullscreen:

BOOL

Entre ou quitte le mode plein écran. La transition est animée par défaut.

-setFullscreen:animated:

BOOL, BOOL

Entre ou quitte le mode plein écran et vous permet de contrôler l'animation.

-selectTrack:

TrackQuality *

Change la qualité de la piste.

-snapshot

—

Capture l'image vidéo actuelle.

-toggle

—

Bascule entre les états de lecture et de pause.

-replay

—

Redémarre la lecture depuis le début.

-stop

—

Arrête la lecture.

autoLifecycleManagement

BOOL

Gestion automatique de la pause et de la reprise en arrière-plan/premier plan (Par défaut : YES)

Priorité de configuration

Règles de priorité

Si le même élément est configuré à plusieurs niveaux, les paramètres sont appliqués selon l'ordre de priorité suivant :

Player configuration (onPlayerConfigBlock) > AliPlayerModel properties > Global configuration > SDK default values

Portée de la configuration

Niveau

Portée

Cycle de vie

Configuration globale

Toutes les instances du lecteur

Niveau application (s'exécute une fois)

Propriétés du modèle

Une seule instance du lecteur

Appel unique de configure:

Rappel de configuration du lecteur

Une seule instance du lecteur

Se déclenche à chaque exécution de configure:

Méthodes du contrôleur

Une seule instance du lecteur

Prend effet dynamiquement au moment de l'exécution

Exemple de configuration

Exemple de code

// ===== Global configuration (in AppDelegate, once only) =====
- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Global custom configuration
    [AliPlayerKit setOnGlobalInitBlock:^{
        // Enable HTTP/2 multiplexing
        [AliPlayerFactory setOption:ALLOW_H2_MULTIPLEX value:1];
    }];

    // Initialize
    [AliPlayerKit setup];

    // Global built-in configuration (must be called after setup)
    [AliPlayerKit setLogLevel:LogLevelWarn];
    [AliPlayerKit enableConsoleLog:YES];

    return YES;
}

// ===== Player configuration (in the player view controller, for each playback) =====
- (void)startPlayback {
    VideoSource *source = [VideoSource urlSourceWithUrl:videoUrl];
    AliPlayerModel *model = [[AliPlayerModel alloc] initWithVideoSource:source];

    // Model property configuration
    model.sceneType = SceneTypeVOD;
    model.videoTitle = @"Awesome Video";
    model.coverUrl = coverImageUrl;
    model.autoPlay = YES;
    model.hardwareDecode = YES;
    model.startTime = resumePosition; // Resume from last position

    // Instance-level custom configuration (for the underlying SDK)
    model.onPlayerConfigBlock = ^(id<MediaPlayer> player) {
        AVPConfig *config = [player getConfig];
        config.maxBufferDuration = 50000;
        config.highBufferDuration = 3000;
        config.startBufferDuration = 500;
        config.referer = @"https://your-domain.com";
        [player setConfig:config];
    };

    [_controller configure:model];
}
Remarque

Les configurations de journalisation telles que setLogLevel: et enableConsoleLog: doivent être appelées après setup car elles opèrent sur l'instance singleton LogHub.

Référence rapide des API

API de configuration globale

Méthode

Description

+[AliPlayerKit setOnGlobalInitBlock:]

Enregistre un rappel de configuration globale. Passez nil pour désenregistrer.

+[AliPlayerKit setup]

Déclenche l'initialisation et exécute le rappel.

API de configuration du lecteur

Classe

Propriété

Description

AliPlayerModel

onPlayerConfigBlock

Rappel de configuration au niveau de l'instance (void (^)(id<MediaPlayer>))

Fichiers connexes

Fichier

Description

PlayerKit/Source/AliPlayerKit.h

API de configuration globale (typedef OnGlobalInitBlock)

PlayerKit/Source/AliPlayerModel.h

Point d'entrée de configuration du lecteur (onPlayerConfigBlock)

PlayerKit/Source/AliPlayerController.h

Définit les méthodes pour la configuration au moment de l'exécution.

PlayerKit/Source/Player/MediaPlayer.h

Définit le protocole pour le lecteur sous-jacent, qui est le type du paramètre du rappel.

Pour une liste complète des API, consultez la Référence API.

FAQ

Ordre d'exécution de la configuration

La configuration globale s'exécute une fois au démarrage de l'application (dans +setup), et la configuration du lecteur s'exécute lors de chaque appel de configure: avant prepare. Les deux ne s'interfèrent pas mutuellement.

Comportement par défaut

AliPlayerKit intègre des configurations fondées sur les meilleures pratiques, ce qui le rend adapté à la plupart des cas d'utilisation sans nécessiter de configuration personnalisée.

Opérations asynchrones dans les rappels

Cela n'est pas recommandé. Les rappels s'exécutent de manière synchrone, ce qui signifie que le lecteur n'exécutera pas prepare tant que le rappel n'est pas terminé. Si vous effectuez une opération longue dans le rappel, cela bloquera le processus de démarrage du lecteur.

Modification de la source vidéo dans les rappels

Cela n'est pas recommandé. La source vidéo est déjà définie via setDataSource: avant le rappel. La modifier dans le rappel peut entraîner un comportement inattendu. Utilisez le rappel de configuration du lecteur uniquement pour définir des paramètres de lecture, tels que la stratégie de mise en mémoire tampon et le Referer.

Appel de setOnGlobalInitBlock: après setup

Cela n'aura aucun effet. La méthode +setup utilise dispatch_once pour garantir qu'elle ne s'exécute qu'une seule fois. Si vous définissez un bloc après l'appel de la méthode +setup, le bloc ne se déclenchera jamais.

Moment de la configuration des journaux

setLogLevel: et enableConsoleLog: doivent être appelés après +setup, car ils opèrent directement sur le singleton LogHub. Cependant, setOnGlobalInitBlock: doit être défini avant +setup.