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

1. Einführung

Content Delivery Networks (CDNs) verbessern die Nutzerleistung, indem häufig aufgerufene Inhalte näher an den Endnutzern im Cache gespeichert werden, Verbindungen näher an den Clients beendet werden, Verbindungen zum Ursprung wiederverwendet und moderne Netzwerkprotokolle und -anpassungen verwendet werden. Für Nutzer (und unsere Kunden) bedeutet dies geringere Latenz, mehr Zuverlässigkeit und geringere Kosten – was zu besseren Umsätzen, einer besseren Nutzererfahrung auf der Website und einer Nettozunahme der Nutzererfahrung führt. Nur sehr wenige moderne Websites und Videostreaming-Plattformen arbeiten heute ohne CDN.

Lerninhalte

In diesem Lab erfahren Sie, wie Sie eine Livestreaming-Workflowumgebung mit Media CDN (CDN) + Cloud Media Live Streaming API (Livevideotranscodierung) + Cloud Storage (Speicher für die Videos) + Video Player (VLC, Google Shaka Player usw. – HLS- und MPEG-DASH-fähiger Player) bereitstellen.

Wir richten die Komponenten der Live Streaming API (Eingabe und Kanal) ein und starten mit FFmpeg einen Live-Feed für den Eingabe-/Kanal (mit FFmpeg kann ein Live-Testsignal generiert werden). 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 für die Wiedergabe von Live-Inhalten eingesetzt, die über Media CDN im Cache gespeichert wurden. Außerdem richten wir ein Cloud Monitoring-Dashboard ein, um die Aktivitäten von Media CDN zu visualisieren.

Inhalt

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

de33cb3e75d52549.png

Im Rahmen dieses Labs richten Sie die folgenden Komponenten ein und führen die folgenden Aufgaben aus:

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

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

Alle Konfigurationsaktionen werden über die Befehlszeile in Cloud Shell ausgeführt. Wir können die über die Befehlszeile in der Konsole konfigurierten Komponenten jederzeit überprüfen. In diesem Lab sehen Sie immer wieder Hinweise, die auf die Google Cloud Console verweisen.

2. Hinweis

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

3. Einrichtung und Anforderungen

Cloud Shell starten

Sie können Google Cloud zwar von Ihrem Laptop aus der Ferne bedienen, 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 dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:

7ffe5cbb04455448.png

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

4. Google Cloud SDK-Version

Beim Verfassen dieses Artikels ist 408.0.0 die neueste Version des Google Cloud SDK. Alle Befehle in diesem Lab wurden mit der neuesten Version des Google Cloud SDK getestet. Achten Sie darauf, dass Cloud Shell die neueste SDK-Version verwendet, 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"

Ausgabebeispiel

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 Sie mit der Konfiguration der GCP-Ressourcen beginnen, müssen Sie Folgendes tun:

  1. Umgebungsvariablen einrichten
  2. Erforderliche Dienst-APIs aktivieren

1. Umgebungsvariablen einrichten

In diesem Lab führen wir die Befehle gcloud und curl 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. Zur Bestätigung verwenden wir den Befehl env.

Befehl

env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'

Ausgabebeispiel

DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID>
LOGNAME=<YOUR_USERNAME>

Datei env_variables 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

Befehl

source ~/env_variables.txt

Überprüfen, ob die Variablen festgelegt sind

Nun prüfen wir, ob alle erforderlichen Umgebungsvariablen festgelegt sind. Die Ausgabe sollte insgesamt sechs Umgebungsvariablen enthalten.

Befehl

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

Ausgabebeispiel

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 sicherstellen, 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ühre 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. Die Ausgabe sollte 4 APIs enthalten.

Befehl

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

Ausgabebeispiel

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

6. Cloud Storage-Bucket erstellen

In diesem Abschnitt werden wir Folgendes tun:

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

Später im Lab werden wir diesen Bucket zum Speichern der transcodierten Videodateien verwenden. 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 wie folgt aufgebaut:

96b5d26aedeb89a6.png

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

  • Live Streaming Input: Der Eingabeendpunkt ist ein Endpunkt, an den dein Encoder deinen Eingabestream sendet. Mit dem Eingabeendpunkt kannst du Konfigurationen für deinen Stream festlegen, z. B. die Eingabeauflösung, den Eingabetyp und das Zuschneiden des Videos.
  • Livestreaming-Kanal:Ein Kanal ist eine Ressource, die den Eingabestream über einen Eingabeendpunkt aufnimmt, ihn in mehrere Wiedergaben transcodiert und Ausgabe-Livestreams in bestimmten Formaten am angegebenen Ort veröffentlicht. Du kannst einen primären und einen Backup-Eingabestream 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-Live-Signal.

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 für die API-Aufrufe.

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"

