Canlı Yayın

Cast SDK'sı, canlı içeriği desteklemek için yerleşik API'ler içerir. Bu, esnek ve kullanıma hazır bir kullanıcı arayüzünün yanı sıra geliştiricilerin sadece birkaç satır kodla zengin canlı deneyimler oluşturmasını sağlayan API'lerle birlikte sunulur. Live API; başlangıç ve bitiş zamanlarını, program meta verilerini, DVR kontrollerini ve aranabilir pencereleri görüntülemeyi destekler.

Bu kılavuzda, her bir senaryonun nasıl göründüğünü gösteren ekran görüntülerinin yanı sıra, canlı yayın senaryolarını yapılandırmak için kullanabileceğiniz kod ve meta veri örnekleri de dahil olmak üzere canlı API'lara canlı yayın yapılandırmayı öğreneceksiniz.

Ön koşullar

Bu kılavuzu incelemeden önce Web Alıcısı'nı uygulama konusunda temel bilgilere sahip olmanız gerekir. Ayrıca, kod örneklerini çalıştırmak için yayınlanması için desteklenen medya türlerinden birine uyan bir canlı yayına erişmeniz gerekir. Canlı özelliği genel olarak desteklenen medya için tipik canlı yayın yapılandırmalarını destekler.

Rehberde aşağıdaki terimler kullanılır:

  • Aranabilir Pencere - Kullanıcıların arayabileceği canlı yayının aralığı.
  • Live Edge - Canlı yayının oyuncuya sunulan en yeni bölümü.
  • Play Head: Mevcut oynatma konumu için kullanıcı arayüzü zaman damgası.

Canlı yayın yapma

Web Alıcı SDK'sını içerik için Live API'yi kullanacak şekilde yapılandırmanın iki yolu vardır:

  1. Web Alıcısı uygulamanızda LOAD mesajı müdahalecini kullanın. (önerilen)
  2. gönderen taraf veya alıcı tarafında oluşturulan yükleme isteği kullanılır.

Araya giren kişi, bir yükleme isteğiyle ilgili tüm önemli meta verileri içeren bir LoadRequestData nesnesi sağlar. Bir canlı yayına ilişkin yükleme isteğini belirtmek için mediaInformation nesnesindeki streamType öğesini StreamType.LIVE olarak ayarlamanız yeterlidir. İçerik LIVE olduğunda oynatıcı örneklerinin hesaplanmasından sorumlu olduğu için MediaInformation.duration -1 olmalıdır.

/*
* This interceptor is called before your content is loaded by a Cast device
*/
playerManager.setMessageInterceptor(
   cast.framework.messages.MessageType.LOAD,
   request => { /* cast.framework.messages.LoadRequestData */
       request.media.streamType = cast.framework.messages.StreamType.LIVE;
   return request;
});

Program rehberi verileri ekleme

Canlı yayınlar, özellikle de TV kanalı gibi uzun süren yayınlar, canlı yayındaki mevcut oynatma konumuna göre ekran rehberi/programlama meta verilerini gösterebilir. Daha iyi bir son kullanıcı deneyimi için içerik sağlayıcıların, Web Alıcı uygulamalarına programlama meta verilerini eklemeleri önemle tavsiye edilir.

Bir önceki örnekte akışın canlı yayın olduğunu belirttiğimiz gibi, akış için ilk kılavuz verilerini de YÜKLE mesaj işleyicisinde yapılandırabilirsiniz. Canlı yayındaki tek tek bölümler veya programlar MediaMetadata nesne olarak temsil edilir. Daha sonra bu nesneler sırada saklanır. Farklı program türleri için farklı bir MediaMetadata sınıfı vardır. Örneğin: TvShowMediaMetadata, MovieMediaMetadata, MusicTrackMediaMetadata vb.

Aşağıdaki kod snippet'inde, sectionStartAbsoluteTime özelliğini içeren UNIX Zaman Damgası ile her bir programın başlangıç zamanını belirtmek için MediaMetadata nesnesini kullanırız. Bir programın süresi, saniye cinsinden gösterilir.

