1. Wprowadzenie
Sieci dystrybucji treści (CDN) zwiększają wydajność użytkowników, przechowując w pamięci podręcznej często używane treści bliżej użytkowników końcowych, zamykając połączenia bliżej klientów, ponownie wykorzystując połączenia z punktem początkowym oraz stosując nowoczesne protokoły sieciowe i dostosowania. Dla użytkowników (i naszych klientów) oznacza to mniejsze opóźnienia, większą niezawodność i niższe koszty, co przekłada się na wzrost sprzedaży, lepsze wrażenia z korzystania z internetu i ogólny wzrost zadowolenia użytkowników. Obecnie bardzo niewiele nowoczesnych witryn i platform do strumieniowego przesyłania wideo działa bez sieci CDN.
Czego się nauczysz
W tym module dowiesz się, jak wdrożyć środowisko przepływu pracy transmitowania na żywo za pomocą Media CDN (CDN) + Cloud Media Live Streaming API (transkodowanie wideo na żywo) + Cloud Storage (miejsce na filmy) + odtwarzacz wideo (VLC, Google Shaka Player itp. – odtwarzacz obsługujący HLS i MPEG-DASH).
Skonfigurujemy komponenty interfejsu Live Streaming API – wejście i kanał – i rozpoczniemy transmisję na żywo do wejścia/kanału za pomocą FFmpeg (FFmpeg może generować sygnał testowy na żywo). Interfejs Live Streaming API przekoduje aktywny kanał. Manifest i segmenty przekodowanego filmu będą przechowywane w zasobniku Cloud Storage. Następnie skonfigurujemy Media CDN, używając zasobnika Cloud Storage z transmisją na żywo jako źródła. Na koniec VLC Player będzie używany do odtwarzania treści na żywo buforowanych za pomocą Media CDN. Skonfigurujemy też panel Cloud Monitoring, aby wizualizować aktywność Media CDN.
Co utworzysz
W tym module skonfigurujemy środowisko na podstawie tej architektury:

W ramach tego modułu skonfigurujemy te komponenty i wykonamy te zadania:
- Utwórz zasobnik Google Cloud Storage (GCS) do przechowywania transkodowanych na żywo filmów.
- Skonfiguruj interfejs Live Streaming API, aby transkodować wideo do wielu formatów: HLS + MPEG DASH, SD i HD.
- Skonfiguruj komponenty transmisji na żywo: wejście/kanał.
- Uruchamianie kanału transmisji na żywo
- Konfigurowanie Media CDN z zasobnikiem GCS jako punktem początkowym
- Konfigurowanie FFmpeg do przesyłania danych do kanału na żywo
- Przesyłanie strumieniowe transkodowanego aktywnego kanału za pomocą odtwarzacza wideo
- Skonfiguruj panel Cloud Monitoring, aby monitorować aktywność Media CDN (czas oczekiwania, trafienia w pamięci podręcznej, braki w pamięci podręcznej itp.).
Uwaga: na potrzeby tego modułu zakładamy, że użytkownicy mają dostęp do konsoli Google Cloud i skonfigurowany projekt. Zakładamy też, że użytkownicy zaczynają od nowego środowiska i nie mają niczego skonfigurowanego na potrzeby tej wersji demonstracyjnej.
Wszystkie czynności konfiguracyjne wykonasz w wierszu poleceń w Cloud Shell. W konsoli zawsze możemy sprawdzić komponenty skonfigurowane za pomocą wiersza poleceń. W tym module znajdziesz wskazówki, które będą Cię kierować do konsoli Google Cloud.
2. Zanim zaczniesz
Dostęp do sieci CDN multimediów jest ograniczony. Aby uzyskać dostęp do Media CDN, skontaktuj się z zespołem ds. kont. Może on w Twoim imieniu utworzyć prośbę o dostęp. Jeśli pracujesz w Google i chcesz przetestować transmisje na żywo z Media CDN, skontaktuj się z menedżerem produktu Media CDN, aby poprosić o dostęp do tej usługi.
3. Konfiguracja i wymagania
Uruchamianie Cloud Shell
Z Google Cloud można korzystać zdalnie na laptopie, ale w tym module praktycznym będziesz używać Google Cloud Shell, czyli środowiska wiersza poleceń działającego w chmurze.
W konsoli Google Cloud kliknij ikonę Cloud Shell na pasku narzędzi w prawym górnym rogu:

Uzyskanie dostępu do środowiska i połączenie się z nim powinno zająć tylko kilka chwil. Po zakończeniu powinno wyświetlić się coś takiego:

