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

1. Einführung

Content Delivery Networks (CDNs) verbessern die Leistung für Nutzer, 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 mehr Umsatz, einer besseren Webleistung und einer insgesamt besseren Nutzerfreundlichkeit. Heutzutage gibt es nur noch sehr wenige moderne Websites und Videostreaming-Plattformen, die ohne CDN auskommen.

Lerninhalte

In diesem Lab werden wir 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- und MPEG-DASH-kompatibler Player) geführt.

Wir richten die Livestreaming-API-Komponenten „Input“ und „Channel“ ein und starten mit FFmpeg einen Livefeed zum Input/Channel. FFmpeg kann ein Live-Testsignal generieren. Die Live Streaming API transcodiert den Livefeed. Das transcodierte 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 wiederzugeben, die über Media CDN im Cache gespeichert wurden. Außerdem richten wir ein Cloud Monitoring-Dashboard ein, um die Aktivität von Media CDN zu visualisieren.

Umfang

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

de33cb3e75d52549.png

Im Rahmen dieses Labs werden die folgenden Komponenten eingerichtet und die folgenden Aufgaben ausgeführt:

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

Hinweis: In diesem Lab wird davon ausgegangen, dass Nutzer Zugriff auf die Google Cloud Console haben und bereits ein Projekt eingerichtet haben. Wir gehen außerdem davon aus, dass 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 gesamten Lab werden wir auf die Google Cloud Console verweisen.

2. Hinweis

Der Zugriff auf Media CDN ist eingeschränkt. Wenn Sie Zugriff auf Media CDN erhalten möchten, wenden Sie sich an Ihr Account-Management-Team. Er kann in deinem Namen eine Zugriffsanfrage erstellen. Wenn Sie zu Google gehören und Livestreaming mit Media CDN testen möchten, wenden Sie sich an den Produktmanager für Media CDN, um Zugriff auf Media CDN anzufordern.

3. Einrichtung und Anforderungen

Cloud Shell starten

Während Sie Google Cloud von Ihrem Laptop aus per Fernzugriff nutzen können, wird in diesem Codelab Google Cloud Shell verwendet, 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 Augenblicke dauern. Anschließend sehen Sie in etwa Folgendes:

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 in Google Cloud, was die 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 Dokuments ist 408.0.0 die aktuelle Google Cloud SDK-Version. Alle Befehle in diesem Lab wurden mit der neuesten Version des Google Cloud SDK getestet. Prüfen Sie, ob in Cloud Shell die neueste Version des SDK verwendet wird, bevor Sie fortfahren.

SDK-Version prüfen

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

Befehl

gcloud version | grep "Google Cloud SDK"

Beispielausgabe

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 Service-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 Cloud Shell in der Regel vorkonfiguriert. Wir verwenden den Befehl env zur Bestätigung.

Befehl

env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'

Beispielausgabe

DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID>
LOGNAME=<YOUR_USERNAME>

env_variables-Datei erstellen

Verwenden Sie den Befehl cat, um die Datei env_variables.txt 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 angezeigt werden.

Befehl

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

Beispielausgabe

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

Live Stream 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 4 APIs angezeigt werden.

Befehl

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

Beispielausgabe

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

6. Cloud Storage-Bucket erstellen

In diesem Abschnitt gehen wir so vor:

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

Später im Lab verwenden wir diesen Bucket zum Speichern der transcodierten Videodateien. 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. Livestreaming 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 Ihr Encoder Ihren Eingabestream sendet. Mit dem Eingabeendpunkt können Sie Konfigurationen für Ihren Stream angeben, z. B. Eingabeauflösung, Eingabetyp und Videobeschneidung.
  • Live-Streaming-Kanal:Ein Kanal ist eine Ressource, die den Eingabestream über einen Eingabeendpunkt aufnimmt, den Eingabestream in mehrere Versionen transcodiert und Live-Ausgabestreams in bestimmten Formaten am angegebenen Ort veröffentlicht. Du kannst einen primären und einen Backup-Eingabestream in denselben Kanal einfügen.

Wir erstellen die folgenden Ressourcen später im Lab:

  • 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 Livestream-Signaltyp 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 wird die Live Stream API nicht von gcloud unterstützt. Wir verwenden den curl-Befehl, 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"

Beispielausgabe

