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

1. Giriş

İçerik Yayınlama Ağları (CDN'ler), sıklıkla erişilen içerikleri son kullanıcılara daha yakın bir yerde önbelleğe alma, istemcilere daha yakın olan bağlantıları sonlandırma, kaynağa olan bağlantıları yeniden kullanma ve modern ağ protokolleri ile özelleştirmelerin benimsenmesi yoluyla kullanıcı performansını artırır. Kullanıcılarımız (ve müşterilerimiz) için bu, daha düşük gecikme, daha fazla güvenilirlik ve daha düşük maliyet anlamına gelir. Bu da satışlarda, web deneyiminde iyileşme sağlar ve kullanıcı deneyiminde net bir artış sağlar. Günümüzde CDN olmadan çalışan modern sitelerin ve video akış platformlarının sayısı çok azdır.

Neler öğreneceksiniz?

Bu laboratuvar, Medya 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ını dağıtma adımlarında bize yol gösterecektir.

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

Oluşturacakları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 aşağıdaki görevleri gerçekleştireceğiz:

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

Not: Bu laboratuvarda, kullanıcıların Google Cloud Console'a erişimi olduğunu ve halihazırda proje kurulumuna sahip olduğunu varsayıyoruz. Ayrıca, kullanıcıların yeni bir ortamla başladığını ve bu demo için herhangi bir kurulumları olmadığını varsayıyoruz.

Tüm yapılandırma işlemleri Cloud Shell'de komut satırı üzerinden gerçekleştirilir. Konsoldaki komut satırı aracılığıyla yapılandırılan bileşenleri her zaman kontrol edebiliriz. Laboratuvar süresince Google Cloud Console'a işaret eden işaretçiler göreceğiz.

2. Başlamadan önce

Medya CDN erişimi kısıtlanmış. Medya CDN'ye erişmek için hesap ekibinizle iletişime geçin. Yöneticiniz sizin adınıza erişim isteği oluşturabilir. Google kapsamındaysanız ve Medya CDN ile Canlı Yayın'ı test etmek istiyorsanız Medya CDN'si ile iletişime geçerek Medya CDN'ye erişim isteğinde bulunun.

3. Kurulum ve Gereksinimler

Cloud Shell'i başlatma

Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de 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 bulunan Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:

7ffe5cbb04455448

İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki tüm çalışmalarınız tarayıcıda yapılabilir. Herhangi bir şey yüklemeniz gerekmez.

4. Google Cloud SDK sürümü

Yazma sırasında 408.0.0, Google Cloud SDK'nın en son sürümüdür. 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 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 sonraki bir sürümse sonraki bölüme geçin.
  2. SDK sürümü 408.0.0 sürümünden düşükse aşağıdaki komutu çalıştırarak SDK'yı güncelleyin.
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ğıdaki adımları uygulamamız gerekiyor:

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

1. Ortam Değişkenlerini Ayarlama

Bu laboratuvar boyunca 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'de önceden yapılandırılmıştı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şturun

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.

Yetkiler

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. Çıkışta toplam 6 ortam değişkeni görürüz.

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ştirin

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

  • Network Services API
  • Sertifika Yöneticisi API'sı
  • Livestream API'si
  • Medya CDN Edge Cache API'si

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'sini etkinleştirme

Live Stream API'yi 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ştir

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 Etkin olduğunu doğrulayın

Etkin API'lerin tümünü listelemek için gcloud services list komutunu çalıştırın. Çıkışta 4 API gösterilir.

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 hâle 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, Medya CDN hizmeti için kaynak depolama alanı da görevi görür.

1. Paketi oluşturma

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

Komut

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

2. Paketi Herkese Açık hâle getirin

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. Live Streaming API ortamını ayarlama

Live Streaming API zincirinin bileşenleri şu şekilde tasarlanmış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 bir uç noktadır. Yayını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ş uç noktası aracılığıyla giriş akışını besleyen, giriş akışının kodunu birden fazla yoruma dönüştüren 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şturun

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ığı an itibarıyla Live Stream API için gcloud desteği sunulmamaktadır. API çağrıları 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
}

Çıkışta birçok yararlı bilgi bulunuyor, ancak şu anda iki alana odaklanmamız gerekiyor:

  • İşlem kimliği: Çıkıştan 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: "done": false olan durumun "done": true olarak değişmesini beklememiz gerekir

Durumu kontrol edin

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

Aşağıdaki komutta <OPERATION> yerine yukarıda elde ettiğimiz İşlemin kimliğini yazın. Bu örnekte, "operation-1661405972853-5e70a38d6f27f-79100d00-310671b4" kullanılmıştır.

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" ifadesini görene kadar komutu yeniden çalıştırın.

