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
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 :
-
Configurez la fonctionnalité de décalage temporel.
RemarqueVous devez activer cette fonctionnalité pour enregistrer le contenu du flux en direct destiné au décalage temporel.
Envoyez une requête depuis le client pour utiliser la fonctionnalité de décalage temporel.
Configuration du décalage temporel
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.
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 :
|
Format de l'heure pour le décalage temporel. Valeurs possibles :
|
Unité de temps pour le décalage temporel. Valeurs possibles :
|
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=20170809200010lhs_start_unix_s_0=1502280113lhs_end_human_s_8=20170809200010lhs_vodend_unix_s_0=1502280113lhs_offset_unix_ms_0=1800000(rembobinage de 30 minutes)
Vous devez spécifier soit
lhs_start, soitlhs_offset. Si vous spécifiez à la foislhs_startetlhs_offset,lhs_offsetest prioritaire.lhs_end/lhs_vodendest un paramètre facultatif. Si vous ne spécifiez paslhs_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'heurelhs_endspécifiée.Si vous spécifiez
lhs_vodend, la lecture se poursuit en mode vidéo à la demande (VOD) jusqu'à l'heurelhs_vodendspé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_endetlhs_vodend,lhs_vodendest 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 : |
|
Paramètres |
|
|
Gestion des erreurs courantes |
|
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. |
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******
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.
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.
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******
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.