Livestreaming in Google Cloud mit Media CDN und der Live Streaming API

1. Einführung

Content Delivery Networks (CDNs) verbessern die Nutzerleistung, indem sie häufig aufgerufene Inhalte näher an den Endnutzern im Cache speichern, Verbindungen näher an den Clients beenden, Verbindungen zum Ursprung wiederverwenden und moderne Netzwerkprotokolle und ‑anpassungen nutzen. Für Nutzer (und unsere Kunden) bedeutet das eine geringere Latenz, mehr Zuverlässigkeit und geringere Kosten. Das führt zu besseren Verkäufen, einer besseren Webnutzung und einer insgesamt verbesserten Nutzererfahrung. Nur sehr wenige moderne Websites und Videostreaming-Plattformen funktionieren heutzutage ohne CDN.

Lerninhalte

In diesem Lab führen wir Sie durch die Schritte zum Bereitstellen einer Live-Streaming-Workflow-Umgebung mit Media CDN (CDN) + Cloud Media Live Streaming API (Live-Videotranscodierung) + Cloud Storage (Speicher für die Videos) + Videoplayer (VLC, Google Shaka Player usw. – HLS + MPEG-DASH-kompatibler Player).

Wir richten die Komponenten der Live Streaming API ein – Input und Channel – und starten mit FFmpeg einen Livefeed an den Input/Channel. FFmpeg kann ein Live-Testsignal generieren. Die Live Streaming API transkodiert den Livefeed. Das transkribierte Videomanifest und die Segmente werden in einem Cloud Storage-Bucket gespeichert. Anschließend richten wir Media CDN mit dem Cloud Storage-Bucket für Live-Videos als Ursprung ein. Schließlich wird der VLC-Player verwendet, um Liveinhalte abzuspielen, die über das Media-CDN im Cache gespeichert wurden. Außerdem richten wir ein Cloud Monitoring-Dashboard ein, um die Aktivitäten von Media CDN zu visualisieren.

Umfang

In diesem Lab richten wir die Umgebung anhand der folgenden Architektur ein:

de33cb3e75d52549.png

Im Rahmen des Labs richten wir die folgenden Komponenten ein und führen die folgenden Aufgaben aus:

  • Google Cloud Storage-Bucket (GCS) zum Speichern der live transkribierten Videos erstellen
  • Live Streaming API so konfigurieren, dass das Video in mehrere Formate transcodiert wird: HLS + MPEG DASH, SD und HD
  • Komponenten für Livestreaming einrichten: Eingabe/Kanal
  • Livestream-Kanal starten
  • Media CDN mit dem GCS-Bucket als Ursprung einrichten
  • FFmpeg für den Livekanal einrichten
  • Transcodierten Livefeed mit einem Videoplayer streamen
  • Cloud Monitoring-Dashboard einrichten, um Media CDN-Aktivitäten (z. B. Latenz, Cache-Treffer, Cache-Fehler) zu überwachen

Hinweis: Für dieses Lab wird davon ausgegangen, dass die Nutzer Zugriff auf die Google Cloud Console haben und bereits ein Projekt eingerichtet haben. Außerdem gehen wir davon aus, dass die Nutzer mit einer neuen Umgebung beginnen und für diese Demo nichts eingerichtet haben.

Alle Konfigurationsaktionen werden über die Befehlszeile in Cloud Shell ausgeführt. Wir können die über die Befehlszeile konfigurierten Komponenten jederzeit in der Console prüfen. Im Verlauf des Labs werden wir immer wieder auf die Google Cloud Console verweisen.

2. Hinweis

Der Zugriff auf das Media CDN ist eingeschränkt. Wenden Sie sich an Ihr Kontoteam, um Zugriff auf Media CDN zu erhalten. Er kann in deinem Namen eine Zugriffsanfrage erstellen. Wenn du zu Google gehörst und Live-Streaming mit Media CDN testen möchtest, wende dich an den PM für Media CDN, um Zugriff auf Media CDN zu beantragen.

3. Einrichtung und Anforderungen

Cloud Shell starten

Sie können Google Cloud zwar per Fernzugriff von Ihrem Laptop aus nutzen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Klicken Sie in der Google Cloud Console rechts oben in der Symbolleiste auf das Cloud Shell-Symbol:

55efc1aaa7a4d3ad.png

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Minuten dauern. Wenn der Vorgang abgeschlossen ist, sollte in etwa Folgendes angezeigt werden:

7ffe5cbb04455448.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud. Dadurch werden Netzwerkleistung und Authentifizierung erheblich verbessert. Alle Aufgaben in diesem Codelab können in einem Browser ausgeführt werden. Sie müssen nichts installieren.

4. Google Cloud SDK-Version

Zum Zeitpunkt der Erstellung dieses Artikels ist 408.0.0 die neueste Google Cloud SDK-Version. Alle Befehle in diesem Lab wurden mit der neuesten Version des Google Cloud SDK getestet. Prüfen Sie vor dem Fortfahren, ob in Cloud Shell die neueste SDK-Version verwendet wird.

SDK-Version prüfen

Wir verwenden den Befehl gcloud version, um die SDK-Version zu prüfen.

Befehl

gcloud version | grep "Google Cloud SDK"

Beispiel für eine Ausgabe

Google Cloud SDK 408.0.0

Nächste Schritte

  1. Wenn die SDK-Version 408.0.0 oder höher ist, fahren Sie mit dem nächsten Abschnitt fort.
  2. Wenn die SDK-Version niedriger als 408.0.0 ist, führen Sie den unten aufgeführten Befehl aus, um das SDK zu aktualisieren.
sudo apt-get update && sudo apt-get install google-cloud-sdk

5. Vorbereitung

Bevor wir mit der Konfiguration der GCP-Ressourcen beginnen, müssen wir Folgendes tun:

  1. Umgebungsvariablen einrichten
  2. Erforderliche Dienst-APIs aktivieren

1. Umgebungsvariablen einrichten

In diesem Lab führen wir gcloud- und curl-Befehle mit einigen Variablen aus. Wir müssen die folgenden Umgebungsvariablen konfigurieren.

  • Projekt-ID
  • Projektnummer
  • Nutzername
  • Region
  • Eingabe-ID
  • Kanal-ID