// The metadata for a single TV show
const currentShow = new cast.framework.messages.TvShowMediaMetadata();
currentShow.episode = 15;
currentShow.seriesTitle = 'The Odyssey';
currentShow.title = 'Scylla and Charybdis';
currentShow.sectionStartAbsoluteTime = toUnixTimestamp('9:00 PM');
currentShow.sectionDuration = HOUR_IN_SECONDS;

const previousShow = new ...;
const nextShow = new ...;

const containerMetadata = new cast.framework.messages.ContainerMetadata();
containerMetadata.title = 'My TV Channel';
containerMetadata.sections = [previousShow, currentShow, nextShow];

playerManager.getQueueManager().setContainerMetadata(containerMetadata);

Canlı arama alanı

Cast SDK'sında, Genişletilmiş Denetleyici'yi veya dokunmatik özellikli cihazlarda dokunma kontrollerini kullanarak kullanıcının akış içinde video yer imlecini hareket ettirebilmesini sağlayan kullanıcı arayüzü öğeleri ve kontroller yer alır.

LiveSeekableRange, kullanıcının akışta arayabileceği zaman aralığını temsil eder. Web Alıcısında, aranabilir bir aralıkla ilgili bilgilere LiveSeekableRange nesnesi döndüren PlayerManager.getLiveSeekableRange() üzerinden erişebilirsiniz. Nesne üzerindeki dikkat edilmesi gereken ana özellikler şunlardır:

  • start: Akışın saniye cinsinden başlangıcına oranla aralığın başlangıç zamanı (saniye cinsinden).
  • end: Mevcut segmentlere göre oynatıcının akışın başlangıcına oranla arayabileceği maksimum süreyi (saniye cinsinden) belirtir.
  • isMovingWindow, aranabilir aralığın akışla taşınıp taşınmadığını (yani eski segmentler manifest'ten kaldırılır) gösteren bir boole değeridir. Bu değer tüm canlı yayınlar için true olmalıdır.
  • isLiveDone: Bu ifade, canlı yayının tamamlanıp tamamlanmadığını gösteren, yani yeni segment oluşturulmadığını gösteren bir boole değeridir.

Aranabilir aralığın boyutu, start ile end arasındaki süre olarak gösterilir ve akıştaki mevcut segment sayısıyla belirlenir ve akışla birlikte taşınır. Örneğin, akışın başında aranabilir aralık {start:0, end: 600, isMovingWindow: false, isLiveDone: false} ise akış başladıktan on saniye sonra {start: 10, end: 610, isMovingWindow: true, isLiveDone: false} olabilir. Aranabilir aralıktaki başlangıç ve bitiş zamanlarının, yeni segment oluşturmak için gereken süreye göre güncellendiği unutulmamalıdır. Bu nedenle, akışınız için bir segmentin tipik uzunluğu 10 saniyeyse başlangıç ve bitiş zamanları da yaklaşık 10 saniyede bir güncellenir.

Aramayı devre dışı bırak

Akış içinde arama özelliğini devre dışı bırakmak için Web Alıcısı'nda desteklenen medya komutlarından arama işlevini kaldırmanız gerekir:

// disable seeking in the LOAD messageInterceptor
playerManager.removeSupportedMediaCommands(cast.framework.messages.Command.SEEK, true);

Gönderen uygulamalara yönelik SEEK sinyalleri için desteklenen medya komutunun kaldırılması ve aramayı devre dışı bırakmak için ekranlara dokunmak, ancak "Ok google, geri 30 saniye ileri git" gibi sesli komutları devre dışı bırakmaz. Sesli sesli komutların devre dışı bırakılmasıyla ilgili ayrıntılar için sesli desteklenen medya komutları kılavuzuna bakın.

Canlı çerçeve etkinlikleri

LIVE_ENDED ve LIVE_IS_MOVING_WINDOW_CHANGED olmak üzere iki etkinlik Live API'ye dahil edilir. Her iki etkinlik de canlı aranabilir ara aralığı içeren bir LiveStatusEvent nesnesi iletilir.

Etkinlik Açıklama
LIVE_ENDED Canlı yayın sona erdiğinde tetiklenir. Bu noktada LiveSeekableRange'daki bitiş değeri artık güncellenmez. Kullanıcılar canlı aranabilir aralıktaki içerikleri görüntülemeye devam edebilir.
LIVE_IS_MOVING_WINDOW_CHANGED Canlı yayının aranabilir aralığı sabit pencereden hareketli pencereye veya tersi yönde değiştirildiğinde tetiklenir. Canlı yayında bu durum, oynatıcı manifest dosyasının önceki segmentleri kaldırdığını tespit ettiğinde olur.

Canlı yayın senaryoları

Canlı yayın için sekiz olası senaryo vardır. Bunların her biri üç temel ayar kullanılarak yapılandırılır:

  • Canlı yayının başlangıç zamanı var
  • Canlı yayının bitiş zamanı var
  • Kullanıcıların canlı yayının aranabilir aralığı içinde arama yapmasına izin verilir

Bu değerleri nasıl yapılandıracağınızı öğrenmek için Program Rehberi Verilerini Ekleme bölümünü inceleyin.

Aşağıda, Live API'nin desteklediği senaryoların açıklamaları ve ekran görüntüleri verilmiştir. T1 ve T2 değişkenleri, sırasıyla kullanıcı arayüzünün sol ve sağ tarafındaki zaman damgasını temsil etmek için kullanılır.

Başlangıç zamanı Bitiş zamanı Aranabilir T1 T2
1. Senaryo Hayır Hayır Hayır Oyun Kafası Gösterilmiyor
2. Senaryo No No Yes Oyun Başlığı Gösterilmiyor
3. Senaryo No Yes No Oyun Başlığı Gösterilmiyor
4. Senaryo No Yes Yes Oyun Başlığı Gösterilmiyor
5. Senaryo Yes No No Başlangıç Zaman Çizelgesi Oyun Başlığı
6. Senaryo Yes No Yes Başlangıç Zaman Çizelgesi Oyun Başlığı
7. Senaryo Evet Evet Hayır Başlangıç Zamanı Göster Bitiş Zamanını Göster
8. Senaryo Evet Evet Evet Başlangıç Zamanı Göster Bitiş Zamanını Göster

Birinci senaryo

Başlangıç zamanı Bitiş zamanı Aranabilir T1 T2
Hayır Hayır Hayır Baş çal Gösterilmiyor

Birinci senaryoda başlangıç veya bitiş zamanı yok ve kullanıcılar akış içinde arama yapamaz. Kullanıcı yayını durdurduğunda yayının duraklatıldığı konum yerine canlı kenardan oynatma devam ettirilir.

Yedinci senaryo

Saat 7. Senaryo için Chromecast'in Canlı Kullanıcı Arayüzünü gösteren TV Senaryo 7 için Canlı Kullanıcı Arayüzünü Saat Saati ile gösteren bir cep telefonu

Başlangıç zamanı Bitiş zamanı Aranabilir T1 T2
Evet Evet Hayır Oyun Kafası Program Süresi

7. senaryoda başlangıç ve bitiş zamanı var ancak aranamaz. Kullanıcı arayüzündeki T1 ve T2 iki zaman damgası, sırasıyla mevcut video oynatma süresini ve toplam program süresini temsil eder. Bir kullanıcı oynatmayı duraklatır/devam ettirirse akışın canlı kenarında devam ettirilir. Yukarıdaki örnekte, arama çubuğunun kırmızı bölümü, kullanıcının izlemeye başladığı andan itibaren akışın kısmını temsil eder.

Sekizinci senaryo

8. Senaryo'da Chromecast'in Canlı Kullanıcı Arayüzünü gösteren bir TV ve Saat 8. Senaryoda Canlı Saat'i gösteren bir cep telefonu

Başlangıç zamanı Bitiş zamanı Aranabilir T1 T2
Evet Evet Evet Oyun Kafası Program Süresi

Yedinci senaryoda başlangıç zamanı, bitiş zamanı ve ulaşılabilir bir senaryo var. Kullanıcı arayüzündeki T1 ve T2 iki zaman damgası, sırasıyla mevcut video oynatma süresini ve toplam program süresini temsil eder. Bir kullanıcı oynatmayı duraklatır veya devam ettirirse akış, aranabilir pencere içindeyse duraklatıldığında devam ettirilir. Arama çubuğunda kırmızı renkte bulunan alan, kullanıcının geri dönebileceği yeri ve beyaz renkli alanı, gidebileceği yeri temsil eder.

Senaryo yapılandırma

Bir akışı belirli bir Canlı Senaryo olarak yapılandırma işlemi üç bölümden oluşur:

  1. Yayın Türünü Ayarlama: Canlı yayını canlı yayın olarak işaretleyin.
  2. Program Rehberi Verilerini Ekle - MediaMetadata nesnesinde bir başlangıç zamanı ve süre ayarlayın.
  3. Arama İşlevini Yapılandır - Aramayı etkinleştirin veya devre dışı bırakın.

Oynatma davranışı

Duraklatma sırasında kullanıcı arayüzünde oynatma meta verileri güncellenmeye devam eder (buna oynatma başlığı ve canlı kenar zamanları da dahildir). Canlı yayını devam ettirdiğinizde yayın yapılandırmasına bağlı olarak değişen birkaç davranış dikkate alınır.

Aranabilir akışlar

Aranabilir akış devam ettirildiğinde:

  • Canlı uç, canlı konuma güncellenmelidir ve aranabilir aralık buna göre ayarlanacaktır.
  • Video yer imleci mevcut programın atlaması durumunda ileri geri sarma çubuğunu yeni programın meta verileri (varsa, başlangıç zamanı ve bitiş zamanı dahil) ile günceller.
  • Aranabilir aralık "X" değerine sahipse aranabilir aralık, en fazla "X" uzunluğuna veya dizinin başına kadar (hangisi daha küçükse) kadar uzatılır.
  • Kullanıcı, geçerli zamanın artık aranabilir pencerede olmaması için yeterince uzun süre duraklatıldıysa akış, aranabilir pencerenin en erken noktasında (en solda) devam eder.

Duraklatmayı kaldırdıktan sonra canlı uçta oynatmayı devam ettirmek için LiveSeekableRange.end bölümüne bakın.

let playerManager = cast.framework.CastReceiverContext.getInstance().getPlayerManager();
// Intercept the message to PLAY
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.PLAY, (requestData) => {
  ...
  if (playerManager.getLiveSeekableRange()) {
    // Resume playback at the live edge
    playerManager.seek(playerManager.getLiveSeekableRange().end);
  } else {
    return requestData;
  }
  ...
});

