Esegui la migrazione al ricevitore web

Questa guida spiega come eseguire la migrazione di un'app Cast Ricevitore v2 alla versione più recente del web App del ricevitore.

Il nuovo SDK Cast Application Framework (CAF), noto anche come Web receiver v3, è un upgrade principale dall'SDK ricevitore v2. L'SDK WebRicevir fornisce un SDK semplice e semplificato per lo sviluppo di applicazioni Web receiver multimediali.

Il ricevitore web fornisce un'API più coerente con il nuovo mittente CAF su quelle di livello inferiore. Offre l'integrazione completa di un player (MPL e Shaka) e implementazione e supporto per la trasmissione di contenuti multimediali e l'Assistente Google comandi vocali. L'SDK CAF fornisce inoltre un'interfaccia utente predefinita con stili che possono essere facilmente definiti tramite CSS e un servizio di associazione dei dati per semplificare l'implementazione dell'interfaccia utente.

Perché eseguire la migrazione?

Eseguendo la migrazione di un'applicazione receiver v2 al ricevitore web, gran parte del codice con il player può essere eliminato, così puoi concentrarti sulla scrittura una logica di business specifica per l'applicazione.

CAF integra perfettamente i lettori MPL e Shaka per supportare una gamma più ampia di tipi di contenuti: HTTP Live Streaming (TS e CMAF), MPEG-DASH, isci Flussi di dati e tipi supportati dalla proprietà sorgente dell'elemento multimediale (MP3, MP4, Icecast ecc...). Per un elenco completo, consulta la sezione Contenuti multimediali supportati per Google Cast. Al momento CAF non supporta un player fornito dall'utente.

La migrazione al CAF aggiungerà il supporto per il controllo vocale con l'Assistente Google. Ogni nuovo comando vocale dell'Assistente Google sarà automaticamente supportato quando utilizzando CAF.

Oltre a supportare nuovi comandi multimediali, come "cambia tracce per lingua" e "cambia velocità di riproduzione", il CAF fornisce inoltre una migliore accodamento, annunci integrati e una migliore assistenza in tempo reale.

Che cosa è cambiato?

L'API Web receiver cerca di seguire le convenzioni introdotte Mittenti CAF per Android e iOS ed è molto diverso dalla versione 2.

Il ricevitore web utilizza un nuovo spazio dei nomi cast.framework invece dello spazio dei nomi cast.receiver per tutte le API esposte. Molti di questi gli oggetti dati utilizzati dalla versione 2 sono gli stessi nel CAF e sono esposti il cast.framework.messages (erano per lo più sotto cast.receiver.media).

I seguenti servizi v2 sono sostituiti dai servizi CAF corrispondenti:

  • La classe CastReceiverManager è stata sostituita da CastReceiverContext ossia un singleton che gestisce la sessione di trasmissione, i mittenti, messaggi ed eventi globali di sistema. La CastReceiverOptions può essere utilizzato per fornire opzioni globali per le applicazioni (come coda, versione, configurazione della riproduzione e così via) al contesto.
  • La classe MediaManager è stata sostituita da PlayerManager che è una proprietà CastReceiverContext singleton e gestisce la sessione multimediale, le richieste multimediali, Richieste vocali dell'assistente (CommandAndControlManager in v2), e attiva gli eventi multimediali. Configurazione per i giocatori (cast.player.api.Host in MPL) è fornito da PlaybackConfig, che possono essere forniti a livello globale o per richiesta di carico.

PlayerManager mostra anche le nuove classi per l'amministratore secondario:

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

Logica di business del destinatario

Gestori di eventi esposti del ricevitore v2 (come CastReceiverManager.onReady o MediaManager.onLoad) per aggiungere la logica di business. Nel CAF i gestori di eventi sostituiti da listener di eventi (CastReceiverContext.addEventListener) e intercettatori di messaggi (PlayerManager.setMessageInterceptor). Il ricevitore web può avere più listener di eventi per un evento (il listener non influisce sull'evento) e un intercettore per messaggio. L'intercettore aggiornare la richiesta o gestirla (restituire una richiesta modificata, o un messaggio di errore) e può essere un gestore asincrono che restituisce una promessa.

L'intercettatore della richiesta di carico è il punto più comune da aggiungere una logica specifica per l'applicazione. Per le richieste di caricamento da parte di un mittente, l'intercettatore può convertire l'ID contenuti in URL dei contenuti. L'intercettatore del carico vengono anche chiamate richieste di precaricamento e di preregistrazione se non esistono intercettori espliciti è stato fornito per precaricamento o preregistrazione.

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

Anche il gestore dello stato dei contenuti multimediali personalizzato v2 viene sostituito con un messaggio. per il messaggio di stato dei contenuti multimediali. Le app di ricezione web che non vogliono esporre l'URL multimediale nello stato dei contenuti multimediali può fornire un resolver URL (PlayerManager.setMediaUrlResolver), che fornisce l'URL multimediale per una richiesta di caricamento. Questo URL è utilizzato dal CAF internamente e non è indicato nello stato dei media.

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

Eventi

WebRicevitore offre una vasta gamma di eventi sia da CastReceiverContext e PlayerManager. Le app Web Ricevitore possono avere più listener per qualsiasi evento e può anche fornire un listener per più eventi. (Vedi cast.framework.events.category per alcuni gruppi di eventi).

Gli eventi riguardano qualsiasi richiesta dell'utente, avanzamento della riproduzione, elaborazione del player e qualsiasi evento elemento multimediale di basso livello (CAF non espone l'elemento multimediale stesso).

L'app WebRicevitore può aggiungere listener di eventi su cui agire (ad esempio, aggiungere testo monitora la definizione al termine del caricamento) o per l'analisi.

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

Bus di messaggi personalizzato

Il CAF non espone il bus di messaggi nell'API, ma fornisce CastReceiverContext.addCustomMessageListener aggiungere un listener di messaggi per uno spazio dei nomi specifico (solo uno per spazio dei nomi) e CastReceiverContext.sendCustomMessage per inviare un messaggio in uno spazio dei nomi. Tutti gli spazi dei nomi devono essere dichiarati prima avviando il ricevitore web (vale a dire, prima di chiamare CastReceiverContext.start). Gli spazi dei nomi possono essere dichiarati di aggiungere un listener di messaggi o che possono essere forniti come opzione di inizio 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'
});

UI predefinita

Il CAF fornisce un'interfaccia utente di ricezione web predefinita che mostra una barra di avanzamento della riproduzione e metadati multimediali necessari. L'interfaccia utente predefinita viene fornita come elemento personalizzato (<cast-media-player>) a cui è possibile applicare stili in stile CSS.

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

Per una maggiore personalizzazione, un'app Web Ricevitore può implementare la propria UI. La Web Ricevitore fornisce cast.framework.ui.PlayerDataBinder per collegare un oggetto UI allo stato di riproduzione del ricevitore web.