Live Streaming di Google Cloud dengan Media CDN dan Live Streaming API

1. Pengantar

Jaringan Penayangan Konten (CDN) meningkatkan performa pengguna dengan menyimpan konten yang sering diakses ke cache secara lebih dekat dengan pengguna akhir, menghentikan koneksi lebih dekat dengan klien, menggunakan kembali koneksi ke asal, dan melalui adopsi protokol dan penyesuaian jaringan modern. Bagi pengguna (dan pelanggan kami), hal ini berarti latensi yang lebih rendah, keandalan yang lebih tinggi, dan biaya yang lebih rendah - sehingga meningkatkan penjualan, pengalaman web, dan peningkatan bersih dalam pengalaman pengguna. Saat ini, sangat sedikit situs modern dan platform streaming video yang beroperasi tanpa CDN.

Yang akan Anda pelajari

Lab ini akan memandu kita melalui langkah-langkah untuk men-deploy lingkungan alur kerja live streaming dengan Media CDN (CDN) + Cloud Media Live Streaming API (transcoding video live) + Cloud Storage (penyimpanan untuk video) + Pemutar Video (VLC, Google Shaka Player, dll. - pemutar yang siap untuk HLS + MPEG-DASH).

Kita akan menyiapkan komponen Live Streaming API - Input, Channel - dan memulai feed live ke Input/Channel dengan FFmpeg (FFmpeg dapat menghasilkan sinyal pengujian live). Live Streaming API akan melakukan transcoding feed live. Manifes dan segmen video yang ditranskode akan disimpan di bucket Cloud Storage. Kemudian, kita akan menyiapkan Media CDN dengan bucket Cloud Storage video live sebagai server asal. Terakhir, VLC Player akan digunakan untuk memutar konten live yang di-cache melalui Media CDN. Kita juga akan menyiapkan dasbor Cloud Monitoring untuk memvisualisasikan aktivitas Media CDN.

Yang akan Anda bangun

Dalam lab ini, kita akan menyiapkan lingkungan berdasarkan arsitektur berikut:

de33cb3e75d52549.png

Kita akan menyiapkan komponen berikut dan melakukan tugas berikut sebagai bagian dari lab:

  • Buat bucket Google Cloud Storage (GCS) untuk menyimpan video yang ditranskode secara live
  • Mengonfigurasi Live Streaming API untuk melakukan transcoding video ke dalam beberapa format: HLS + MPEG DASH, SD, dan HD
  • Siapkan komponen Live Streaming: Input/Channel
  • Mulai Channel Live Stream
  • Menyiapkan Media CDN dengan bucket GCS sebagai server asal
  • Menyiapkan FFmpeg untuk menyalurkan saluran live
  • Streaming feed live yang ditranskode dengan pemutar video
  • Siapkan dasbor Cloud Monitoring untuk memantau aktivitas Media CDN (latensi, hit cache, miss cache, dll.)

Catatan: Untuk lab ini, kami mengasumsikan bahwa pengguna memiliki akses ke Konsol Google Cloud dan telah menyiapkan project. Kita juga mengasumsikan bahwa pengguna memulai dengan lingkungan yang baru dan tidak menyiapkan apa pun untuk demo ini.

Semua tindakan konfigurasi akan dilakukan melalui command line di Cloud Shell. Kita dapat memeriksa komponen yang dikonfigurasi melalui command line di konsol kapan saja. Kita akan melihat penunjuk di seluruh lab yang akan mengarah ke Konsol Google Cloud.

2. Sebelum memulai

Akses CDN media dibatasi. Untuk mendapatkan akses ke Media CDN, hubungi tim akun Anda. Mereka dapat membuat permintaan akses atas nama Anda. Jika Anda adalah bagian dari Google dan ingin menguji Live Streaming dengan Media CDN, hubungi PM untuk Media CDN guna meminta akses ke Media CDN.

3. Penyiapan dan Persyaratan

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:

55efc1aaa7a4d3ad.png

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

7ffe5cbb04455448.png

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.

4. Versi Google Cloud SDK

Pada saat penulisan, 408.0.0 adalah versi Google Cloud SDK terbaru. Semua perintah dalam lab ini diuji menggunakan Google Cloud SDK versi terbaru. Sebelum melanjutkan, pastikan Cloud Shell menggunakan SDK versi terbaru.

