Media CDN ve Live Streaming API ile Google Cloud'da Canlı Yayın

1. Giriş

İçerik yayınlama ağları (CDN'ler), sık erişilen içerikleri son kullanıcılara daha yakın bir konumda önbelleğe alarak, bağlantıları istemcilere daha yakın bir konumda sonlandırarak, bağlantıları kaynağa yeniden kullanarak ve modern ağ protokollerini ve özelleştirmelerini benimseyerek kullanıcı performansını artırır. Bu, kullanıcılar (ve müşterilerimiz) için daha düşük gecikme süresi, daha fazla güvenilirlik ve daha düşük maliyet anlamına gelir. Bu da satışların ve web deneyiminin iyileşmesine ve kullanıcı deneyiminde net bir artışa yol açar. Günümüzde çok az sayıda modern site ve video akışı platformu CDN olmadan çalışır.

Neler öğreneceksiniz?

Bu laboratuvarda, Media CDN (CDN) + Cloud Media Live Streaming API (canlı video transkodlama) + Cloud Storage (videolar için depolama) + Video Oynatıcı (VLC, Google Shaka Player vb. - HLS + MPEG-DASH uyumlu oynatıcı) ile canlı yayın iş akışı ortamı dağıtma adımları açıklanmaktadır.

Canlı Yayın API'si bileşenlerini (Giriş, Kanal) ayarlayacağız ve FFmpeg ile Giriş/Kanal'a canlı feed başlatacağız (FFmpeg, canlı test sinyali oluşturabilir). Live Streaming API, canlı feed'i kod dönüştürür. Dönüştürülmüş video manifestosu ve segmentleri bir Cloud Storage paketinde depolanır. Ardından, canlı video Cloud Storage paketini kaynak olarak kullanarak Media CDN'yi kurarız. Son olarak, VLC Player, Media CDN aracılığıyla önbelleğe alınan canlı içeriği oynatmak için kullanılır. Ayrıca, Media CDN'nin etkinliğini görselleştirmek için bir Cloud Monitoring kontrol paneli oluşturacağız.

Ne oluşturacaksınız?

Bu laboratuvarda, ortamı aşağıdaki mimariye göre ayarlayacağız:

de33cb3e75d52549.png

Laboratuvar kapsamında aşağıdaki bileşenleri kuracak ve görevleri gerçekleştireceğiz:

  • Canlı olarak kod dönüştürülmüş videoları depolamak için Google Cloud Storage (GCS) paketi oluşturun.
  • Videoyu birden fazla biçime (HLS + MPEG DASH, SD ve HD) dönüştürmek için Live Streaming API'yi yapılandırın.
  • Canlı yayın bileşenlerini ayarlama: Giriş/Kanal
  • Canlı Yayın Kanalını Başlatma
  • Kaynak olarak GCS paketiyle Media CDN'yi ayarlama
  • FFmpeg'i canlı kanalı besleyecek şekilde ayarlama
  • Kodu dönüştürülmüş canlı feed'i video oynatıcıyla yayınlama
  • Media CDN etkinliğini (gecikme, önbellek isabeti, önbellekte yok vb.) izlemek için Cloud Monitoring kontrol paneli oluşturma

Not: Bu laboratuvarda, kullanıcıların Google Cloud Console'a erişimi olduğu ve proje kurulumunu tamamladığı varsayılır. Ayrıca, kullanıcıların yeni bir ortamla başladığını ve bu demo için hiçbir ayar yapmadığını varsayıyoruz.

Tüm yapılandırma işlemleri Cloud Shell'deki komut satırı üzerinden yapılır. Komut satırı üzerinden yapılandırılan bileşenleri dilediğimiz zaman konsolda kontrol edebiliriz. Laboratuvar boyunca Google Cloud Console'u işaret eden ipuçları göreceğiz.

2. Başlamadan önce

Media CDN erişimi kısıtlanmıştır. Media CDN'ye erişmek için hesap ekibinizle iletişime geçin. Sizin adınıza erişim isteği oluşturabilirler. Google'da çalışıyorsanız ve Media CDN ile canlı yayını test etmek istiyorsanız Media CDN'ye erişim isteğinde bulunmak için Media CDN'nin PM'i ile iletişime geçin.

3. Kurulum ve Gereksinimler

Cloud Shell'i başlatma

Google Cloud, dizüstü bilgisayarınızdan uzaktan çalıştırılabilir. Ancak bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Google Cloud Console'da sağ üstteki araç çubuğunda Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortamın temel hazırlığı ve bağlanması yalnızca birkaç dakikanızı alır. İşlem tamamlandığında aşağıdakine benzer bir sonuç görürsünüz:

7ffe5cbb04455448.png

Bu sanal makine, ihtiyaç duyacağınız tüm geliştirme araçlarını içerir. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansı ve kimlik doğrulama önemli ölçüde güçlenir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Herhangi bir şey yüklemeniz gerekmez.

4. Google Cloud SDK sürümü

Bu belge yazılırken 408.0.0, Google Cloud SDK'nın en son sürümüydü. Bu laboratuvardaki tüm komutlar, Google Cloud SDK'nın en son sürümü kullanılarak test edilmiştir. Devam etmeden önce lütfen Cloud Shell'in SDK'nın en yeni sürümünü kullandığından emin olun.

SDK sürümünü kontrol etme

SDK sürümünü kontrol etmek için gcloud version komutunu kullanacağız.

Command

gcloud version | grep "Google Cloud SDK"

Çıkış örneği

Google Cloud SDK 408.0.0

Sonraki Adımlar

  1. SDK sürümü 408.0.0 veya daha yüksekse bir sonraki bölüme geçin.
  2. SDK sürümü 408.0.0'dan düşükse SDK'yı güncellemek için aşağıda listelenen komutu çalıştırın.
sudo apt-get update && sudo apt-get install google-cloud-sdk

5. Ön koşullar

GCP kaynaklarını yapılandırmaya başlamadan önce aşağıdakileri yapmamız gerekir:

  1. Ortam değişkenlerini ayarlama
  2. Gerekli hizmet API'lerini etkinleştirme

1. Ortam değişkenlerini ayarlama

Bu laboratuvar boyunca, birkaç değişkenle gcloud ve curl komutlarını çalıştıracağız. Aşağıdaki ortam değişkenlerini yapılandırmamız gerekiyor.

  • Proje kimliği
  • Proje Numarası
  • Kullanıcı adı
  • Bölge
  • Giriş kimliği
  • Kanal Kimliği

Proje kimliği ve kullanıcı adı

Bu ortam değişkenleri genellikle Cloud Shell'de önceden yapılandırılır. Doğrulama için env komutunu kullanacağız.

Command

env | grep -E 'DEVSHELL_PROJECT_ID=|LOGNAME'

Çıkış örneği

DEVSHELL_PROJECT_ID=<YOUR_PROJECT_ID>
LOGNAME=<YOUR_USERNAME>

env_variables dosyasını oluşturma

env_variables.txt dosyasını oluşturmak için cat komutunu kullanın. Aşağıdaki komut, kullanıcının ana dizininde env_variables.txt dosyasını oluşturur.

Komutlar

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

Ortam değişkenlerini ayarlama

Ortam değişkenlerini ayarlamak için source komutunu kullanacağız.

Command

source ~/env_variables.txt

Değişkenlerin ayarlandığını doğrulayın

Gerekli tüm ortam değişkenlerinin ayarlandığını doğrulayalım. Çıkışta toplam 6 ortam değişkeni görmemiz gerekir.

Command

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

Çıkış örneği

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. Gerekli hizmet API'lerini etkinleştirme

Projemizde aşağıdaki API'lerin etkinleştirildiğinden emin olmamız gerekir.

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

Network Services API'yi etkinleştirme

Network Services API'yi etkinleştirmek için aşağıdaki komutu çalıştırın:

Command

gcloud services enable networkservices.googleapis.com

Certificate Manager API'yi etkinleştirme

Certificate Manager API'yi etkinleştirmek için aşağıdaki komutu çalıştırın:

Command

gcloud services enable certificatemanager.googleapis.com

Live Stream API'yi etkinleştirme

Canlı Yayın API'sini etkinleştirmek için aşağıdaki komutu çalıştırın:

Command

gcloud services enable livestream.googleapis.com

Media CDN Edge Cache API'yi etkinleştirme

Media CDN Edge Cache API'yi etkinleştirmek için aşağıdaki komutu çalıştırın:

Command

gcloud services enable edgecache.googleapis.com

API'lerin etkinleştirildiğini doğrulama

Etkinleştirilen tüm API'leri listelemek için gcloud services list komutunu çalıştırın. Çıkışta 4 API görmemiz gerekir.

Command

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

Çıkış örneği

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

6. Cloud Storage paketi oluşturma

Bu bölümde şunları yapacağız:

  1. Cloud Storage paketi oluşturma
  2. Paketi herkese açık hale getirme

Laboratuvarın ilerleyen bölümlerinde, kodu dönüştürülmüş video dosyalarını depolamak için bu paketi kullanacağız. Bu paket, Media CDN hizmeti için kaynak depolama alanı olarak da işlev görür.

1. Paketi oluşturma

Paketi oluşturmak için gsutil mb komutunu kullanacağız:

Command

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

2. Paketi Herkese Açık Hale Getirme

Dosyaları herkese açık hale getirmek için gsutil iam komutunu kullanacağız:

Command

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

7. Live Streaming API ortamını ayarlama

Canlı Yayın API'si zincirinin bileşenleri aşağıdaki gibi yapılandırılmıştır:

96b5d26aedeb89a6.png

Önceki bölümde live-streaming-storage-$LOGNAME Cloud Storage paketini oluşturmuştuk. Sonraki iki bölümde aşağıdaki kaynakları oluşturacağız:

  • Canlı Yayın Girişi: Giriş uç noktası, kodlayıcınızın giriş akışınızı gönderdiği uç noktadır. Akışınızla ilgili yapılandırmaları (ör. giriş çözünürlüğü, giriş türü ve video kırpma) belirtmek için giriş uç noktasını kullanabilirsiniz.
  • Canlı Yayın Kanalı: Kanal, giriş akışını bir giriş uç noktası üzerinden alan, giriş akışının kodunu birden fazla işleme dönüştüren ve çıkış canlı yayınlarını belirli biçimlerde belirtilen konumda yayınlayan bir kaynaktır. Aynı kanala birincil ve yedek giriş akışı ekleyebilirsiniz.

Laboratuvarın ilerleyen bölümlerinde aşağıdaki kaynakları oluşturacağız:

  • Kodlayıcı: Kodlayıcı, giriş akışlarını göndermek için kullanılan bir programdır. Bu laboratuvarda FFmpeg'i kullanacağız.

8. Giriş uç noktasını oluşturma ve yapılandırma

input.json dosyasını oluşturma

Canlı yayın sinyal türünü belirtmek için bir input.json dosyası oluşturacağız. Bu laboratuvarda RTMP canlı sinyalini kullanıyoruz.

Command

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

Giriş uç noktasını oluşturma

Bu laboratuvarın yazıldığı sırada, Live Stream API için gcloud desteği bulunmamaktadır. API çağrılarını yapmak için curl komutunu kullanacağız.

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"

Çıkış örneği

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

Çıkışta birçok faydalı bilgi yer alıyor ancak şu anda iki alana odaklanmamız gerekiyor:

  • İşlem kimliği: Çıktıdan işlem kimliğini kopyalayıp not edin. Aşağıda, çıkış örneğindeki işlem kimliği verilmiştir. Bu bilgi, "name" ile başlayan çıkış satırında bulunabilir. "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4"
  • Durum: Durumun "done": false'den "done": true'e değişmesini beklememiz gerekiyor.

Durumu kontrol etme

Devam etmeden önce giriş uç noktasının başarıyla oluşturulduğunu ve hazır olduğunu kontrol etmemiz gerekir.

Aşağıdaki komutta <OPERATION> yerine az önce aldığımız İşlem kimliğini girin. Bu örnekte "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"

Çıkış örneği

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

Giriş uç noktasının oluşturulduğunu ve hazır olduğunu belirten "done:true" simgesini görene kadar komutu yeniden çalıştırın.

URI'yi kaydedin.

Önceki çıkıştan alınan URI değerini laboratuvarın ilerleyen bölümlerinde kullanacağız. Şu anda URI için bir ortam değişkeni ayarlayalım.

Command

export URI=<uri>

<uri> yerine yukarıda not ettiğiniz URI'yi girin. İsteğe bağlı olarak, URI'yi almak için alma yöntemini de kullanabilirsiniz.

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. Canlı yayın kanalını oluşturma ve yapılandırma

Şimdi de önceki bölümde oluşturduğumuz giriş uç noktasıyla ilişkili canlı yayın kanalını oluşturalım. Aşağıdaki örnekte, tek bir yüksek çözünürlüklü (1280x720) yorumlamadan oluşan bir HLS canlı yayını oluşturan kanal oluşturuluyor. Kanal, giriş uç noktası ve daha önce oluşturduğumuz depolama paketiyle ilişkilendirilir.

channel.json dosyasını oluşturun

Cloud Shell terminalinde, "channel.json" dosyası oluşturmak için aşağıdaki komutu yazın:

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

Kanalı oluşturma

Kanalı oluşturmak için aşağıdaki curl komutunu çalıştırın:

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"

Çıkış örneği

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

İşlem kimliğini not edin ve kopyalayın. Bu bilgiye sonraki adımlardan birinde ihtiyacımız olacak. Bu bilgi, "name" ile başlayan çıkış satırında bulunabilir.

Durumu kontrol etme

Devam etmeden önce kanalın başarıyla oluşturulduğunu ve hazır olduğunu kontrol etmemiz gerekiyor.

Aşağıdaki komutta <OPERATION> yerine az önce aldığımız İşlem kimliğini girin. Bu örnekte 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"

Çıkış örneği

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

Giriş uç noktasının oluşturulduğunu ve hazır olduğunu belirten "done:true" simgesini görene kadar komutu yeniden çalıştırın.

Şu anda "streamingState" olduğunu unutmayın. Bir sonraki bölümde kanalı başlatacağız."STOPPED"

10. Canlı Yayın Kanalını Başlatma

Canlı yayın kanalımızı oluşturduğumuza göre kanalı başlatalım. Bu bölümde şunları yapacağız:

  1. Canlı Yayın kanalını başlatma
  2. Kanalın durumunu kontrol edin. streamingState simgesinin "AWAITING INPUT" olduğundan emin olmanız gerekir.

1. Kanalı başlatma

Cloud Shell'de, kanalı başlatmak için aşağıdaki curl komutunu çalıştırın:

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"

Çıkış örneği

{
  "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. Kanalın durumunu kontrol etme

Kanalın durumunu almak için aşağıdaki curl komutunu çalıştırın:

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"

Çıkış örneği

"streamingState": "AWAITING_INPUT",

Kanalın çalıştığını ve sinyal almaya hazır olduğunu belirten "AWAITING_INPUT" ifadesini görene kadar komutu yeniden çalıştırın.

11. Media CDN'yi yapılandırma

Bu bölümde, CDN altyapısı olan Media CDN'yi dağıtacağız. Aşağıdaki kaynakları oluşturacağız:

  1. Edge Cache Origin
  2. Edge Cache Service

1. Edge Cache Origin oluşturma

Edge Cache Origin, bir içerik konumunu (ör. Cloud Storage paketi, üçüncü taraf depolama konumu veya yük dengeleyici) temsil eder. CDN terimleriyle, kaynak (veya kaynak sunucu), dağıtmak istediğimiz içeriğin kaynağının bulunduğu konumdur (ör.tüm CSS, JavaScript, HTML, resimler vb.). Bu laboratuvarda, laboratuvarın başında oluşturduğumuz Cloud Storage paketine eşlenen bir kaynak oluşturacağız. Buna Edge Cache Origin cme-origin adını vereceğiz. CDN'nin kaynağı, tüm kaynak içeriğin uç önbellek sunucularına dağıtılmadan önce depolandığı yerdir.

Kaynağı oluşturmak için gcloud edge-cache origins create komutunu kullanacağız. Komutun tamamlanması birkaç dakika sürer.

Command

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

Örnek Çıkış

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 Service oluşturma

Artık bir Edge Cache Origin'imiz olduğuna göre Edge Cache Service'i oluşturabiliriz.

cme-demo.yaml dosyasını oluşturma

Edge Cache Service yapılandırması YAML dosyası aracılığıyla yapılır. Cloud Shell'de cme-demo.yaml adlı bir yerel dosya oluşturun. vi, nano veya başka bir düzenleyiciyi kullanarak aşağıdaki satırları YAML dosyasına yapıştırın:

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

Tüm Edge Cache Service yapılandırma varsayılanlarını değiştirmeden bırakacağız. Yukarıdaki dosyada, kullanıcıların güncellemek isteyebileceği 3 alan değeri vardır:

  • name: Media CDN örneğinin adı (burada: cme-demo)
  • hosts: Bu Media CDN Hizmeti tarafından çözümlenecek alan adlarının listesi - burada: demo.cme.com. Bu demoda bu bilgiyi kullanacağız. Media CDN örneğinin IP adresini kullanırız.
  • Origin: Bu, önceki adımda oluşturduğumuz Edge Cache Origin'dir. cme-origin - Media CDN kaynağının adı olarak ayarlayın.

YAML dosyasında kullanabileceğiniz farklı değişkenler hakkında daha fazla bilgi için Edge Cache Service yapılandırma kılavuzuna bakın.

Edge Cache hizmetini oluşturma

Edge Cache Origin cme-origin üzerinde, demo.cme.com ana makinesiyle cme-demo adlı bir Edge Cache Service oluşturacağız. Hizmeti oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın:

Command

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

Edge Cache Service'in oluşturulması birkaç dakika sürebilir.

Çıkış örneği

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'

Edge Cache Service örneğinin ipv4Addresses bölümünü not edin ve kopyalayın. 34.104.36.157 Bu dosyayı, cme-demo.yaml dosyasını güncellemek ve daha sonra kodu dönüştürülmüş videoyu yayınlamak için kullanırız.

Edge Cache hizmetini güncelleme

Bu noktada, daha sonra videoyu yayınlamak için hizmetin IP'sini kullanabilmek amacıyla Edge Cache Service yapılandırmasını güncellemeniz önerilir. Edge Cache Service YAML dosyası, Edge Cache Service'in istekleri kabul edeceği tüm ana makine adlarını/IP'lerini listelememize olanak tanır. Bu noktada yalnızca demo.cme.com'yı ana makine olarak belirttik. Bu alan için ad çözümlemesi sağlamak üzere bir DNS bölgesi yapılandırabilirsiniz. Ancak daha kolay bir çözüm, IP adresini yaml dosyasındaki ana makine listesine eklemektir. YAML dosyasını tekrar düzenleyin ve aşağıdaki gibi görünmesini sağlayın:

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

Değişikliklerin yansıtılması için YAML dosyasını yeniden içe aktarmamız yeterlidir. Cloud Shell terminalinde aşağıdaki komutu çalıştırın:

Command

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

Komutun çıkışını kontrol edin ve IP'nin ana makine listesinde göründüğünü doğrulayın.

Bu noktada Edge Cache Service örneği, ana makine olarak "demo.cme.com" veya IP adresi içeren istekleri kabul eder.

12. Giriş sinyalini oluşturma

Gerekli tüm hizmetleri yapılandırdığımıza göre şimdi canlı yayın giriş sinyalini oluşturalım. Bu bölümde şunları yapacağız:

  1. Ücretsiz açık kaynaklı bir yazılım olan FFmpeg'i yükleyin.
  2. Girişe/kanala test canlı sinyali gönderme

1. FFmpeg'i yükleme

FFmpeg, video, ses ve diğer multimedya dosyaları ile akışlarını işlemek için bir dizi kitaplık ve programdan oluşan ücretsiz ve açık kaynaklı bir yazılım projesidir. Cloud Shell terminalinde FFmpeg'i yüklemek için aşağıdaki komutu kullanın:

Command

sudo apt install ffmpeg -y

Yükleme işlemi tamamlandığında sürümünü kontrol ederek FFmpeg'in düzgün şekilde yüklenip yüklenmediğini doğrulayalım:

Command

ffmpeg -version

Çıkış örneği

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

FFmpeg düzgün şekilde yüklenmiştir.

2. Girişe/kanala canlı yayın sinyali göndermeyi başlatın.

FFmpeg yüklendiğine göre, canlı yayını oluşturmak için giriş uç noktasına bir test giriş akışı göndereceğiz.

Cloud Shell terminalinde, "Giriş Uç Noktasını Oluşturma ve Yapılandırma" bölümünde oluşturduğumuz URI ortam değişkenini kullanarak aşağıdaki komutu çalıştırın.

Command

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

FFmpeg'in test canlı sinyalini gönderdiğini görmeniz gerekir. Komut istemi döndürmez. Sinyal, siz durdurana kadar oluşturulur. Laboratuvarın geri kalanında yeni bir Cloud Shell penceresi açmanız gerekir.

13. Yeni Cloud Shell'i açma

Bu noktada, laboratuvara devam etmek için yeni bir Cloud Shell penceresi açmanız gerekir. Çünkü FFmpeg, durdurmak için komuta <CTRL+C> tuşlarına basana kadar kalıcı olarak çalışır ve böylece canlı sinyal üretimi durdurulur.

Mevcut Cloud Shell terminalinin adının yanındaki "+" işaretini tıklayın. Ek bir Cloud Shell penceresi açılır.

b3c7b0be6276c194.png

Laboratuvarın geri kalanını yeni açılan Cloud Shell penceresinde çalıştırın.

Ortam değişkenlerini ayarlama

Bu yeni bir Cloud Shell olduğundan ortam değişkenlerini tekrar ayarlamamız gerekiyor. Ortam değişkenlerini ayarlamak için source komutunu kullanacağız.

Command

source ~/env_variables.txt

Değişkenlerin ayarlandığını doğrulayın

Gerekli tüm ortam değişkenlerinin ayarlandığını doğrulayalım. Çıkışta toplam 6 ortam değişkeni görmemiz gerekir.

Command

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

Çıkış örneği

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. Canlı sinyalin dönüştürüldüğünü doğrulayın.

Kanala açıklama eklemek için curl çalıştıracağız. Çıkışta streamingState'in "AWAITING_INPUT" değerinden "STREAMING" değerine değiştiğini görmemiz gerekir.

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"

Çıkış JSON dosyası yanıtında, kanalın yayın yaptığını ve canlı sinyalin dönüştürüldüğünü belirten "streamingState": "STREAMING" simgesini görmelisiniz.

Ayrıca, manifest dosyasını ve birkaç TS video segmentini görmemiz gereken paketin içeriğini de doğrulayalım. Laboratuvarın başında oluşturduğumuz ve kod dönüştürülmüş canlı sinyal manifestini ve TS video segmentlerini çıkarmak için Live Streaming API tarafından kullanılan paketin içeriğini listelemek üzere Cloud Shell'de aşağıdaki komutu çalıştırın:

Command

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

Çıkış örneği

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

Aşağıdaki bilgileri görürsünüz:

  • HLS manifest dosyası: main.m3u8
  • İlgili TS video segmentleri: numaralandırılmış bir dizi dosya segment-000000000X.ts

Bu noktada şunları tamamlamış oluyoruz:

  • Live Streaming API: Canlı sinyal, Live Streaming API aracılığıyla oluşturulur ve bir pakete dönüştürülür.
  • Media CDN: Media CDN'nin kaynağı olarak Canlı Yayın depolama paketi ile yapılandırılmış Media CDN.

Sonraki bölümlerde, Edge Cache Service'i doğrulayacak ve ardından Media CDN anycast IP adresini kullanarak transkod edilmiş videoyu yayınlayacağız.

15. Edge Cache Service örneğinin çalıştığını doğrulama

Bu bölümde, Edge Cache Service örneğinin beklendiği gibi çalıştığını doğrulayacağız. Bunu yapmak için Edge Cache Service hizmetinin IP adresini kullanarak Edge Cache Service örneğindeki bir dosyaya erişmeye çalışırız. Bir nesneye ilk kez erişildiğinde henüz önbelleğe alınmamıştır. Bir önbellek MISS gözlemlemeliyiz. İlk istekte nesne, kaynak sunucudan okunur ve uçta önbelleğe alınır. Aynı dosyaya erişmek için yapılan tüm sonraki denemeler, nesne artık uçta önbelleğe alındığından HIT önbelleğini döndürür. Bu davranışı doğrulayalım:

Edge Cache Origin'de depolanan, kod dönüştürülmüş video manifest dosyasına erişmek için Cloud Shell'de aşağıdaki curl komutunu çalıştırın:

Command

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

Adını çözmek için Edge Cache Service örneğinin IP adresini kullandığımız çözüme dikkat edin. IP'nin, az önce oluşturduğumuz Edge Cache Service örneğinin IP'si olduğu demo.cme.com:<IP> ifadesini kullandığınızdan emin olun.

Çıkışta x-cache-status başlığını bulun.

Çıkış örneği

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

Nesne henüz önbelleğe alınmadığı ve kaynak sunucudan okunduğu için önbellek isabet etmediğini unutmayın.

Şimdi m3u8 dosyası için birden fazla istekte bulunacağız. Her şey doğru şekilde yapılandırılmışsa Media CDN, içeriği önbelleğinden sunmaya başlamalıdır. Aşağıdaki komut 10 curl isteği oluşturur ve yalnızca x-cache-status başlığını yazdırır.

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

Çıkış, hit ve miss önbelleğinin bir karışımı olmalıdır. Çıkışta önbellek isabetleri görüyorsanız Media CDN beklendiği gibi çalışıyor demektir.

Çıkış örneği

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

Nesne artık uçta önbelleğe alındığından önbellek isabetine dikkat edin. Cloud Media Edge Service beklendiği gibi çalışıyor.

16. VLC ile yeniden kodlanmış canlı sinyal videosunu yayınlama

Şimdiye kadar üzerinde çalıştığımız tüm adımları birbirine bağlayıp bir araya getirelim:

  • Canlı Yayın API'si tarafından HLS içeriğine dönüştürülen canlı sinyal sonucunu alan live-streaming-storage-$LOGNAME adlı bir paket oluşturduk.
  • Live Streaming API'yi kurduk.
  • Canlı Yayın API'si girişini/kanalını besleyen FFmpeg ile bir RTMP canlı sinyali başlattık.
  • Canlı sinyalin kanala aktarıldığını ve kanalın streaming modunda olduğunu doğruladık.
  • Elde edilen transkodlanmış dosyaların (manifest + TS segmentleri) oluşturulup live-streaming-storage-$LOGNAME paketinde depolandığını doğruladık.
  • cme-origin adlı bir Edge Cache Origin, kaynak olarak GCS paketi live-streaming-storage-$LOGNAME ile ayarlandı.
  • cme-demo adlı bir Edge Cache örneği, kaynağı cme-origin olacak şekilde ayarlandı.
  • Edge Cache Service örneğinin davranışını (önbellekte yok, önbellek isabeti) doğruladık.

Artık kod dönüştürülmüş canlı sinyali Media CDN önbelleği üzerinden yayınlamak için video oynatıcı kullanabiliriz. Bunun için VLC Player'ı kullanacağız. VLC Player, çoğu multimedya dosyasını oynatan ücretsiz ve açık kaynaklı bir platformlar arası multimedya oynatıcı ve çerçevedir. Uyarlanabilir medya biçimlerini (ör. DASH ve HLS) oynatır. Uyarlanabilir akış ilkesini kullanır. Oynatıcı, ağ bağlantınızın kalitesine ve kullanılabilir bant genişliğine göre oynatılan videonun kalitesini ayarlar. Az önce yaptığımız kod dönüştürme işinde varsayılan hazır ayarları kullandık ve "yalnızca" iki kalite oluşturduk: SD ve HD. Videoyu oynatıcıda oynatmaya başladığınızda, ağ bağlantınız yeterince iyiyse videonun SD biçiminde oynatılmaya başladığını ve hızlıca HD biçimine geçtiğini görürsünüz.

Kodu dönüştürülmüş canlı sinyali HLS (yaygın olarak desteklenen Apple video biçimi) olarak yayınlayacağız. İlgili dosya, HLS manifesti olan main.m3u8 olarak adlandırılır. Manifest, TS video segmentlerini gösterir.

VLC Player'ı kullanmak için https://www.videolan.org/vlc/ adresine gidip dizüstü bilgisayarınızın işletim sistemi için bir oynatıcı sürümü indirin. VLC; Windows, MacOSX, Linux, Android ve iOS'te kullanılabilir.

2a2d19abe728d222.png

Player'ı dizüstü bilgisayarınıza yükleyip başlatın. Sonraki birkaç adımda oynatıcının MacOSX sürümünü kullanacağız.

Bir videoyu oynatmak için "Dosya" / "Ağı Aç" seçeneğine gidin:

f85565301f7c68dc.png

Şunlarla ayarlayabilirsiniz:

  • URL: http://<Replace_With_Edge_Cache_IP>/main.m3u8. Bu, yayınlamak istediğimiz videonun URL'si. Bildirim:
  • Media CDN örneğinin IP'si: 34.105.35.246. Dağıttığınız Cloud Media Service'in IP'siyle değiştirin.
  • Manifest video dosyasının yolu: "/". Bu, kodu dönüştürülmüş canlı sinyal dosyalarını depolamak için live-streaming-storage-$LOGNAME paketinde kullandığımız yoldur. Buradaki yol, kök yoldur: "/".
  • Manifest video dosyasının adı: HLS manifest dosyası, main.m3u8.

"Aç"ı tıklayın. Dönüştürülmüş canlı video oynatılmaya başlar. Video, aşağıdaki ekran görüntüsündeki gibi görünür. Ekranda sayaç 1'er artışlarla ilerler ve sürekli bir bip sesi duyarsınız.

Bu, FFmpeg tarafından oluşturulan, Live Streaming API tarafından HLS'ye dönüştürülen ve Media CDN önbelleği üzerinden sunulan temel bir RTMP test canlı sinyalidir:

28fc359b49d44ec2.png

İsterseniz diğer HLS ve MPEG DASH oynatıcıları da kullanabilirsiniz. Dikkate alabileceğiniz bazı oynatıcıları aşağıda bulabilirsiniz:

  • Quicktime Player: Mac'lerde varsayılan olarak yüklüdür. Aynı şekilde, http://34.104.36.157/main.m3u8 adresine bir ağ bağlantısı açın. IP adresini Edge Cache Service örneğinizin adresiyle değiştirin.

17. Media CDN'yi izleme

KOBİ ekibi tarafından bir Media CDN kontrol paneli şablonu oluşturuldu: https://gist.github.com/elithrar/1c511d00f5cd3736fb2a3897867209c1.

Yüklemek için Cloud Shell penceresinde aşağıdaki komutları çalıştırın:

YAML dosyasını indirin:

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

Cloud Monitoring için kontrol paneli oluşturun:

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

Kurulum birkaç dakika sürebilir. Google Cloud Console'a gidin ve 3 çubuk > İşlemler > İzleme > Gösterge Tabloları'nı tıklayın. "Media Edge Metrics" (Medya Edge Metrikleri) adlı bir kontrol paneli görürsünüz. Bunu tıkladığınızda şu metrikleri görürsünüz:

d0821d84a88a928d.png

18. Laboratuvar ortamını temizleme

Laboratuvarı tamamladığınız için tebrik ederiz. Bu bölümde, laboratuvar boyunca oluşturduğumuz tüm kaynakları sileceğiz.

FFmpeg sinyalini durdurma:

FFmpeg'in çalıştığı Cloud Shell terminalinde <CTRL+C> tuşuna basın.

Canlı Yayın Kanalını Durdurma:

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"

Canlı yayın kanalını silme:

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"

Canlı Yayın Giriş Uç Noktasını Silme:

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"

GCS paketini silin:

Command

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

Edge Cache Service örneğini silin:

Command

gcloud edge-cache services delete cme-demo

İstendiğinde "Y" yazarak silme işlemini onaylayın.

Edge Cache Origin'i silme:

Command

gcloud edge-cache origins delete cme-origin

İstendiğinde "Y" yazarak silme işlemini onaylayın.

Özel kontrol panelini silme

Command

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