Tous les produits
Search
Centre de documentation

ApsaraVideo Live:Décalage temporel

Dernière mise à jour :Aug 19, 2026

Le décalage temporel permet aux spectateurs de lire un flux en direct depuis son heure de début jusqu'à l'heure actuelle. Cette rubrique explique le fonctionnement du décalage temporel et la manière d'envoyer des requêtes.

Cas d'utilisation

La fonctionnalité de décalage temporel permet aux spectateurs de rembobiner un flux en direct pendant la lecture. Par exemple, lors d'une retransmission sportive en direct, les spectateurs peuvent utiliser le décalage temporel pour revoir certaines parties de l'événement.

Fonctionnement

ApsaraVideo Live découpe les flux en segments TS et les distribue aux spectateurs via le protocole HLS. La requête d'un spectateur pour une liste de lecture M3U8 contient une liste constamment mise à jour des adresses des segments TS. Pour la diffusion en direct HLS standard, les adresses des segments TS et les fichiers TS correspondants ne sont pas enregistrés. Cela signifie que vous ne pouvez pas rembobiner le flux en direct. Lorsque vous activez le décalage temporel, ApsaraVideo Live enregistre les informations et les fichiers des segments TS. Vous pouvez ainsi rembobiner la vidéo depuis le début du flux en direct jusqu'à l'heure actuelle.

Limites

Le décalage temporel prend en charge un maximum de 100 000 spectateurs simultanés. Pour prendre en charge davantage de spectateurs, soumettez un ticket. Pour plus d'informations, consultez Contactez-nous.

Utilisation

Remarque
  • L'utilisation de la fonctionnalité de décalage temporel entraîne des frais. Vous êtes facturé en fonction du volume de données de décalage temporel écrites et des spécifications de la lecture en décalage temporel. Pour plus d'informations sur les règles de facturation, consultez Frais de décalage temporel.

  • Pour connaître les régions qui prennent en charge la fonctionnalité de décalage temporel, consultez Régions prises en charge.

Pour utiliser le décalage temporel, suivez les deux étapes suivantes :

  1. Configurez la fonctionnalité de décalage temporel.

    Remarque

    Vous devez activer cette fonctionnalité pour enregistrer le contenu du flux en direct destiné au décalage temporel.

  2. Envoyez une requête depuis le client pour utiliser la fonctionnalité de décalage temporel.

Configuration du décalage temporel

Configurer le décalage temporel dans la console

  1. Connectez-vous à la console ApsaraVideo Live.

  2. Dans le volet de navigation de gauche, choisissez Feature Management > Time Shifting pour accéder à la page Time Shifting.

  3. Sélectionnez le domaine de streaming que vous souhaitez configurer.

  4. Cliquez sur Add.

  5. Configurez le décalage temporel.

    Le tableau suivant décrit les paramètres de configuration du décalage temporel.

    Paramètre

    Description

    AppName

    Nom de l'application. Cette configuration n'est effective que lorsque le AppName correspond au AppName utilisé pour l'ingestion du flux. Le nom peut comporter jusqu'à 255 caractères et contenir des chiffres, des lettres majuscules, des lettres minuscules, des traits d'union (-) et des underscores (_). Les traits d'union et les underscores ne peuvent pas se trouver au début du nom. Pour configurer le décalage temporel au niveau du domaine, saisissez un astérisque (*).

    Stream Name

    Nom du flux.

    Time-shift Scope

    • Original Only : seul le flux original prend en charge le décalage temporel.

    • Original & Transcoded : les flux originaux et transcodés prennent tous deux en charge le décalage temporel.

    Retention Period

    ApsaraVideo Live propose les périodes de conservation suivantes :

    • 1 jour

    • 3 jours

    • 7 jours

    • 15 jours

    • 30 jours

    Remarque
    • Après avoir configuré le décalage temporel, vous devez ré-ingérer le flux pour que la configuration prenne effet.

    • Vous pouvez accéder directement au flux en décalage temporel en utilisant l'URL correspondant au domaine de streaming. Pour plus d'informations sur les spécifications de l'URL, consultez Règles de décalage temporel.

    • Si un domaine de streaming principal est associé à un sous-domaine de streaming, vous devez activer le décalage temporel pour le sous-domaine de streaming. Sinon, la configuration du décalage temporel ne s'applique pas au sous-domaine de streaming.

  6. Cliquez sur OK.

