Auf dieser Seite wird beschrieben, wie du mit der Live Stream API Video-on-Demand-Clips aus einem Livestream erstellen kannst. VOD-Clips bestehen aus HLS-Manifestdateien und Segmentdateien, die aus einem Livestream gespeichert wurden. Es werden nur HLS-Manifeste unterstützt.
Unterschiede zwischen VOD-Clips und DVR-Sitzungen
VOD-Clips (auch als Channel-Clips bezeichnet) ähneln DVR-Sitzungen, mit den folgenden wichtigen Unterschieden:
- DVR-Sitzungen:
- Die API speichert das DVR-Manifest am selben Speicherort wie die Live-Stream-Segmente, sodass keine zusätzliche Kopie in Cloud Storage erstellt wird. Das DVR-Manifest ähnelt dem Livestream-Manifest, ist aber länger. Wenn das Speicherzeitraum abläuft, werden das Manifest und die Segmentdateien gelöscht.
- Du kannst eine DVR-Sitzung für vergangene, aktuelle und zukünftige Inhalte erstellen. So kann eine DVR-Sitzung beispielsweise auf einen Livestream folgen oder du kannst eine DVR-Sitzung für einen bestimmten Zeitpunkt planen.
- Ein typischer Anwendungsfall für DVR-Sitzungen ist die Unterstützung von DVR-Funktionen für Live-Streaming-Ereignisse. Ein Zuschauer kann beispielsweise eine Stunde nach Beginn des Livestreams beitreten und sich die Inhalte mit einer Stunde Verzögerung ansehen oder Teile davon überspringen.
- Kanalclips:
- Die Live Stream API kopiert das Clip-Manifest und die zugehörigen Segmentdateien in ein vom Nutzer angegebenes Verzeichnis, damit sie nicht gelöscht werden, wenn das Speicherzeitraum abläuft. Du hast die volle Kontrolle über den Clip.
- Nur Inhalte aus der Vergangenheit können zu Clips verarbeitet werden. Live-Clips und die Planung zukünftiger Clips werden nicht unterstützt.
- Ein typischer Anwendungsfall für Clips ist das Archivieren eines Livestreams, damit er zeitlich unbegrenzt als VOD-Datei verfügbar ist.
Weitere Informationen zu DVR-Sitzungen findest du unter DVR-Sitzung erstellen.
Google Cloud-Projekt und Authentifizierung einrichten
Wenn Sie noch kein Google Cloud-Projekt und keine Anmeldedaten erstellt haben, lesen Sie den Abschnitt Vorbereitung.Eingabeendpunkt erstellen
Verwenden Sie zum Erstellen eines 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 Kennung für den neuen zu erstellenden Eingabeendpunkt, 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
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort 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 }
Mit diesem Befehl wird ein Vorgang mit langer Ausführungszeit erstellt, mit dem Sie den Fortschritt Ihrer Anfrage verfolgen können. Weitere Informationen finden Sie unter Vorgänge mit langer Ausführungszeit verwalten .
Details zum Eingabeendpunkt abrufen
Verwenden Sie die Methode projects.locations.inputs.get
, um Details zum Eingabeendpunkt abzurufen.
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, an dem sich Ihr Eingabeendpunkt befindet. 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 in etwa folgende JSON-Antwort erhalten:
{ "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 uri
, um ihn später im Abschnitt Eingabestream senden zu verwenden.INPUT_STREAM_URI
Kanäle erstellen
Verwenden Sie zum Erstellen eines Channels die Methode projects.locations.channels.create
. In den folgenden Beispielen wird ein Kanal erstellt, der einen HLS-Livestream generiert. Der Livestream besteht aus einer einzelnen HD-Version (1280 × 720).
Wenn du VOD-Clips erstellen möchtest, füge der Kanalkonfiguration das Objekt retentionConfig
hinzu.
"retentionConfig": {
"retentionWindowDuration": {
"seconds": 86400
}
},
Wenn die Datenaufbewahrung für einen Livestream-Kanal aktiviert ist, werden die Livestream-Segmente und das Manifest aufbewahrt, um VOD-Clips zu erstellen. Mit dem Objekt retentionWindowDuration
wird angegeben, wie lange die Livestream-Ausgabe nach dem Hochladen in Cloud Storage gespeichert wird. Das Speicherzeitraum beginnt zu dem Zeitpunkt, zu dem das Segment in Cloud Storage erstellt wird.
Der Zeitraum für die Bindung ist auf 30 Tage begrenzt. Nach Ablauf des Speicherzeitraums werden die Dateien der Livestream-Segmente und die Manifestdatei automatisch aus Cloud Storage gelöscht. Das VOD-Clip-Manifest und die zugehörigen Segmentdateien werden nicht automatisch gelöscht. Du kannst keine VOD-Clips mit gelöschten Segmenten erstellen. Das Löschen ist asynchron und kann bis zu 24 Stunden dauern.
Gib einen Schlüssel für das Manifest an, um das Erstellen von VOD-Clips zu aktivieren. Auf diesen Schlüssel verweist du beim Erstellen des Clips. Es werden nur HLS-Manifeste unterstützt.
"manifests": [
{
...
"key": "manifest_hls"
}
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 Kanal 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 Kanal. 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 du zum Speichern des Manifests und der Segmentdateien des Livestreams erstellt hast
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort 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 }
Mit diesem Befehl wird ein Vorgang mit langer Ausführungszeit erstellt, mit dem Sie den Fortschritt Ihrer Anfrage verfolgen können. Weitere Informationen finden Sie unter Vorgänge mit langer Ausführungszeit verwalten .
Kanal starten
Verwenden Sie zum Starten eines Kanals die Methode projects.locations.channels.start
.
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
: den Standort deines Kanals. Wähle eine der unterstützten Regionen aus.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 Kanal
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort 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 }
Mit diesem Befehl wird ein Vorgang mit langer Ausführungszeit erstellt, mit dem Sie den Fortschritt Ihrer Anfrage verfolgen können. Weitere Informationen finden Sie unter Vorgänge mit langer Ausführungszeit verwalten .
Eingabestream senden
Öffnen Sie ein neues Terminalfenster. Führen Sie den folgenden Befehl aus und verwenden Sie dabei INPUT_STREAM_URI aus dem Abschnitt Details zum Eingabeendpunkt abrufen:
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
-acodec aac -vcodec h264 -f flv INPUT_STREAM_URI
VOD-Clip erstellen
Verwende die Methode projects.locations.channels.clips.create
, um einen VOD-Clip zu erstellen.
Gib im Feld outputUri
den Speicherort an, an dem die Clips und die Clip-Manifestdatei in Cloud Storage gespeichert werden sollen. Du kannst denselben Bucket verwenden, den du für das Manifest des Livestreams erstellt hast, oder einen anderen. Sie können dem Bucketnamen auch einen Verzeichnisnamen anhängen, z. B. my-bucket/vod-clip
.
Verwende das Feld manifestKey
im Array clipManifests
, um das Manifest anzugeben, aus dem Clips gespeichert werden sollen. In der Beispiel-Kanalkonfiguration auf dieser Seite ist dieser Schlüssel auf manifest_hls
gesetzt.
Du kannst mehrere Zeitabschnitte aus dem Livestream in einem einzigen Clip kombinieren, indem du dem Array slices
timeSlice
-Objekte hinzufügst.
"outputUri": "gs://my-bucket",
"clipManifests":[
{
"manifestKey": "manifest_hls"
}
],
"slices":[
{
"timeSlice": {
"markinTime": "2022-07-08T23:03:20.000Z",
"markoutTime": "2022-07-08T23:04:20.000Z"
}
},
{
"timeSlice": {
"markinTime": "2022-07-08T23:05:20.000Z",
"markoutTime": "2022-07-08T23:06:20.000Z"
}
}
]
Wichtige Hinweise:
- Jeder Clip muss mindestens eine
timeSlice
inslices
enthalten. - Das Feld
clipManifests.manifestKey
muss sich auf ein definiertes HLS-Manifest im übergeordneten Kanal des Clips beziehen. Wenn die Anfrage zum Erstellen des Clip-Jobs erfolgreich ist, wird der URI des generierten Clip-Manifests im FeldclipManifests.outputUri
zurückgegeben. Dieser URI befindet sich im Pfad, der im FeldoutputUri
des Clips angegeben ist. - Das
clipManifests
-Array unterstützt nur ein Manifest pro Anfrage. Wenn du mehrere Manifeste für denselben Clipjob generieren möchtest, musst du die Manifeste in mehrere Clipjob-Anfragen aufteilen. - Clip-Scheiben müssen homogen sein. Jedes Element muss vom Typ
timeSlice
sein. - Die
timeSlice
-Objekte dürfen sich nicht überschneiden und müssen in chronologischer Reihenfolge angeordnet sein. Der Wert im FeldmarkinTime
muss in jedemtimeSlice
vor dem Wert im FeldmarkoutTime
liegen. - Wenn das aktuelle
markinTime
eines Clips vor der Startzeit des Kanals oder dem Beginn des Bindungszeitraums liegt, wird die Markierungszeit auf den jeweils späteren Zeitpunkt festgelegt. - Wenn das aktuelle
markoutTime
eines Clips nach der Ausstrahlungszeit des Kanals liegt, wird es auf die Ausstrahlungszeit des Kanals gesetzt. Wenn das aktuellemarkoutTime
eines Clips später als die aktuelle Systemzeit ist, wird es auf die Zeit festgelegt, zu der die API die Clip-Aufgabe tatsächlich startet. - Die maximale Dauer eines Clips beträgt 24 Stunden.
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
: den Standort deines Kanals. Wähle eine der unterstützten Regionen aus.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 KanalCLIP_ID
: eine benutzerdefinierte Kennung für den VOD-ClipMARK_IN_TIME
: die Markierung in Unix-Epochenzeit im ursprünglichen Live-Stream-Manifest; verwendet einen Zeitstempel im RFC3339-UTC-„Zulu“-Format (z. B.2014-10-02T15:01:23Z
)MARK_OUT_TIME
: die Unix-Ärazeit im ursprünglichen Live-Stream-Manifest; verwendet einen Zeitstempel im „Zulu“-Format von RFC3339 UTC (z. B.2014-10-02T15:01:23Z
)BUCKET_NAME
: Der Name des Cloud Storage-Buckets, den du zum Speichern des VOD-Clip-Manifests und der Segmentdateien erstellt hast. Du kannst denselben Bucket verwenden, den du für das Live-Stream-Manifest erstellt hast, oder einen anderen Bucket. Du kannst dem Bucket-Namen auch einen Verzeichnisnamen anhängen (z. B.my-bucket/vod-clip
).
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort 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/clips/CLIP_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
Mit diesem Befehl wird ein Vorgang mit langer Ausführungszeit erstellt, mit dem Sie den Fortschritt Ihrer Anfrage verfolgen können. Weitere Informationen finden Sie unter Vorgänge mit langer Ausführungszeit verwalten .
VOD-Clip abrufen
Wenn du einen VOD-Clip abrufen möchtest, verwende die Methode projects.locations.channels.clips.get
.
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
: den Standort deines Kanals. Wähle eine der unterstützten Regionen aus.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 KanalCLIP_ID
: eine benutzerdefinierte Kennung für den VOD-Clip
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten in etwa folgende JSON-Antwort erhalten:
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID/clips/CLIP_ID", "createTime": CREATE_TIME, "startTime": START_TIME, "updateTime": UPDATE_TIME, "state": "SUCCEEDED", "outputUri": "gs://BUCKET_NAME", "slices": [ { "timeSlice": { "markinTime": "MARK_IN_TIME", "markoutTime": "MARK_OUT_TIME" } } ], "features": {}, "clipManifests": [ { "manifestKey": "manifest_hls", "outputUri": "gs://BUCKET_NAME/main.m3u8" } ] }
Das generierte Manifest befindet sich unter dem URI, der im Feld clipManifests.outputUri
angegeben ist. Der Dateiname des Manifests entspricht dem Feldwert manifests.fileName
des übergeordneten Kanals.
Die Antwort sollte Folgendes enthalten:
{
...
"state": "SUCCEEDED"
...
}
Mit der Methode projects.locations.channels.clips.get
sind nur die letzten 1.000 Clipjob-Einträge pro Kanal verfügbar. Alle Clip-Job-Einträge, die älter als das Limit sind, werden entfernt. Du musst die mit der outputUri
angegebenen generierten Clipdateien verwalten. Die Live Stream API löscht diese Dateien nicht aus Cloud Storage.
Bucket-Inhalt prüfen
Öffne den Cloud Storage-Bucket, der im Feld outputUri
des Clips angegeben ist. Prüfen Sie, ob die folgenden Dateien und Verzeichnisse vorhanden sind:
- Ein Manifest der obersten Ebene für den Clip mit demselben Namen wie die in der Kanalkonfiguration angegebene
manifests.fileName
(z. B.main.m3u8
). Dieses Manifest kann mit einem Online-Medienplayer wiedergegeben werden. - Ein Verzeichnis für jede im Kanal angegebene
muxStreams.key
(z. B.mux_video_ts
)- Eine Playlist für den Clip (z. B.
index-1.m3u8
) - Ein Verzeichnis mit dem Namen
YYYYMMDDTHHMMSSZ
(z. B.20220708T203309Z/
), das die VOD-Clipsegmente enthält- Mehrere Segment-
segment-number.ts
-Dateien, aus denen der VOD-Clip besteht
- Mehrere Segment-
- Eine Playlist für den Clip (z. B.
VOD-Clip abspielen
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 nach der generierten Datei. 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.
Während des Livestreams sollte ein Testmuster wiedergegeben werden.
Ereignisse für Werbeunterbrechungen und Werbeblöcke
Wenn du für den Livestream ein Ereignis für Werbeunterbrechungen erstellt hast, enthalten die VOD-Clips keine Anzeigen. Die API generiert eine Playlist, in der die Werbeunterbrechungspunkte durch die folgenden Tags ersetzt werden:
#EXT-X-CUE-OUT: AD_BREAK_DURATION
#EXT-X-CUE-IN
Einblendungen, die am Anfang oder Ende des VOD-Clips erscheinen, werden automatisch entfernt. Slates, die im Stream zu sehen sind, werden im generierten VOD-Clip beibehalten.