Ausgabebeispiel

{
  "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 aus der Ausgabe die Vorgangs-ID und notieren Sie sie. Unten sehen Sie die Vorgangs-ID aus dem Ausgabebeispiel. Sie finden sie in der Ausgabezeile, 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, den wir gerade 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"

Ausgabebeispiel

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

URI speichern

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

Befehl

export URI=<uri>

Ersetzen Sie <uri> durch den oben genannten URI. 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. Erstellen und Livestream-Kanal konfigurieren

Erstellen wir nun den Live-Streaming-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 x 720) besteht. 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 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"

Ausgabebeispiel

{
  "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 Ausgabezeile, 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, den wir gerade 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"

Ausgabebeispiel

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

Beachten Sie, dass "streamingState" derzeit "STOPPED" ist. Wir starten den Kanal im nächsten Abschnitt.

10. Den Livestream-Kanal starten

Nachdem wir nun den Livestream-Kanal erstellt haben, kann er gestartet werden. In diesem Abschnitt werden wir Folgendes tun:

  1. Den Livestream-Kanal starten
  2. Überprüfe den Status des Kanals. Wir müssen sicherstellen, dass streamingState "AWAITING INPUT" lautet.

1. Den 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"

Ausgabebeispiel

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

Ausgabebeispiel

"streamingState": "AWAITING_INPUT",

Führen Sie den Befehl so lange aus, bis Sie „AWAITING_INPUT“ sehen gibt an, dass der Kanal 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 steht für einen Inhaltsspeicherort, z. B. einen Cloud Storage-Bucket, den Speicherort eines Drittanbieters oder einen Load-Balancer. In Bezug auf CDN ist der Ursprung (oder Ursprungsserver) der Ort, an dem sich die Quelle des Contents befindet, den wir verteilen möchten, z.B. Alle CSS-, JavaScript-, HTML- und Bildelemente usw. In diesem Lab erstellen wir einen Ursprung, der dem Cloud Storage-Bucket zugeordnet ist, den wir zu Beginn des Labs erstellt haben. Wir nennen den Edge-Cache-Ursprung cme-origin. Der Ursprung eines CDN ist der Ort, an dem der gesamte Quellinhalt gespeichert wird, bevor er an die Edge-Cache-Server verteilt wird.

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

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 Sie den Edge-Cache-Ursprung eingerichtet haben, können Sie den Edge-Cache-Dienst selbst erstellen.

Datei cme-demo.yaml erstellen

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

Alle Konfigurationsstandards für den Edge-Cache-Dienst werden beibehalten. 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: ist die Liste der Domainnamen, die von diesem Media CDN-Dienst aufgelöst werden. Hier finden Sie die Liste 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 dafür 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 in der Konfigurationsanleitung für den Edge Cache-Dienst.

Edge-Cache-Dienst erstellen

Wir erstellen einen Edge-Cache-Dienst namens cme-demo am 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

Das Erstellen des Edge-Cache-Dienstes kann einige Minuten dauern.

Ausgabebeispiel

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

Edge-Cache-Dienst aktualisieren

An dieser Stelle empfiehlt es sich, die Konfiguration des Edge-Cache-Dienstes zu aktualisieren, damit Sie die IP-Adresse des Dienstes verwenden können, um das Video später zu streamen. Mit der YAML-Datei des Edge-Cache-Dienstes können Sie alle Hostsnamen/IP-Adressen auflisten, von denen der Edge-Cache-Dienst Anfragen akzeptiert. An dieser Stelle haben wir nur demo.cme.com als Host angegeben. Um eine Namensauflösung für diese Domain bereitzustellen, konfigurieren Sie in der Cloud eine DNS-Zone. Eine einfachere Lösung wäre jedoch, die IP-Adresse der Hostliste in der Datei yaml hinzuzufügen. Bearbeiten Sie die YAML-Datei noch einmal und bearbeiten Sie sie wie folgt:

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 nur 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

Sehen Sie in der Ausgabe des Befehls nach, ob die IP-Adresse in der Liste der Hosts angezeigt wird.

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

12. Eingabesignal generieren

Nachdem Sie alle erforderlichen Dienste konfiguriert haben, können Sie jetzt das Eingabesignal für den Livestream generieren. In diesem Abschnitt werden wir Folgendes tun:

  1. Installation von FFmpeg, einer kostenlosen Open-Source-Software
  2. Senden Sie ein Test-Live-Signal an den Eingang/Kanal

1. FFmpeg installieren

FFmpeg ist ein kostenloses Open-Source-Softwareprojekt, das aus einer Reihe von Bibliotheken und Programmen zur Verarbeitung von Video-, Audio- und anderen Multimediadateien und -streams besteht. Verwenden Sie den folgenden Befehl, um FFmpeg im Cloud Shell-Terminal zu installieren:

Befehl

sudo apt install ffmpeg -y

Wenn die Installation abgeschlossen ist, können Sie überprüfen, ob FFmpeg korrekt installiert wurde. Überprüfen Sie dazu die Version:

Befehl

ffmpeg -version

Ausgabebeispiel

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 ordnungsgemäß installiert.

2. Livestream-Signal zum Eingang/Kanal starten

Nachdem FFmpeg nun 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 Schritt „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

Du solltest sehen, dass FFmpeg das Test-Live-Signal sendet. Der Befehl gibt die Eingabeaufforderung nicht 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

An dieser Stelle müssen Sie ein neues Cloud Shell-Fenster öffnen, um das Lab fortzusetzen, da FFmpeg dauerhaft ausgeführt wird, bis Sie <Strg+C> drücken. den Befehl, um ihn zu stoppen und somit die Generierung des Live-Signals zu stoppen.

Klicken Sie auf das „+“, neben dem Namen des aktuellen Cloud Shell-Terminals. Ein weiteres Cloud Shell-Fenster wird geöffnet.

b3c7b0be6276c194.png

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

Umgebungsvariablen einrichten

Da dies eine neue Cloud Shell ist, müssen wir die Umgebungsvariablen noch einmal festlegen. Wir verwenden den Befehl source, um die Umgebungsvariablen festzulegen.

Befehl

source ~/env_variables.txt

Überprüfen, ob die Variablen festgelegt sind

Nun prüfen wir, ob alle erforderlichen Umgebungsvariablen festgelegt sind. Die Ausgabe sollte insgesamt sechs Umgebungsvariablen enthalten.

Befehl

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

Ausgabebeispiel

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 Live-Signal transcodiert wird

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

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 Antwort der JSON-Ausgabedatei sollte "streamingState": "STREAMING" zu sehen sein. Dies bedeutet, dass der Kanal streamt und das Live-Signal transcodiert wird.

Überprüfen wir auch den Inhalt des Buckets, in dem eine Manifestdatei und mehrere TS-Videosegmente angezeigt werden sollten. Führen Sie in Cloud Shell den folgenden Befehl aus, um den Inhalt des Buckets aufzulisten, den wir zu Beginn des Labs erstellt und von der Live Streaming API zur Ausgabe des transcodierten Live-Signal-Manifests und der TS-Videosegmente verwendet haben:

Befehl

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

Ausgabebeispiel

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

Jetzt haben wir Folgendes erledigt:

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

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

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

In diesem Abschnitt prüfen wir, ob die Edge-Cache-Dienstinstanz wie erwartet funktioniert. Dazu versuchen wir, über die IP-Adresse des Edge-Cache-Diensts auf eine Datei aus der Edge-Cache-Dienst-Instanz zuzugreifen. Wenn ein Objekt zum ersten Mal aufgerufen wird, wird es noch nicht im Cache gespeichert. Wir sollten einen Cache MISS beobachten. Bei der ersten Anfrage wird das Objekt aus dem Ursprung gelesen und am Netzwerkrand im Cache gespeichert. Bei allen folgenden Versuchen, auf dieselbe Datei zuzugreifen, wird ein Cache-HIT zurückgegeben, da das Objekt jetzt am Netzwerkrand im Cache gespeichert wird. Überprüfen wir dieses Verhalten:

Führen Sie in Cloud Shell den folgenden curl-Befehl aus, um auf die transcodierte 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-Dienstinstanz verwenden, um ihren Namen aufzulösen. Verwenden Sie demo.cme.com:<IP>, wobei die IP die IP-Adresse der soeben erstellten Edge-Cache-Dienstinstanz ist.

Suchen Sie in der Ausgabe nach dem Header x-cache-status.

Ausgabebeispiel

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 wurde und aus dem Ursprung gelesen wird.

Jetzt senden wir mehrere Anfragen für die Datei m3u8. Wenn alles richtig konfiguriert ist, sollte Media CDN mit der Bereitstellung des Contents aus dem Cache beginnen. 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.

Ausgabebeispiel

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-hit, da das Objekt jetzt am Rand zwischengespeichert wird. Der Cloud Medie Edge-Dienst funktioniert wie erwartet.

16. Transcodiertes Live-Signal-Video mit VLC streamen

In diesem Teil verbinden wir die Punkte und verknüpfen alle Schritte, an denen wir bisher gearbeitet haben:

  • Wir haben einen Bucket mit dem Namen live-streaming-storage-$LOGNAME erstellt, der das Ergebnis des Live-Signals empfängt, das von der Live Streaming API in HLS-Content transcodiert wurde.
  • Wir richten die Live Streaming API ein.
  • Wir haben ein RTMP-Live-Signal mit FFmpeg gestartet, das den Eingabe-/Kanal der Live Streaming API füttert.
  • Wir haben überprüft, dass das Live-Signal in den Kanal gespeist wurde, und festgestellt, dass sich der Kanal im streaming-Modus befindet.
  • Wir haben überprüft, ob die resultierenden transcodierten Dateien (Manifest und 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-Fehler, Cache-Treffer) der Edge-Cache-Dienstinstanz überprüft.

Wir können jetzt mit einem Videoplayer das transcodierte Live-Signal ü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 wiedergegeben werden können. Es werden adaptive Medienformate wie DASH und HLS wiedergegeben. Dabei kommt das Prinzip des Adaptiven Streamings zum Einsatz: Je nach Qualität der Netzwerkverbindung und verfügbarer Bandbreite passt der Player die Qualität des Videos an. Mit dem Transcodierungsjob, den wir gerade ausgeführt haben, haben wir die Standardvoreinstellungen verwendet und „nur“ zwei Qualitäten generiert: SD und HD. Während wir mit der Wiedergabe des Videos im Player beginnen, sollte das Video im SD-Format abgespielt werden. Wenn deine Netzwerkverbindung ausreichend ist, wechselt es schnell zum HD-Format.

Wir streamen das im HLS-Format (weit von Apple unterstützte Videoformat) transcodierte Livesignal. Die entsprechende Datei heißt main.m3u8 – 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 Ihr Laptop-Betriebssystem 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. Für die nächsten Schritte verwenden wir die MacOSX-Version des Players.

Wenn du ein Video abspielen möchtest, rufe „Datei“ auf / „Offenes Netzwerk“:

f85565301f7c68dc.png

So kannst du die Funktion einrichten:

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

Klicken Sie auf „Öffnen“. Die Wiedergabe des transcodierten Live-Videos sollte beginnen. Das Video sieht aus wie im Screenshot unten. Der Zähler auf dem Bildschirm wird in Schritten von 1 ausgeführt und Sie sollten einen fortlaufenden Signalton hören.

Es handelt sich um ein grundlegendes 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, die Sie eventuell in Betracht ziehen:

  • Quicktime-Player – standardmäßig auf Macs installiert Dasselbe gilt: Stellen Sie eine Netzwerkverbindung zu http://34.104.36.157/main.m3u8 her. Ersetzen Sie die IP-Adresse durch die mit der Instanz des Edge-Cache-Dienstes.

17. Media CDN überwachen

Eine Media CDN-Dashboard-Vorlage wurde vom SME-Team erstellt: https://gist.github.com/elithrar/1c511d00f5cd3736fb2a3897867209c1.

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

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 3 Balken > Operations-Suite > Monitoring > Dashboards Es sollte ein Dashboard namens „Media Edge Metrics“ angezeigt werden. Wenn Sie darauf klicken, werden die Messwerte angezeigt:

d0821d84a88a928d.png

18. Lab-Umgebung bereinigen

Sie haben das Lab erfolgreich abgeschlossen. In diesem Abschnitt löschen wir alle Ressourcen, die wir in diesem Lab erstellt haben.

Halten Sie das FFmpeg-Signal an:

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

So beendest du 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öschst du den Live-Streaming-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 Eingabeendpunkt für das Livestreaming:

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"

Löschen Sie den GCS-Bucket:

Befehl

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

Löschen Sie die Edge-Cache-Dienstinstanz:

Befehl

gcloud edge-cache services delete cme-demo

Bestätigen Sie das Löschen durch Eingabe von „Y“ wenn Sie dazu aufgefordert werden

Löschen Sie den Edge-Cache-Ursprung:

Befehl

gcloud edge-cache origins delete cme-origin

Bestätigen Sie das Löschen durch Eingabe von „Y“ 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)")