AWS Türkçe Blog

Önceden kaydedilmiş videoyu AWS Elemental MediaLive kullanarak nasıl canlı yayınlarsınız

Orijinal makale: Link (Onat Celmen, Senior Solutions Architect)

Bu blog yazısında AWS Elemental MediaLive kullanarak önceden kaydedilmiş videoları nasıl canlı yayınlayacağınız konusunu anlatacağım. Bu kullanım durumu, videolarını önceden kaydedip Twitch, YouTube ve Facebook gibi birden fazla sosyal kanalı kullanarak daha geniş bir kitleye ulaşmak suretiyle mesajlarının kontrolünü elinde tutmak isteyen müşteriler için idealdir. 2020’de küresel salgın nedeniyle fiziksel etkinlikler sanal olarak gerçekleşti. Bu nedenle müşteriler daha iyi bir kullanıcı deneyimi sağlamak ve birden fazla zaman dilimi ile daha geniş bir küresel kitleye ulaşmak için bir iş akışı istediler; aynı etkinliğin yeniden akışı yeni bir gereksinim haline geldi.

Bu “nasıl yapılır” yazısı size isteğe bağlı, sunucusuz ve uygun maliyetli bir canlı yayın iş akışı sağlar ve bu iş akışı alma ve birden çok kanala dağıtım için MP4 dosyasını kullanır. MediaLive workflow wizard size sunacağım tüm iş akışını hızlı bir şekilde ayarlamanızı sağlar. Canlı etkinliğinizi canlı girişlerle yayınlamak istiyorsanız Live Streaming on AWS çözümüne göz atın.

Mimariye genel bakış

Amazon S3, Elemental MediaLive, Elemental MediaStore, Amazon CloudFront’u sosyal kanallara ve birden çok OTT cihazına dahil eden Çözüm Mimarisi diyagramı

Genel bakış

  1. Amazon S3 klasörü (bucket) oluşturun
  2. Önceden kaydedilmiş videoyu Amazon S3 klasörüne yükleyin
  3. Bir MediaStore konteyneri oluşturun
  4. Bir CloudFront dağıtımı (distribution) oluşturun
  5. Bir MediaLive girişi oluşturun
  6. Bir MediaLive Kanalı oluşturun
  7. Bir Sosyal Kanal Çıktısı Oluşturun (İsteğe Bağlı)
  8. MediaLive Kanalını başlatın
  9. MediaLive Kanalını durdurun

Önkoşullar

Bu blog yayınından en iyi şekilde yararlanmak için aşağıdakilere sahip olduğunuzdan emin olun. Hepsi tavsiye edilir, ancak gerekli değildir.

Gerekli ön koşullar:

  • Bir AWS hesabı
  • Twitch / YouTube / Facebook hesabı ve / veya stream key (isteğe bağlı bir adım için gereklidir)

Önerilen Ön Koşullar

  • MediaLive ile ilgili önceden deneyim
  • AWS Elemental MediaStore ile ilgili önceden deneyim
  • Amazon CloudFront ile ilgili önceden deneyim

Detaylara inmeden önce bu yazı boyunca kullanılan hizmetleri öğrenmenizi öneririz.

  • Amazon Simple Storage Service (Amazon S3) sektör lideri ölçeklenebilirlik, veri erişilebilirliği, güvenlik ve performans sunan bir nesne depolama hizmetidir.
  • AWS Elemental MediaLive broadcast sınıfı canlı video işleme hizmetidir.
  • AWS Elemental MediaStore medya için optimize edilmiş bir AWS depolama hizmetidir.
  • Amazon CloudFront geliştirici dostu bir ortamda düşük gecikme süresi, yüksek aktarım hızlarıyla küresel çapta müşterilere veri, video, uygulama ve API’leri güvenli bir şekilde sunan hızlı bir içerik dağıtım ağı (CDN) hizmetidir.

Maliyet açıklaması

Bu iş akışını oluşturmak için gereken AWS kaynakları Ücretsiz Kullanım kapsamına girmediğinden çalıştırırken ek ücret ödemeniz gerekir. Bu iş akışını çalıştırırken kullanılan AWS hizmetlerinin maliyetinden siz sorumlusunuzdur. Uzun süredir devam eden kaynaklar nedeniyle masraflardan kaçınmak için bittiğinde kaynaklarınızı temizlemeyi unutmayın. Örneğin, AWS Ireland Bölgesi için bu iş akışı Twitch kurulumu olmadan saatte 1,63 ABD doları tutar ve CloudFront için internet ücretlerine izleme tabanlı veri aktarımı hariç Twitch kurulumuyla saatte 2,05 dolara mal olur. Daha fazla bilgi için CloudFront fiyatlandırma sayfasına bakın.