Projekt-ID und Nutzername

Diese Umgebungsvariablen sind in der Regel in Cloud Shell vorkonfiguriert. Wir verwenden den Befehl env, um das zu überprüfen.

Befehl

env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'

Beispiel für eine Ausgabe

DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID>
LOGNAME=<YOUR_USERNAME>

env_variables-Datei erstellen

Verwenden Sie den Befehl cat, um die env_variables.txt-Datei zu erstellen. Mit dem folgenden Befehl wird die Datei env_variables.txt im Basisverzeichnis des Nutzers erstellt.

Befehle

cat > ~/env_variables.txt << EOF
export PROJECT_NUMBER=$(gcloud projects describe $GOOGLE_CLOUD_PROJECT --format="value(projectNumber)")
export LOCATION=us-west2
export INPUT_ID=lab-live-input
export CHANNEL_ID=lab-live-channel
EOF

Umgebungsvariablen einrichten

Wir verwenden den Befehl source, um die Umgebungsvariablen festzulegen.

Befehl

source ~/env_variables.txt

Prüfen, ob die Variablen festgelegt sind

Prüfen wir, ob alle erforderlichen Umgebungsvariablen festgelegt sind. In der Ausgabe sollten insgesamt sechs Umgebungsvariablen zu sehen sein.

Befehl

env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'

Beispiel für eine Ausgabe

LOCATION=us-west2
DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID>
LOGNAME=<YOUR_USERNAME>
PROJECT_NUMBER=<YOUR_PROJECT_NUMBER>
INPUT_ID=lab-live-input
CHANNEL_ID=lab-live-channel

2. Erforderliche Dienst-APIs aktivieren

Wir müssen dafür sorgen, dass die folgenden APIs in unserem Projekt aktiviert sind.

  • Network Services API
  • Certificate Manager API
  • Livestream API
  • Media CDN Edge Cache API

Network Services API aktivieren

Führen Sie den folgenden Befehl aus, um die Network Services API zu aktivieren:

Befehl

gcloud services enable networkservices.googleapis.com

Certificate Manager API aktivieren

Führen Sie den folgenden Befehl aus, um die Certificate Manager API zu aktivieren:

Befehl

gcloud services enable certificatemanager.googleapis.com

Livestream API aktivieren

Führen Sie den folgenden Befehl aus, um die Live Stream API zu aktivieren:

Befehl

gcloud services enable livestream.googleapis.com

Media CDN Edge Cache API aktivieren

Führen Sie den folgenden Befehl aus, um die Media CDN Edge Cache API zu aktivieren:

Befehl

gcloud services enable edgecache.googleapis.com

Prüfen, ob die APIs aktiviert sind

Führen Sie den Befehl gcloud services list aus, um alle aktivierten APIs aufzulisten. In der Ausgabe sollten vier APIs angezeigt werden.

Befehl

gcloud services list | grep -E 'networkservices|certificatemanager|livestream|edgecache'

Beispiel für eine Ausgabe

NAME: certificatemanager.googleapis.com
NAME: livestream.googleapis.com
NAME: networkservices.googleapis.com
NAME: edgecache.googleapis.com

6. Cloud Storage-Bucket erstellen

In diesem Abschnitt führen wir folgende Schritte aus:

  1. Cloud Storage-Bucket erstellen
  2. Bucket öffentlich zugänglich machen

Später in diesem Lab verwenden wir diesen Bucket, um die transkodierten Videodateien zu speichern. Dieser Bucket dient auch als Ursprungsspeicher für den Media CDN-Dienst.

1. Bucket erstellen

Wir verwenden den Befehl gsutil mb, um den Bucket zu erstellen:

Befehl

gsutil mb gs://live-streaming-storage-$LOGNAME

2. Bucket öffentlich zugänglich machen

Wir verwenden den Befehl gsutil iam, um die Dateien öffentlich verfügbar zu machen:

Befehl

gsutil iam ch allUsers:objectViewer gs://live-streaming-storage-$LOGNAME

7. Live Streaming API-Umgebung einrichten

Die Komponenten der Live Streaming API-Kette sind so aufgebaut:

96b5d26aedeb89a6.png

Wir haben den Cloud Storage-Bucket live-streaming-storage-$LOGNAME im vorherigen Abschnitt erstellt. In den nächsten beiden Abschnitten erstellen wir die folgenden Ressourcen:

  • Livestreaming-Eingabe:Ein Eingabeendpunkt ist ein Endpunkt, an den dein Encoder deinen Eingabestream sendet. Über den Eingabeendpunkt kannst du Konfigurationen für deinen Stream angeben, z. B. die Eingabeauflösung, den Eingabetyp und das Zuschneiden von Videos.
  • Livestreaming-Kanal:Ein Kanal ist eine Ressource, die den Eingabestream über einen Eingabeendpunkt aufnimmt, den Eingabestream in mehrere Versionen transcodiert und Ausgabe-Livestreams in bestimmten Formaten am angegebenen Speicherort veröffentlicht. Du kannst einen primären und einen Sicherungseingangsstream in denselben Kanal aufnehmen.

Die folgenden Ressourcen werden später im Lab erstellt:

  • Encoder: Ein Encoder ist ein Programm, mit dem Eingabestreams gesendet werden. In diesem Lab verwenden wir FFmpeg.

8. Eingabeendpunkt erstellen und konfigurieren

Datei „input.json“ erstellen

Wir erstellen eine input.json-Datei, um den Signaltyp des Livestreams anzugeben. In diesem Lab verwenden wir das RTMP-Livesignal.

Befehl

cat > input.json << EOF
{
  "type": "RTMP_PUSH"
}
EOF

Eingabeendpunkt erstellen

Zum Zeitpunkt der Erstellung dieses Labs gibt es keine gcloud-Unterstützung für die Live Stream API. Wir verwenden den Befehl curl, um die API-Aufrufe auszuführen.

Befehl

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @input.json \
"https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/inputs?inputId=$INPUT_ID"

