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 przezCastReceiverContext
. 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 przezPlayerManager
. , 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 przezPlaybackConfig
, które można udostępniać globalnie lub dla każdego żądania wczytywania.
PlayerManager
ujawnia też nowe klasy podrzędnego konta menedżera:
TextTracksManager
– zarządzanie ścieżkami tekstowymi multimediów.AudioTracksManager
– zarządzanie ścieżkami audio.QueueManager
– zarządzanie kolejką.BreakManager
– zarządzanie reklamami.
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.