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, kaynağa olan bağlantıları yeniden kullanarak ve modern ağ protokollerini ve özelleştirmeleri benimseyerek kullanıcı performansını iyileştirir. Kullanıcılar (ve müşterilerimiz) için bu, daha düşük gecikme süresi, daha fazla güvenilirlik ve daha düşük maliyet anlamına gelir. Bu da satışların, web deneyiminin 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 kod dönüştürme) + Cloud Storage (videolar için depolama alanı) + Video Oynatıcı (VLC, Google Shaka Player vb. - HLS + MPEG-DASH hazır oynatıcı) ile canlı yayın iş akışı ortamı dağıtma adımlarında size yol gösterilecektir.

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

Oluşturacağınız uygulama

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

de33cb3e75d52549.png

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

  • Canlı olarak kod dönüştürülmüş videoları depolamak için bir Google Cloud Storage (GCS) paketi oluşturun
  • Canlı Yayın API'sini, videoyu birden fazla biçime (HLS + MPEG DASH, SD ve HD) kod dönüştürecek şekilde yapılandırın.
  • Canlı yayın bileşenlerini ayarlama: Giriş/kanal
  • Canlı yayın kanalını başlatma
  • Medya CDN'yi kaynak olarak GCS paketiyle ayarlama
  • FFmpeg'yi canlı kanala feed verecek şekilde ayarlama
  • Kodu dönüştürülmüş canlı feed'i video oynatıcıyla yayınlama
  • Media CDN etkinliğini (gecikme, önbellek isabeti, önbellek hatası vb.) izlemek için bir Cloud Monitoring kontrol paneli oluşturun

Not: Bu laboratuvarda, kullanıcıların Google Cloud Console'a erişimi olduğu ve önceden bir proje oluşturdukları varsayılmaktadır. Ayrıca kullanıcıların yeni bir ortamla başladığını ve bu demo için hiçbir şey ayarlamadığını varsayıyoruz.

Tüm yapılandırma işlemleri Cloud Shell'deki komut satırı üzerinden yapılır. Yapılandırılmış bileşenleri dilediğimiz zaman konsoldaki komut satırı üzerinden kontrol edebiliriz. Laboratuvar boyunca Google Cloud Console'a yönlendiren işaretçiler göreceğiz.

2. Başlamadan önce

Medya 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şturabilir. 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 PM'si 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 olsa da bu kod laboratuvarında bulutta ç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 sağlanıp bağlantı kurulabilmesi için birkaç saniye beklemeniz gerekir. İşlem tamamlandığında aşağıdakine benzer bir ekran görürsünüz:

7ffe5cbb04455448.png

Bu sanal makinede ihtiyaç duyacağınız tüm geliştirme araçları yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışır. Bu sayede ağ performansını ve kimlik doğrulamayı büyük ölçüde iyileştirir. Bu codelab'deki tüm çalışmalarınızı tarayıcıda yapabilirsiniz. Hiçbir şey yüklemeniz gerekmez.

4. Google Cloud SDK sürümü

Bu makalenin yazıldığı sırada en son Google Cloud SDK sürümü 408.0.0'tür. Bu laboratuvardaki tüm komutlar, Google Cloud SDK'sının en son sürümü kullanılarak test edilmiştir. Devam etmeden önce lütfen Cloud Shell'ın SDK'nın en son 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.

Komut

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 yeniyse bir sonraki bölüme geçin.
  2. SDK sürümü 408.0.0'ten 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 laboratuvarda, gcloud ve curl komutlarını birkaç değişkenle ç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 Cloudshell'da önceden yapılandırılır. Doğrulama için env komutunu kullanacağız.

Komut

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.

Komut

source ~/env_variables.txt

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

Gerekli tüm ortam değişkenlerinin ayarlandığını doğrulayalım. Çıktıda toplam 6 ortam değişkeni göreceğiz.

Komut

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

  • 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:

Komut

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:

Komut

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:

Komut

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:

Komut

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. Çıktıda 4 API göreceğiz.

Komut

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 paketini 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, kod 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 kullanılır.

1. Paketi oluşturun

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

Komut

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:

Komut

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

7. Canlı Yayın API'si ortamını ayarlama

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

96b5d26aedeb89a6.png