URI'yı kaydet

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

Komut

export URI=<uri>

<uri> kısmını yukarıda not ettiğiniz URI ile değiştirin. İsteğe bağlı olarak, URI'yı 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. Oluştur ve Canlı Yayın Kanalını yapılandırma

Bir önceki bölümde az önce oluşturduğumuz giriş uç noktasıyla ilişkilendirilen Canlı Yayın Kanalını oluşturalım. Aşağıdaki örnekte, tek ve yüksek tanımlı (1280x720) bir işlemden oluşan HLS canlı yayını oluşturan bir kanal oluşturulmaktadır. Kanal, giriş uç noktası ve daha önce oluşturduğumuz depolama alanı 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:

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. Sonraki adımlardan birinde bu bilgiye ihtiyacımız olacaktır. Bu, "name" ile başlayan çıkış satırında bulunabilir.

Durumu kontrol edin

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 yukarıda elde ettiğimiz İşlemin kimliğini yazın. 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" ifadesini görene kadar komutu yeniden çalıştırın.

Şu anki "streamingState" öğesinin "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, kanalımıza 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 öğesinin "AWAITING INPUT" olduğundan emin olmamız gerekir.

1. Kanalı Başlatma

Kanalı başlatmak için Cloud Shell'de 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 almak 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",

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

11. Medya CDN'yi yapılandırma

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

  1. Uç Önbellek Kaynağı
  2. Uç Önbellek Hizmeti

1. Edge Önbellek Kaynağı Oluşturma

Uç Önbellek Kaynağı; Cloud Storage paketi, üçüncü taraf depolama konumu veya yük dengeleyici gibi bir içerik konumunu temsil eder. CDN terimleriyle, kaynak (veya kaynak sunucu), dağıtmak istediğimiz içeriğin kaynağının bulunduğu konumdur. Örneğin; tüm CSS, JavaScript, HTML, görüntüler vb. bu laboratuvar için laboratuvarın başında oluşturduğumuz Cloud Storage paketiyle eşlenen bir kaynak oluşturacağız. Edge Önbellek 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. Uç Önbellek Hizmeti oluşturma

Uç Önbellek Kaynağı ayarladığımıza göre artık Uç Önbellek Hizmetini oluşturabiliriz.

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

Uç Önbellek 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 kullanın ve 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

Uç Önbellek Hizmeti yapılandırmalarının tüm varsayılan ayarlarını 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 Medya CDN Hizmeti tarafından çözümlenecek alan adlarının listesini burada bulabilirsiniz: demo.cme.com. Bu demo sırasında bunu kullanacağız. Media CDN örneğinin IP adresini kullanacağız.
  • Origin: Bu, önceki adımda az önce oluşturduğumuz Edge Önbellek Kaynağıdır. Bunu, Medya CDN Kaynağının adı olan cme-origin olarak ayarlayın.

YAML dosyasında kullanabileceğiniz farklı değişkenler hakkında daha fazla bilgi için Uç Önbellek Hizmeti yapılandırma kılavuzuna göz atın.

Uç Önbellek Hizmetini oluşturma

demo.cme.com ana makinesiyle cme-origin adlı Edge Önbellek Kaynağında cme-demo adlı bir Uç Önbellek 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 Önbellek Hizmeti'nin 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'

Uç Önbellek Hizmeti örneğinin ipv4Addresses öğesini not edip kopyalayın (burada 34.104.36.157). Bunu, cme-demo.yaml dosyasını güncellemek ve daha sonra, kodu dönüştürülmüş videonun akışını gerçekleştirmek için kullanacağız.

Uç Önbellek Hizmeti'ni güncelleme

Bu noktada, daha sonra video akışı gerçekleştirmek üzere hizmetin IP'sini kullanabilmek için Uç Önbellek Hizmeti yapılandırmasını güncellemek iyi bir fikirdir. Uç Önbellek Hizmeti YAML dosyası, Uç Önbellek Hizmeti'nin istekleri kabul edeceği tüm ana makine adlarını/IP'lerini listelememize olanak tanır. Bu aşamada, ana makine olarak yalnızca demo.cme.com değerini belirttik. Bu alan için ad çözümlemesi sağlamak üzere bir DNS alt bölgesini bulutta yapılandırırsınız. Ancak, IP adresini yaml dosyasındaki ana makineler listesine eklemek daha kolay bir çözüm olacaktır. 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

Yalnızca bu değişiklikleri yansıtmak 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 makineler listesinde göründüğünü doğrulayın.

