Migracja do odbiornika internetowego

Z tego przewodnika dowiesz się, jak przenieść aplikację odbiornika Cast w wersji 2 do najnowszej wersji internetowej Aplikacja odbiornika.

Nowy pakiet SDK Cast Application Framework (CAF), nazywany też Web Receiver v3, jest istotną aktualizację z pakietu SDK Receiver v2. SDK odbiornika internetowego zapewnia łatwy, uproszczony pakiet SDK do tworzenia aplikacji odbiornika internetowego.

Web Receiver udostępnia interfejs API, który jest bardziej spójny z nowym wysyłającym CAF API. Zapewnia pełną integrację odtwarzacza (MPL i Shaka) oraz implementacja i obsługa multimediów Cast i Asystenta Google. poleceń głosowych. Pakiet SDK CAF udostępnia również domyślny interfejs, którego styl można łatwo zmienić. za pomocą CSS i usługi wiązania danych, aby uprościć implementację interfejsu użytkownika.

Dlaczego warto przeprowadzić migrację?

Po przeniesieniu aplikacji Receiver w wersji 2 do odbiornika internetowego dużą część kodu można go wyeliminować, dzięki czemu możesz skupić się na pisaniu logikę biznesową zależną od aplikacji.

CAF bezproblemowo integruje odtwarzacze MPL i Shaka, aby obsługiwać szerszą gamę typy treści, w tym – transmisja na żywo przez HTTP (TS i CMAF), MPEG-DASH, Smooth. Strumieniowanie i typy obsługiwane przez właściwość źródłową elementu Media Element (MP3, MP4, Icecast itp.). Pełną listę znajdziesz w artykule Multimedia obsługiwane w Google Cast. Obecnie CAF nie obsługuje odtwarzacza dostarczonego przez użytkownika.

Przejście na CAF spowoduje dodanie obsługi sterowania głosem za pomocą Asystenta Google. Wszystkie nowe polecenia głosowe Asystenta Google będą automatycznie obsługiwane, gdy przy użyciu CAF.

Obsługa nowych poleceń multimedialnych, takich jak „zmień ścieżki według języka”. i „zmianę szybkości odtwarzania” – CAF zapewnia również lepsze kolejki oraz wbudowane reklamy. i lepiej korzystać z pomocy na żywo.

Co się zmieniło?

Interfejs Web Receiver API stara się przestrzegać konwencji wprowadzonych przez Nadawcy CAF w przypadku Android oraz iOS, i różni się od wersji 2.

Odbiorca internetowy używa nowej przestrzeni nazw cast.framework zamiast przestrzeni nazw cast.receiver dla wszystkich ujawnionych interfejsów API. Wiele spośród obiekty danych używane przez wersję 2 są takie same w CAF i są udostępniane w cast.framework.messages przestrzeni nazw (przeważnie mieściły się w zakresie cast.receiver.media).

Te usługi w wersji 2 są zastąpione odpowiednimi usługami CAF:

  • Klasa CastReceiverManager została zastąpiona przez CastReceiverContext. Jest to pojedynczy element, który zarządza sesją przesyłania, nadawcami, wysyłaniem własnych wiadomości wiadomości i globalne zdarzenia systemowe. CastReceiverOptions może być używany do udostępniania globalnych opcji aplikacji (takich jak kolejka, odbiorca wersji, konfiguracji odtwarzania itp.) do kontekstu.
  • Klasa MediaManager została zastąpiona przez PlayerManager. , która jest właściwością CastReceiverContext do zarządzania sesją mediów, żądaniami mediów, Google Prośby głosowe do Asystenta (CommandAndControlManager w wersji 2), i generuje wydarzenia multimedialne. Konfiguracja dla graczy (cast.player.api.Host w MPL) jest dostarczany przez PlaybackConfig, które można udostępniać globalnie lub dla każdego żądania wczytywania.

PlayerManager ujawnia też nowe klasy podrzędnego konta menedżera:

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);

Logika biznesowa odbiorcy