Memeriksa versi SDK

Kita akan menggunakan perintah gcloud version untuk memeriksa versi SDK.

Perintah

gcloud version | grep "Google Cloud SDK"

Contoh Output

Google Cloud SDK 408.0.0

Langkah Berikutnya

  1. Jika versi SDK adalah 408.0.0 atau yang lebih tinggi, lanjutkan ke bagian berikutnya.
  2. Jika versi SDK lebih rendah dari 408.0.0, jalankan perintah yang tercantum di bawah untuk mengupdate SDK.
sudo apt-get update && sudo apt-get install google-cloud-sdk

5. Prasyarat

Sebelum mulai mengonfigurasi resource GCP, kita perlu melakukan hal berikut -

  1. Menyiapkan variabel lingkungan
  2. Aktifkan Service API yang diperlukan

1. Menyiapkan Variabel Lingkungan

Selama lab ini, kita akan menjalankan perintah gcloud dan curl dengan beberapa variabel. Kita perlu mengonfigurasi variabel lingkungan berikut.

  • ID Project
  • Nomor Project
  • Nama Pengguna
  • Wilayah
  • ID Input
  • ID Channel

Project ID dan Nama Pengguna

Variabel lingkungan ini umumnya telah dikonfigurasi sebelumnya di Cloud Shell. Kita akan menggunakan perintah env untuk memverifikasi.

Perintah

env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'

Contoh Output

DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID>
LOGNAME=<YOUR_USERNAME>

Membuat File env_variables

Gunakan perintah cat untuk membuat file env_variables.txt. Perintah di bawah akan membuat file env_variables.txt di direktori beranda pengguna.

Perintah

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

Menyiapkan Variabel Lingkungan

Kita akan menggunakan perintah source untuk menetapkan variabel lingkungan

Perintah

source ~/env_variables.txt

Pastikan variabel telah ditetapkan

Mari kita verifikasi bahwa semua variabel lingkungan yang diperlukan telah ditetapkan. Kita akan melihat total 6 variabel lingkungan dalam output.

Perintah

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

Contoh Output

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. Mengaktifkan API Layanan yang Diperlukan

Kita harus memastikan bahwa API berikut diaktifkan di project kita.

  • API Layanan Jaringan
  • Certificate Manager API
  • Livestream API
  • Media CDN Edge Cache API

Aktifkan Network Services API

Untuk mengaktifkan Network Services API, jalankan perintah berikut:

Perintah

gcloud services enable networkservices.googleapis.com

Aktifkan Certificate Manager API

Untuk mengaktifkan Certificate Manager API, jalankan perintah berikut:

Perintah

gcloud services enable certificatemanager.googleapis.com

Mengaktifkan Live Stream API

Untuk mengaktifkan Live Stream API, jalankan perintah berikut:

Perintah

gcloud services enable livestream.googleapis.com

Mengaktifkan Media CDN Edge Cache API

Untuk mengaktifkan Media CDN Edge Cache API, jalankan perintah berikut:

Perintah

gcloud services enable edgecache.googleapis.com

Memastikan API sudah Diaktifkan

Jalankan perintah gcloud services list untuk mencantumkan semua API yang diaktifkan. Kita akan melihat 4 API dalam output.

Perintah

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

Contoh Output

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

6. Buat Bucket Cloud Storage

Di bagian ini, kita akan melakukan hal berikut:

  1. Membuat bucket Cloud Storage
  2. Menjadikan bucket dapat diakses secara publik

Nanti di lab, kita akan menggunakan bucket ini untuk menyimpan file video yang di-transcoding. Bucket ini juga akan berfungsi sebagai penyimpanan asal untuk layanan Media CDN.

1. Buat bucket

Kita akan menggunakan perintah gsutil mb untuk membuat bucket:

Perintah

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

2. Membuat Bucket Dapat Diakses Secara Publik

Kita akan menggunakan perintah gsutil iam untuk membuat file tersedia secara publik:

Perintah

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

7. Menyiapkan lingkungan Live Streaming API

Komponen rantai Live Streaming API diatur sebagai berikut:

96b5d26aedeb89a6.png