Gidiş yolu

AWS Yönetim Konsolu‘nu kullanarak bu iş akışının dağıtımı konusunda sizi yönlendireceğim. Bu adımları izleyerek, önceden kaydedilmiş MP4 videonuzu birden çok kanala giriş ve çıkış olarak kullanarak uçtan uca canlı yayın iş akışı oluşturacaksınız. Ardından yayınınızı oynatıcınızda veya Twitch kanalınızda izleyeceksiniz.

Adım 1: Amazon S3 klasörü (bucket) oluşturun

Önceden kaydedilmiş MP4 videosunu saklamak için bir Amazon S3 klasörü oluşturmanız gerekir. Bu video canlı yayınınızın girdisi olacak.

Amazon S3 klasörü oluşturmak için:

  1. AWS Yönetim Konsolu’nda oturum açın.
  2. Amazon S3 konsolunda Create bucket’ı seçin.
  3. Create Bucket sayfasında aşağıdaki ayarları yapılandırın:
  4. Bucket name kısmına klasörünüz için DNS uyumlu bir ad girin.
  5. AWS Region için klasörün bulunmasını istediğiniz AWS Bölgesini seçin.
  6. Create Bucket butonuna basın.

AWS Yönetim Konsolu’nu kullanarak Amazon S3 klasörü oluşturma

Adım 2: Önceden kaydedilmiş videoyu Amazon S3 klasörüne yükleyin

Artık bir Amazon S3 klasörü oluşturduğunuza göre önceden kaydedilmiş videonuzu Amazon S3 klasörüne yükleyin. AWS Konsolu’nu kullanarak Amazon S3 klasörüne video yükleyebilirsiniz.

AWS Konsolu’nu kullanarak yüklemek için:

  1. Amazon S3 konsolunda, Buckets altında yeni oluşturduğunuz klasörünüzü seçin.
  2. Objects altında Upload’u seçin.
  3. Files and folder altında Add files’ı seçin, önceden kaydedilmiş video dosyanızı seçin.
  4. Upload’u seçin.

Adım 3: Bir MediaStore konteyneri oluşturun

Content Delivery Network (CDN) için, ortam için optimize edilmiş kaynak olarak kullanılacak bir MediaStore konteyneri oluşturun. MediaLive, konteyneri HLS manifest’lerini ve segmentlerini saklamak için kullanacak.

MediaStore konteynerini oluşturmak için:

  1. MediaStore konsolunda Create container’ı seçin.
  2. Container adı kısmında konteyner için bir ad girin.
  3. Create butonuna basın.

Bir MediaStore konteyner oluşturun

Konteyner başarıyla oluşturulduktan sonra konteyner adını seçin.

Konteyner nesnelerini CloudFront dağıtımı için salt okunur erişilebilir hale getirmek için MediaStore konteyner politikasını güncellemeniz gerekir.

MediaStore konteyner politikasını düzenlemek için:

  1. Container sayfasında, Container policy’i seçin.
  2. Edit policy‘i seçin.
  3. Konteynerinizin “arn” bilgisini not alın, ardından aşağıdaki kodu kopyalayın / yapıştırın.
  4. Kaynak değerini konteynerinizin belirtilen “arn” bilgisi ile değiştirin.
  5. Save butonuna basın.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadOverHttps",
      "Effect": "Allow",
      "Action": ["mediastore:GetObject", "mediastore:DescribeObject"],
      "Principal": "*",
      "Resource": "arn:aws:mediastore:<region>:<owner acct number>:container/<container name>/*",
      "Condition": {
        "Bool": {
            "aws:SecureTransport": "true"
        }
      }
    }
  ]
}
JSON

MediaStore konteyner politikasını düzenleyin

MediaStore konteyner CORS politikası oluşturmak için:

  1. Container sayfasında, Container CORS policy’i seçin.
  2. Create new policy öğesinden Create custom policy‘i seçin.
  3. Aşağıdaki politikayı kopyalayıp yapıştırın.
  4. Save butonuna basın.

Güvenliği artırmak için MediaStore konteyner CORS politikasını belirli bir domain adı için okuma erişimini kısıtlamak üzere değiştirin. Belirli bir domain adına okuma erişimi vermek için örnek CORS politikasına göz atın.

