DVR-Sitzung erstellen

Auf dieser Seite erfährst du, wie du mit der Live Stream API eine DVR-Sitzung (Digital Video Recorder) aus einem Livestream erstellst. Du kannst dir eine DVR-Sitzung sowohl während eines Livestreams als auch nach dessen Ende ansehen.

Unterschiede zwischen DVR-Sitzungen und Kanalclips

DVR-Sitzungen ähneln Kanalclips (auch als VOD-Clips bezeichnet) 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 werden muss. Das DVR-Manifest ähnelt dem Manifest für Livestreams, 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 Channelclips findest du unter VOD-Clips aus einem Livestream 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 anzeigen
    • us-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 des Eingabeendpunkts. Verwenden Sie eine der unterstützten Regionen.
    Standorte anzeigen
    • us-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 die zurückgegebene INPUT_STREAM_URI, um sie später im Abschnitt Eingabeteststream senden zu verwenden.

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 Wiedergabe in hoher Auflösung (1.280 x 720).

Wenn du DVR-Sitzungen 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 DVR-Sitzungen 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 Segmentdateien, das Livestream-Manifest und das DVR-Manifest automatisch aus Cloud Storage gelöscht. Mit gelöschten Segmenten können keine DVR-Sitzungen erstellt werden. Das Löschen ist asynchron und kann bis zu 24 Stunden dauern.

Gib einen Schlüssel für das Manifest an, um die Erstellung von DVR-Sitzungen zu aktivieren. Sie verweisen auf diesen Schlüssel, wenn Sie die Sitzung erstellen. 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 anzeigen
    • us-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 Eingabeendpunkt
  • BUCKET_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 anzeigen
    • us-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 .

Eingabeteststream 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

DVR-Sitzung erstellen

Verwenden Sie zum Erstellen einer DVR-Sitzung die Methode projects.locations.channels.dvrSessions.create.

Verwende das Feld manifestKey im Array dvrManifests, um das Manifest anzugeben, aus dem Inhalte 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 zu einer einzigen DVR-Sitzung kombinieren, indem du dem Array dvrWindows timeInterval-Objekte hinzufügst.

"dvrManifests": [
  {
    "manifestKey": "manifest_hls"
  }
],
"dvrWindows": [
  {
    "timeInterval": {
      "startTime": "2022-07-08T23:03:20.000Z",
      "endTime": "2022-07-08T23:04:20.000Z"
    }
  },
  {
    "timeInterval": {
      "startTime": "2022-07-08T23:05:20.000Z",
      "endTime": "2022-07-08T23:06:20.000Z"
    }
  }
]

Wichtige Hinweise:

  • Jede DVR-Sitzung muss mindestens eine timeInterval in dvrWindows enthalten.
  • Das Feld dvrManifests.manifestKey muss sich auf ein definiertes HLS-Manifest im übergeordneten Kanal der DVR-Sitzung beziehen. Wenn die Anfrage zum Erstellen einer DVR-Sitzung erfolgreich ist, wird der URI des generierten DVR-Manifests im Feld dvrManifests.outputUri zurückgegeben. Dieser URI befindet sich im Pfad, der im Feld outputUri des Kanals angegeben ist.
  • Das dvrManifests-Array unterstützt nur ein Manifest pro Anfrage. Wenn du mehrere Manifeste für dieselben DVR-Fenster generieren möchtest, musst du die Manifeste in mehrere DVR-Sitzungen aufteilen.
  • Die timeInterval-Objekte dürfen sich nicht überschneiden und müssen in chronologischer Reihenfolge vorliegen. Der startTime muss in jeder timeInterval vor dem endTime liegen.
  • startTime und endTime beziehen sich auf die Zeitleiste des Livestreams. Wenn für das Manifest eingebetteter Zeitcode aktiviert ist, basiert diese Zeitleiste auf dem eingebetteten Zeitcode im Eingabestream und kann von der Echtzeit abweichen.
  • Die maximale Gesamtdauer des DVR-Fensters beträgt 24 Stunden.
  • Die endTime des letzten timeInterval in dvrWindows kann leer bleiben. In diesem Fall wird endTime automatisch berechnet, um die Dauer der DVR-Sitzung zu maximieren (d. h. eine Gesamtdauer von 24 Stunden).
  • Die DVR-Fenster können jeden Zeitraum abdecken, auch zukünftige. Die Anzahl der DVR-Sitzungen mit dvrWindows, die sich bis in die Zukunft erstrecken, ist jedoch auf eine begrenzt.
  • Die Anzahl der DVR-Sitzungen, bei denen alle DVR-Fenster ausschließlich in der Vergangenheit liegen, ist nicht begrenzt.

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 anzeigen
    • us-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
  • DVR_SESSION_ID: eine benutzerdefinierte Kennung für die DVR-Sitzung
  • INTERVAL_START_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)
  • INTERVAL_END_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)

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/dvrSessions/DVR_SESSION_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 .