Kita telah membuat bucket Cloud Storage live-streaming-storage-$LOGNAME di bagian sebelumnya. Di dua bagian berikutnya, kita akan membuat resource berikut:

  • Input Live Streaming: Endpoint input adalah endpoint yang menerima input streaming dari encoder Anda. Anda dapat menggunakan endpoint input untuk menentukan konfigurasi streaming, seperti resolusi input, jenis input, dan pemangkasan video.
  • Channel Live Streaming: Channel adalah resource yang menerima streaming input melalui endpoint input, melakukan transcoding streaming input ke dalam beberapa rendering, dan memublikasikan live stream output dalam format tertentu di lokasi yang ditentukan. Anda dapat menyertakan aliran input utama dan cadangan dalam channel yang sama.

Kita akan membuat resource berikut nanti di lab:

  • Encoder: Encoder adalah program yang digunakan untuk mengirimkan aliran input. Dalam lab ini, kita akan menggunakan FFmpeg.

8. Membuat dan Mengonfigurasi Endpoint Input

Buat File input.json

Kita akan membuat file input.json untuk menentukan jenis sinyal live stream. Dalam lab ini, kita menggunakan sinyal live RTMP.

Perintah

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

Buat Endpoint Input

Pada saat penulisan lab ini, tidak ada dukungan gcloud untuk Live Stream API. Kita akan menggunakan perintah curl untuk melakukan panggilan API.

Perintah

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"

Contoh Output

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

Output memiliki banyak informasi berguna, tetapi saat ini, kita perlu berfokus pada dua kolom:

  • ID Operasi: Dari output, salin dan catat ID operasi. Di bawah ini adalah ID operasi dari contoh output. Hal ini dapat ditemukan di baris output yang dimulai dengan "name". "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4"
  • Status: Kita harus menunggu hingga status berubah dari "done": false menjadi "done": true

Periksa Status

Sebelum melanjutkan, kita perlu memeriksa apakah endpoint input berhasil dibuat dan siap.

Pada perintah di bawah, ganti <OPERATION> dengan ID Operasi yang baru saja kita dapatkan di atas. Dalam contoh ini, nilainya adalah "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4".

Perintah

export OPERATION_ID_1=<OPERATION>

Perintah

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"

Contoh Output

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

Jalankan kembali perintah hingga Anda melihat "done:true" yang menunjukkan bahwa Endpoint Input telah dibuat dan siap.

Simpan URI

Kita akan menggunakan URI dari output sebelumnya nanti di lab. Sekarang, mari kita tetapkan variabel lingkungan untuk URI.

Perintah

export URI=<uri>

Ganti <uri> dengan URI yang baru saja Anda catat di atas. Secara opsional, Anda juga dapat menggunakan metode GET untuk mengambil URI

Perintah

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. Membuat & Mengonfigurasi Channel Live Streaming

Mari kita buat Channel Live Streaming, yang terkait dengan endpoint input yang baru saja kita buat di bagian sebelumnya. Contoh berikut membuat saluran yang menghasilkan live stream HLS yang terdiri dari satu rendering definisi tinggi (1280x720). Channel akan dikaitkan dengan endpoint input, dan bucket penyimpanan yang kita buat sebelumnya.

Buat file channel.json

Di terminal Cloud Shell, ketik perintah berikut untuk membuat file "channel.json":

Perintah

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

Membuat Channel

Jalankan perintah curl berikut untuk membuat Channel:

Perintah

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"

Contoh Output

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

Catat dan salin ID operasi. Kami akan membutuhkannya di salah satu langkah berikutnya. Hal ini dapat ditemukan di baris output yang dimulai dengan "name".

Periksa Status

Sebelum melanjutkan, kita perlu memeriksa apakah channel berhasil dibuat dan siap.

Pada perintah di bawah, ganti <OPERATION> dengan ID Operasi yang baru saja kita dapatkan di atas. Dalam contoh ini, atributnya adalah operation-1661405972853-5e70a38d6f27f-79100d00-310671b4

Perintah

export OPERATION_ID_2=<OPERATION>

Perintah

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"

Contoh Output

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

Jalankan kembali perintah hingga Anda melihat "done:true" yang menunjukkan bahwa Endpoint Input telah dibuat dan siap.

Perhatikan bahwa "streamingState" saat ini adalah "STOPPED" ; kita akan memulai channel di bagian berikutnya.