Ta maszyna wirtualna zawiera wszystkie potrzebne narzędzia dla programistów. Zawiera również stały katalog domowy o pojemności 5 GB i działa w Google Cloud, co znacznie zwiększa wydajność sieci i usprawnia proces uwierzytelniania. Wszystkie zadania w tym laboratorium możesz wykonać w przeglądarce. Nie musisz niczego instalować.
4. Wersja (pakietu) SDK Google Cloud
W momencie pisania tego artykułu najnowszą wersją pakietu SDK Google Cloud jest 408.0.0. Wszystkie polecenia w tym module zostały przetestowane przy użyciu najnowszej wersji pakietu Google Cloud SDK. Zanim przejdziesz dalej, sprawdź, czy Cloud Shell używa najnowszej wersji pakietu SDK.
Sprawdzanie wersji pakietu SDK
Aby sprawdzić wersję pakietu SDK, użyjemy polecenia gcloud version.
Command
gcloud version | grep "Google Cloud SDK"
Przykładowe dane wyjściowe
Google Cloud SDK 408.0.0
Następne kroki
- Jeśli wersja pakietu SDK to
408.0.0lub nowsza, przejdź do następnej sekcji. - Jeśli wersja pakietu SDK jest niższa niż
408.0.0, uruchom poniższe polecenie, aby zaktualizować pakiet SDK.
sudo apt-get update && sudo apt-get install google-cloud-sdk
5. Wymagania wstępne
Zanim zaczniemy konfigurować zasoby GCP, musimy wykonać te czynności:
- Konfigurowanie zmiennych środowiskowych
- Włączanie wymaganych interfejsów API usług
1. Konfigurowanie zmiennych środowiskowych
W tym module będziemy wykonywać polecenia gcloud i curl z kilkoma zmiennymi. Musimy skonfigurować te zmienne środowiskowe:
- Identyfikator projektu
- Numer projektu
- Nazwa użytkownika
- Region
- Identyfikator wejścia
- Identyfikator kanału
Identyfikator projektu i nazwa użytkownika
Te zmienne środowiskowe są zwykle wstępnie skonfigurowane w Cloud Shell. Do weryfikacji użyjemy polecenia env.
Command
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'
Przykładowe dane wyjściowe
DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID> LOGNAME=<YOUR_USERNAME>
Tworzenie pliku env_variables
Aby utworzyć plik env_variables.txt, użyj polecenia cat. To polecenie utworzy plik env_variables.txt w katalogu głównym użytkownika.
Polecenia
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
Konfigurowanie zmiennych środowiskowych
Do ustawienia zmiennych środowiskowych użyjemy polecenia source.
Command
source ~/env_variables.txt
Sprawdź, czy zmienne są ustawione.
Sprawdźmy, czy wszystkie wymagane zmienne środowiskowe są ustawione. W danych wyjściowych powinno być łącznie 6 zmiennych środowiskowych.
Command
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
Przykładowe dane wyjściowe
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. Włączanie wymaganych interfejsów API usług
Musimy się upewnić, że w naszym projekcie są włączone te interfejsy API:
- Network Services API
- Certificate Manager API
- Livestream API
- Media CDN Edge Cache API
Włącz interfejs Network Services API
Aby włączyć interfejs Network Services API, uruchom to polecenie:
Command
gcloud services enable networkservices.googleapis.com
Włączanie interfejsu Certificate Manager API
Aby włączyć interfejs Certificate Manager API, uruchom to polecenie:
Command
gcloud services enable certificatemanager.googleapis.com
Włączanie interfejsu Live Stream API
Aby włączyć Live Stream API, uruchom to polecenie:
Command
gcloud services enable livestream.googleapis.com
Włączanie interfejsu Media CDN Edge Cache API
Aby włączyć interfejs Media CDN Edge Cache API, uruchom to polecenie:
Command
gcloud services enable edgecache.googleapis.com
Sprawdzanie, czy interfejsy API są włączone
Uruchom polecenie gcloud services list, aby wyświetlić listę wszystkich włączonych interfejsów API. W danych wyjściowych powinny się pojawić 4 interfejsy API.
Command
gcloud services list | grep -E 'networkservices|certificatemanager|livestream|edgecache'
Przykładowe dane wyjściowe
NAME: certificatemanager.googleapis.com NAME: livestream.googleapis.com NAME: networkservices.googleapis.com NAME: edgecache.googleapis.com
6. Tworzenie zasobnika Cloud Storage
W tej sekcji wykonamy te czynności:
- Tworzenie zasobnika Cloud Storage
- Ustawianie zasobnika jako dostępnego publicznie
W dalszej części modułu użyjemy tego zasobnika do przechowywania transkodowanych plików wideo. Ten zasobnik będzie też pełnić rolę źródła dla usługi Media CDN.
1. Tworzenie zasobnika
Aby utworzyć zasobnik, użyjemy polecenia gsutil mb:
Command
gsutil mb gs://live-streaming-storage-$LOGNAME
2. Ustawianie zasobnika jako dostępnego publicznie
Aby udostępnić pliki publicznie, użyjemy polecenia gsutil iam:
Command
gsutil iam ch allUsers:objectViewer gs://live-streaming-storage-$LOGNAME
7. Konfigurowanie środowiska interfejsu Live Streaming API
Komponenty łańcucha interfejsu Live Streaming API mają taką architekturę:

W poprzedniej sekcji utworzyliśmy zasobnik Cloud Storage live-streaming-storage-$LOGNAME. W kolejnych 2 sekcjach utworzymy te zasoby:
- Wejście transmisji na żywo: wejściowy punkt końcowy to punkt końcowy, do którego koder wysyła strumień wejściowy. Za pomocą punktu końcowego wejścia możesz określić konfiguracje strumienia, takie jak rozdzielczość wejściowa, typ wejścia i przycinanie wideo.
- Kanał transmisji na żywo: kanał to zasób, który przetwarza strumień wejściowy za pomocą punktu końcowego wejścia, transkoduje go do wielu wersji i publikuje wyjściowe transmisje na żywo w określonych formatach w wybranej lokalizacji. Możesz uwzględnić główny i zapasowy strumień wejściowy na tym samym kanale.
W dalszej części tego modułu utworzymy te zasoby:
- Koder: koder to program służący do wysyłania strumieni wejściowych. W tym module użyjemy FFmpeg.
8. Tworzenie i konfigurowanie wejściowego punktu końcowego
Tworzenie pliku input.json
Utworzymy plik input.json, aby określić typ sygnału transmisji na żywo. W tym module używamy sygnału na żywo RTMP.
Command
cat > input.json << EOF
{
"type": "RTMP_PUSH"
}
EOF
Tworzenie wejściowego punktu końcowego
W momencie pisania tego laboratorium interfejs Live Stream API nie jest obsługiwany przez gcloud. Do wywoływania interfejsu API będziemy używać polecenia curl.
Command
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"
Przykładowe dane wyjściowe
{
"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
}
Dane wyjściowe zawierają wiele przydatnych informacji, ale w tej chwili musimy skupić się na 2 polach:
- Identyfikator operacji: skopiuj i zanotuj identyfikator operacji z danych wyjściowych. Poniżej znajduje się identyfikator operacji z przykładowych danych wyjściowych. Znajduje się on w wierszu wyjściowym zaczynającym się od
"name"."operation-1661405972853-5e70a38d6f27f-79100d00-310671b4" - Stan: musimy poczekać, aż stan zmieni się z
"done": falsena"done": true.
Sprawdź stan
Zanim przejdziemy dalej, musimy sprawdzić, czy punkt końcowy wejścia został utworzony i jest gotowy.
W poleceniu poniżej zastąp <OPERATION> identyfikatorem operacji uzyskanym powyżej. W tym przykładzie jest to "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4".
Command
export OPERATION_ID_1=<OPERATION>
Command
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"
Przykładowe dane wyjściowe
{
"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"
}
}
Ponawiaj polecenie, aż zobaczysz "done:true", co oznacza, że wejściowy punkt końcowy został utworzony i jest gotowy.
Zapisz identyfikator URI
W dalszej części modułu użyjemy wartości URI z poprzedniego wyniku. Teraz ustawmy zmienną środowiskową dla URI.
Command
export URI=<uri>
Zastąp <uri> adresem URI zapisanym powyżej. Opcjonalnie możesz też użyć metody GET, aby pobrać identyfikator URI.
Command
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. Tworzenie i konfigurowanie kanału transmisji na żywo
Utwórzmy kanał transmisji na żywo powiązany z wejściowym punktem końcowym utworzonym w poprzedniej sekcji. W tym przykładzie tworzymy kanał generujący transmisję na żywo HLS, która składa się z jednej wersji w wysokiej rozdzielczości (1280x720). Kanał zostanie powiązany z wejściowym punktem końcowym i utworzonym wcześniej zasobnikiem na dane.
Tworzenie pliku channel.json
W terminalu Cloud Shell wpisz to polecenie, aby utworzyć plik "channel.json":
Command
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
Tworzenie kanału
Aby utworzyć kanał, uruchom to polecenie curl:
Command
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"
Przykładowe dane wyjściowe
{
"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
}
Zapisz i skopiuj identyfikator operacji. Będzie nam potrzebny w jednym z kolejnych kroków. Znajduje się on w wierszu wyjściowym zaczynającym się od "name".
Sprawdź stan
Zanim przejdziemy dalej, musimy sprawdzić, czy kanał został utworzony i jest gotowy.
W poleceniu poniżej zastąp <OPERATION> identyfikatorem operacji uzyskanym powyżej. W tym przykładzie jest to operation-1661405972853-5e70a38d6f27f-79100d00-310671b4
Command
export OPERATION_ID_2=<OPERATION>
Command
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"
Przykładowe dane wyjściowe
"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"
}
}
}
Ponawiaj polecenie, aż zobaczysz "done:true", co oznacza, że wejściowy punkt końcowy został utworzony i jest gotowy.
Zwróć uwagę, że "streamingState" obecnie jest "STOPPED" ; kanał uruchomimy w następnej sekcji.
10. Uruchamianie kanału transmisji na żywo
Po utworzeniu kanału transmisji na żywo uruchom go. W tej sekcji wykonamy te czynności:
- Uruchom kanał Transmisje na żywo
- Sprawdź stan kanału. Musimy mieć pewność, że
streamingStatema wartość"AWAITING INPUT".
1. Uruchom kanał
Aby uruchomić kanał, w Cloud Shell uruchom to polecenie curl:
Command
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"
Przykładowe dane wyjściowe
{
"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. Sprawdzanie stanu kanału
Aby sprawdzić stan kanału, uruchom to polecenie curl:
Command
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"
Przykładowe dane wyjściowe
"streamingState": "AWAITING_INPUT",
Ponawiaj polecenie, aż zobaczysz „AWAITING_INPUT”, co oznacza, że kanał jest uruchomiony i gotowy do odbioru sygnału.
11. Konfigurowanie Media CDN
W tej sekcji wdrożymy Media CDN, czyli infrastrukturę CDN. Utworzymy te zasoby:
- Źródło tymczasowego przechowywania danych na serwerach brzegowych
- Usługa tymczasowego przechowywania danych na serwerach brzegowych
1. Tworzenie źródła tymczasowego przechowywania danych na serwerach brzegowych
Źródło tymczasowego przechowywania danych na serwerach brzegowych reprezentuje lokalizację treści, np. zasobnik Cloud Storage, lokalizację pamięci masowej innej firmy lub system równoważenia obciążenia. W terminologii CDN serwer pierwotny to lokalizacja, w której znajduje się źródło treści, które chcemy rozpowszechniać, np. wszystkie pliki CSS, JavaScript, HTML, obrazy itp. W tym module utworzymy serwer pierwotny, który będzie mapowany na zasobnik Cloud Storage utworzony na początku modułu. Punkt początkowy tymczasowego przechowywania danych na serwerach brzegowych nazwiemy cme-origin. Źródło sieci CDN to miejsce, w którym przechowywane są wszystkie treści źródłowe przed rozpowszechnieniem ich na serwerach pamięci podręcznej na brzegu sieci.
Do utworzenia źródła użyjemy polecenia gcloud edge-cache origins create. Wykonanie tego polecenia może potrwać kilka minut.
Command
gcloud edge-cache origins create cme-origin \ --origin-address="gs://live-streaming-storage-$LOGNAME"
Przykładowe dane wyjściowe
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. Tworzenie usługi tymczasowego przechowywania danych na serwerach brzegowych
Gdy mamy już skonfigurowane źródło tymczasowego przechowywania danych na serwerach brzegowych, możemy utworzyć samą usługę tymczasowego przechowywania danych na serwerach brzegowych.
Tworzenie pliku cme-demo.yaml
Konfiguracja usługi tymczasowego przechowywania danych na serwerach brzegowych odbywa się za pomocą pliku YAML. W Cloud Shell utwórz lokalny plik o nazwie cme-demo.yaml. Użyj vi, nano lub dowolnego innego edytora i wklej te wiersze do pliku YAML:
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
Pozostawimy wszystkie domyślne ustawienia konfiguracji usługi tymczasowego przechowywania danych na serwerach brzegowych. W pliku powyżej znajdują się 3 wartości pól, które użytkownicy mogą chcieć zaktualizować:
name: nazwa instancji Media CDN – w tym przypadku:cme-demohosts:lista nazw domen, które będą rozpoznawane przez tę usługę Media CDN – tutaj:demo.cme.com. Użyjemy go w tej prezentacji. Użyjemy adresu IP instancji Media CDN.Origin:jest to źródło tymczasowego przechowywania danych na serwerach brzegowych, które zostało utworzone w poprzednim kroku. Ustaw wartośćcme-origin– nazwa punktu początkowego Media CDN.
Więcej informacji o różnych zmiennych, których możesz używać w pliku YAML, znajdziesz w przewodniku po konfiguracji usługi pamięci podręcznej Edge.
Tworzenie usługi tymczasowego przechowywania danych na serwerach brzegowych
Utworzymy usługę tymczasowego przechowywania danych na serwerach brzegowych o nazwie cme-demo w źródle tymczasowego przechowywania danych na serwerach brzegowych cme-origin z hostem demo.cme.com. Aby utworzyć usługę, uruchom w Cloud Shell to polecenie:
Command
gcloud edge-cache services import cme-demo \
--source=cme-demo.yaml
Utworzenie usługi tymczasowego przechowywania danych na serwerach brzegowych może potrwać kilka minut.
Przykładowe dane wyjściowe
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'
Zanotuj i skopiuj ipv4Addresses instancji usługi tymczasowego przechowywania danych na serwerach brzegowych – w tym przypadku 34.104.36.157. Użyjemy go do zaktualizowania pliku cme-demo.yaml, a później do przesyłania strumieniowego transkodowanego filmu.
Aktualizowanie usługi tymczasowego przechowywania danych na serwerach brzegowych
W tym momencie warto zaktualizować konfigurację usługi tymczasowego przechowywania danych na serwerach brzegowych, aby móc później używać adresu IP usługi do przesyłania strumieniowego wideo. Plik YAML usługi tymczasowego przechowywania danych na serwerach brzegowych umożliwia wyświetlenie wszystkich nazw hostów i adresów IP, z których usługa tymczasowego przechowywania danych na serwerach brzegowych będzie akceptować żądania. W tym momencie jako hosta określiliśmy tylko demo.cme.com. Aby zapewnić rozpoznawanie nazw w tej domenie, możesz skonfigurować strefę DNS. Łatwiejszym rozwiązaniem jest jednak dodanie adresu IP do listy hostów w pliku yaml. Ponownie zmodyfikuj plik YAML, aby wyglądał jak poniżej:
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
Aby odzwierciedlić zmiany, wystarczy ponownie zaimportować plik YAML. W terminalu Cloud Shell uruchom to polecenie:
Command
gcloud edge-cache services import cme-demo \
--source=cme-demo.yaml
Sprawdź wynik polecenia i upewnij się, że adres IP znajduje się na liście hostów.
W tym momencie instancja usługi tymczasowego przechowywania danych na serwerach brzegowych będzie akceptować żądania z "demo.cme.com" lub adresem IP jako hostem.
12. Generowanie sygnału wejściowego
Po skonfigurowaniu wszystkich wymaganych usług wygenerujmy sygnał wejściowy transmisji na żywo. W tej sekcji wykonamy te czynności:
- Zainstaluj FFmpeg, bezpłatne oprogramowanie typu open source.
- Wysyłanie testowego sygnału na żywo do wejścia lub kanału
1. Instalowanie FFmpeg
FFmpeg to bezpłatny projekt oprogramowania typu open source, który obejmuje pakiet bibliotek i programów do obsługi plików i strumieni wideo, audio i innych multimediów. Aby zainstalować FFmpeg, w terminalu Cloud Shell użyj tego polecenia:
Command
sudo apt install ffmpeg -y
Po zakończeniu instalacji sprawdź, czy FFmpeg został prawidłowo zainstalowany, sprawdzając jego wersję:
Command
ffmpeg -version
Przykładowe dane wyjściowe
ffmpeg version 4.3.4-0+deb11u1 Copyright (c) 2000-2021 the FFmpeg developers built with gcc 10 (Debian 10.2.1-6) ...
FFmpeg został prawidłowo zainstalowany.
2. Uruchom sygnał transmisji na żywo do wejścia/kanału.
Po zainstalowaniu FFmpeg wyślemy testowy strumień wejściowy do wejściowego punktu końcowego, aby wygenerować transmisję na żywo.
W terminalu Cloud Shell uruchom to polecenie, używając zmiennej środowiskowej URI utworzonej w sekcji „Tworzenie i konfigurowanie punktu końcowego wejścia”.
Command
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \ -acodec aac -vcodec h264 -f flv $URI
Powinno być widać, że FFmpeg wysyła testowy sygnał na żywo. Polecenie nie zwróci prompta. Sygnał będzie generowany, dopóki go nie zatrzymasz. Na potrzeby pozostałej części ćwiczenia musisz otworzyć nowe okno Cloud Shell.
13. Otwórz nową sesję Cloud Shell
Aby kontynuować ćwiczenie, musisz otworzyć nowe okno Cloud Shell, ponieważ FFmpeg będzie działać nieprzerwanie, dopóki nie przerwiesz polecenia za pomocą kombinacji klawiszy <CTRL+C>, co spowoduje zatrzymanie generowania sygnału na żywo.
Kliknij znak „+” obok nazwy bieżącego terminala Cloud Shell. Otworzy się dodatkowe okno Cloud Shell.

Pozostałą część ćwiczenia wykonaj w nowo otwartym oknie Cloud Shell.
Konfigurowanie zmiennych środowiskowych
Ponieważ jest to nowa sesja Cloud Shell, musimy jeszcze raz ustawić zmienne środowiskowe. Do ustawienia zmiennych środowiskowych użyjemy polecenia source.
Command
source ~/env_variables.txt
Sprawdź, czy zmienne są ustawione.
Sprawdźmy, czy wszystkie wymagane zmienne środowiskowe są ustawione. W danych wyjściowych powinno być łącznie 6 zmiennych środowiskowych.
Command
env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME|PROJECT_NUMBER|LOCATION|INPUT_ID|CHANNEL_ID'
Przykładowe dane wyjściowe
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. Sprawdź, czy sygnał na żywo jest transkodowany.
Uruchomimy curl, aby opisać kanał. W danych wyjściowych powinniśmy zobaczyć, że stan przesyłania strumieniowego zmienił się z "AWAITING_INPUT" na "STREAMING".
Command
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"
W odpowiedzi w pliku JSON powinna się pojawić wartość "streamingState": "STREAMING", co oznacza, że kanał transmituje na żywo, a sygnał jest transkodowany.
Sprawdźmy też zawartość zasobnika, w którym powinien znajdować się plik manifestu i kilka segmentów wideo TS. Aby wyświetlić zawartość zasobnika utworzonego na początku modułu, który jest używany przez interfejs Live Streaming API do generowania manifestu przekodowanego sygnału na żywo i segmentów wideo TS, uruchom w Cloud Shell to polecenie:
Command
gcloud storage ls --recursive gs://live-streaming-storage-$LOGNAME/**
Przykładowe dane wyjściowe
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 ...
Zobaczysz, że:
- plik manifestu HLS:
main.m3u8 - Odpowiednie segmenty wideo TS: seria ponumerowanych plików
segment-000000000X.ts
W tym momencie mamy już za sobą:
- Live Streaming API: sygnał na żywo jest generowany i transkodowany do zasobnika za pomocą interfejsu Live Streaming API.
- Media CDN: skonfigurowana usługa Media CDN z zasobnikiem pamięci masowej Live Streaming jako punktem początkowym Media CDN.
W kolejnych sekcjach sprawdzimy usługę Edge Cache, a następnie będziemy przesyłać strumieniowo przekodowane wideo za pomocą adresu IP anycast Media CDN.
15. Sprawdzanie, czy instancja usługi tymczasowego przechowywania danych na serwerach brzegowych działa
W tej sekcji sprawdzimy, czy instancja usługi tymczasowego przechowywania danych na serwerach brzegowych działa zgodnie z oczekiwaniami. Aby to zrobić, spróbujemy uzyskać dostęp do pliku z instancji usługi tymczasowego przechowywania danych na serwerach brzegowych przy użyciu adresu IP tej usługi. Gdy obiekt jest używany po raz pierwszy, nie jest jeszcze zapisany w pamięci podręcznej. Powinniśmy obserwować pamięć podręczną MISS. W przypadku pierwszego żądania obiekt jest odczytywany z punktu początkowego i buforowany na brzegu sieci. Wszystkie kolejne próby uzyskania dostępu do tego samego pliku będą zwracać pamięć podręczną HIT, ponieważ obiekt jest teraz przechowywany w pamięci podręcznej na brzegu sieci. Sprawdźmy to:
Aby uzyskać dostęp do pliku manifestu przekodowanego filmu przechowywanego w źródle tymczasowego przechowywania danych na serwerach brzegowych, uruchom w Cloud Shell to polecenie:curl
Command
curl -svo /dev/null --resolve demo.cme.com:80:<Replace_With_Edge_Cache_IP> \ "http://demo.cme.com/main.m3u8"
Zwróć uwagę na pole resolve, w którym używamy adresu IP instancji usługi pamięci podręcznej Edge Cache Service do rozpoznawania jej nazwy. Upewnij się, że używasz demo.cme.com:<IP>, gdzie IP to adres IP utworzonej właśnie instancji usługi tymczasowego przechowywania danych na serwerach brzegowych.
W danych wyjściowych znajdź nagłówek x-cache-status.
Przykładowe dane wyjściowe
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
Zwróć uwagę na brak w pamięci podręcznej, ponieważ obiekt nie został jeszcze zapisany w pamięci podręcznej i jest odczytywany ze źródła.
Teraz wyślemy wiele żądań dotyczących pliku m3u8. Jeśli wszystko jest prawidłowo skonfigurowane, CDN Media powinien zacząć udostępniać treści z pamięci podręcznej. Poniższe polecenie wyśle 10 żądań curl i wyświetli tylko nagłówek x-cache-status.
Command
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
Dane wyjściowe powinny zawierać mieszankę pamięci podręcznej hit i miss. Jeśli w danych wyjściowych widzisz trafienia w pamięci podręcznej, oznacza to, że Media CDN działa zgodnie z oczekiwaniami.
Przykładowe dane wyjściowe
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
Zwróć uwagę na trafienie w pamięci podręcznej, ponieważ obiekt jest teraz przechowywany w pamięci podręcznej na brzegu sieci. Usługa Cloud Media Edge działa zgodnie z oczekiwaniami.
16. Przesyłanie strumieniowe transkodowanego sygnału wideo na żywo za pomocą VLC
W tym miejscu łączymy wszystkie dotychczasowe kroki:
- Utworzyliśmy zasobnik o nazwie
live-streaming-storage-$LOGNAME, który otrzymuje wynik transkodowania sygnału na żywo na treści HLS przez interfejs Live Streaming API. - Skonfigurujemy interfejs Live Streaming API.
- Uruchomiliśmy sygnał na żywo RTMP za pomocą FFmpeg, który przekazuje dane wejściowe do interfejsu Live Streaming API lub kanału.
- Sprawdziliśmy, czy sygnał na żywo był przesyłany do kanału, i potwierdziliśmy, że kanał był w trybie
streaming. - Sprawdziliśmy, czy wygenerowane pliki po transkodowaniu (manifest + segmenty TS) zostały zapisane w zasobniku
live-streaming-storage-$LOGNAME. - Skonfigurowano źródło tymczasowego przechowywania danych na serwerach brzegowych o nazwie
cme-origin, w którym jako punkt początkowy używany jest zasobnik GCSlive-streaming-storage-$LOGNAME. - Skonfigurowano instancję tymczasowego przechowywania danych na serwerach brzegowych o nazwie
cme-demo, której punktem początkowym jestcme-origin. - Sprawdziliśmy działanie instancji usługi tymczasowego przechowywania danych na serwerach brzegowych (brak w pamięci podręcznej, trafienie w pamięci podręcznej).
Jesteśmy już na etapie, na którym możemy użyć odtwarzacza wideo do przesyłania strumieniowego transkodowanego sygnału na żywo za pomocą pamięci podręcznej Media CDN. W tym celu użyjemy odtwarzacza VLC. VLC Player to bezpłatny odtwarzacz multimedialny typu open source, który działa na różnych platformach i odtwarza większość plików multimedialnych. Odtwarza adaptacyjne formaty multimedialne (takie jak DASH i HLS). Wykorzystuje on zasadę strumieniowania adaptacyjnego – w zależności od jakości połączenia sieciowego i dostępnej przepustowości odtwarzacz dostosowuje jakość odtwarzanego filmu. W przypadku zadania transkodowania, które właśnie wykonaliśmy, użyliśmy domyślnych ustawień wstępnych i wygenerowaliśmy „tylko” 2 jakości: SD i HD. Gdy zaczniemy odtwarzać film w odtwarzaczu, powinien on rozpocząć odtwarzanie w formacie SD i szybko przełączyć się na format HD, jeśli połączenie sieciowe jest wystarczająco dobre.
Będziemy transmitować transkodowany sygnał na żywo w formacie HLS (szeroko obsługiwany format wideo firmy Apple). Odpowiedni plik nazywa się main.m3u8, czyli jest to manifest HLS. Plik manifestu wskazuje segmenty wideo TS.
Aby użyć odtwarzacza VLC, wejdź na stronę https://www.videolan.org/vlc/ i pobierz wersję odtwarzacza dla systemu operacyjnego laptopa. VLC jest dostępny na Windows, MacOSX, Linux, Android i iOS.

Zainstaluj odtwarzacz na laptopie i uruchom go. W kolejnych krokach użyjemy wersji odtwarzacza dla systemu MacOSX.
Aby odtworzyć film, kliknij „Plik” / „Otwórz sieć”:

Skonfiguruj za pomocą:
- URL: http://<Replace_With_Edge_Cache_IP>/main.m3u8 To adres URL filmu, który chcemy przesyłać strumieniowo. Uwaga:
- Adres IP instancji Media CDN:
34.105.35.246. Zastąp adresem IP wdrożonej usługi Cloud Media Service. - Ścieżka do pliku wideo manifestu: „
/”. Jest to ścieżka, której użyliśmy w zasobnikulive-streaming-storage-$LOGNAMEdo przechowywania transkodowanych plików sygnału na żywo. Ścieżka to ścieżka główna: „/”. - Nazwa pliku manifestu wideo: plik manifestu HLS,
main.m3u8.
Następnie kliknij „Otwórz”. Powinien rozpocząć się odtwarzanie przekodowanego obrazu na żywo. Film będzie wyglądać jak na zrzucie ekranu poniżej. Licznik na ekranie będzie zwiększał się o 1, a Ty powinieneś(-aś) słyszeć ciągły sygnał dźwiękowy.
Jest to podstawowy sygnał testowy RTMP na żywo wygenerowany przez FFmpeg, przekodowany na HLS przez interfejs Live Streaming API i dostarczony przez pamięć podręczną Media CDN:

Możesz użyć dowolnego innego odtwarzacza HLS i MPEG DASH. Oto kilka przykładów:
- Odtwarzacz Quicktime – domyślnie zainstalowany na komputerach Mac. Podobnie jak w przypadku poprzedniego kroku: otwórz połączenie sieciowe z adresem http://34.104.36.157/main.m3u8. Zastąp adres IP adresem IP instancji usługi Edge Cache Service.
17. Monitorowanie Media CDN
Zespół SME utworzył szablon panelu Media CDN – https://gist.github.com/elithrar/1c511d00f5cd3736fb2a3897867209c1.
Aby go zainstalować, uruchom w oknie Cloud Shell te polecenia:
Pobierz plik YAML:
curl https://gist.githubusercontent.com/elithrar/1c511d00f5cd3736fb2a3897867209c1/raw/3cb70855304f29e5c06b8d63063196354db0dec3/media-edge-20210208-dashboard --output media-edge-20210208-dashboard.yaml
Utwórz panel Cloud Monitoring:
gcloud monitoring dashboards create --config-from-file media-edge-20210208-dashboard.yaml
Konfiguracja może potrwać kilka minut. Otwórz konsolę Google Cloud i kliknij 3 paski > Operacje > Monitorowanie > Panele informacyjne. Powinien wyświetlić się panel o nazwie „Dane Media Edge”. Kliknij go, aby wyświetlić te dane:

18. Zwalnianie miejsca w środowisku modułu
Gratulujemy ukończenia modułu. W tej sekcji usuniemy wszystkie zasoby utworzone w ramach tego modułu.
Zatrzymaj sygnał FFmpeg:
Naciśnij <CTRL+C> w terminalu Cloud Shell, w którym działa FFmpeg.
Zatrzymaj kanał transmisji na żywo:
Command
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"
Usuń kanał transmisji na żywo:
Command
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"
Usuń punkt końcowy wejścia transmisji na żywo:
Command
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"
Usuń zasobnik GCS:
Command
gsutil rm -r gs://live-streaming-storage-$LOGNAME
Usuń instancję usługi tymczasowego przechowywania danych na serwerach brzegowych:
Command
gcloud edge-cache services delete cme-demo
Gdy pojawi się odpowiedni komunikat, potwierdź usunięcie, wpisując „Y”.
Usuń źródło tymczasowego przechowywania danych na serwerach brzegowych:
Command
gcloud edge-cache origins delete cme-origin
Gdy pojawi się odpowiedni komunikat, potwierdź usunięcie, wpisując „Y”.
Usuwanie panelu niestandardowego
Command
gcloud monitoring dashboards delete $(gcloud monitoring dashboards list --filter="displayName:Media Edge Metrics" --format="value(name)")