Beispiel für eine Ausgabe

{
  "name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1661405972853-5e70a38d6f27f-79100d00-310671b4",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": "2022-08-25T05:39:32.884030164Z",
    "target": "projects/PROJECT_NUMBER/locations/us-west2/inputs/lab-live-input",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Die Ausgabe enthält viele nützliche Informationen. Wir konzentrieren uns jedoch derzeit auf zwei Felder:

  • Vorgangs-ID:Kopieren Sie die Vorgangs-ID aus der Ausgabe und notieren Sie sich diese. Unten sehen Sie die Vorgangs-ID aus dem Beispiel für die Ausgabe. Sie finden ihn in der Ausgabezeile, die mit "name" beginnt. "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4"
  • Status:Wir müssen warten, bis sich der Status von "done": false in "done": true ändert.

Status prüfen

Bevor wir fortfahren, müssen wir prüfen, ob der Eingabeendpunkt erfolgreich erstellt wurde und bereit ist.

Ersetzen Sie im folgenden Befehl <OPERATION> durch die ID des Vorgangs, die Sie oben erhalten haben. In diesem Beispiel ist das "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4".

Befehl

export OPERATION_ID_1=<OPERATION>

Befehl

curl -X GET \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
"https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/operations/$OPERATION_ID_1"

Beispiel für eine Ausgabe

{
  "name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1661408816982-5e70ae25cea49-617844f0-8fdcb4a1",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": "2022-08-25T06:26:57.001530499Z",
    "endTime": "2022-08-25T06:26:57.043623522Z",
    "target": "projects/PROJECT_NUMBER/locations/us-west2/inputs/lab-live-input",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.Input",
    "name": "projects/PROJECT_ID/locations/us-west2/inputs/lab-live-input",
    "createTime": "2022-08-25T06:26:56.997623672Z",
    "updateTime": "2022-08-25T06:26:56.997623672Z",
    "type": "RTMP_PUSH",
    "uri": "rtmp://34.94.97.220/live/4b7846a1-4a67-44ed-bfd0-d98281b6464a",
    "tier": "HD"
  }
}

Führen Sie den Befehl so lange aus, bis "done:true" angezeigt wird, was bedeutet, dass der Eingabeendpunkt erstellt wurde und bereit ist.

URI speichern

Wir verwenden die URI aus der vorherigen Ausgabe später im Lab. Legen wir jetzt eine Umgebungsvariable für URI fest.

Befehl

export URI=<uri>

Ersetzen Sie <uri> durch den URI, den Sie oben notiert haben. Optional können Sie auch die GET-Methode verwenden, um den URI abzurufen.

Befehl

curl -s -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/inputs/$INPUT_ID" | jq .uri

9. Livestreaming-Kanal erstellen und konfigurieren

Erstellen wir nun den Livestreaming-Kanal, der mit dem Eingabeendpunkt verknüpft ist, den wir im vorherigen Abschnitt erstellt haben. Im folgenden Beispiel wird ein Kanal erstellt, der einen HLS-Livestream generiert, der aus einer einzelnen HD-Wiedergabe (1280 × 720) besteht. Der Kanal wird dem Eingabeendpunkt und dem zuvor erstellten Speicher-Bucket zugeordnet.

Datei „channel.json“ erstellen

Geben Sie in das Cloud Shell-Terminal den folgenden Befehl ein, um eine "channel.json"-Datei zu erstellen:

Befehl

cat > channel.json << EOF
{
  "inputAttachments": [
    {
      "key": "my-input",
      "input": "projects/$PROJECT_NUMBER/locations/$LOCATION/inputs/$INPUT_ID"
    }
  ],
  "output": {
    "uri": "gs://live-streaming-storage-$LOGNAME"
  },
  "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
      }
    }
  ],
  "muxStreams": [
    {
      "key": "mux_video_ts",
      "container": "ts",
      "elementaryStreams": ["es_video", "es_audio"],
      "segmentSettings": { "segmentDuration": "2s" }
    }
  ],
  "manifests": [
    {
      "fileName": "main.m3u8",
      "type": "HLS",
      "muxStreams": [
        "mux_video_ts"
      ],
      "maxSegmentCount": 5
    }
  ]
}
EOF

Kanal erstellen

Führen Sie den folgenden curl-Befehl aus, um den Kanal zu erstellen:

Befehl

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d @channel.json \
"https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels?channelId=$CHANNEL_ID"

Beispiel für eine Ausgabe

{
  "name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1661405972853-5e70a38d6f27f-79100d00-310671b4",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": "2022-08-25T05:39:32.884030164Z",
    "target": "projects/PROJECT_NUMBER/locations/us-west2/channels/lab-live-channel",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Notieren Sie sich die Vorgangs-ID und kopieren Sie sie. Sie benötigen sie in einem der nächsten Schritte. Sie finden ihn in der Ausgabezeile, die mit "name" beginnt.

Status prüfen

Bevor wir fortfahren, müssen wir prüfen, ob der Kanal erfolgreich erstellt wurde und einsatzbereit ist.

Ersetzen Sie im folgenden Befehl <OPERATION> durch die ID des Vorgangs, die Sie oben erhalten haben. In diesem Beispiel ist das operation-1661405972853-5e70a38d6f27f-79100d00-310671b4.

Befehl

export OPERATION_ID_2=<OPERATION>

Befehl

curl -s -X GET \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
"https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/operations/$OPERATION_ID_2"

Beispiel für eine Ausgabe

  "name": "projects/PROJECT_NUMBER/locations/us-west2/operations/operation-1668666801461-5eda4c3f31852-a4d2229f-0efeef9e",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": "2022-11-17T06:33:21.500841488Z",
    "endTime": "2022-11-17T06:33:21.529311112Z",
    "target": "projects/PROJECT_NUMBER/locations/us-west2/channels/lab-live-channel",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.Channel",
    "name": "projects/PROJECT_NAME/locations/us-west2/channels/lab-live-channel",
    "createTime": "2022-11-17T06:33:21.497818033Z",
    "updateTime": "2022-11-17T06:33:21.497818033Z",
    "activeInput": "my-input",
    "output": {
      "uri": "gs://live-streaming-storage-LOGNAME"
    },
    "elementaryStreams": [
      {
        "videoStream": {
          "h264": {
            "widthPixels": 1280,
            "heightPixels": 720,
            "frameRate": 30,
            "bitrateBps": 3000000,
            "gopDuration": "2s",
            "vbvSizeBits": 3000000,
            "vbvFullnessBits": 2700000,
            "entropyCoder": "cabac",
            "profile": "high"
          }
        },
        "key": "es_video"
      },
      {
        "audioStream": {
          "codec": "aac",
          "bitrateBps": 160000,
          "channelCount": 2,
          "sampleRateHertz": 48000
        },
        "key": "es_audio"
      }
    ],
    "muxStreams": [
      {
        "key": "mux_video_ts",
        "container": "ts",
        "elementaryStreams": [
          "es_video",
          "es_audio"
        ],
        "segmentSettings": {
          "segmentDuration": "2s"
        }
      }
    ],
    "manifests": [
      {
        "fileName": "main.m3u8",
        "type": "HLS",
        "muxStreams": [
          "mux_video_ts"
        ],
        "maxSegmentCount": 5,
        "segmentKeepDuration": "60s"
      }
    ],
    "streamingState": "STOPPED",
    "inputAttachments": [
      {
        "key": "my-input",
        "input": "projects/PROJECT_NUMBER/locations/us-west2/inputs/lab-live-input"
      }
    ],
    "logConfig": {
      "logSeverity": "OFF"
    }
  }
}