10. Mulai Channel Live Streaming

Setelah membuat channel Live Stream, mari kita mulai channel. Di bagian ini, kita akan melakukan hal berikut:

  1. Mulai channel Live Streaming
  2. Periksa Status channel, kita harus memastikan bahwa streamingState adalah "AWAITING INPUT"

1. Mulai Channel

Di Cloud Shell, jalankan perintah curl berikut untuk memulai channel:

Perintah

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"

Contoh Output

{
  "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. Memeriksa Status Channel

Jalankan perintah curl berikut untuk mendapatkan status Channel:

Perintah

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"

Contoh Output

"streamingState": "AWAITING_INPUT",

Jalankan kembali perintah hingga Anda melihat "AWAITING_INPUT" yang menunjukkan bahwa Channel sedang berjalan dan siap menerima sinyal.

11. Mengonfigurasi Media CDN

Di bagian ini, kita akan men-deploy Media CDN - infrastruktur CDN. Kita akan membuat resource berikut:

  1. Origin Edge Cache
  2. Layanan Cache Edge

1. Membuat Edge Cache Origin

Asal Edge Cache mewakili lokasi konten, seperti bucket Cloud Storage, lokasi penyimpanan pihak ketiga, atau load balancer. Dalam istilah CDN, asal (atau server asal) adalah lokasi tempat sumber konten yang ingin kita distribusikan berada - misalnya, semua CSS, JavaScript, HTML, gambar, dll. Untuk lab ini, kita akan membuat asal yang dipetakan ke bucket Cloud Storage yang kita buat di awal lab. Kita akan memanggil Edge Cache Origin cme-origin. Asal CDN adalah tempat semua konten sumber disimpan sebelum didistribusikan ke server cache edge.

Kita akan menggunakan perintah gcloud edge-cache origins create untuk membuat origin. Pemrosesan perintah ini akan memerlukan waktu beberapa menit.

Perintah

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

Contoh Output

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. Membuat Layanan Edge Cache

Setelah menyiapkan Edge Cache Origin, kita dapat membuat Edge Cache Service itu sendiri.

Buat file cme-demo.yaml

Konfigurasi Layanan Cache Edge dilakukan melalui file YAML. Di Cloud Shell, buat file lokal bernama cme-demo.yaml. Gunakan vi, nano, atau editor lainnya, lalu tempelkan baris berikut di file 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

Kita akan mempertahankan semua nilai default konfigurasi Edge Cache Service. Dalam file di atas, ada 3 nilai kolom yang mungkin ingin diperbarui pengguna:

  • name: nama instance Media CDN - di sini: cme-demo
  • hosts: daftar nama domain yang akan diselesaikan oleh Layanan Media CDN ini - di sini: demo.cme.com. Kita akan menggunakannya selama demo ini. Kita akan menggunakan alamat IP instance Media CDN.
  • Origin: adalah Edge Cache Origin yang baru saja kita buat pada langkah sebelumnya. Tetapkan ke cme-origin - nama Asal Media CDN.

Untuk mengetahui informasi selengkapnya tentang berbagai variabel yang dapat Anda gunakan dalam file YAML, lihat panduan konfigurasi Edge Cache Service.

Buat Layanan Edge Cache

Kita akan membuat Layanan Edge Cache bernama cme-demo, di Edge Cache Origin cme-origin, dengan host demo.cme.com. Untuk membuat layanan, jalankan perintah berikut di Cloud Shell:

Perintah

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

Mungkin perlu waktu beberapa menit untuk membuat Layanan Edge Cache.

Contoh Output

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'

Catat dan salin ipv4Addresses instance Edge Cache Service - di sini 34.104.36.157. Kita akan menggunakannya untuk memperbarui file cme-demo.yaml dan kemudian untuk melakukan streaming video yang di-transcoding.

Memperbarui Layanan Edge Cache

Pada tahap ini, sebaiknya perbarui konfigurasi Edge Cache Service agar dapat menggunakan IP layanan untuk melakukan streaming video nanti. File YAML Edge Cache Service memungkinkan kita mencantumkan semua nama host/IP yang akan menerima permintaan dari Edge Cache Service. Pada tahap ini, kita hanya menentukan demo.cme.com sebagai host. Untuk menyediakan resolusi nama bagi domain ini, Anda dapat mengonfigurasi zona DNS. Namun, solusi yang lebih mudah adalah menambahkan alamat IP ke daftar host dalam file yaml. Edit kembali file YAML dan edit agar terlihat seperti di bawah:

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

Untuk menerapkan perubahan, kita hanya perlu mengimpor ulang file YAML. Di terminal Cloud Shell, jalankan perintah berikut:

Perintah

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

Periksa output perintah dan pastikan IP muncul dalam daftar host.

Pada tahap ini, instance Layanan Cache Edge akan menerima permintaan dengan "demo.cme.com" atau alamat IP sebagai host.

12. Buat Sinyal Input

Setelah mengonfigurasi semua layanan yang diperlukan, mari kita buat sinyal input live stream. Di bagian ini, kita akan melakukan hal berikut:

  1. Instal FFmpeg, software open source gratis
  2. Kirim sinyal live uji ke Input/Channel

1. Menginstal FFmpeg

FFmpeg adalah project software open source dan gratis yang terdiri dari serangkaian library dan program untuk menangani video, audio, dan file serta streaming multimedia lainnya. Di terminal Cloud Shell, gunakan perintah berikut untuk menginstal FFmpeg:

Perintah

sudo apt install ffmpeg -y

Setelah penginstalan selesai, mari kita verifikasi apakah FFmpeg telah diinstal dengan benar dengan memeriksa versinya:

Perintah

ffmpeg -version

Contoh Output

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

FFmpeg telah diinstal dengan benar.

2. Mulai Sinyal Live Stream ke Input/Channel

Setelah FFmpeg diinstal, kita akan mengirimkan aliran input pengujian ke endpoint input untuk membuat live stream.

Di terminal Cloud Shell, jalankan perintah berikut, menggunakan variabel lingkungan URI yang kita buat di bagian "Buat dan Konfigurasi Endpoint Input".

Perintah

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

Anda akan melihat FFmpeg mengirim sinyal live pengujian. Perintah tidak akan menampilkan perintah. Sinyal akan dibuat hingga Anda menghentikannya. Anda harus membuka jendela Cloud Shell baru untuk sisa lab ini.

13. Buka Cloud Shell Baru

Pada tahap ini, Anda harus membuka jendela Cloud Shell baru untuk melanjutkan lab karena FFmpeg akan berjalan secara permanen hingga Anda menekan <CTRL+C> pada perintah untuk menghentikannya dan dengan demikian menghentikan pembuatan sinyal live.

Klik tanda "+" di samping nama terminal Cloud Shell saat ini. Tindakan ini akan membuka jendela Cloud Shell tambahan.

b3c7b0be6276c194.png

Jalankan sisa lab di jendela Cloud Shell yang baru dibuka.

Menyiapkan Variabel Lingkungan

Karena ini adalah Cloud Shell baru, kita perlu menetapkan variabel lingkungan lagi. Kita akan menggunakan perintah source untuk menetapkan variabel lingkungan.

Perintah

source ~/env_variables.txt

Pastikan variabel telah ditetapkan

Mari kita verifikasi bahwa semua variabel lingkungan yang diperlukan telah ditetapkan. Kita akan melihat total 6 variabel lingkungan dalam output.

Perintah

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

Contoh Output

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. Memverifikasi bahwa sinyal live sedang ditranskode

Kita akan menjalankan curl untuk mendeskripsikan channel. Kita akan melihat di output bahwa streamingState berubah dari "AWAITING_INPUT" menjadi "STREAMING"

Perintah

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"

Dalam respons file JSON output, Anda akan melihat "streamingState": "STREAMING" - yang menunjukkan bahwa Channel sedang melakukan streaming dan sinyal live sedang ditranskode.

Mari kita verifikasi juga konten bucket tempat kita akan melihat file manifes dan beberapa segmen video TS. Jalankan perintah berikut di Cloud Shell untuk mencantumkan konten bucket yang kita buat di awal lab dan digunakan oleh Live Streaming API untuk menghasilkan manifes sinyal live yang ditranskode dan segmen video TS:

Perintah

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

Contoh Output

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

Anda akan melihat:

  • file manifes HLS: main.m3u8
  • Segmen video TS yang sesuai: serangkaian file bernomor segment-000000000X.ts

Pada tahap ini, kita telah menyelesaikan hal berikut:

  • Live Streaming API: sinyal live dibuat dan ditranskode ke dalam bucket melalui Live Streaming API
  • Media CDN: mengonfigurasi Media CDN dengan bucket penyimpanan Live Streaming sebagai origin Media CDN.

Di bagian berikutnya, kita akan memvalidasi Layanan Cache Edge, lalu kita akan melakukan streaming video yang ditranskode menggunakan alamat IP anycast Media CDN.

15. Memverifikasi bahwa instance Layanan Cache Edge berfungsi

Di bagian ini, kita akan memverifikasi bahwa instance Layanan Edge Cache berfungsi seperti yang diharapkan. Untuk melakukannya, kita akan mencoba mengakses file dari instance Layanan Edge Cache menggunakan alamat IP Layanan Edge Cache. Saat pertama kali diakses, objek belum di-cache. Kita akan mengamati cache MISS. Untuk permintaan pertama, objek dibaca dari origin dan di-cache di edge. Semua upaya berikut untuk mengakses file yang sama akan menampilkan HIT cache karena objek kini di-cache di edge. Mari kita verifikasi perilaku ini:

Jalankan perintah curl berikut di Cloud Shell untuk mengakses file manifes video yang ditranskode dan disimpan di Edge Cache Origin:

Perintah

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

Perhatikan resolusi tempat kita menggunakan alamat IP instance Layanan Edge Cache untuk menyelesaikan namanya. Pastikan Anda menggunakan demo.cme.com:<IP> dengan IP adalah IP instance Layanan Edge Cache yang baru saja kita buat.

Cari header x-cache-status di output.

Contoh Output

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

Perhatikan miss cache karena objek belum di-cache dan dibaca dari server asal.

Sekarang kita akan membuat beberapa permintaan untuk file m3u8, dan jika semuanya dikonfigurasi dengan benar, Media CDN akan mulai menayangkan konten dari cache-nya. Perintah di bawah akan membuat 10 permintaan curl dan hanya mencetak header x-cache-status.

Perintah

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

Output harus berupa campuran cache hit dan miss. Jika Anda melihat hit cache dalam output, berarti Media CDN berfungsi seperti yang diharapkan.

Contoh Output

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

Perhatikan hit cache karena objek kini di-cache di edge. Cloud Media Edge Service berfungsi seperti yang diharapkan.

16. Streaming video sinyal live yang ditranskode dengan VLC

Di bagian ini, kita akan menghubungkan semua langkah yang telah kita lakukan sejauh ini:

  • Kita membuat bucket bernama live-streaming-storage-$LOGNAME yang menerima hasil sinyal live yang di-transcoding ke konten HLS oleh Live Streaming API.
  • Kami menyiapkan Live Streaming API.
  • Kita memulai sinyal live RTMP dengan FFmpeg yang memasok input/Channel Live Streaming API.
  • Kami memverifikasi bahwa sinyal live disalurkan ke Channel dan memverifikasi bahwa Channel berada dalam mode streaming.
  • Kami memverifikasi bahwa file yang ditranskode (segmen TS + manifes) dihasilkan dan disimpan dalam bucket live-streaming-storage-$LOGNAME.
  • Server Asal Edge Cache bernama cme-origin disiapkan dengan bucket GCS live-streaming-storage-$LOGNAME sebagai server asal.
  • Instance Edge Cache bernama cme-demo disiapkan dengan cme-origin sebagai server asalnya.
  • Kami memverifikasi perilaku (cache miss, cache hit) instance Layanan Cache Edge.

Sekarang kita dapat menggunakan pemutar video untuk melakukan streaming sinyal live yang di-transcoding melalui cache Media CDN. Untuk melakukannya, kita akan menggunakan VLC Player. VLC Player adalah framework dan pemutar multimedia lintas platform open source dan gratis yang memutar sebagian besar file multimedia. Pemutar ini memutar format media adaptif (seperti DASH dan HLS). Fitur ini menggunakan prinsip Streaming Adaptif - sesuai dengan kualitas koneksi jaringan dan bandwidth yang tersedia, pemutar akan menyesuaikan kualitas video yang diputar. Dengan tugas transcoding yang baru saja kita lakukan, kita menggunakan preset default dan menghasilkan "hanya" dua kualitas: SD dan HD. Saat kita mulai memutar video di pemutar, Anda akan melihatnya mulai memutar format SD dan dengan cepat beralih ke format HD jika koneksi jaringan Anda cukup baik.

Kita akan melakukan streaming sinyal live yang ditranskode HLS (format video Apple yang didukung secara luas). File yang sesuai disebut main.m3u8 - yang merupakan manifes HLS. Manifes mengarah ke segmen video TS.

Untuk menggunakan VLC Player, buka https://www.videolan.org/vlc/ dan download versi pemutar untuk sistem operasi Laptop Anda - VLC tersedia untuk Windows, MacOSX, Linux, Android, dan iOS.

2a2d19abe728d222.png

Instal Player di laptop Anda dan luncurkan. Kita akan menggunakan pemutar versi MacOSX untuk beberapa langkah berikutnya.

Untuk memutar video, buka "File" / "Open Network":

f85565301f7c68dc.png

Siapkan dengan:

  • URL: http://<Replace_With_Edge_Cache_IP>/main.m3u8. Ini adalah URL video yang ingin kita streaming. Pemberitahuan:
  • IP instance Media CDN: 34.105.35.246. Ganti dengan IP Cloud Media Service yang Anda deploy.
  • Jalur ke file video manifes: "/". Ini adalah jalur yang kami gunakan di bucket live-streaming-storage-$LOGNAME untuk menyimpan file sinyal live yang ditranskode. Jalur di sini adalah jalur root: "/".
  • Nama file video manifes: file manifes HLS, main.m3u8.

Kemudian, klik "Buka". Anda akan melihat video live yang ditranskode mulai diputar. Video akan terlihat seperti screenshot di bawah. Penghitung di layar akan berjalan dalam kelipatan 1 dan Anda akan dapat mendengar bunyi bip terus-menerus.

Ini adalah sinyal live uji RTMP dasar yang dihasilkan oleh FFmpeg, di-transcoding ke HLS oleh Live Streaming API, dan ditayangkan melalui cache Media CDN:

28fc359b49d44ec2.png

Anda dapat menggunakan pemutar HLS dan MPEG DASH lainnya jika ingin. Berikut beberapa pemutar yang dapat Anda pertimbangkan:

  • Pemutar Quicktime - diinstal secara default di Mac. Di sini juga: buka koneksi jaringan ke http://34.104.36.157/main.m3u8 - ganti alamat IP dengan alamat IP instance Layanan Edge Cache Anda.

17. Memantau Media CDN

Template dasbor Media CDN dibuat oleh tim SME - https://gist.github.com/elithrar/1c511d00f5cd3736fb2a3897867209c1.

Untuk menginstalnya, jalankan perintah berikut di jendela Cloud Shell:

Download file YAML:

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

Buat dasbor untuk Cloud Monitoring:

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

Penyiapan mungkin memerlukan waktu beberapa menit. Buka Konsol Google Cloud, lalu klik 3 batang > Operations > Monitoring > Dashboards. Anda akan melihat dasbor bernama "Media Edge Metrics". Klik tombol tersebut dan Anda akan melihat metriknya:

d0821d84a88a928d.png

18. Membersihkan Lingkungan Lab

Selamat, Anda telah menyelesaikan lab ini. Di bagian ini, kita akan menghapus semua resource yang kita buat di sepanjang lab.

Hentikan sinyal FFmpeg:

Tekan <CTRL+C> di terminal Cloud Shell tempat FFmpeg berjalan.

Hentikan Channel Live Streaming:

Perintah

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"

Hapus Channel Live Streaming:

Perintah

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"

Hapus Endpoint Input Live Streaming:

Perintah

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"

Hapus bucket GCS:

Perintah

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

Hapus Instance Layanan Cache Edge:

Perintah

gcloud edge-cache services delete cme-demo

Konfirmasi penghapusan dengan memasukkan "Y" saat diminta

Hapus Edge Cache Origin:

Perintah

gcloud edge-cache origins delete cme-origin

Konfirmasi penghapusan dengan memasukkan "Y" saat diminta

Menghapus Dasbor Kustom

Perintah

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