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:
- Web Alıcısı uygulamanızda
LOAD
mesajı müdahalecini kullanın. (önerilen) - 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 |
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
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
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:
- Yayın Türünü Ayarlama: Canlı yayını canlı yayın olarak işaretleyin.
- Program Rehberi Verilerini Ekle -
MediaMetadata
nesnesinde bir başlangıç zamanı ve süre ayarlayın. - 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.