Seçilemez akışlar

Aramaya uygun olmayan bir yayının devam ettirilmesinin ardından:

  • Bu durumda, canlı yayında oynatma devam eder.
  • Canlı gösteri geçerli programı atlarsa ileri geri çubuğu yeni programın meta verileriyle (varsa başlangıç zamanı ve bitiş zamanı dahil) güncellenmelidir.

API yüzeyi değişiklikleri ve canlı kullanıcı arayüzü özelleştirme

Cast SDK'sı, kullanıma hazır kullanıcı arayüzü yerine özel kullanıcı arayüzleri oluşturma konusunda yerleşik desteğe sahiptir. Ancak arayüzü özelleştirirken Yayın Kullanıcı Deneyimi Tasarımı Kontrol Listesi'ne uymanız önemlidir.

Web Alıcısı

PlayerData, Web Alıcısı'nda geliştiricilerin canlı yayınlar için özel arayüzlerini genişletmelerini sağlamak amacıyla aşağıdaki alanları içerir:

  • isLive: VOD yerine mevcut yayının canlı yayın olup olmadığını belirten bir işaret.
  • liveSeekableRange - DVR penceresinin sınırlandırıldığı ekranda gösterilecek aranabilen aralık.
  • mediaStartAbsoluteTime - Bölümün mutlak zamanda başladığı zaman (UNIX Epoch).
  • sectionStartTimeInMedia - medya başlangıç zamanına göre saniye cinsinden bölüm başlangıç zamanı.
  • sectionduration - bölüm süresi (saniye cinsinden).

Ayrıca, kullanıcı arayüzünü özelleştirirken canlı iki etkinliği dikkate aldığınızdan emin olun.

Android SDK

Canlı işlevin bir parçası olarak Android Seekbar Widget'ının UIMediaController içinde kullanımı kullanımdan kaldırıldı. Bunun yerine CastSeekBar politikasını kullanın.