Önceki bölümde live-streaming-storage-$LOGNAME adlı Cloud Storage paketini oluşturduk. 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. Giriş çözünürlüğü, giriş türü ve video kırpma gibi yayınınızla ilgili yapılandırmaları belirtmek için giriş uç noktasını kullanabilirsiniz.
  • Canlı Yayın Kanalı: Kanal, giriş uç noktası üzerinden giriş akışını besleyen, giriş akışını birden fazla şekilde kodlayan ve çıkış canlı yayınlarını belirtilen konumda belirli biçimlerde 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 sinyali türünü belirtmek için bir input.json dosyası oluşturacağız. Bu laboratuvarda RTMP canlı sinyalini kullanıyoruz.

Komut

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

Giriş uç noktasını oluşturma

Bu laboratuvarın yazıldığı tarih itibarıyla Canlı Yayın API'si için gcloud desteği yoktur. API çağrılarını yapmak için curl komutunu kullanacağız.

Komut

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
}

Çıktı çok sayıda yararlı bilgi içeriyor ancak şu anda iki alana odaklanmamız gerekiyor:

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

Durumu kontrol etme

Devam etmeden önce, giriş uç noktasının başarıyla oluşturulup oluşturulmadığını ve hazır olup olmadığını kontrol etmemiz gerekiyor.

Aşağıdaki komutta <OPERATION> ifadesini, az önce aldığımız İşlem'in kimliğiyle değiştirin. Bu örnekte "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4" değerini kullanın.

Komut

export OPERATION_ID_1=<OPERATION>

Komut

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 kaydetme

Önceki çıktıdaki URI değerini laboratuvarın ilerleyen bölümlerinde kullanacağız. Şimdi URI için bir ortam değişkeni ayarlayalım.

Komut

export URI=<uri>

<uri> değerini, yukarıda not ettiğiniz URI ile değiştirin. İsteğe bağlı olarak URI'yi almak için GET yöntemini de kullanabilirsiniz.

Komut

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ırması

Ö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) yorumdan oluşan bir HLS canlı yayını oluşturan bir kanal oluşturulmaktadır. Kanal, giriş uç noktası ve daha önce oluşturduğumuz depolama paketiyle ilişkilendirilir.

channel.json dosyasını oluşturma

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

Komut

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:

Komut

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, "name" ile başlayan çıkış satırında bulunabilir.

Durumu kontrol etme

Devam etmeden önce kanalın başarıyla oluşturulup oluşturulmadığını ve hazır olup olmadığını kontrol etmemiz gerekiyor.

Aşağıdaki komutta <OPERATION> ifadesini, az önce aldığımız İşlem'in kimliğiyle değiştirin. Bu örnekte operation-1661405972853-5e70a38d6f27f-79100d00-310671b4

Komut

export OPERATION_ID_2=<OPERATION>

Komut

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" değerinin "STOPPED" olduğunu unutmayın. Kanalı bir sonraki bölümde başlatacağız.

10. Canlı yayın kanalını başlatma

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

  1. Canlı yayın kanalını başlatma
  2. Kanalın durumunu kontrol edin. streamingState değerinin "AWAITING INPUT" olduğundan emin olmamız gerekiyor.

1. Kanalı başlatma

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

Komut

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 öğrenmek için aşağıdaki curl komutunu çalıştırın:

Komut

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ığı ve sinyal almaya hazır olduğunu belirten "AWAITING_INPUT" simgesini 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ştururuz:

  1. Edge Önbelleği Kaynağı
  2. Edge Cache Hizmeti

1. Edge önbelleği kaynağı oluşturma

Edge önbelleği kaynağı, Cloud Storage paketi, üçüncü taraf depolama alanı veya yük dengeleyici gibi bir içerik konumunu temsil eder. CDN terimlerinde kaynak (veya kaynak sunucu), dağıtmak istediğimiz içeriğin kaynağının (ör.tüm CSS, JavaScript, HTML, resimler vb.) bulunduğu konumdur. Bu laboratuvar için, laboratuvarın başında oluşturduğumuz Cloud Storage paketiyle eşleşen bir kaynak oluşturacağız. Edge önbelleği kaynağını cme-origin olarak adlandıracağız. 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.

Komut

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

Bir Edge Cache kaynağı oluşturduğumuza göre Edge Cache Hizmeti'ni oluşturabiliriz.

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

Edge Cache hizmeti yapılandırması bir YAML dosyası aracılığıyla yapılır. Cloud Shell'de cme-demo.yaml adlı yerel bir 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 Önbelleği Hizmeti yapılandırmalarını varsayılan olarak bırakırı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ülecek alan adlarının listesi (burada: demo.cme.com). Bu demoda bu özelliği kullanacağız. Medya CDN örneğinin IP adresini kullanırız.
  • Origin:, önceki adımda oluşturduğumuz Edge önbelleği kaynağıdır. Bu değeri 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