Moduły obsługi ujawnionych zdarzeń odbiornika w wersji 2 (np. CastReceiverManager.onReady lub MediaManager.onLoad), aby dodać logikę biznesową. W CAF moduły obsługi zdarzeń są zastąpione przez detektory zdarzeń (CastReceiverContext.addEventListener) i elementy do przechwytywania wiadomości. (PlayerManager.setMessageInterceptor). Odbiornik internetowy może mieć wiele detektorów zdarzeń zdarzenia nie ma wpływu na zdarzenie) oraz jeden przechwytujący na wiadomość. Urządzenie przechwytujące mogą aktualizować żądanie lub je obsługiwać (zwraca zmodyfikowane żądanie, lub komunikat o błędzie) i może być asynchronicznym modułem obsługi, który zwraca obietnicę.

Najczęściej logikę specyficzną dla danej aplikacji. W przypadku żądań wczytywania od nadawcy może przekonwertować identyfikator treści na adres URL treści. Moduł przechwytujący obciążenie to jest również wywoływana dla żądań wstępnego wczytywania i pamięci podręcznej, jeśli brak jawnego elementu przechwytującego dla wstępnego wczytywania lub wstępnego wczytywania.

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;
    });

Niestandardowy moduł obsługi stanu multimediów w wersji 2 też zostaje zastąpiony komunikatem który przechwytuje komunikat o stanie multimediów. Aplikacje odbiornika internetowego, które nie chcą ujawnianie adresu URL multimediów w stanie multimediów może zapewnić narzędzie do rozpoznawania adresów URL (PlayerManager.setMediaUrlResolver), , który zawiera adres URL multimediów dla żądania wczytywania. Ten adres URL jest używany przez CAF wewnętrznie i nie jest podana w stanie multimediów.

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

Wydarzenia

Odbiornik internetowy udostępnia obszerny zestaw zdarzeń CastReceiverContext oraz PlayerManager Aplikacje odbiornika internetowego mogą mieć wielu detektorów dla każdego zdarzenia. może też zapewnić jeden detektor wielu zdarzeń. (Zobacz cast.framework.events.category dla pewnych grup zdarzeń).

Obejmują one żądania użytkownika, postęp odtwarzania, przetwarzanie niskopoziomowego zdarzenia elementu multimedialnego (CAF nie ujawnia samego elementu multimedialnego).

Aplikacja Web Receiver może dodawać detektory zdarzeń, na podstawie których można wykonywać działania (np. dodawać tekst śledzi definicję po zakończeniu wczytywania) lub do celów analitycznych.

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

Magistrala komunikatów niestandardowych

CAF nie ujawnia magistrali komunikatów w interfejsie API, tylko udostępnia CastReceiverContext.addCustomMessageListener dodaj odbiornik wiadomości dla określonej przestrzeni nazw (tylko jeden na każdą przestrzeń nazw) oraz CastReceiverContext.sendCustomMessage wysyłania wiadomości do przestrzeni nazw. Wszystkie przestrzenie nazw muszą zostać zadeklarowane przed uruchamiając odbiornik internetowy (czyli przed wywołaniem funkcji CastReceiverContext.start). Przestrzenie nazw mogą być zadeklarowane przez przez dodanie do nich detektora wiadomości lub można ją udostępnić jako opcję rozpoczęcia w CastReceiverOptions.customNamespaces

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'
});

Domyślny interfejs

CAF udostępnia domyślny interfejs odbiornika internetowego, w którym wyświetla się pasek postępu odtwarzania, metadanych multimediów. Domyślny interfejs użytkownika jest udostępniany jako element niestandardowy. (<cast-media-player>) które można nadać stylom podobny do CSS.

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

Aby uzyskać większe możliwości dostosowania, aplikacja Web Receiver może mieć własny interfejs. Odbiornik internetowy udostępnia cast.framework.ui.PlayerDataBinder która pomaga powiązać obiekt interfejsu ze stanem odtwarzania na odbiorniku internetowym.