Configurer le décalage temporel via une API

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
    /**
     * <b>description</b> :
     * <p>Initializes a client by using credentials.</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.live20161101.Client createClient() throws Exception {
        // For production environments, we recommend using a more secure, credential-free method. For more information about how to configure credentials, see https://www.alibabacloud.com/help/document_detail/378657.html.
        com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setCredential(credential);
        // For the endpoint, see https://api.alibabacloud.com/product/live.
        config.endpoint = "live.aliyuncs.com";
        return new com.aliyun.live20161101.Client(config);
    }
    public static void main(String[] args_) throws Exception {
        com.aliyun.live20161101.Client client = Sample.createClient();
        com.aliyun.live20161101.models.OpenLiveShiftRequest openLiveShiftRequest = new com.aliyun.live20161101.models.OpenLiveShiftRequest()
                .setRegionId("<Your RegionId>")
                .setDomainName("<Your DomainName>")
                .setAppName("<Your AppName>")
                .setStreamName("<Your StreamName>");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // When you copy the code to run, print the API response on your own.
            client.openLiveShiftWithOptions(openLiveShiftRequest, runtime);
        } catch (TeaException error) {
            // This is for demonstration purposes only. In your production environment, handle exceptions with care and do not ignore them.
            // Error message
            System.out.println(error.getMessage());
            // Diagnostic address
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // This is for demonstration purposes only. In your production environment, handle exceptions with care and do not ignore them.
            // Error message
            System.out.println(error.getMessage());
            // Diagnostic address
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}
Remarque
  • Vous pouvez définir AppName sur un astérisque (*) pour appliquer la configuration à tous les flux en direct sous le domaine spécifié.

  • Vous pouvez définir StreamName sur un astérisque (*) pour appliquer la configuration à tous les flux en direct sous le AppName spécifié.

  • Après avoir ajouté la configuration, vous pouvez appeler l'opération DescribeLiveShiftConfigs pour interroger les configurations de décalage temporel d'un domaine spécifique.

  • Pour plus d'informations sur l'utilisation du SDK Java, consultez Guide d'utilisation du SDK Java.

  • Vous devez ré-ingérer le flux pour que la configuration prenne effet.

  • Pour plus d'informations sur les paramètres, consultez OpenLiveShift.

Demande de lecture en décalage temporel

Une fois le décalage temporel configuré, ApsaraVideo Live enregistre les fichiers de segments TS du flux en direct. Le client peut alors envoyer une requête de lecture en décalage temporel pour lire les segments précédemment enregistrés du flux en direct.

Le code suivant fournit un exemple de requête de lecture en décalage temporel :

http://<DomainName>/<AppName>/<StreamName.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******

Comme illustré dans l'exemple, la requête de décalage temporel est similaire à une URL de diffusion en direct pour une liste de lecture M3U8, mais elle inclut deux paramètres supplémentaires. aliyunols=on est un paramètre obligatoire, et lhs_offset_unix_s_0=300 indique un rembobinage de 300 secondes.

Remarque
  • Lorsque vous envoyez une requête de décalage temporel via un réseau de diffusion de contenu (CDN), vous devez inclure le paramètre aliyunols=on.

  • Actuellement, la lecture en décalage temporel prend uniquement en charge les URLs de diffusion en direct au format M3U8.

  • Utilisez ApsaraVideo Player pour lire le contenu en décalage temporel. Pour plus d'informations sur l'utilisation d'ApsaraVideo Player, consultez SDK du lecteur.

Dans cet exemple, le contenu en direct est rembobiné de 300 secondes. Lors de la lecture de contenu en décalage temporel, vous pouvez utiliser le paramètre lhs_offset_unix_s_0 pour définir l'heure de lecture. Le format du paramètre est lhs_{type}_{format}_{unit}_{zone}.

Le tableau suivant décrit les variables du paramètre.

Type

Format

Unité

Fuseau horaire

Type d'heure. Valeurs possibles :

  • start : heure de début de la lecture.

  • end : heure de fin de la lecture.

  • vodend : spécifie l'heure de fin de la lecture en mode vidéo à la demande (VOD).

    Remarque

    Lorsque le type est vodend, la lecture s'effectue en mode VOD. Le serveur renvoie une liste de lecture complète de tous les segments TS dans la plage de temps spécifiée en une seule fois, terminée par une balise endlist.

  • offset : durée de décalage pour le rembobinage.

Format de l'heure pour le décalage temporel. Valeurs possibles :

  • unix : horodatage UNIX.

  • human : au format AAAAMMJJHHMMSS. Exemple : 20170809230130.

Unité de temps pour le décalage temporel. Valeurs possibles :

  • s : seconde.

  • ms : milliseconde.

Fuseau horaire. Valeurs possibles : 0 à 9, ce qui indique UTC+*. 0 indique UTC, et 8 indique l'heure normale de Chine.

Remarque

Si vous définissez le format sur unix, définissez le fuseau horaire sur 0.

Les exemples suivants montrent les paramètres de décalage temporel :

  • lhs_start_human_s_8=20170809200010

  • lhs_start_unix_s_0=1502280113

  • lhs_end_human_s_8=20170809200010

  • lhs_vodend_unix_s_0=1502280113

  • lhs_offset_unix_ms_0=1800000 (rembobinage de 30 minutes)

Important
  • Vous devez spécifier soit lhs_start, soit lhs_offset. Si vous spécifiez à la fois lhs_start et lhs_offset, lhs_offset est prioritaire.

  • lhs_end/lhs_vodend est un paramètre facultatif. Si vous ne spécifiez pas lhs_end/lhs_vodend, la lecture se poursuit en mode direct jusqu'à la fin de l'ingestion du flux.

  • Si vous spécifiez lhs_end, la lecture se poursuit en mode direct jusqu'à l'heure lhs_end spécifiée.

  • Si vous spécifiez lhs_vodend, la lecture se poursuit en mode vidéo à la demande (VOD) jusqu'à l'heure lhs_vodend spécifiée. En mode VOD, tous les segments TS sont renvoyés en une seule fois, et vous pouvez utiliser la barre de progression du lecteur pour avancer et rembobiner rapidement.

  • Si vous spécifiez à la fois lhs_end et lhs_vodend, lhs_vodend est prioritaire.

Si vous ne connaissez pas les heures de début et de fin spécifiques, vous pouvez interroger la chronologie du décalage temporel pour les obtenir.

L'exemple suivant montre comment interroger la chronologie du décalage temporel :

// Replace the values in angle brackets (<>) with your actual values.
http://<DomainName>/openapi/timeline/query?aliyunols=on&app=<AppName>&stream=<StreamName>&format=ts&lhs_start_unix_s_0=<StartTime>&lhs_end_unix_s_0=<endTime>&auth_key=<auth_key>

Le tableau suivant décrit les paramètres de l'exemple.

Paramètre

Description

Méthode de requête

GET

URL

URL de la requête. Exemple : http://{domain}/openapi/timeline/query, où {domain} est votre domaine de streaming.

Paramètres

  • aliyunols (obligatoire) : on. (champ fixe)

  • app (obligatoire) : nom de l'application.

  • stream (obligatoire) : nom du flux.

  • format (obligatoire) : ts. (champ fixe)

    Remarque

    Actuellement, l'API prend uniquement en charge l'interrogation des données de décalage temporel au format ts.

  • lhs_start_unix_s_0 (obligatoire) : horodatage UNIX du début de la plage de temps de la requête. Exemple : 1724295706. Unité : secondes.

  • lhs_end_unix_s_0 (obligatoire) : horodatage UNIX de la fin de la plage de temps de la requête. Exemple : 1724317306. Unité : secondes.

  • auth_key : clé d'authentification. Cette clé utilise le same algorithme de chiffrement que la clé utilisée pour l'URL de streaming. Si vous n'êtes pas familier avec l'authentification et le chiffrement, consultez Exemples de code d'authentification.

Gestion des erreurs courantes

  • 403 : vérifiez si le processus de chiffrement de votre valeur auth_key est correct.

L'exemple suivant montre un échantillon de réponse :

{
  "retCode": 0,
  "description": "success",
  "content": {
    "current": 1514269063,
    "timeline": [
      {
        "start": 1514269054,
        "end": 1514269058
      }
    ]
  }
}

Paramètre

Description

current

L'heure système actuelle. Le lecteur peut utiliser ce champ pour synchroniser l'heure.

timeline

La période de décalage temporel valide, qui comprend les horodatages UNIX de début et de fin.

start

L'heure de début du segment valide (horodatage UNIX). Unité : secondes.

end

L'heure de fin du segment valide (horodatage UNIX). Unité : secondes.

Remarque
  • En règle générale, une ingestion de flux génère un objet de chronologie. L'heure de début correspond à l'heure de début du flux en direct, et l'heure de fin est proche de l'heure actuelle ou de l'heure de fin du flux en direct. Toutefois, des facteurs tels que les interruptions de flux, la ré-ingestion ou les fluctuations du réseau peuvent générer plusieurs objets de chronologie.

  • Vous pouvez interroger le volume de données de décalage temporel pour un domaine spécifique dans la console. Pour plus d'informations, consultez Interroger l'utilisation.

Utilisation avancée

Lecture transcodée en décalage temporel

Vous pouvez utiliser la fonctionnalité de décalage temporel avec la fonctionnalité de transcodage pour lire des flux transcodés. Pour lire des flux transcodés avec décalage temporel, vous devez d'abord configurer le transcodage. Pour plus d'informations sur la configuration du transcodage, consultez Transcodage de flux en direct.

Cette section suppose que vous avez terminé la configuration du transcodage.

Lorsque vous configurez le décalage temporel, vous devez également générer des données de décalage temporel pour les flux transcodés. L'exemple suivant montre le code d'exemple :

// Specifies whether to ignore the corresponding transcoded stream when generating time-shifted data. Valid values: true and false. Default value: true.
openLiveShiftRequest.setIgnoreTranscode("<false>");

Pour activer la lecture en décalage temporel, add the time-shifting parameters à l'URL du flux transcodé.

L'exemple suivant montre une URL de lecture :

http://<DomainName>/<AppName>/<StreamName_TranscodingTemplateID.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******
Remarque
  • Vous devez ré-ingérer le flux pour lire le flux transcodé avec décalage temporel.

  • Pour les configurations de transcodage déclenchées par le pull de flux, la lecture d'un flux transcodé avec décalage temporel ne déclenche pas le transcodage. Vous devez lire le flux transcodé en direct à l'avance pour déclencher le transcodage. Vous pouvez également configurer le transcodage pour qu'il soit déclenché par l'ingestion de flux.

Important
  • Actuellement, la fonctionnalité de décalage temporel ne prend pas en charge les flux transcodés multi-débits.

Lecture encapsulée en décalage temporel

Vous pouvez utiliser la fonctionnalité Time Shifting conjointement avec la fonctionnalité Encapsulation.

Remarque

Le service d'encapsulation d'ApsaraVideo Live réduit la latence en utilisant des protocoles modernes tels que Low-Latency HTTP Live Streaming (LL-HLS) et le format de conteneur CMAF. LL-HLS atteint des latences de bout en bout de 3 à 5 secondes en utilisant des segments plus courts (0,2 à 1 seconde) et en bloquant les chargements de listes de lecture. Le format CMAF offre une compatibilité plus large avec les appareils et les navigateurs que le format TS traditionnel et prend en charge des codecs plus récents comme H.265.

Si vous n'êtes pas familier avec la fonctionnalité d'encapsulation de flux en direct, consultez Encapsulation de flux en direct.

Cette section suppose que vous avez terminé la configuration de l'encapsulation de flux en direct.

Pour lire des flux encapsulés avec décalage temporel, vous n'avez pas besoin de modifier la configuration du décalage temporel. Vous pouvez simplement ajouter les paramètres de décalage temporel à l'URL du flux encapsulé.

L'exemple suivant montre une URL de lecture :

http://<DomainName>/<AppName>/<StreamName-EncapsulationFormat.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******
Remarque
  • Vous devez ré-ingérer le flux pour lire le flux encapsulé avec décalage temporel.

  • Pour lire un flux encapsulé et transcodé avec décalage temporel, vous pouvez simplement ajouter les paramètres de décalage temporel à l'URL du flux encapsulé et transcodé.

Références

Pour plus d'informations sur les API de décalage temporel, consultez Décalage temporel.