Cette page explique comment configurer des sous-titres au format Web Video Text Tracks (WebVTT) pour un flux en direct. Les sous-titres sont générés à partir des sous-titres cea608 ou cea708 du flux d'entrée.
Les sous-titres sont compatibles avec les diffusions en direct HLS et DASH.
Avant de commencer
Cette page suppose que vous avez suivi les étapes de la section Avant de commencer du guide de démarrage rapide pour les diffusions en direct HLS ou du guide de démarrage rapide pour les diffusions en direct MPEG-DASH.
Créer le point de terminaison d'entrée
Pour créer le point de terminaison d'entrée, utilisez la méthode projects.locations.inputs.create
.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
PROJECT_NUMBER
: numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.LOCATION
: emplacement dans lequel créer le point de terminaison d'entrée ; utilisez l'une des régions disponibles.Afficher les emplacementsus-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
INPUT_ID
: identifiant défini par l'utilisateur pour le nouveau point de terminaison d'entrée à créer (auquel vous envoyez votre flux d'entrée). Cette valeur doit comporter entre 1 et 63 caractères, commencer et se terminer par[a-z0-9]
, et peut contenir des tirets (-) entre les caractères. Par exemple,my-input
.
Corps JSON de la requête :
{ "type": "RTMP_PUSH" }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Copiez le OPERATION_ID renvoyé pour l'utiliser dans la section suivante.
Vérifier le résultat
Utilisez la méthode projects.locations.operations.get
pour vérifier si le point de terminaison d'entrée a été créé. Si la réponse contient "done: false"
, répétez la commande jusqu'à ce que la réponse contienne "done: true"
. La création du premier point de terminaison d'entrée dans une région peut prendre jusqu'à 10 minutes.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
PROJECT_NUMBER
: numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.LOCATION
: emplacement de votre point de terminaison d'entrée. Utilisez l'une des régions disponibles.Afficher les emplacementsus-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
OPERATION_ID
: identifiant de l'opération
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "endTime": END_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.Input", "name": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID", "createTime": CREATE_TIME, "updateTime": UPDATE_TIME, "type": "RTMP_PUSH", "uri": INPUT_STREAM_URI, # For example, "rtmp://1.2.3.4/live/b8ebdd94-c8d9-4d88-a16e-b963c43a953b", "tier": "HD" } }
Recherchez le champ uri
et copiez le INPUT_STREAM_URI renvoyé pour l'utiliser ultérieurement dans la section Envoyer le flux d'entrée.
Créer la chaîne
Pour créer le canal, utilisez la méthode projects.locations.channels.create
.
Notez les points suivants dans la configuration du canal :
ElementaryStream
, uneTextStream
, est utilisée pour les sous-titres.{ "key": "webvtt-english", "textStream": { "codec": "webvtt", "display_name": "English", "language_code": "en-US", "mapping": [ { "input_cea_channel": "CC1" } ] } }
Le champ
TextStream
codec
est défini surwebvtt
.Le champ
TextStream
mapping
mappe les flux d'entrée aux pistes de texte. Dans cet exemple,input_cea_channel
est mappé au canal d'entréeCC1
pour les sous-titres en anglais.Le flux élémentaire est utilisé pour créer un
MuxStream
avec la clévtt-english
.{ "key": "vtt_english", "container": "vtt", "elementaryStreams": [ "webvtt-english" ], "segmentSettings": { "segmentDuration": "2s" } }
Ce flux mux est ensuite référencé dans les fichiers manifestes HLS et DASH.
{ "fileName": "main.m3u8", "type": "HLS", "muxStreams": [ "mux_video_ts", "vtt_english" ], "maxSegmentCount": 5 }
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
PROJECT_NUMBER
: numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.LOCATION
: emplacement dans lequel créer le canal. Utilisez l'une des régions disponibles.Afficher les emplacementsus-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: identifiant défini par l'utilisateur pour le canal à créer. Cette valeur doit comporter entre 1 et 63 caractères, commencer et se terminer par[a-z0-9]
, et peut contenir des tirets (-) entre les caractères.INPUT_ID
: identifiant défini par l'utilisateur pour le point de terminaison d'entréeBUCKET_NAME
: nom du bucket Cloud Storage que vous avez créé pour contenir le fichier manifeste et les fichiers de segment du flux en direct
Corps JSON de la requête :
{ "inputAttachments": [ { "key": "my-input", "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID" } ], "output": { "uri": "gs://BUCKET_NAME" }, "elementaryStreams": [ { "key": "es_video", "videoStream": { "h264": { "profile": "high", "widthPixels": 1280, "heightPixels": 720, "bitrateBps": 3000000, "frameRate": 30 } } }, { "key": "es_audio", "audioStream": { "codec": "aac", "channelCount": 2, "bitrateBps": 160000 } }, { "key": "webvtt-english", "textStream": { "codec": "webvtt", "display_name": "English", "language_code": "en-US", "mapping": [ { "input_cea_channel": "CC1" } ] } } ], "muxStreams": [ { "key": "mux_video_fmp4", "container": "fmp4", "elementaryStreams": [ "es_video" ], "segmentSettings": { "segmentDuration": "2s" } }, { "key": "mux_audio_fmp4", "container": "fmp4", "elementaryStreams": [ "es_audio" ], "segmentSettings": { "segmentDuration": "2s" } }, { "key": "mux_video_ts", "container": "ts", "elementaryStreams": [ "es_video", "es_audio" ], "segmentSettings": { "segmentDuration": "2s" } }, { "key": "vtt_english", "container": "vtt", "elementaryStreams": [ "webvtt-english" ], "segmentSettings": { "segmentDuration": "2s" } } ], "manifests": [ { "key": "manifest_dash", "fileName": "main.mpd", "type": "DASH", "muxStreams": [ "mux_video_fmp4", "mux_audio_fmp4", "vtt_english" ], "maxSegmentCount": 5 }, { "key": "manifest_hls", "fileName": "main.m3u8", "type": "HLS", "muxStreams": [ "mux_video_ts", "vtt_english" ], "maxSegmentCount": 5 } ] }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Obtenir la chaîne
Vous pouvez vérifier le résultat de l'opération de création de chaîne à l'aide du nouvel ID d'opération.
Une fois le canal créé, utilisez la méthode projects.locations.channels.get
pour interroger l'état du canal.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
PROJECT_NUMBER
: numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.LOCATION
: région où se trouve votre canal. Utilisez l'une des régions disponibles.Afficher les emplacementsus-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: identifiant défini par l'utilisateur pour le canal
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID", "createTime": CREATE_TIME, "updateTime": UPDATE_TIME, "inputAttachments": [ { "key": "INPUT_ID", "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID" } ], "activeInput": "INPUT_ID", "output": { "uri": "gs://BUCKET_NAME" }, "elementaryStreams": [ { "key": "es_video", "videoStream": { "h264": { "profile": "high", "widthPixels": 1280, "heightPixels": 720, "bitrateBps": 3000000, "frameRate": 30 } } }, { "key": "es_audio", "audioStream": { "codec": "aac", "channelCount": 2, "bitrateBps": 160000 } }, { "key": "webvtt-english", "textStream": { "codec": "webvtt", "display_name": "English", "language_code": "en-US", "mapping": [ { "input_cea_channel": "CC1" } ] } } ], "muxStreams": [ { "key": "mux_video_fmp4", "container": "fmp4", "elementaryStreams": [ "es_video" ], "segmentSettings": { "segmentDuration": "2s" } }, { "key": "mux_audio_fmp4", "container": "fmp4", "elementaryStreams": [ "es_audio" ], "segmentSettings": { "segmentDuration": "2s" } }, { "key": "mux_video_ts", "container": "ts", "elementaryStreams": [ "es_video", "es_audio" ], "segmentSettings": { "segmentDuration": "2s" } }, { "key": "vtt_english", "container": "vtt", "elementaryStreams": [ "webvtt-english" ], "segmentSettings": { "segmentDuration": "2s" } } ], "manifests": [ { "key": "manifest_dash", "fileName": "main.mpd", "type": "DASH", "muxStreams": [ "mux_video_fmp4", "mux_audio_fmp4", "vtt_english" ], "maxSegmentCount": 5 }, { "key": "manifest_hls", "fileName": "main.m3u8", "type": "HLS", "muxStreams": [ "mux_video_ts", "vtt_english" ], "maxSegmentCount": 5 } ], "streamingState": "STOPPED" }
La réponse complète contient le champ suivant :
{
...
"streamingState": "STOPPED"
...
}
Cette réponse indique que vous pouvez maintenant démarrer le canal.
Démarrer la chaîne
Utilisez la méthode projects.locations.channels.start
pour démarrer le canal. Une chaîne doit être démarrée avant de pouvoir accepter des flux d'entrée ou générer un flux de sortie.
Le démarrage du premier canal dans une région prend environ 10 minutes.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
PROJECT_NUMBER
: numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.LOCATION
: région où se trouve votre canal. Utilisez l'une des régions disponibles.Afficher les emplacementsus-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: identifiant défini par l'utilisateur pour le canal
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID", "verb": "start", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Pour déterminer si le canal a démarré, obtenez les informations sur le canal comme précédemment. La réponse doit contenir les éléments suivants :
{
...
"streamingState": "AWAITING_INPUT"
...
}
Envoyer le flux d'entrée
Maintenant que la chaîne est prête, envoyez un flux d'entrée au point de terminaison d'entrée pour générer la diffusion en direct. Vous pouvez télécharger un fichier MP4 (ou un autre fichier TEST_VOD_FILE) avec des sous-titres et utiliser ffmpeg
pour l'envoyer au point de terminaison d'entrée.
Ouvrez une nouvelle fenêtre de terminal. Exécutez la commande suivante en utilisant le INPUT_STREAM_URI de la section Vérifier le résultat :
ffmpeg -re -stream_loop -1 -i "TEST_VOD_FILE" \
-c:v copy -c:a aac -strict 2 -f "flv" "INPUT_STREAM_URI"
Lire la diffusion en direct générée
Pour lire le fichier multimédia généré dans Shaka Player, procédez comme suit :
- Rendez le bucket Cloud Storage que vous avez créé publiquement lisible.
- Pour activer le partage des ressources entre origines multiples (CORS) sur un bucket Cloud Storage, procédez comme suit :
- Créez un fichier JSON contenant les informations suivantes :
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
- Exécutez la commande suivante en remplaçant
JSON_FILE_NAME
par le nom du fichier JSON que vous avez créé à l'étape précédente :gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Créez un fichier JSON contenant les informations suivantes :
- Dans le bucket Cloud Storage, recherchez le fichier
main.m3u8
généré. Cliquez sur Copier l'URL dans la colonne Accès public du fichier. - Accédez à Shaka Player, un lecteur de diffusion en direct en ligne.
- Cliquez sur Contenu personnalisé dans la barre de navigation supérieure.
- Cliquez sur le bouton +.
Collez l'URL publique du fichier dans la zone URL du fichier manifeste.
Saisissez un nom dans la zone Nom.
Cliquez sur Enregistrer.
Cliquez sur Lire.
La diffusion en direct devrait commencer. Vous devrez peut-être activer les sous-titres dans l'UI Shaka Player.
Effectuer un nettoyage
Arrêter la chaîne
Utilisez la méthode projects.locations.channels.stop
pour arrêter le canal.
Vous devez arrêter la chaîne avant de pouvoir la supprimer.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
PROJECT_NUMBER
: numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.LOCATION
: région où se trouve votre canal. Utilisez l'une des régions disponibles.Afficher les emplacementsus-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: identifiant défini par l'utilisateur pour le canal
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID", "verb": "stop", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Arrêter le flux d'entrée
Si vous avez utilisé ffmpeg
pour envoyer le flux d'entrée, la connexion est automatiquement interrompue une fois le canal arrêté.
Supprimer la chaîne
Utilisez la méthode projects.locations.channels.delete
pour supprimer le canal. Vous devez supprimer le canal avant de pouvoir supprimer le point de terminaison d'entrée utilisé par le canal.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
PROJECT_NUMBER
: numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.LOCATION
: région où se trouve votre canal. Utilisez l'une des régions disponibles.Afficher les emplacementsus-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: identifiant défini par l'utilisateur pour le canal
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID", "verb": "delete", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Supprimer le point de terminaison d'entrée
Utilisez la méthode projects.locations.inputs.delete
pour supprimer le point de terminaison d'entrée.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
PROJECT_NUMBER
: numéro de votre projet Google Cloud . Vous le trouverez dans le champ Numéro du projet de la page Paramètres IAM.LOCATION
: emplacement de votre point de terminaison d'entrée. Utilisez l'une des régions disponibles.Afficher les emplacementsus-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
INPUT_ID
: identifiant défini par l'utilisateur pour le point de terminaison d'entrée
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata", "createTime": CREATE_TIME, "target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID", "verb": "delete", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Supprimer le bucket Cloud Storage
Dans la console Google Cloud , accédez à la page du navigateur Cloud Storage.
Cochez la case à côté du bucket que vous avez créé.
Cliquez sur Supprimer.
Dans la boîte de dialogue qui s'affiche, cliquez sur Supprimer pour supprimer définitivement le bucket et son contenu.