{
  "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, aber derzeit müssen wir uns auf zwei Felder konzentrieren:

  • Vorgangs-ID:Kopieren Sie die Vorgangs-ID aus der Ausgabe und notieren Sie sie. Unten sehen Sie die Vorgangs-ID aus dem Beispiel für die Ausgabe. Sie finden sie in der Ausgaberzeile, die mit "name" beginnt. "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4"
  • Status:Wir müssen warten, bis sich der Status von "done": false zu "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 wir 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"

Beispielausgabe

{
  "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. Das 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 gerade 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 den Livestreaming-Kanal, der mit dem Eingabeendpunkt verknüpft ist, den wir gerade im vorherigen Abschnitt erstellt haben. Im folgenden Beispiel wird ein Kanal erstellt, der einen HLS-Livestream mit einer einzelnen HD-Wiedergabe (1280 × 720) generiert. Der Kanal wird mit dem Eingabeendpunkt und dem zuvor erstellten Storage-Bucket verknüpft.

Datei „channel.json“ erstellen

Geben Sie im 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 Channel 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"

Beispielausgabe

{
  "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 und kopieren Sie die Vorgangs-ID. Wir benötigen sie in einem der nächsten Schritte. Sie finden sie in der Ausgaberzeile, die mit "name" beginnt.

Status prüfen

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

Ersetzen Sie im folgenden Befehl <OPERATION> durch die ID des Vorgangs, die wir 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"

Beispielausgabe

  "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. Das bedeutet, dass der Eingabeendpunkt erstellt wurde und bereit ist.

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

10. Livestreaming-Kanal starten

Nachdem wir unseren Livestream-Kanal erstellt haben, starten wir ihn. In diesem Abschnitt gehen wir so vor:

  1. Livestreaming-Kanal starten
  2. Prüfe den Status des Kanals. Er muss "AWAITING INPUT" sein.streamingState

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"

Beispielausgabe

{
  "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 Channels 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"

Beispielausgabe

"streamingState": "AWAITING_INPUT",

Führen Sie den Befehl so lange aus, bis „AWAITING_INPUT“ angezeigt wird. Das bedeutet, dass der Channel ausgeführt wird und bereit ist, ein Signal zu empfangen.

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 Ort, an dem sich die Quelle der Inhalte befindet, 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 entspricht, den wir am Anfang des Labs erstellt haben. Wir nennen den Edge-Cache-Ursprung cme-origin. Der Ursprung eines CDN ist der Ort, an dem alle Quellinhalte gespeichert werden, 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 mit dem Namen 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 behalten alle Standardeinstellungen für die Konfiguration des Edge-Cache-Dienstes bei. In der Datei oben gibt es drei Feldwerte, die Nutzer möglicherweise aktualisieren möchten:

  • name: Der Name der Media CDN-Instanz, hier: cme-demo
  • hosts: die Liste der Domainnamen, die von diesem Media CDN-Dienst aufgelöst werden – hier: demo.cme.com. Wir werden sie in dieser Demo verwenden. Wir verwenden die IP-Adresse der Media CDN-Instanz.
  • Origin: – Dies ist der Edge-Cache-Ursprung, den wir gerade im vorherigen Schritt erstellt haben. Legen Sie den Wert auf cme-origin fest – Name 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 Service.

Edge-Cache-Dienst erstellen

Wir erstellen einen Edge-Cache-Dienst mit dem Namen cme-demo für den Edge-Cache-Ursprung cme-origin mit dem Host demo.cme.com. Führen Sie den folgenden Befehl in Cloud Shell 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 Service erstellt ist.

Beispielausgabe

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 und kopieren Sie die ipv4Addresses der Edge-Cache-Dienstinstanz – hier 34.104.36.157. Wir verwenden sie, um die Datei cme-demo.yaml zu aktualisieren und später das transcodierte Video zu streamen.

Edge-Cache-Dienst aktualisieren

An dieser Stelle ist es sinnvoll, die Edge-Cache-Dienstkonfiguration zu aktualisieren, damit Sie die IP-Adresse des Dienstes später zum Streamen des Videos verwenden können. In der YAML-Datei für den Edge-Cache-Dienst können wir alle Hostnamen/IPs auflisten, von denen der Edge-Cache-Dienst Anfragen akzeptiert. Bisher haben wir nur demo.cme.com als Host angegeben. Um die Namensauflösung für diese Domain zu ermöglichen, können Sie eine DNS-Zone konfigurieren. Eine einfachere Lösung wäre jedoch, die IP-Adresse der Hostliste in der yaml-Datei hinzuzufügen. Bearbeiten Sie die YAML-Datei noch einmal, sodass sie wie unten aussieht:

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

Damit die Änderungen übernommen werden, müssen wir die YAML-Datei noch einmal importieren. Führen Sie im Cloud Shell-Terminal den folgenden Befehl aus:

Befehl

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

Prüfen Sie die Ausgabe des Befehls und vergewissern Sie sich, dass die IP-Adresse in der Liste der Hosts angezeigt wird.

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

12. Eingabesignal generieren

Nachdem wir alle erforderlichen Dienste konfiguriert haben, können wir das Livestream-Eingabesignal generieren. In diesem Abschnitt gehen wir so vor:

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

1. FFmpeg installieren

FFmpeg ist ein kostenloses Open-Source-Softwareprojekt, das aus einer Reihe von Bibliotheken und Programmen für die Verarbeitung von Video-, Audio- und anderen Multimedia-Dateien und ‑Streams besteht. Verwenden Sie im Cloud Shell-Terminal den folgenden Befehl, um FFmpeg zu installieren:

Befehl

sudo apt install ffmpeg -y

Prüfen Sie nach der Installation, ob FFmpeg richtig installiert wurde, indem Sie die Version prüfen:

Befehl

ffmpeg -version

Beispielausgabe

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. Livestream-Signal an den Eingang/Kanal senden

Nachdem FFmpeg installiert wurde, 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 wir 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

Sie sollten sehen, dass FFmpeg das Live-Testsignal sendet. Der Befehl gibt den Prompt nicht zurück. Das Signal wird so lange 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

An diesem Punkt müssen Sie ein neues Cloud Shell-Fenster öffnen, um das Lab fortzusetzen, da FFmpeg dauerhaft ausgeführt wird, bis Sie den Befehl mit <STRG+C> beenden und so die Generierung des Live-Signals 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 angezeigt werden.

Befehl

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

Beispielausgabe

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 transcodiert 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 JSON-Datei für die Ausgabe sollte "streamingState": "STREAMING" angezeigt werden. Das bedeutet, dass der Kanal streamt und das Live-Signal transcodiert wird.

Sehen wir uns auch den Inhalt des Buckets an. 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 am Anfang des Labs erstellt haben und der von der Live Streaming API verwendet wird, um das Manifest des transcodierten Live-Signals und die TS-Videosegmente auszugeben:

Befehl

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

Beispielausgabe

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:

  • die 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 Live-Signal wird über die Live Streaming API generiert und in einen Bucket transcodiert.
  • Media CDN: Media CDN wurde mit dem Live-Streaming-Speicher-Bucket als Ursprung von Media CDN konfiguriert.

In den nächsten Abschnitten validieren wir den Edge Cache Service und streamen dann das transkodierte 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 in der Edge-Cache-Dienst-Instanz 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-Standort im Cache gespeichert. Alle nachfolgenden Versuche, auf dieselbe Datei zuzugreifen, geben einen Cache-HIT zurück, da das Objekt jetzt am Edge im Cache gespeichert ist. So können Sie dieses Verhalten überprüfen:

Führen Sie den folgenden curl-Befehl in Cloud Shell aus, um auf die Manifestdatei des transcodierten Videos 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.

Beispielausgabe

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 den Cache-Fehler, da das Objekt noch nicht im Cache gespeichert ist und vom Ursprung gelesen wird.

Wir senden jetzt mehrere Anfragen für die Datei m3u8. Wenn alles richtig konfiguriert ist, sollte Media CDN die Inhalte aus dem Cache bereitstellen. Mit dem folgenden Befehl werden 10 curl-Anfragen gestellt und nur der x-cache-status-Header wird 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 Cache-Treffer angezeigt werden, funktioniert Media CDN wie erwartet.

Beispielausgabe

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-Standort zwischengespeichert wird. Der Cloud Media Edge Service funktioniert wie erwartet.

16. Transcodiertes Live-Videosignal mit VLC streamen

In diesem Abschnitt werden die einzelnen Schritte, an denen wir bisher gearbeitet haben, miteinander verknüpft:

  • Wir haben einen Bucket namens live-streaming-storage-$LOGNAME erstellt, in dem das Ergebnis des Live-Signals empfangen wird, das von der Live Streaming API in HLS-Inhalte transcodiert wurde.
  • Wir haben die Live Streaming API eingerichtet.
  • Wir haben ein RTMP-Livesignal mit FFmpeg gestartet, das den Eingabe-/Kanal der Live Streaming API speist.
  • Wir haben überprüft, ob das Live-Signal an den Kanal gesendet wurde und ob sich der Kanal im streaming-Modus befand.
  • Wir haben überprüft, ob die resultierenden transcodierten 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 mit dem Namen cme-demo wurde mit cme-origin als Ursprung eingerichtet.
  • Wir haben das Verhalten (Cache-Fehler, Cache-Treffer) der Edge-Cache-Dienstinstanz überprüft.

Wir sind jetzt an einem Punkt, an dem wir einen Videoplayer verwenden können, um das transcodierte Live-Signal über den Media CDN-Cache zu streamen. Dazu verwenden wir den VLC Player. Der VLC Player ist ein kostenloser, plattformübergreifender Open-Source-Multimediaplayer und ein Framework, das die meisten Multimediadateien abspielen kann. Es werden adaptive Medienformate wie DASH und HLS unterstützt. Dabei wird das Prinzip des adaptiven Streamings verwendet: Je nach Qualität Ihrer Netzwerkverbindung und verfügbarer Bandbreite passt der Player die Qualität des wiedergegebenen Videos an. Beim Transcodierungsjob haben wir die Standardvoreinstellungen verwendet und „nur“ zwei Qualitäten generiert: SD und HD. Wenn wir das Video im Player abspielen, sollte es zuerst im SD-Format wiedergegeben werden und dann schnell zum HD-Format wechseln, sofern deine Netzwerkverbindung gut genug ist.

Wir streamen das transcodierte Live-Signal im HLS-Format (weit verbreitetes Apple-Videoformat). Die entsprechende Datei heißt main.m3u8. Das 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

Installieren Sie den Player auf Ihrem Laptop und starten Sie ihn. In den nächsten Schritten verwenden wir die MacOSX-Version des Players.

Um ein Video abzuspielen, gehen Sie zu „Datei“ / „Netzwerk öffnen“:

f85565301f7c68dc.png

Einrichten mit:

  • 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 diese durch die IP-Adresse des bereitgestellten Cloud Media Service.
  • Der Pfad zur Manifest-Videodatei: „/“. Dies ist der Pfad, den wir im Bucket live-streaming-storage-$LOGNAME zum Speichern der transcodierten Live-Signaldaten verwendet haben. Der Pfad ist hier der Root-Pfad: „/“.
  • Der Name der Manifest-Videodatei: die HLS-Manifestdatei main.m3u8.

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

Es handelt sich um 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

Sie können auch einen anderen HLS- und MPEG-DASH-Player verwenden. Hier sind einige Beispiele:

  • QuickTime Player – standardmäßig auf Macs installiert. Öffnen Sie auch hier eine Netzwerkverbindung zu http://34.104.36.157/main.m3u8. Ersetzen Sie die IP-Adresse durch die Ihrer Edge Cache Service-Instanz.

17. Media CDN überwachen

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

Führen Sie die folgenden Befehle im Cloud Shell-Fenster 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

Dashboard für Cloud Monitoring erstellen:

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 > „Operations“ > „Monitoring“ > „Dashboards“. Sie sollten ein Dashboard mit dem Namen „Media Edge Metrics“ sehen. Klicken Sie darauf, um die Messwerte aufzurufen:

d0821d84a88a928d.png

18. Lab-Umgebung bereinigen

Sie haben das Lab erfolgreich abgeschlossen. In diesem Abschnitt löschen wir alle Ressourcen, die wir im Laufe des Labs erstellt haben.

FFmpeg-Signal beenden:

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

So beenden Sie den Livestreaming-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öschen Sie 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öschen Sie den Livestreaming-Eingabeendpunkt:

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 „Y“ eingeben, wenn Sie dazu aufgefordert werden.

Edge-Cache-Ursprung löschen:

Befehl

gcloud edge-cache origins delete cme-origin

Bestätigen Sie das Löschen, indem Sie „Y“ eingeben, wenn Sie dazu aufgefordert werden.

Benutzerdefiniertes Dashboard löschen

Befehl

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