Web Alıcısına Taşı

Bu kılavuzda, Yayın Alıcı v2 uygulamasının en son Web Alıcısı uygulamasına nasıl taşınacağı açıklanmaktadır.

Web Alıcısı v3 olarak da bilinen yeni Cast Uygulama Çerçevesi (CAF) SDK'sı, Alıcı v2 SDK'sının önemli bir yükseltmesidir. Web Alıcısı SDK'sı, medya Web Alıcısı uygulamaları geliştirmek için kolay ve basit bir SDK sağlar.

Web Alıcısı, yeni CAF gönderen API'larıyla daha tutarlı bir API sunar. Bir oynatıcı (MPL ve Shaka) ile tam entegrasyon sağlamanın yanı sıra Cast medya ve Google Asistan sesli komutlar için tam uygulama ve destek sunar. CAF SDK'sı ayrıca CSS kullanılarak kolayca biçimlendirilebilen varsayılan bir kullanıcı arayüzü ve kullanıcı arayüzü uygulamasını basitleştirmek için veri bağlama hizmeti sunar.

Neden taşınmalıdır?

Bir Alıcı v2 uygulamasını Web Alıcısı'na taşıyarak, oynatıcıyla ilgili birçok kodu ortadan kaldırabilirsiniz. Böylece, uygulamaya özgü iş mantığı yazmaya odaklanabilirsiniz.

CAF, MPL ve Shaka oynatıcılarını sorunsuz bir şekilde entegre ederek HTTP Canlı Yayını (TS ve CMAF), MPEG-DASH, Smooth Streaming ve Media Element kaynak mülkü (MP3, MP4, Icecast vb.) tarafından desteklenen türleri de dahil olmak üzere daha geniş bir içerik türünü destekler. Tam liste için Google Cast için Desteklenen Medya konusuna bakın. CAF şu anda kullanıcı tarafından sağlanan oynatıcıları desteklememektedir.

CAF'ye geçiş yaptığınızda, Google Asistan ile sesli kontrol desteği eklendi. CAF kullanılırken yeni Google Asistan sesli komutları otomatik olarak desteklenir.

"Kanalları dile göre değiştirme" ve "oynatma oranını değiştirme" gibi yeni medya komutlarını desteklemeye ek olarak CAF daha iyi sıralama, yerleşik reklam desteği ve daha iyi canlı destek sağlar.

Neler değişti?

Web Buyer API'si, Android ve iOS için CAF gönderenlerin uyguladığı kurallara uymaya çalışır ve v2'den oldukça farklıdır.

Web Alıcısı, açığa çıkan tüm API'ler için cast.receiver ad alanı yerine yeni bir ad alanı cast.framework kullanıyor. v2 tarafından kullanılan veri nesnelerinin çoğu CAF'de aynıdır ve cast.framework.messages ad alanı altında (çoğunlukla cast.receiver.media altında bulunurlar) açığa çıkar.

Aşağıdaki v2 hizmetleri, bunlara karşılık gelen CAF hizmetleri ile değiştirilmiştir:

  • CastReceiverManager sınıfının yerini CastReceiverContext kullanıyor. Bu da yayınlama oturumunu, gönderenleri, özel mesaj göndermeyi ve küresel sistem etkinliklerini yöneten bir tekil lisanstır. CastReceiverOptions bağlamsal bağlamda genel uygulama seçenekleri (sıra, alıcı sürümü, oynatma yapılandırması vb.) sunmak için kullanılabilir.
  • MediaManager sınıfının yerini CastReceiverContext tektonunun bir özelliği olan PlayerManager alıyor. Bu sınıf; medya oturumunu, medya isteklerini, Google Asistan sesli isteklerini (2. sürüm olarak CommandAndControlManager) yönetir ve medya etkinliklerini tetikler. Oynatıcılar için yapılandırma (MPL cinsinden cast.player.api.Host), dünya genelinde veya yükleme isteği başına sağlanabilen PlaybackConfig tarafından sağlanır.

PlayerManager, yeni alt yönetici sınıflarını da gösterir:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

// Set global options.
const options = new cast.framework.CastReceiverOptions();
options.versionCode = DEVELOPERS_APP_VERSION;

context.start(options);

Alıcı iş mantığı