cme-origin adlı Edge Cache kaynağında, demo.cme.com ana makinesine sahip cme-demo adlı bir Edge Cache hizmeti oluşturacağız. Hizmeti oluşturmak için Cloud Shell'de aşağıdaki komutu çalıştırın:

Komut

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

Edge önbelleği hizmetinin 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 hizmeti örneğinin ipv4Addresses değerini not edin ve kopyalayın (burada 34.104.36.157). Bu kimliği, cme-demo.yaml dosyasını güncellemek ve daha sonra kod dönüştürülmüş videoyu yayınlamak için kullanırız.

Edge Cache Hizmeti'ni güncelleme

Bu noktada, videoyu daha sonra yayınlamak için hizmetin IP'sini kullanabilmek amacıyla Edge Önbelleği Hizmeti yapılandırmasını güncellemeniz önerilir. Edge Cache Service YAML dosyası, Edge Cache Service'ın istekleri kabul edeceği tüm ana makine adlarını/IP'lerini listelememize olanak tanır. Bu noktada yalnızca demo.cme.com'ü barındırıcı 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ünecek şekilde düzenleyin:

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:

Komut

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 canlı yayın giriş sinyalini oluşturalım. Bu bölümde şunları yapacağız:

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

1. FFmpeg'yi yükleme

FFmpeg, video, ses ve diğer multimedya dosyalarını ve 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:

Komut

sudo apt install ffmpeg -y

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

Komut

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 doğru şekilde yüklendi.

2. Giriş/Kanala Canlı Yayın Sinyali'ni başlatın.

FFmpeg yüklendikten sonra canlı yayın oluşturmak için giriş uç noktasına bir test giriş akışı göndeririz.

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.

Komut

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öreceksiniz. Komut, istemi döndürmez. Sinyal, siz durdurana kadar oluşturulur. Laboratuvarın geri kalanı için yeni bir Cloud Shell penceresi açmanız gerekir.

13. Yeni Cloud Shell'i açma

Bu noktada, FFmpeg <CTRL+C> komutunu kullanarak durdurulana ve dolayısıyla canlı sinyal oluşturma işlemi durdurulana kadar kalıcı olarak çalışacağından laboratuvara devam etmek için yeni bir Cloud Shell penceresi açmanız gerekir.

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

b3c7b0be6276c194.png

Yeni açılan Cloud Shell penceresinde laboratuvarın geri kalanını çalıştırın.

Ortam Değişkenlerini Ayarlama

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

Komut

source ~/env_variables.txt

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

Gerekli tüm ortam değişkenlerinin ayarlandığını doğrulayalım. Çıktıda toplam 6 ortam değişkeni göreceğiz.

Komut

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 kod dönüştürüldüğünü doğrulama

Kanalı açıklamak için bir curl çalıştıracağız. Çıktıda, streamingState değerinin "AWAITING_INPUT" yerine "STREAMING" olarak değiştiğini göreceğiz.

Komut

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 "streamingState": "STREAMING" ifadesini görürsünüz. Bu, kanalın yayın yaptığını ve canlı sinyalin kod dönüştürüldüğünü gösterir.

Ayrıca, bir manifest dosyası ve birkaç TS video segmenti 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 yayınlamak için Canlı Yayın API'si tarafından kullanılan paketin içeriğini listelemek üzere Cloud Shell'de aşağıdaki komutu çalıştırın:

Komut

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: Numaralı bir dosya dizisi segment-000000000X.ts

Bu noktada aşağıdakileri tamamlamış oluruz:

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

Sonraki bölümlerde, Edge Önbelleği Hizmeti'ni doğrulayacak ve ardından kod dönüştürülmüş videoyu Media CDN anycast IP adresini kullanarak 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. Bunun için Edge Cache Hizmeti örneğinin IP adresini kullanarak Edge Cache Hizmeti örneğindeki bir dosyaya erişmeye çalışırız. Bir nesneye ilk kez erişildiğinde henüz önbelleğe alınmaz. Bir önbellek MISS gözlemlememiz gerekir. İlk istek için nesne kaynaktan okunur ve kenarda önbelleğe alınır. Artık nesne uçta önbelleğe alındığından, aynı dosyaya erişmeye yönelik aşağıdaki tüm girişimler bir önbelleği HIT döndürür. Bu davranışı doğrulayalım:

