Cette page explique comment synchroniser des workflows multimédias avec du contenu de diffusion en direct dans l'API Live Stream à l'aide de codes temporels. La fonctionnalité de code temporel vous permet de transmettre des entrées de code temporel, fournies sous forme de données intrabandes, aux fichiers manifestes de lecture. Vous pouvez ensuite synchroniser vos workflows multimédias internes avec le contenu de la diffusion en direct. Par exemple, vous pouvez mettre en correspondance des annotations de métadonnées générées indépendamment avec le contenu de la diffusion en direct ou aligner le contenu de diffusion interne avec la sortie de l'API Live Stream.
Les données de code temporel doivent être conformes à la spécification SMPTE 12M (voir ST 12-2:2008). Pour H264, les données de code temporel sont contenues dans le message SEI (Picture-Timing Supplemental Information Information). Pour H265, les données de code temporel sont incluses dans le message SEI de code temporel.
Utiliser un code temporel intégré
Pour utiliser un code temporel intégré à un flux d'entrée, ajoutez l'élément timecodeConfig
suivant à la ressource Channel
:
"timecodeConfig": { "source": "EMBEDDED_TIMECODE" }
La valeur par défaut du champ source
est MEDIA_TIMESTAMP
.
Par défaut, le fuseau horaire UTC est utilisé pour interpréter le code temporel. Pour utiliser un fuseau horaire différent, définissez le champ timeZone
ou utcOffset
:
"timecodeConfig": { "source": "EMBEDDED_TIMECODE", "timeZone": {"id": "America/Los_Angeles"} // or "utcOffset": "-28800s" // -8 hours from UTC }
L'heure d'été est prise en compte lorsque le champ timeZone
est défini.
Pour en savoir plus, consultez la section Interprétation du code temporel d'entrée.
Inclure le code temporel dans les fichiers manifestes de sortie
Vous pouvez définir le champ useTimecodeAsTimeline
sur true
pour inclure un code temporel pour chaque fichier manifeste de sortie:
"manifests": [ { "key": "manifest_hls", "file_name": "manifest.m3u8", "type": "HLS", "muxStreams": ["mux_720p", "mux_540p"], "useTimecodeAsTimeline": true }, { "key": "manifest_dash", "file_name": "manifest.mpd", "type": "DASH", "muxStreams": ["mux_720p", "mux_540p"], "useTimecodeAsTimeline": true } ]
Fichier manifeste HLS
Pour les flux en direct HLS, le code temporel est émis sous la forme d'une balise #EXT-X-PROGRAM-DATE-TIME
pour chaque segment du fichier manifeste M3U8 multimédia. Il se présente comme suit:
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-DISCONTINUITY-SEQUENCE:0
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:25.529Z
#EXTINF:1.265922
720p60_h264_ts-0000000000.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:26.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000001.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:28.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000002.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:30.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000003.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:32.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000004.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:34.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000005.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:36.795Z
#EXTINF:2.000000
720p60_h264_ts-0000000006.ts
#EXT-X-PROGRAM-DATE-TIME:2023-04-21T21:49:38.795Z
#EXT-X-PROGRAM-DATE-TIME
contient les données de code temporel générées au format ISO 8601 YYYY-MM-DDThh:mm:ss[.mmm]TZD
où:
YYYY
correspond à une année à quatre chiffres.MM
correspond à un mois à deux chiffres (par exemple, 03 correspond à mars).DD
correspond à un jour du mois à deux chiffres (01 à 31).T
est un caractère défini qui indique le début de l'élément temporelhh
correspond aux deux chiffres d'une heure (00 à 23, AM/PM non inclus)mm
correspond aux deux chiffres d'une minute (00 à 59)ss
correspond aux deux chiffres d'une seconde (00 à 59)mmm
correspond aux trois chiffres d'une milliseconde (de 000 à 999)TZD
correspond à l'indicateur de fuseau horaire (Z, ±hh:mm). Le Z représente l'UTC, et les valeurs + ou - indiquent l'avance ou le retard par rapport à l'UTC.
Fichier manifeste DASH
Pour les flux en direct DASH, l'attribut availabilityStartTime
du fichier manifeste de la description de la présentation du média est défini sur le code temporel initial et se présente comme suit:
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="dynamic" minBufferTime="PT4S" mediaPresentationDuration="PT0H0M473.262S"
availabilityStartTime="2023-05-19T17:44:16.881Z">
availabilityStartTime
contient les données de code temporel générées au format ISO 8601 YYYY-MM-DDThh:mm:ss[.mmm]TZD
où:
YYYY
correspond à une année à quatre chiffres.MM
correspond à un mois à deux chiffres (par exemple, 03 correspond à mars).DD
correspond à un jour du mois à deux chiffres (01 à 31).T
est un caractère défini qui indique le début de l'élément temporelhh
correspond aux deux chiffres d'une heure (00 à 23, AM/PM non inclus)mm
correspond aux deux chiffres d'une minute (00 à 59)ss
correspond aux deux chiffres d'une seconde (00 à 59)mmm
correspond aux trois chiffres d'une milliseconde (de 000 à 999)TZD
correspond à l'indicateur de fuseau horaire (Z, ±hh:mm). Le Z représente l'UTC, et les valeurs + ou - indiquent l'avance ou le retard par rapport à l'UTC.
Analyse des données de code temporel
Le code temporel intégré est analysé à partir de la première image de la vidéo. Les horodatages des contenus multimédias de sortie sont avancés trame par image par la suite. Il n'y a pas de resynchronisation entre les heures d'entrée et de sortie tant que le flux d'entrée n'est pas déconnecté et reconnecté.
Étant donné que le code temporel de la vidéo est remplacé par celui généré à partir du code temporel, les événements de chaîne doivent suivre l'horloge du code temporel pour s'exécuter correctement à un moment précis.
La durée peut être alignée sur les flux redondants si le générateur de codes temporels du pipeline de production est le même ou est verrouillé sur les encodeurs de contribution principal et de secours (voir la vidéo Qu'est-ce que le verrouillage de la sortie ?).
Interprétation du code temporel d'entrée
Le code temporel d'un message SEI de minutage d'image ne contient que l'heure (16:30:00;10
). Pour inclure un code temporel dans les fichiers manifestes de sortie, vous devez renseigner à la fois la date et l'heure, telles que la date et l'heure complètes (2021-12-06T16:30:00.333Z
) ou l'heure de l'époque (1638837000333
).
Lorsque vous interprétez le code temporel SEI en tant que format date/heure, l'API Live Stream suppose toujours que le flux d'entrée entrant est en direct ou presque en direct.
L'API Live Stream utilise le fuseau horaire spécifié dans le fichier timecodeConfig
de la chaîne pour interpréter le code temporel SEI comme étant le plus proche possible de l'heure actuelle.
Par exemple, supposons que l'API Live Stream reçoive un flux d'entrée à l'heure actuelle 2021-12-06T21:00:00Z
(UTC). Le tableau suivant montre comment le code temporel SEI est converti au format date/heure:
Identifiant du fuseau horaire | Code temporel SEI | Interprété en heure locale | Interprété en UTC |
---|---|---|---|
UTC |
16:30:00;10 |
2021-12-06T16:30:00.333+00:00 |
2021-12-06T16:30:00.333Z |
America/Los_Angeles |
16:30:00;10 |
2021-12-05T16:30:00.333-08:00 |
2021-12-06T00:30:00.333Z |
America/New_York |
16:30:00;10 |
2021-12-05T16:30:00.333-05:00 |
2021-12-05T21:30:00.333Z |
Asia/Bangkok |
16:30:00;10 |
2021-12-06T16:30:00.333+07:00 |
2021-12-06T09:30:00.333Z |
America/Los_Angeles |
03:30:00;10 |
2021-12-06T03:30:00.333-08:00 |
2021-12-06T11:30:00.333Z |
Asia/Bangkok |
03:30:00;10 |
2021-12-07T03:30:00.333+07:00 |
2021-12-06T20:30:00.333Z |
Notez que les heures interprétées ne sont jamais postérieures à l'heure UTC actuelle de 2021-12-06T21:00:00Z
.