Bu noktada Uç Önbellek Hizmeti örneği, ana makine olarak "demo.cme.com" veya IP adresi ile yapılan istekleri kabul eder.

12. Giriş sinyalini oluşturun

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

  1. Ücretsiz bir açık kaynak yazılım olan FFmpeg'i yükleyin
  2. Giriş/Kanala test amaçlı bir canlı sinyal gönderin

1. FFmpeg'i yükle

FFmpeg; video, ses ve diğer multimedya dosyaları ile akışları işlemek için bir kitaplık ve program paketinden oluşan ücretsiz ve açık kaynak bir yazılım projesidir. Cloud Shell terminalinde aşağıdaki komutu kullanarak FFmpeg'i yükleyin:

Komut

sudo apt install ffmpeg -y

Yükleme tamamlandığında FFmpeg'in düzgün şekilde yüklendiğini doğrulamak için sürümünü kontrol edelim:

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 düzgün şekilde yüklendi.

2. Girişe/Kanala Canlı Yayın Sinyali'ni 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ştur 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 bölümüne bakı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. Bu komut, istemi döndürmez. Siz durdurana kadar sinyal oluşturulur. Laboratuvarın geri kalanında yeni bir Cloud Shell penceresi açmanız gerekecektir.

13. Yeni Cloud Shell'i Aç

FFmpeg <CTRL+C> komutuna kadar kalıcı olarak çalışacağından, bu noktada laboratuvara devam etmek için yeni bir Cloud Shell penceresi açmanız gerekir. komutuyla durdurmanız gerekir.

"+" işaretini tıklayın. işaretini tıklayın. Ek bir Cloud Shell penceresi açar.

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 CloudShell olduğundan, ortam değişkenlerini tekrar ayarlamamız gerekir. 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. Çıkışta toplam 6 ortam değişkeni görürüz.

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ürme işleminin yapıldığını doğrulama

Kanalı açıklamak için bir curl yayınlayacağız. Çıkışta "AWAITING_INPUT" olan StreamingState değerinin "STREAMING" olarak değiştiğini görürüz

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örmeniz gerekir. Bu, kanalın yayın yaptığını ve canlı sinyalin kod dönüştürme işleminin yapı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 Live Streaming API tarafından kodu dönüştürülmüş canlı sinyal manifestinin ve TS video segmentlerinin çıkışını almak için kullandığımız paketin içeriğini listelemek için 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ı dosya dizisi segment-000000000X.ts

Bu noktada aşağıdaki işlemleri tamamladık:

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

Sonraki bölümlerde Uç Önbellek Hizmeti'ni doğrulayacağız ve ardından Medya CDN her noktaya yayın IP adresini kullanarak kodu dönüştürülmüş videoyu yayınlayacağız.

15. Uç Önbellek Hizmeti örneğinin çalıştığını doğrulama

Bu bölümde Uç Önbellek Hizmeti örneğinin beklendiği gibi çalıştığını doğrulayacağız. Bunun için Uç Önbellek Hizmeti Hizmeti'nin IP adresini kullanarak Uç Önbellek Hizmeti örneğindeki bir dosyaya erişmeye çalışacağız. Bir nesneye ilk kez erişildiğinde henüz önbelleğe alınmamıştır. Bir önbellek MISS gözlemlememiz gerekir. İlk istek için nesne kaynaktan okunur ve uçta önbelleğe alınır. Aynı dosyaya erişmeye yönelik aşağıdaki tüm denemeler, nesne artık uçta önbelleğe alındığından bir önbellek HIT döndürür. Bu davranışı doğrulayalım:

Uç Önbellek Kaynağında depolanan kodu 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"

Uç Önbellek Hizmeti örneğinin adını çözümlemek için IP adresini kullandığımız çözüme dikkat edin. IP'nin, az önce oluşturduğumuz Uç Önbellek Hizmeti örneğinin IP'si olduğu demo.cme.com:<IP> kullandığınızdan emin olun.

Çıkışta x-cache-status üstbilgisini 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ığından ve kaynaktan okunduğundan önbelleğin eksik olduğuna dikkat edin.

Şimdi m3u8 dosyası için birden çok istek yapacağız. Her şey doğru yapılandırıldıysa Medya CDN, içeriği önbelleğinden sunmaya başlamalıdır. Aşağıdaki komut 10 curl isteğinde bulunur 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ış, önbellek hit ve miss karmalarının bir karışımı olmalıdır. Çıkışta önbellek isabetleri görüyorsanız Medya 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 Medie Edge Hizmeti beklendiği gibi çalışıyor.

16. Kodu dönüştürülmüş canlı sinyal videosunu VLC ile yayınlayın