Edge önbelleği kaynağında 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:

Komut

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, yeni oluşturduğumuz Edge Cache Service örneğinin IP adresidir.demo.cme.com:<IP>

Çıktıda 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 kaynaktan okunduğu için önbelleğin bulunmadığına dikkat edin.

Şimdi m3u8 dosyası için birden fazla istek göndereceğiz. Her şey doğru yapılandırılmışsa Media CDN, içeriği önbelleğinden sunmaya başlayacaktır. Aşağıdaki komut 10 curl isteği gönderir ve yalnızca x-cache-status başlığını yazdırır.

Komut

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ği karışımı olmalıdır. Çıktıda önbelleğe alınan isabetler görüyorsanız Media CDN beklendiği gibi çalışıyordur.

Çı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 hizmeti beklendiği gibi çalışıyor.

16. VLC ile kod dönüştürülmüş canlı sinyal videosu yayınlama

Bu noktada, noktaları birleştirip şu ana kadar üzerinde çalıştığımız tüm adımları birbirine bağlarız:

  • Canlı Yayın API'si tarafından HLS içeriğine kod dönüştürülen canlı sinyalin sonucunu alan live-streaming-storage-$LOGNAME adlı bir paket oluşturduk.
  • Canlı Yayın API'sini oluşturduk.
  • FFmpeg ile Live Streaming API girişini/kanalını besleyen bir RTMP canlı sinyali başlattık.
  • Canlı sinyalin kanala beslendiğini ve kanalın streaming modunda olduğunu doğruladık.
  • Sonuç olarak elde edilen kod dönüştürülmüş dosyaların (manifest + TS segmentleri) oluşturulduğunu ve live-streaming-storage-$LOGNAME paketinde depolandığını doğruladık.
  • Kaynak olarak live-streaming-storage-$LOGNAME GCS paketi ile cme-origin adlı bir Edge Önbelleği Kaynağı oluşturuldu.
  • cme-demo adlı bir Edge Cache örneği, kaynağı cme-origin olacak şekilde ayarlandı.
  • Edge Cache Hizmeti örneğinin davranışını (önbelleğe alma hatası, önbelleğe alma isabeti) doğruladık.

Artık kod dönüştürülmüş canlı sinyali Media CDN önbelleği üzerinden yayınlamak için bir video oynatıcı kullanabiliyoruz. 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 mevcut 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ığımızda, ağ bağlantınız yeterince iyiyse videonun SD formatta oynatıldığını ve HD formata hızlıca geçtiğini görürsünüz.

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

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

2a2d19abe728d222.png

Oynatıcıyı 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.

Video oynatmak için "Dosya" / "Ağ'ı aç"a gidin:

f85565301f7c68dc.png

Aşağıdakilerle ayarlayın:

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

Ardından "Aç"ı tıklayın. Kod dönüştürülmüş canlı videonun oynatılmaya başladığını görürsünüz. Video, aşağıdaki ekran görüntüsüne benzer şekilde görünür. Ekrandaki sayaç 1'er artarak çalışır ve sürekli bir bip sesi duyarsınız.

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

28fc359b49d44ec2.png

İsterseniz başka bir HLS ve MPEG DASH oynatıcı kullanabilirsiniz. Kullanabileceğiniz bazı oynatıcıları aşağıda bulabilirsiniz:

  • Quicktime Player: Mac'lere varsayılan olarak yüklenir. Burada da aynı: 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

SME ekibi tarafından bir Medya 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 panelini oluşturun:

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

Kurulum işlemi birkaç dakika sürebilir. Google Cloud Console'a gidin ve 3 çubuk > İşlemler > İzleme > Kontrol panelleri'ni tıklayın. "Media Edge Metrikleri" adlı bir kontrol paneli görürsünüz. Bunu tıkladığınızda metrikleri görürsünüz:

d0821d84a88a928d.png

18. Laboratuvar ortamını temizleme

Laboratuvarı tamamladığınız için tebrikler. 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> simgesine basın.

Canlı yayın kanalını durdurma:

Komut

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:

Komut

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şi uç noktasını silin:

Komut

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:

Komut

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

Edge Cache Hizmeti örneğini silme:

Komut

gcloud edge-cache services delete cme-demo

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

Edge önbelleği kaynağını silme:

Komut

gcloud edge-cache origins delete cme-origin

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

Özel kontrol panelini silme

Komut

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