DVR-Sitzung abrufen

Mit der Methode projects.locations.channels.dvrSessions.get kannst du eine DVR-Sitzung abrufen.

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, an dem sich Ihr Kanal befindet. Verwenden Sie eine der unterstützten Regionen.
    Standorte anzeigen
    • us-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
  • DVR_SESSION_ID: eine benutzerdefinierte Kennung für die DVR-Sitzung

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/dvrSessions/DVR_SESSION_ID",
  "createTime": CREATE_TIME,
  "startTime": START_TIME,
  "updateTime": UPDATE_TIME,
  "state": "SUCCEEDED",
  "dvrManifests": [
    {
      "manifestKey": "manifest_hls",
      "outputUri": "gs://BUCKET_NAME/dvr/DVR_SESSION_ID/main.m3u8"
    }
  ],
  "dvrWindows": [
    {
      "timeInterval": {
        "startTime": "INTERVAL_START_TIME",
        "endTime": "INTERVAL_END_TIME"
      }
    }
  ]
}

Die Antwort sollte ein Feld state enthalten, das den Status der Sitzung angibt:

{
  ...
  "state": "PENDING" // DVR session is waiting to be processed (for example, it is waiting for the channel to start)
  ...
}

Eine Liste der Status und ihre Beschreibungen finden Sie in der Referenzdokumentation zu state.

Bucket-Inhalt prüfen

Öffne den Cloud Storage-Bucket, der im Feld dvrManifests.outputUri der DVR-Sitzung angegeben ist. Prüfen Sie, ob die folgenden Dateien und Verzeichnisse vorhanden sind:

  • Ein Manifest der obersten Ebene für die DVR-Sitzung 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 Unterverzeichnis für jede im Kanal angegebene muxStreams.key (z. B. mux_video_ts). Jedes Unterverzeichnis enthält eine Playlist für die DVR-Sitzung (z. B. index-1.m3u8).

DVR-Sitzung abspielen

Führen Sie die folgenden Schritte aus, um die generierte Mediadatei in Shaka Player abzuspielen:

  1. Machen Sie den von Ihnen erstellten Cloud Storage-Bucket öffentlich.
  2. So aktivieren Sie Cross-Origin Resource Sharing (CORS) für einen Cloud Storage-Bucket:
    1. 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
        }
      ]
    2. 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
  3. Suchen Sie im Cloud Storage-Bucket nach der generierten Datei. Klicken Sie in der Spalte Öffentlicher Zugriff der Datei auf URL kopieren.
  4. Rufen Sie Shaka Player, ein Online-Livestream-Player, auf.
  5. Klicken Sie in der Navigationsleiste oben auf Benutzerdefinierte Inhalte.
  6. Klicken Sie auf die Schaltfläche +.
  7. Fügen Sie die öffentliche URL der Datei in das Feld URL manifestieren ein.

  8. Geben Sie einen Namen in das Feld Name ein.

  9. Klicken Sie auf Speichern.

  10. Klicken Sie auf Wiedergabe.

Während des Livestreams sollte ein Testmuster wiedergegeben werden.

Testmustervideo

Ereignisse für Werbeunterbrechungen

Wenn du für den Livestream ein Ereignis für Werbeunterbrechungen erstellt hast, enthält die DVR-Sitzung die Anzeigensegmente, wie sie im Livestream erscheinen.