Führen Sie den Befehl so lange aus, bis "done:true" angezeigt wird, was bedeutet, dass der Eingabeendpunkt erstellt wurde und bereit ist.

Die "streamingState" ist derzeit "STOPPED". Wir starten den Channel im nächsten Abschnitt.

10. Livestreaming-Kanal starten

Nachdem wir den Livestream-Kanal erstellt haben, können wir ihn starten. In diesem Abschnitt führen wir folgende Schritte aus:

  1. Livestreaming-Kanal starten
  2. Prüfen Sie den Status des Kanals. Der streamingState muss "AWAITING INPUT" sein.

1. Kanal starten

Führen Sie in Cloud Shell den folgenden curl-Befehl aus, um den Kanal zu starten:

Befehl

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID:start"

Beispiel für eine Ausgabe

{
  "name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/operation-1661405972853-5e70a38d6f27f-79100d00-310671b4",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
    "createTime": "2022-08-25T05:39:32.884030164Z",
    "target": "projects/PROJECT_NUMBER/locations/us-west2/channels/lab-live-channel",
    "verb": "start",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

2. Status des Kanals prüfen

Führen Sie den folgenden curl-Befehl aus, um den Status des Kanals abzurufen:

Befehl

curl -s -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID" | grep "streamingState"

Beispiel für eine Ausgabe

"streamingState": "AWAITING_INPUT",

Führen Sie den Befehl so lange aus, bis „AWAITING_INPUT“ angezeigt wird. Das bedeutet, dass der Kanal aktiv ist und ein Signal empfangen kann.

11. Media CDN konfigurieren

In diesem Abschnitt stellen wir Media CDN bereit – die CDN-Infrastruktur. Wir erstellen die folgenden Ressourcen:

  1. Edge-Cache-Ursprung
  2. Edge-Cache-Dienst

1. Edge-Cache-Ursprung erstellen

Ein Edge-Cache-Ursprung stellt einen Inhaltsspeicherort dar, z. B. einen Cloud Storage-Bucket, einen Speicherort eines Drittanbieters oder einen Load Balancer. Im CDN-Kontext ist der Ursprung (oder Ursprungsserver) der Speicherort der Quelle der Inhalte, die wir verteilen möchten, z.B. alle CSS-, JavaScript-, HTML- und Bilddateien. In diesem Lab erstellen wir einen Ursprung, der dem Cloud Storage-Bucket zugeordnet ist, den wir zu Beginn des Labs erstellt haben. Den Edge-Cache-Ursprung nennen wir cme-origin. Am Ursprung eines CDN werden alle Quellinhalte gespeichert, bevor sie an die Edge-Cache-Server verteilt werden.

Wir verwenden den Befehl gcloud edge-cache origins create, um den Ursprung zu erstellen. Die Ausführung des Befehls kann einige Minuten dauern.

Befehl

gcloud edge-cache origins create cme-origin \
--origin-address="gs://live-streaming-storage-$LOGNAME"

Beispielausgabe

Create request issued for: cme-origin
Waiting for operation [projects/my-project/locations/global/operations/operation-1612121774168-5ba3759af1919-
3fdcd7b1-99f59223] to complete...done
Created origin cme-origin

2. Edge-Cache-Dienst erstellen

Nachdem wir einen Edge-Cache-Ursprung eingerichtet haben, können wir den Edge-Cache-Dienst selbst erstellen.

Erstellen der cme-demo.yaml-Datei

Die Konfiguration des Edge-Cache-Dienstes erfolgt über eine YAML-Datei. Erstellen Sie in Cloud Shell eine lokale Datei namens cme-demo.yaml. Verwenden Sie vi, nano oder einen anderen Editor und fügen Sie die folgenden Zeilen in die YAML-Datei ein:

name: cme-demo
routing:
  hostRules:
    - hosts:
        - demo.cme.com
      pathMatcher: routes
  pathMatchers:
    - name: routes
      routeRules:
        - headerAction:
            responseHeadersToAdd:
              - headerName: x-cache-status
                headerValue: "{cdn_cache_status}"
          matchRules:
            - prefixMatch: /
          origin: cme-origin
          priority: 100
          routeAction:
            cdnPolicy:
              cacheKeyPolicy: {}
              cacheMode: FORCE_CACHE_ALL
              defaultTtl: 3600s
              signedRequestMode: DISABLED
        - headerAction:
            responseHeadersToAdd:
              - headerName: x-cache-status
                headerValue: "{cdn_cache_status}"
          matchRules:
            - pathTemplateMatch: /**.m3u8
          origin: cme-origin
          priority: 25
          routeAction:
            cdnPolicy:
              cacheKeyPolicy: {}
              cacheMode: FORCE_CACHE_ALL
              defaultTtl: 1s
              signedRequestMode: DISABLED
        - headerAction: {}
          matchRules:
            - pathTemplateMatch: /**.ts
          origin: cme-origin
          priority: 50
          routeAction:
            cdnPolicy:
              cacheKeyPolicy: {}
              cacheMode: FORCE_CACHE_ALL
              defaultTtl: 2s
              signedRequestMode: DISABLED

Wir belassen alle Konfigurationseinstellungen für den Edge-Cache-Dienst bei den Standardeinstellungen. In der obigen Datei gibt es drei Feldwerte, die Nutzer möglicherweise aktualisieren möchten:

  • name: Der Name der Media CDN-Instanz, hier: cme-demo
  • hosts: Liste der Domainnamen, die von diesem Media CDN-Dienst aufgelöst werden – hier: demo.cme.com. Wir verwenden sie in dieser Demo. Wir verwenden die IP-Adresse der Media CDN-Instanz.
  • Origin: ist der Edge-Cache-Ursprung, den wir im vorherigen Schritt erstellt haben. Lege den Wert auf cme-origin fest – den Namen des Media CDN-Ursprungs.

Weitere Informationen zu den verschiedenen Variablen, die Sie in der YAML-Datei verwenden können, finden Sie im Konfigurationsleitfaden für den Edge-Cache-Dienst.

Edge-Cache-Dienst erstellen

Wir erstellen einen Edge-Cache-Dienst namens cme-demo auf dem Edge-Cache-Ursprung cme-origin mit dem Host demo.cme.com. Führen Sie in Cloud Shell den folgenden Befehl aus, um den Dienst zu erstellen:

Befehl

gcloud edge-cache services import cme-demo \
    --source=cme-demo.yaml

Es kann einige Minuten dauern, bis der Edge-Cache-Dienst erstellt ist.

Beispiel für eine Ausgabe

Request issued for: [cme-demo]
Waiting for operation [projects/PROJECT_ID/locations/global/operations/operation-1670476252264-5ef4a0f9f36ce-dd380af5-321be9a0] to complete...done.     
createTime: '2022-12-07T18:08:54.403446942Z'
ipv4Addresses:
- 34.104.35.152
ipv6Addresses:
- '2600:1900:4110:d18::'
name: projects/PROJECT_ID/locations/global/edgeCacheServices/cme-demo
routing:
  hostRules:
  - hosts:
    - demo.cme.com
    - 34.104.35.152
    pathMatcher: routes
  pathMatchers:
  - name: routes
    routeRules:
    - headerAction:
        responseHeadersToAdd:
        - headerName: x-cache-status
          headerValue: '{cdn_cache_status}'
      matchRules:
      - prefixMatch: /
      origin: projects/123456789/locations/global/edgeCacheOrigins/cme-origin
      priority: '100'
      routeAction:
        cdnPolicy:
          cacheKeyPolicy: {}
          cacheMode: FORCE_CACHE_ALL
          defaultTtl: 3600s
          signedRequestMode: DISABLED
    - headerAction:
        responseHeadersToAdd:
        - headerName: x-cache-status
          headerValue: '{cdn_cache_status}'
      matchRules:
      - pathTemplateMatch: /**.m3u8
      origin: projects/123456789/locations/global/edgeCacheOrigins/cme-origin
      priority: '25'
      routeAction:
        cdnPolicy:
          cacheKeyPolicy: {}
          cacheMode: FORCE_CACHE_ALL
          defaultTtl: 1s
          signedRequestMode: DISABLED
    - headerAction: {}
      matchRules:
      - pathTemplateMatch: /**.ts
      origin: projects/123456789/locations/global/edgeCacheOrigins/cme-origin
      priority: '50'
      routeAction:
        cdnPolicy:
          cacheKeyPolicy: {}
          cacheMode: FORCE_CACHE_ALL
          defaultTtl: 2s
          signedRequestMode: DISABLED
updateTime: '2022-12-08T05:11:31.598744308Z'

Notieren Sie sich die ipv4Addresses der Edge-Cache-Dienstinstanz und kopieren Sie sie. In diesem Beispiel ist das 34.104.36.157. Damit aktualisieren wir die Datei cme-demo.yaml und streamen später das transcodierte Video.

Edge-Cache-Dienst aktualisieren

An dieser Stelle solltest du die Konfiguration des Edge-Cache-Dienstes aktualisieren, damit du die IP-Adresse des Dienstes später zum Streamen des Videos verwenden kannst. In der YAML-Datei des Edge-Cache-Dienstes können wir alle Hostnamen/IP-Adressen auflisten, von denen der Edge-Cache-Dienst Anfragen akzeptiert. Bisher haben wir nur demo.cme.com als Host angegeben. Sie können eine DNS-Zone konfigurieren, um die Namensauflösung für diese Domain bereitzustellen. Eine einfachere Lösung wäre jedoch, die IP-Adresse der Hosts-Liste in der yaml-Datei hinzuzufügen. Bearbeiten Sie die YAML-Datei noch einmal und ändern Sie sie so, dass sie der folgenden entspricht:

name: cme-demo
routing:
  hostRules:
    - hosts:
        - demo.cme.com
        - IPADDRESS
      pathMatcher: routes
  pathMatchers:
    - name: routes
      routeRules:
        - headerAction:
            responseHeadersToAdd:
              - headerName: x-cache-status
                headerValue: "{cdn_cache_status}"
          matchRules:
            - prefixMatch: /
          origin: cme-origin
          priority: 100
          routeAction:
            cdnPolicy:
              cacheKeyPolicy: {}
              cacheMode: FORCE_CACHE_ALL
              defaultTtl: 3600s
              signedRequestMode: DISABLED
        - headerAction:
            responseHeadersToAdd:
              - headerName: x-cache-status
                headerValue: "{cdn_cache_status}"
          matchRules:
            - pathTemplateMatch: /**.m3u8
          origin: cme-origin
          priority: 25
          routeAction:
            cdnPolicy:
              cacheKeyPolicy: {}
              cacheMode: FORCE_CACHE_ALL
              defaultTtl: 1s
              signedRequestMode: DISABLED
        - headerAction: {}
          matchRules:
            - pathTemplateMatch: /**.ts
          origin: cme-origin
          priority: 50
          routeAction:
            cdnPolicy:
              cacheKeyPolicy: {}
              cacheMode: FORCE_CACHE_ALL
              defaultTtl: 2s
              signedRequestMode: DISABLED

Um die Änderungen zu übernehmen, müssen wir die YAML-Datei nur noch einmal importieren. Führen Sie im Cloud Shell-Terminal folgenden Befehl aus:

Befehl

gcloud edge-cache services import cme-demo \
    --source=cme-demo.yaml

Prüfen Sie die Ausgabe des Befehls und achten Sie darauf, dass die IP-Adresse in der Liste der Hosts aufgeführt ist.

An diesem Punkt akzeptiert die Edge Cache Service-Instanz Anfragen mit "demo.cme.com" oder der IP-Adresse als Host.

12. Eingabesignal generieren

Nachdem wir alle erforderlichen Dienste konfiguriert haben, generieren wir das Live-Stream-Eingabesignal. In diesem Abschnitt führen wir folgende Schritte aus:

  1. Installiere FFmpeg, eine kostenlose Open-Source-Software.
  2. Test-Livesignal an den Eingang/Kanal senden

1. FFmpeg installieren

FFmpeg ist ein kostenloses Open-Source-Softwareprojekt, das eine Reihe von Bibliotheken und Programmen zur Verarbeitung von Video-, Audio- und anderen Multimediadateien und ‑streams umfasst. Installiere FFmpeg mit dem folgenden Befehl im Cloud Shell-Terminal:

Befehl

sudo apt install ffmpeg -y

Prüfen wir nach der Installation, ob FFmpeg richtig installiert wurde. Dazu sehen wir uns die Version an:

Befehl

ffmpeg -version

Beispiel für eine Ausgabe

ffmpeg version 4.3.4-0+deb11u1 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 10 (Debian 10.2.1-6)
...

FFmpeg wurde richtig installiert.

2. Starte das Livestreamsignal an den Eingang/Kanal.

Nachdem FFmpeg installiert ist, senden wir einen Testeingabestream an den Eingabeendpunkt, um den Livestream zu generieren.

Führen Sie im Cloud Shell-Terminal den folgenden Befehl aus. Verwenden Sie dabei die URI-Umgebungsvariable, die Sie im Abschnitt „Eingabeendpunkt erstellen und konfigurieren“ erstellt haben.

Befehl

ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
  -acodec aac -vcodec h264 -f flv $URI

FFmpeg sollte das Test-Livesignal senden. Der Befehl gibt keine Eingabeaufforderung zurück. Das Signal wird generiert, bis Sie es beenden. Für den Rest des Labs müssen Sie ein neues Cloud Shell-Fenster öffnen.

13. Neue Cloud Shell öffnen

Öffnen Sie jetzt ein neues Cloud Shell-Fenster, um mit dem Lab fortzufahren, da FFmpeg dauerhaft ausgeführt wird, bis Sie es mit Strg + C beenden und damit die Live-Signalgenerierung stoppen.

Klicken Sie neben dem Namen des aktuellen Cloud Shell-Terminals auf das Pluszeichen. Dadurch wird ein zusätzliches Cloud Shell-Fenster geöffnet.

b3c7b0be6276c194.png

Führen Sie den Rest des Labs im neu geöffneten Cloud Shell-Fenster aus.

Umgebungsvariablen einrichten

Da es sich um eine neue Cloud Shell-Sitzung handelt, müssen wir die Umgebungsvariablen noch einmal festlegen. Wir verwenden den Befehl source, um die Umgebungsvariablen festzulegen.

Befehl

source ~/env_variables.txt

Prüfen, ob die Variablen festgelegt sind

Prüfen wir, ob alle erforderlichen Umgebungsvariablen festgelegt sind. In der Ausgabe sollten insgesamt sechs Umgebungsvariablen zu sehen sein.

Befehl

env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'

Beispiel für eine Ausgabe

LOCATION=us-west2
DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID>
LOGNAME=<YOUR_USERNAME>
PROJECT_NUMBER=<YOUR_PROJECT_NUMBER>
INPUT_ID=lab-live-input
CHANNEL_ID=lab-live-channel

14. Prüfen, ob das Livesignal transkodiert wird

Wir führen einen curl aus, um den Kanal zu beschreiben. In der Ausgabe sollte zu sehen sein, dass sich der StreamingState von "AWAITING_INPUT" in "STREAMING" geändert hat.

Befehl

curl -s -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID" | grep "streamingState"

In der Ausgabe der JSON-Datei sollte "streamingState": "STREAMING" angezeigt werden. Das bedeutet, dass der Kanal gestreamt und das Livesignal transkodiert wird.

Prüfen wir auch den Inhalt des Buckets. Dort sollten wir eine Manifestdatei und mehrere TS-Videosegmente sehen. Führen Sie den folgenden Befehl in Cloud Shell aus, um den Inhalt des Buckets aufzulisten, den wir zu Beginn des Labs erstellt haben und der von der Live Streaming API zum Ausgeben des transkribierten Livesignal-Manifests und der TS-Videosegmente verwendet wird:

Befehl

gcloud storage ls --recursive gs://live-streaming-storage-$LOGNAME/**

Beispiel für eine Ausgabe

gs://live-streaming-storage-$LOGNAME/
gs://live-streaming-storage-$LOGNAME/main.m3u8
gs://live-streaming-storage-$LOGNAME/mux_video_ts/index-1.m3u8
gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000016.ts
gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000017.ts
gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000018.ts
gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000019.ts
gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000020.ts
gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000021.ts
gs://live-streaming-storage-$LOGNAME/mux_video_ts/segment-0000000022.ts
...

Hier sollten Sie dies sehen:

  • HLS-Manifestdatei: main.m3u8
  • Die entsprechenden TS-Videosegmente: eine Reihe nummerierter Dateien segment-000000000X.ts

An dieser Stelle haben wir Folgendes erledigt:

  • Live Streaming API: Das Livesignal wird generiert und über die Live Streaming API in einen Bucket transcodiert.
  • Media CDN: Media CDN mit dem Storage-Bucket für Live-Streaming als Ursprung konfiguriert.

In den nächsten Abschnitten validieren wir den Edge-Cache-Dienst und streamen dann das transcodierte Video über die Anycast-IP-Adresse von Media CDN.

15. Prüfen, ob die Edge-Cache-Dienstinstanz funktioniert

In diesem Abschnitt prüfen wir, ob die Edge Cache Service-Instanz wie erwartet funktioniert. Dazu versuchen wir, über die IP-Adresse des Edge-Cache-Dienstes auf eine Datei von der Edge-Cache-Dienstinstanz zuzugreifen. Wenn zum ersten Mal auf ein Objekt zugegriffen wird, ist es noch nicht im Cache. Wir sollten einen Cache MISS beobachten. Bei der ersten Anfrage wird das Objekt vom Ursprung gelesen und am Edge-Cache gespeichert. Alle folgenden Zugriffsversuche auf dieselbe Datei geben einen Cache-HIT zurück, da das Objekt jetzt am Edge-Cache gespeichert ist. Lassen Sie uns das überprüfen:

Führe in Cloud Shell den folgenden curl-Befehl aus, um auf die transkribierte Videomanifestdatei zuzugreifen, die im Edge-Cache-Ursprung gespeichert ist:

Befehl

curl -svo /dev/null --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> \
"http://demo.cme.com/main.m3u8"

Beachten Sie die Auflösung, bei der wir die IP-Adresse der Edge Cache Service-Instanz verwenden, um ihren Namen aufzulösen. Verwenden Sie demo.cme.com:<IP>, wobei IP die IP-Adresse der Edge-Cache-Dienstinstanz ist, die wir gerade erstellt haben.

Suchen Sie in der Ausgabe nach der Überschrift x-cache-status.

Beispiel für eine Ausgabe

Added demo.cme.com:80:34.104.35.152 to DNS cache
* Hostname demo.cme.com was found in DNS cache
*   Trying 34.104.35.152:80...
* Connected to demo.cme.com (34.104.35.152) port 80 (#0)
> GET /main.m3u8 HTTP/1.1
> Host: demo.cme.com
> User-Agent: curl/7.74.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< x-guploader-uploadid: ADPycdtKtflWt4Kha5YxXNNRwO-Eu6fGSPs-T-XY4HJmNMo46VJyWlD4EAk-8a6SegxjWq3o1gTPqZbpkU_sjW__HPAdDw
< date: Wed, 07 Dec 2022 18:23:46 GMT
< last-modified: Wed, 07 Dec 2022 18:23:45 GMT
< etag: "6bff620ccca4a9849ba4e17fa7c521fb"
< x-goog-generation: 1670437425805400
< x-goog-metageneration: 1
< x-goog-stored-content-encoding: identity
< x-goog-stored-content-length: 193
< content-type: application/x-mpegURL
< x-goog-hash: crc32c=sPO3zw==
< x-goog-hash: md5=a/9iDMykqYSbpOF/p8Uh+w==
< x-goog-storage-class: STANDARD
< accept-ranges: bytes
< content-length: 193
< server: Google-Edge-Cache
< x-request-id: fd25285b-fc1a-4fd4-981a-c50ead2c85ed
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-cache-status: den;miss
< cache-control: public,max-age=3600
<
{ [193 bytes data]
* Connection #0 to host demo.cme.com left intact

Beachten Sie die Cache-Miss, da das Objekt noch nicht im Cache gespeichert wurde und aus der Quelle gelesen wird.

Jetzt senden wir mehrere Anfragen für die m3u8-Datei. Wenn alles richtig konfiguriert ist, sollte Media CDN die Inhalte aus seinem Cache bereitstellen. Mit dem folgenden Befehl werden 10 Curl-Anfragen gestellt und nur der x-cache-status-Header ausgegeben.

Befehl

for i in {1..10};do curl -Is --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> "http://demo.cme.com/main.m3u8" | grep x-cache-status;done

Die Ausgabe sollte eine Mischung aus Cache hit und miss sein. Wenn in der Ausgabe Cachetreffer angezeigt werden, funktioniert Media CDN wie erwartet.

Beispiel für eine Ausgabe

x-cache-status: den;miss
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit
x-cache-status: den;hit

Beachten Sie den Cache-Treffer, da das Objekt jetzt am Edge-Cache gespeichert ist. Der Cloud Media Edge-Dienst funktioniert wie erwartet.

16. Transcodiertes Livesignalvideo mit VLC streamen

In diesem Teil bringen wir alle bisher erlernten Schritte zusammen:

  • Wir haben einen Bucket namens live-streaming-storage-$LOGNAME erstellt, in dem das Ergebnis des Livesignals empfangen wird, das von der Live Streaming API in HLS-Inhalte transcodiert wurde.
  • Wir haben die Livestream API eingerichtet.
  • Wir haben ein RTMP-Livesignal mit FFmpeg gestartet, das den Eingang/Kanal der Live Streaming API speist.
  • Wir haben überprüft, ob das Livesignal an den Kanal gesendet wurde und ob der Kanal sich im Modus streaming befand.
  • Wir haben festgestellt, dass die resultierenden transkribierten Dateien (Manifest + TS-Segmente) generiert und im Bucket live-streaming-storage-$LOGNAME gespeichert wurden.
  • Ein Edge-Cache-Ursprung namens cme-origin wurde mit dem GCS-Bucket live-streaming-storage-$LOGNAME als Ursprung eingerichtet.
  • Eine Edge-Cache-Instanz namens cme-demo wurde mit cme-origin als Ursprung eingerichtet.
  • Wir haben das Verhalten (Cache-Miss, Cache-Hit) der Edge-Cache-Dienstinstanz überprüft.

Jetzt können wir mit einem Videoplayer das transcodierte Livesignal über den Media CDN-Cache streamen. Dazu verwenden wir den VLC-Player. Der VLC-Player ist ein kostenloser, plattformübergreifender Open-Source-Multimediaplayer und -Framework, mit dem die meisten Multimediadateien abgespielt werden können. Es werden adaptive Medienformate wie DASH und HLS wiedergegeben. Dabei wird das Prinzip des Adaptiven Streamings verwendet: Je nach Qualität deiner Netzwerkverbindung und der verfügbaren Bandbreite passt der Player die Qualität des wiedergegebenen Videos an. Bei dem Transcodierungsjob, den wir gerade ausgeführt haben, haben wir die Standardvoreinstellungen verwendet und „nur“ zwei Qualitäten generiert: SD und HD. Wenn wir das Video im Player abspielen, sollte es im SD-Format beginnen und schnell zum HD-Format wechseln, wenn Ihre Netzwerkverbindung gut genug ist.

Wir streamen das transcodierte Livesignal im HLS-Format (weit verbreitetes Apple-Videoformat). Die entsprechende Datei heißt main.m3u8 und ist das HLS-Manifest. Das Manifest verweist auf die TS-Videosegmente.

Wenn Sie den VLC-Player verwenden möchten, rufen Sie https://www.videolan.org/vlc/ auf und laden Sie eine Version des Players für das Betriebssystem Ihres Laptops herunter. VLC ist für Windows, MacOSX, Linux, Android und iOS verfügbar.

2a2d19abe728d222.png

Installiere den Player auf deinem Laptop und starte ihn. Für die nächsten Schritte verwenden wir die MacOSX-Version des Players.

Wenn Sie ein Video abspielen möchten, gehen Sie zu „Datei“ / „Netzwerk öffnen“:

f85565301f7c68dc.png

Sie können es mit folgenden Geräten einrichten:

  • URL: http://<Replace_With_Edge_Cache_IP>/main.m3u8. Das ist die URL des Videos, das wir streamen möchten. Hinweis:
  • Die IP-Adresse der Media CDN-Instanz: 34.105.35.246. Ersetzen Sie durch die IP-Adresse des bereitgestellten Cloud Media-Dienstes.
  • Der Pfad zur Manifest-Videodatei: „/“. Dies ist der Pfad, den wir im Bucket live-streaming-storage-$LOGNAME zum Speichern der transcodierten Livesignaldateien verwendet haben. Der Pfad ist hier der Basispfad: „/“.
  • Der Name der Manifestvideodatei: die HLS-Manifestdatei main.m3u8.

Klicken Sie auf „Öffnen“. Das transkodierte Live-Video sollte jetzt wiedergegeben werden. Das Video sollte dann so aussehen wie im Screenshot unten. Der Zähler auf dem Bildschirm läuft in Schritten von 1 und Sie sollten einen kontinuierlichen Piepton hören.

Es ist ein einfaches RTMP-Test-Livesignal, das von FFmpeg generiert, von der Live Streaming API in HLS transcodiert und über den Media CDN-Cache bereitgestellt wird:

28fc359b49d44ec2.png

Du kannst auch einen anderen HLS- und MPEG-DASH-Player verwenden. Hier sind einige Beispiele:

  • Quicktime Player – standardmäßig auf Macs installiert Hier ist es genauso: Öffne eine Netzwerkverbindung zu http://34.104.36.157/main.m3u8. Ersetze die IP-Adresse durch die deiner Edge Cache Service-Instanz.

17. Media CDN überwachen

Das SME-Team hat eine Media CDN-Dashboard-Vorlage erstellt: https://gist.github.com/elithrar/1c511d00f5cd3736fb2a3897867209c1.

Führen Sie die folgenden Befehle in Cloud Shell aus, um es zu installieren:

Laden Sie die YAML-Datei herunter:

curl https://gist.githubusercontent.com/elithrar/1c511d00f5cd3736fb2a3897867209c1/raw/3cb70855304f29e5c06b8d63063196354db0dec3/media-edge-20210208-dashboard --output media-edge-20210208-dashboard.yaml

So erstellen Sie das Dashboard für Cloud Monitoring:

gcloud monitoring dashboards create --config-from-file media-edge-20210208-dashboard.yaml

Die Einrichtung kann einige Minuten dauern. Rufen Sie die Google Cloud Console auf und klicken Sie auf die drei Balken > „Verwaltung“ > „Monitoring“ > „Dashboards“. Es sollte ein Dashboard mit dem Namen „Media Edge Metrics“ angezeigt werden. Klicken Sie darauf, um die Messwerte aufzurufen:

d0821d84a88a928d.png

18. Lab-Umgebung bereinigen

Herzlichen Glückwunsch zum Abschluss des Labs. In diesem Abschnitt löschen wir alle Ressourcen, die wir im Verlauf des Labs erstellt haben.

FFmpeg-Signal beenden:

Drücke im Cloud Shell-Terminal, in dem FFmpeg ausgeführt wird, die Taste <CTRL+C>.

So beenden Sie den Livestream-Kanal:

Befehl

curl -X POST \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID:stop"

So löschst du den Livestreaming-Kanal:

Befehl

curl -X DELETE -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) "https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/channels/$CHANNEL_ID"

Lösche den Endpunkt für den Live-Streaming-Eingang:

Befehl

curl -X DELETE \
-H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
"https://livestream.googleapis.com/v1/projects/$PROJECT_NUMBER/locations/$LOCATION/inputs/$INPUT_ID"

GCS-Bucket löschen:

Befehl

gsutil rm -r gs://live-streaming-storage-$LOGNAME

Edge-Cache-Dienstinstanz löschen:

Befehl

gcloud edge-cache services delete cme-demo

Bestätigen Sie das Löschen, indem Sie auf die Aufforderung hin „Y“ eingeben.

Edge-Cache-Ursprung löschen:

Befehl

gcloud edge-cache origins delete cme-origin

Bestätigen Sie das Löschen, indem Sie auf die Aufforderung hin „Y“ eingeben.

Benutzerdefiniertes Dashboard löschen

Befehl

gcloud monitoring dashboards delete $(gcloud monitoring dashboards list --filter="displayName:Media Edge Metrics" --format="value(name)")