Bu bölümde noktaları birleştirip şu ana kadar üzerinde çalıştığımız tüm adımları bir araya getiriyoruz:

  • Live Streaming API tarafından HLS içeriğine dönüştürülen canlı sinyalin sonucunu alan live-streaming-storage-$LOGNAME adlı bir paket oluşturduk.
  • Live Streaming API'yi kurduk.
  • Live Streaming API girişini/kanalını besleyen FFmpeg ile bir RTMP canlı sinyali başlattık.
  • Canlı sinyalin kanala beslendiğini ve kanalın streaming modunda olduğunu doğruladık.
  • Sonuçta elde edilen kodu dönüştürülmüş dosyaların (manifest + TS segmentleri) oluşturulup live-streaming-storage-$LOGNAME grubunda depolandığı doğrulandı.
  • cme-origin adlı bir Uç Önbellek Kaynağı, kaynak olarak live-streaming-storage-$LOGNAME GCS paketi kullanılarak oluşturuldu.
  • cme-demo adlı bir Edge Cache örneğinin kaynağı cme-origin olacak şekilde oluşturuldu.
  • Uç Önbellek Hizmeti örneğinin davranışını (önbellekte yok, önbellek isabeti) doğruladık.

Şu anda Medya CDN önbelleği üzerinden kodu dönüştürülmüş canlı sinyali yayınlamak için video oynatıcı kullanabileceğimiz bir noktadayız. Bunu yapmak için VLC Oynatıcı'yı kullanacağız. VLC Player, çoğu multimedya dosyasını oynatan ücretsiz ve açık kaynak bir platformlar arası multimedya oynatıcı ve çerçevedir. Uyarlanabilir medya biçimlerini (DASH ve HLS gibi) oynatır. Uyarlanabilir Akış ilkesini kullanır. Ağ bağlantınızın kalitesine ve mevcut bant genişliğine göre oynatıcı, oynatılan videonun kalitesini ayarlar. Az önce yaptığımız kod dönüştürme işleminde, varsayılan hazır ayarları kullandık ve "yalnızca" SD ve HD olmak üzere iki kalite oluşturduk. Videoyu oynatıcıda oynatmaya başladığımızda SD biçiminde oynatmaya başladığını ve ağ bağlantınız yeterince iyiyse hızlı bir şekilde HD biçimine geçtiğini görürsünüz.

Kod dönüştürme işlemi, yaygın olarak desteklenen Apple video biçimi olan HLS'nin canlı sinyalini yayınlayacağız. İlgili dosyanın adı main.m3u8 (HLS manifestidir). Manifest, TS video segmentlerini işaret ediyor.

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

2a2d19abe728d222.png

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

Bir videoyu oynatmak için "Dosya"ya gidin / "Açık Ağ":

f85565301f7c68dc.png

Aşağıdakilerle ayarlayın:

  • URL: http://&lt;Replace_With_Edge_Cache_IP&gt;/main.m3u8. Bu, akışını gerçekleştirmek istediğimiz videonun URL'sidir. Bildirim:
  • Medya CDN örneğinin IP'si: 34.105.35.246. Dağıttığınız Cloud Media Hizmeti'nin 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 grubunda kullandığımız yoldur. Yol, buradaki kök yoludur: "/".
  • Manifest video dosyasının adı: HLS manifest dosyası, main.m3u8.

Sonra "Aç"ı tıklayın. Kodu 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ündeki gibi olacaktır. Ekrandaki sayaç 1'lik artışlarla çalışır ve kesintisiz bir bip sesi duyabilirsiniz.

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

28fc359b49d44ec2.png

İsterseniz diğer herhangi bir HLS ve MPEG DASH oynatıcıyı kullanabilirsiniz. Üzerinde düşünebileceğiniz bazı örnekler:

  • Quicktime oynatıcısı - Mac'lerde varsayılan olarak yüklüdür. Burada da aynı: http://34.104.36.157/main.m3u8 için bir ağ bağlantısı açın. IP adresini, Edge Cache Service örneğinizden biriyle değiştirin.

17. Medya CDN'sini İzleme

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 çubuğu tıklayın > İşlemler > İzleme > Gösterge Tabloları. "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> tuşuna basın.

Canlı Yayın Kanalını durdurun:

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

Komut

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

Uç Önbellek Hizmeti Örneğini silin:

Komut

gcloud edge-cache services delete cme-demo

"Y" yazarak silme işlemini onaylayın istendiğinde

Uç Önbellek Kaynağını silin:

Komut

gcloud edge-cache origins delete cme-origin

"Y" yazarak silme işlemini onaylayın istendiğinde

Özel Kontrol Paneli'ni silme

Komut

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