İş mantığı eklemek için alıcı v2'nin gösterildiği etkinlik işleyicileri (CastReceiverManager.onReady veya MediaManager.onLoad gibi). CAF'de etkinlik işleyiciler, etkinlik dinleyicileri (CastReceiverContext.addEventListener) ve mesaj algılayıcıları (PlayerManager.setMessageInterceptor) tarafından değiştirilir. Web Alıcısı'nın bir etkinlik için birden fazla etkinlik dinleyicisi (dinleyici etkinliği etkilemez) ve ileti başına bir alıcı olabilir. Araya giren kişi isteği güncelleyebilir ya da yerine getirebilir (değiştirilen bir isteği, başarı mesajını veya hata mesajını döndürme) ve sözü veren eşzamansız bir işleyici olabilir.

Yükleme isteğine müdahale yapan kullanıcı, uygulamaya özel mantık eklemenin en yaygın yoludur. Yük gönderen, bir gönderenden gelen yükleme isteklerinde içerik kimliğini içerik URL'sine dönüştürebilir. Önceden yükleme veya ön önbellek için açık bir müdahale sağlayan bir veri sağlanmazsa yükleme önleyici, ön yükleme ve ön önbellek istekleri için de çağrılır.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    request => {
      // Resolve entity to content id
      if (request.media.entity && !request.media.contentId) {
        return getMediaByEntity(request.media.entity).then(
            media => {
              request.media.contentId = media.url;
              return request;
            });
      }
      return request;
    });

Ayrıca v2 özelleştirilmiş medya durumu işleyicisinin yerini medya durumu mesajı için bir mesaj alma aracı alır. Medya durumundaki medya URL'sini açığa çıkarmak istemeyen Web Alıcı uygulamaları, bir yükleme isteğinin medya URL'sini sağlayan bir URL çözümleyici (PlayerManager.setMediaUrlResolver) sağlayabilir. Bu URL, CAF tarafından dahili olarak kullanılır ve medya durumunda sağlanmaz.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.MEDIA_STATUS,
    status => {
      // Disable seek.
      status.supportedMediaCommands &=
          ~cast.framework.messages.Command.SEEK
      return status;
    });

Etkinlikler

Web Alıcısı, hem CastReceiverContext hem de PlayerManager kaynaklı birçok etkinlik sağlar. Web Alıcısı uygulamaları herhangi bir etkinlikte birden çok dinleyiciye sahip olabilir. Ayrıca, birden fazla etkinlik için bir dinleyici sağlayabilir. (Bazı etkinlik grupları için cast.framework.events.category bölümüne bakın.)

Etkinlikler tüm kullanıcı isteklerini, oynatma ilerleme durumunu, oynatıcı işlemeyi ve alt düzey medya öğesi etkinliklerini kapsar (CAF, medya öğesinin kendisini açığa çıkarmaz).

Web Alıcısı uygulaması, işlem gerçekleştirmek için (örneğin, yükleme tamamlandığında metin parçaları tanımı ekleme) veya analiz için etkinlik işleyiciler ekleyebilir.

// Log all media commands
playerManager.addEventListener(
    cast.framework.events.category.REQUEST,
    event => logEvent(event.type));

Özel mesaj otobüsü

CAF, API'de mesaj veri yolunu kullanıma sunmaz. Bunun yerine, belirli bir ad alanı için mesaj işleyici eklemek üzere CastReceiverContext.addCustomMessageListener, ad alanı başına mesaj göndermek için CastReceiverContext.sendCustomMessage sağlar. Web Alıcısı'nı başlatmadan önce (yani, CastReceiverContext.start çağırmadan önce) tüm ad alanlarının bildirilmesi gerekir. Ad alanları, bunlara bir mesaj dinleyici ekleyerek belirtilebilir veya CastReceiverOptions.customNamespaces içinde başlangıç seçeneği olarak sunulabilir.

const options = new cast.framework.CastReceiverOptions();
options.customNamespaces = {
    CUSTOM_NS: cast.framework.system.MessageType.JSON
};
context.start(options);

context.sendCustomMessage(CUSTOM_NS, {
  type: 'status'
  message: 'Playing'
});

Varsayılan kullanıcı arayüzü

CAF, oynatma ilerleme çubuğu ve medya meta verilerini gerektiği şekilde görüntüleyen varsayılan bir Web Alıcı kullanıcı arayüzü sağlar. Varsayılan kullanıcı arayüzü, CSS benzeri bir stil ile ayarlanabilen özel bir öğe (<cast-media-player>) olarak sağlanır.

<style>
   cast-media-player { --splash-image: url("splash.png"); }
</style>
<cast-media-player></cast-media-player>

Web Alıcısı uygulaması, daha fazla özelleştirme için kendi kullanıcı arayüzünü uygulayabilir. Web Alıcısı, kullanıcı arayüzü nesnesini Web Alıcısı oynatma durumuna bağlamaya yardımcı olmak için cast.framework.ui.PlayerDataBinder sınıfını sağlar.