[
  {
    "AllowedOrigins": [
      "*"
    ],
    "AllowedMethods": [
      "GET"
    ],
    "AllowedHeaders": [
      "*"
    ],
    "MaxAgeSeconds": 3000,
    "ExposeHeaders": [
      "*"
    ]
  }
]
JSON

MediaStore konteyner CORS politikası oluşturun

MediaStore Nesnesi yaşam döngüsü politikası oluşturmak için:

  1. Container sayfasında Object lifecycle policy’i seçin.
  2. Create new policy öğesinden Create custom policy’i seçin.
  3. Aşağıdaki politikayı kopyalayıp yapıştırın.
  4. Save butonuna basın.
{
  "rules": [
    {
      "definition": {
        "path": [ {"wildcard": "*.ts"} ],
        "seconds_since_create": [
          {"numeric": [">", 300]}
        ]
      },
      "action": "EXPIRE"
    }
  ]
}
JSON

MediaStore Metrik politikası oluşturmak için:

  1. Container sayfasında, Metric policy‘i seçin.
  2. Create new policy öğesinden Create custom policy‘i seçin.
  3. Aşağıdaki politikayı kopyalayıp yapıştırın.
  4. Save butonuna basın.
{
"ContainerLevelMetrics": "ENABLED"
}
JSON

Adım 4: Bir CloudFront dağıtımı (distribution) oluşturun

Artık MediaStore’u kaynak olarak kullanarak bir CloudFront dağıtımı oluşturabilirsiniz.

CloudFront dağıtımı oluşturmak için:

  1. CloudFront konsolunda Create Distribution’ı seçin.
  2. Get Started seçin.
  3. Origin Domain Name kısmında daha önce oluşturduğunuz MediaStore konteynerini seçin.
  4. Origin Protocol Policy için HTTPS Only seçin.
  5. Default Cache Behavior Settings altında:
    1. Viewer Protocol Policy için Redirect HTTP to HTTPS‘i seçin.
    2. Allowed HTTP Methods için GET, HEAD, OPTIONS seçin.
    3. Origin Request Policy için Create a new Policy’i seçin.
      1. Name kısmına politika için bir ad girin.
      2. Headers için Whitelist’i seçin, ardından Origin’i ve ardından Add header’ı seçin.
      3. Create cache policy seçin.
    4. Origin Request Policy için yenileyi seçin, ardından son oluşturulan kaynak isteği politikasını seçin.
  6. Create Distribution seçin.
  7. Domain Name’i kopyalayıp not alın.

Çıktımızı görüntülemek için aşağıdaki adımlarda CloudFront Domain Name’ini kullanacağız.

MediaStore’u origin olarak kullanarak CloudFront dağıtımı oluşturun

Adım 5: Bir MediaLive girişi oluşturun

Amazon S3 klasöründe depolanan önceden kaydedilmiş videoyu kullanarak MP4 pull girişi oluşturun.

MediaLive MP4 pull girişi oluşturmak için:

  1. MediaLive konsolunu açın.
  2. Navigasyon bölmesinde Inputs’u seçin.
  3. Girişler sayfasında Create input’u seçin.
  4. Input name için bir ad girin.
  5. Input type için MP4 seçin.
  6. Input class için SINGLE_INPUT seçin.
  7. Input source A altında, URL için Amazon S3 klasöründe depolanan MP4 videosunun URL’sini aşağıdaki URL biçiminde girin.
  8. Create seçin.
s3ssl://YOUR_INPUT_BUCKET_NAME/CONTENT_OBJECT_KEY.mp4
Bash

MediaLive MP4 pull input oluşturun

Adım 6: Bir MediaLive Kanalı Oluşturun

Videonuzu transcode etmek ve MediaStore’a veya Twitch gibi sosyal kanallara sunmak için MediaLive Kanalı oluşturun.

