Auf dieser Seite wird beschrieben, wie Sie Untertitel im Web Video Text Tracks-Format (WebVTT) für einen Livestream konfigurieren. Untertitel werden aus CEA608- oder CEA708-Untertitel im Eingabestream generiert.
Untertitel werden für HLS- und DASH-Livestreams unterstützt.
Hinweise
Auf dieser Seite wird davon ausgegangen, dass Sie die Schritte im Abschnitt Vorbereitung der Kurzanleitung für einen HLS-Livestream oder der Kurzanleitung für einen MPEG-DASH-Livestream ausgeführt haben.
Eingabeendpunkt erstellen
Verwenden Sie zum Erstellen des Eingabeendpunkts die Methode projects.locations.inputs.create
.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_NUMBER
: Ihre Google Cloud Projektnummer. Sie finden sie auf der Seite IAM-Einstellungen im Feld Projektnummer.LOCATION
: Der Speicherort, an dem der Eingabeendpunkt erstellt werden soll. Verwenden Sie eine der unterstützten Regionen.Standorte anzeigenus-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
: Eine benutzerdefinierte ID für den neuen Eingabeendpunkt, der erstellt werden soll (an den Sie Ihren Eingabestream senden). Dieser Wert muss 1–63 Zeichen lang sein, mit[a-z0-9]
beginnen und enden und darf zwischen den Zeichen Bindestriche (-) enthalten. Beispiel:my-input
JSON-Text der Anfrage:
{ "type": "RTMP_PUSH" }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "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 }
Kopieren Sie den zurückgegebenen OPERATION_ID zur Verwendung im nächsten Abschnitt.
Ergebnis prüfen
Verwenden Sie die Methode projects.locations.operations.get
, um zu prüfen, ob der Eingabeendpunkt erstellt wurde. Wenn die Antwort "done: false"
enthält, wiederholen Sie den Befehl, bis die Antwort "done: true"
enthält. Das Erstellen des ersten Eingabeendpunkts in einer Region kann bis zu 10 Minuten dauern.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_NUMBER
: Ihre Google Cloud Projektnummer. Sie finden sie auf der Seite IAM-Einstellungen im Feld Projektnummer.LOCATION
: Der Standort Ihres Eingabeendpunkts. Verwenden Sie eine der unterstützten Regionen.Standorte anzeigenus-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
: die Kennung für den Vorgang
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "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" } }
Suchen Sie das Feld uri
und kopieren Sie den zurückgegebenen INPUT_STREAM_URI zur späteren Verwendung im Abschnitt Eingabestream senden.
Kanal erstellen
Verwenden Sie zum Erstellen des Kanals die Methode projects.locations.channels.create
.
Beachten Sie bei der Channelkonfiguration Folgendes:
Für die Untertitel wird die Schriftart
ElementaryStream
, eineTextStream
, verwendet.{ "key": "webvtt-english", "textStream": { "codec": "webvtt", "display_name": "English", "language_code": "en-US", "mapping": [ { "input_cea_channel": "CC1" } ] } }
Das Feld
TextStream
codec
ist aufwebvtt
gesetzt.Im Feld
TextStream
mapping
werden Eingabestreams Text-Tracks zugeordnet. In diesem Beispiel wirdinput_cea_channel
dem EingabechannelCC1
für englische Untertitel zugeordnet.Der Elementarstream wird verwendet, um ein
MuxStream
mit dem Schlüsselvtt-english
zu erstellen.{ "key": "vtt_english", "container": "vtt", "elementaryStreams": [ "webvtt-english" ], "segmentSettings": { "segmentDuration": "2s" } }
Dieser Mux-Stream wird dann sowohl in HLS- als auch in DASH-Manifesten referenziert.
{ "fileName": "main.m3u8", "type": "HLS", "muxStreams": [ "mux_video_ts", "vtt_english" ], "maxSegmentCount": 5 }
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_NUMBER
: Ihre Google Cloud Projektnummer. Sie finden sie auf der Seite IAM-Einstellungen im Feld Projektnummer.LOCATION
: der Ort, an dem der Channel erstellt werden soll. Verwenden Sie eine der unterstützten Regionen.Standorte anzeigenus-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
: Eine benutzerdefinierte Kennung für den zu erstellenden Channel. Dieser Wert muss 1–63 Zeichen lang sein, mit[a-z0-9]
beginnen und enden und darf zwischen den Zeichen Bindestriche (-) enthalten.INPUT_ID
: die benutzerdefinierte Kennung für den EingabeendpunktBUCKET_NAME
: Der Name des Cloud Storage-Buckets, den Sie zum Speichern des Livestream-Manifests und der Segmentdateien erstellt haben.
JSON-Text der Anfrage:
{ "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 } ] }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "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 }
Kanal abrufen
Sie können das Ergebnis des Vorgangs zum Erstellen des Kanals anhand der neuen Vorgangs-ID prüfen.
Nachdem der Channel erstellt wurde, können Sie den Channelstatus mit der Methode projects.locations.channels.get
abfragen.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_NUMBER
: Ihre Google Cloud Projektnummer. Sie finden sie auf der Seite IAM-Einstellungen im Feld Projektnummer.LOCATION
: Der Standort Ihres Channels. Verwenden Sie eine der unterstützten Regionen.Standorte anzeigenus-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
: eine benutzerdefinierte Kennung für den Channel
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "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" }
Die vollständige Antwort enthält das folgende Feld:
{
...
"streamingState": "STOPPED"
...
}
Diese Antwort bedeutet, dass Sie den Channel jetzt starten können.
Kanal starten
Verwenden Sie die Methode projects.locations.channels.start
, um den Channel zu starten. Ein Channel muss gestartet werden, bevor er Eingabestreams empfangen oder einen Ausgabestream generieren kann.
Das Starten des ersten Kanals in einer Region dauert etwa 10 Minuten.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_NUMBER
: Ihre Google Cloud Projektnummer. Sie finden sie auf der Seite IAM-Einstellungen im Feld Projektnummer.LOCATION
: Der Standort Ihres Channels. Verwenden Sie eine der unterstützten Regionen.Standorte anzeigenus-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
: eine benutzerdefinierte Kennung für den Channel
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "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 }
Um festzustellen, ob der Channel gestartet wurde, rufen Sie die Channelinformationen ab, wie zuvor beschrieben. Die Antwort sollte Folgendes enthalten:
{
...
"streamingState": "AWAITING_INPUT"
...
}
Eingabestream senden
Nachdem der Kanal bereit ist, senden Sie einen Eingabestream an den Eingabeendpunkt, um den Livestream zu generieren. Sie können eine MP4-Datei (oder ein anderes TEST_VOD_FILE) mit Untertiteln herunterladen und ffmpeg
verwenden, um sie an den Eingabeendpunkt zu senden.
Öffnen Sie ein neues Terminalfenster. Führen Sie den folgenden Befehl mit dem INPUT_STREAM_URI aus dem Abschnitt Ergebnis prüfen aus:
ffmpeg -re -stream_loop -1 -i "TEST_VOD_FILE" \
-c:v copy -c:a aac -strict 2 -f "flv" "INPUT_STREAM_URI"
Generierten Livestream wiedergeben
Führen Sie die folgenden Schritte aus, um die generierte Mediadatei in Shaka Player abzuspielen:
- Machen Sie den von Ihnen erstellten Cloud Storage-Bucket öffentlich.
- So aktivieren Sie Cross-Origin Resource Sharing (CORS) für einen Cloud Storage-Bucket:
- Erstellen Sie eine JSON-Datei, die Folgendes enthält:
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
- Führen Sie den folgenden Befehl aus, nachdem Sie
JSON_FILE_NAME
durch den Namen der im vorherigen Schritt erstellten JSON-Datei ersetzt haben:gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Erstellen Sie eine JSON-Datei, die Folgendes enthält:
- Suchen Sie im Cloud Storage-Bucket die generierte Datei
main.m3u8
. Klicken Sie in der Spalte Öffentlicher Zugriff der Datei auf URL kopieren. - Rufen Sie Shaka Player, ein Online-Livestream-Player, auf.
- Klicken Sie in der Navigationsleiste oben auf Benutzerdefinierte Inhalte.
- Klicken Sie auf die Schaltfläche +.
Fügen Sie die öffentliche URL der Datei in das Feld URL manifestieren ein.
Geben Sie einen Namen in das Feld Name ein.
Klicken Sie auf Speichern.
Klicken Sie auf Wiedergabe.
Der Livestream sollte jetzt wiedergegeben werden. Möglicherweise müssen Sie Untertitel in der Shaka Player-Benutzeroberfläche aktivieren.
Bereinigen
Kanal beenden
Verwenden Sie die Methode projects.locations.channels.stop
, um den Channel zu stoppen.
Sie müssen den Channel beenden, bevor Sie ihn löschen können.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_NUMBER
: Ihre Google Cloud Projektnummer. Sie finden sie auf der Seite IAM-Einstellungen im Feld Projektnummer.LOCATION
: Der Standort Ihres Channels. Verwenden Sie eine der unterstützten Regionen.Standorte anzeigenus-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
: eine benutzerdefinierte Kennung für den Channel
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "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 }
Eingabestream beenden
Wenn du ffmpeg
zum Senden des Eingabestreams verwendet hast, wird die Verbindung automatisch getrennt, nachdem du den Kanal beendet hast.
Den Kanal löschen
Verwenden Sie die Methode projects.locations.channels.delete
, um den Channel zu löschen. Sie müssen den Channel löschen, bevor Sie den vom Channel verwendeten Eingabeendpunkt löschen können.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_NUMBER
: Ihre Google Cloud Projektnummer. Sie finden sie auf der Seite IAM-Einstellungen im Feld Projektnummer.LOCATION
: Der Standort Ihres Channels. Verwenden Sie eine der unterstützten Regionen.Standorte anzeigenus-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
: eine benutzerdefinierte Kennung für den Channel
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "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 }
Eingabeendpunkt löschen
Verwenden Sie die Methode projects.locations.inputs.delete
, um den Eingabeendpunkt zu löschen.
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_NUMBER
: Ihre Google Cloud Projektnummer. Sie finden sie auf der Seite IAM-Einstellungen im Feld Projektnummer.LOCATION
: Der Standort Ihres Eingabeendpunkts. Verwenden Sie eine der unterstützten Regionen.Standorte anzeigenus-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
: die benutzerdefinierte Kennung für den Eingabeendpunkt
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "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 }
Cloud Storage-Bucket löschen
Wechseln Sie in der Google Cloud Console zur Seite „Cloud Storage-Browser“.
Klicken Sie das Kästchen neben dem von Ihnen erstellten Bucket an.
Klicken Sie auf Löschen.
Klicken Sie im angezeigten Dialogfeld auf Löschen, um den Bucket und seine Inhalte endgültig zu löschen.