MediaLive Kanalı oluşturmak için:

  1. MediaLive konsolunu açın.
  2. Navigasyon bölmesinde Channels’ı seçin.
  3. Channels sayfasında Create channel‘ı seçin.
  4. Channel and input details bölümünde, General info bölümünde, Channel name için bir kanal adı girin.
  5. IAM role için
    1. Varolan bir IAM’iniz varsa Use existing role seçin ve açılır listeden IAM Role seçin.
    2. IAM rolünüz yoksa Create role from template‘i seçin.

      MediaLive Kanalı oluşturun, kanal adını ve IAM Role düzenlemesini yapın

  6. Channel şablonu bölümünde, Template için açılır listeden Live Event – HLS‘i seçin.
  7. Channel Class için SINGLE_PIPELINE’ı seçin.
  8. Input specifications bölümünde Input codec bileşeni için AVC’yi seçin, Input resolution için HD‘yi seçin, Maximum input bitrate için MAX_10_MBPS‘i seçin.

    MediaLive Kanalı oluşturun, Live Event – HLS kanal şablonunu seçin, channel Class ve Input ayarlarını düzenleyin (Örneğin: Input codec, input resolution ve maximum input bitrate)

  9. Output delivery bölümünde, Delivery method için Public’i seçin.
  10. Output groups altında, HD bölümünde, HLS group destination A‘de URL için MediaStore konteyner Data Endpoint’ini yapıştırın, ardından sonuna “/live” ekleyin. URL’de “https” yerine “mediastoressl” yapın.
  11. HLS settings bölümünde CDN Settings için HLS media store seçin.

    MediaLive Kanalı oluşturun, hedefi MediaStore’a güncelleyin ve CDN ayarlarını değiştirin

  12. Input attachments bölümünde Add‘i seçin.
  13. Input için açılır listeden girdiyi seçin.
  14. Attachment name için bir girdi adı girin.
  15. Confirm butonuna basın.

    MediaLive kanalına Input bağlayın

  16. Create channel‘ı seçin.

Adım 7: Bir Sosyal Kanal Çıktısı Oluşturun (İsteğe bağlı)

Akışınızı Twitch gibi sosyal kanallara sunmak için bir RTMP Push çıktı grubu oluşturun. Sosyal kanallara akış yapmak istemiyorsanız, bu bölümü atlayabilir ve MediaLive Kanalını Başlatın bölümünden devam edebilirsiniz.

MediaLive kanalı oluşturulduktan sonra RTMP çıktı grubu eklemek için MediaLive kanalını düzenleyin.

RTMP Push çıktı grubu oluşturmak için:

  1. MediaLive konsolunu açın.
  2. Channels sayfasında kanal adını seçin.
  3. Channel actions‘ı ve ardından Edit channel‘ı seçin.
  4. Output groups altında Add‘i seçin.
  5. RTMP’yi ve ardından Confirm‘ü seçin.

    MediaLive Kanalına RTMP output group ekleyin

  6. Name kısmına sosyal kanal için bir ad girin.
  7. RTMP outputs bölümünde Actions için Settings‘i seçin.
  8. RTMP destination A bölümünde, URL için, sosyal kanal tarafından sağlanan RMTP giriş URL’sini girin (Twitch, YouTube, Facebook). Örneğin, Twitch için rtmp://rtmp.twitch.tv/ kullanın.
  9. Stream Name için sosyal kanal tarafından sağlanan akış anahtarını girin. Örneğin, Twitch için https://dashboard.twitch.tv/u/[username]/settings/stream adresindeki [username] ile Twitch kullanıcı adınızı değiştirerek tarayıcınızdaki akış ayarlarına gidin, ardından primary stream key’i kopyalayın.

    Twitch dashboard, stream settings, primary stream key’i kopyalayın

    MediaLive Kanalını güncelleyin, sosyal kanal için RTMP URL ve stream key girin

  10. Stream settings bölümünde, Video altında:
    1. Width için, giriş videonuzun genişliğine eşit veya daha az bir genişlik girin
    2. Height için, giriş videonuzun yüksekliğine eşit veya daha düşük bir yükseklik girin
    3. Codec Settings için 264 seçin.
  11. Stream settings bölümünde, Audio 1’in altında, Codec Settings için AAC seçin.
  12. Update channel‘ı seçin.

    MediaLive Kanalını güncelleyin, sosyal kanallar için Width, Height, Codec gibi Stream settings’i düzenleyin

Ek sosyal kanal eklemek istiyorsanız, RTMP Push çıktı grubu bölümündeki tüm adımları yineleyin. Genişlik, yükseklik, kare hızı ve bitrate ayarlarının MediaLive maliyetinizi etkilediğini lütfen unutmayın. Daha fazla bilgi için MediaLive fiyatlandırma sayfasına göz atın.

Adım 8: MediaLive Kanalını Başlatın

Artık MediaLive Kanalınızı başlatmaya hazırsınız.

Canlı yayınınızı başlatmak için:

  1. MediaLive konsolunu açın.
  2. Channels sayfasında başlatmak istediğiniz kanalı seçin.
  3. Start‘ı seçin.

Kanalınızın ortalama olarak yaklaşık 1-2 dakika içinde yayınlanmaya başlaması gerekir. Kanal durumunuzu kanal ayrıntı sayfanızdan Channel state kısmından takip edebilirsiniz.

MediaLive Kanalını başlatın

HLS Çıktısı

HLS ana manifest URL’ini oluşturmak için CloudFront Domain Name’i notlarınızdan çıkarmanız gerekir. URL https://[id].cloudfront.net şeklinde olmalıdır. CloudFront URL’inin sonuna “/live.m3u8” eklemeniz gerekir. Sonuç aşağıdaki adrese benzer olmalıdır. CloudFront Domain Name’in aşağıdaki örnekten farklı olacağını lütfen unutmayın.

Örnek CloudFront Domain Name

Tarayıcınızdaki çıktı yayınını izlemek için:

  1. Aşağıdaki kodu favori metin düzenleyicinize kopyalayın.
  2. {STREAM_URL} öğesini oluşturulmuş HLS ana manifest URL’nizle değiştirin.
  3. HTML dosyası olarak kaydedin.
  4. Favori tarayıcınızda HTML dosyasını açın.
  5. Canlı yayını oynatın.

Demo oynatıcıyı farklı tarayıcılarda HLS uyumlu hale getirmek için, açık kaynak HTML5 player framework olan Video.js kullanıyorum.

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Sample Player</title>
  
<link href="https://vjs.zencdn.net/7.3.0/video-js.min.css" rel="stylesheet">
<script src="https://vjs.zencdn.net/7.3.0/video.min.js"></script>

</head>
<body>
    <h1>Sample Player</h1>
    <video id="example-video" width=960 height=540 class="video-js vjs-default-skin" controls>
    <source src="{STREAM_URL}" type="application/x-mpegURL">
    </video>

<script> var player = videojs('example-video'); player.play(); </script>

</body>
</html>
HTML

Örnek oynatıcı, canlı yayın

Twitch seçeneğini takip ederseniz canlı yayını izlemek için tarayıcınızdaki Twitch kanalınıza da gidebilirsiniz. https://www.twitch.tv/[ChannelName] şeklinde olmalıdır.

Twitch canlı yayını

Adım 9: MediaLive Kanalını Durdurun

Canlı yayınınızın sonunda MediaLive kanalınızı durdurmayı unutmayın.

MediaLive kanalınızı durdurmak için:

  1. MediaLive konsolunu açın.
  2. Channels sayfasında durdurmak istediğiniz kanalı seçin.
  3. Stop‘u seçin.

Temizle

Gelecekteki olası ücretleri önlemek için Amazon S3 klasörü, MediaLive kanalı, MediaStore konteyneri ve CloudFront dağıtımı dahil olmak üzere bu blog gönderisini takip ederek oluşturulan kaynakları silin. MediaLive kanalını çalıştırmadan etkin tutmak, saatte boşta kalan kaynak için 0,01$ maliyeti ile sonuçlanır. Daha fazla bilgi için MediaLive fiyatlandırma sayfasına göz atın. Bu iş akışını AWS Ireland Bölgesi ve AWS Frankfurt Bölgesinde test ettiğimi lütfen unutmayın.

Sonuç

Bu blog yazısında önceden kaydedilmiş videolarınızı canlı yayınlamak için AWS Elemental MediaLive’ın nasıl kullanılacağını gösterdim. Giriş olarak önceden kaydedilmiş bir videoyu kullanarak canlı yayın iş akışı oluşturduk ve ardından web sitenize ve isteğe bağlı olarak Twitch gibi sosyal kanallara canlı yayın yapmayı gösterdim. Tüm iş akışını hızlı bir şekilde kurmak için MediaLive workflow wizard kullanın. Daha fazla bilgi için MediaLive workflow wizard‘a göz atın.

AWS, şirketlerin internet üzerinden canlı ve isteğe bağlı medyayı güvenilir bir şekilde sunmasına, para kazanmasına, desteklemelerine ve her yerde ekranlara benzersiz deneyimler getirmelerine yardımcı olmak için doğrudan tüketiciye (D2C) ve akış için en çok amaca yönelik hizmetler sunmaktadır. Daha fazla bilgi için https://aws.amazon.com/tr/media/direct-to-consumer-d2c-streaming/ adresini ziyaret edin.