Live streaming

L'SDK Cast include API integrate per il supporto dei contenuti live. È incluso un un'interfaccia utente pronta all'uso flessibile, abbinata ad API che consentono agli sviluppatori di creare esperienze dal vivo con poche righe di codice. L'API Live supporta la visualizzazione ore di inizio e fine, metadati del programma, controlli DVR e finestre cercabili.

Questa guida illustra come configurare uno stream per le API Live, tra cui: esempi di codice e metadati per la configurazione degli scenari dal vivo principali, oltre a screenshot che mostrano ogni scenario.

Prerequisiti

Familiarità con le nozioni di base dell'implementazione Prima di esaminare questo messaggio, è necessario Web receiver (Ricevitore web) guida. Inoltre, per eseguire gli esempi di codice devi accedere a un cluster che sia conforme a uno dei tipi di contenuti multimediali supportati per la trasmissione. In generale, la funzionalità Live supporta le configurazioni di live streaming tipiche contenuti multimediali supportati.

Nella guida vengono utilizzati i seguenti termini:

  • Finestra consultabile: l'intervallo di un live streaming all'interno del quale gli utenti possono eseguire ricerche.
  • Live Edge: la parte più recente di un live streaming a disposizione del giocatore.
  • Play Head: un timestamp dell'interfaccia utente relativo alla posizione di riproduzione corrente.

Trasmettere un live streaming

Esistono due modi per configurare l'SDK Web Ricevitore in modo che utilizzi l'API Live per contenuti:

  1. utilizzando l'intercettatore di messaggi LOAD nella tua applicazione Web receiver. (consigliato)
  2. utilizzando una richiesta di caricamento generata lato mittente o lato destinatario.

L'intercettore fornisce un LoadRequestData che contiene tutti i metadati importanti relativi a una richiesta di caricamento. A indica che una richiesta di caricamento riguarda un live streaming, imposta streamType il mediaInformation oggetto StreamType.LIVE MediaInformation.duration deve essere -1 come le istanze del player responsabile del calcolo quando il contenuto è LIVE.

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

Aggiunta dei dati della guida ai programmi

I live streaming, in particolare quelli di lunga durata come i canali TV, possono mostra la guida sullo schermo/i metadati di programmazione in base alla riproduzione corrente posizione in un live streaming. Consigliamo vivamente ai fornitori di contenuti di includere di programmazione dei metadati nelle proprie applicazioni Web Ricevitore per un utente finale migliore un'esperienza senza intervento manuale.

Puoi configurare i dati di guida iniziali per uno stream nel messaggio LOAD l'intercettore, esattamente come abbiamo indicato che si tratta di un live streaming del dell'esempio precedente. Singoli programmi o sezioni nel live streaming vengono rappresentato come MediaMetadata che vengono poi archiviati in un coda. Esiste una classe MediaMetadata diversa per diversi tipi di programmi, ad esempio TvShowMediaMetadata, MovieMediaMetadata, MusicTrackMediaMetadata, ecc.

Nel seguente snippet di codice utilizziamo l'oggetto MediaMetadata per specificare l'ora di inizio di ogni programma con Timestamp UNIX con il carattere sectionStartAbsoluteTime proprietà. La durata di un programma è rappresentata in secondi.

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

Raggio ricercabile live

L'SDK Cast include elementi UI e controlli che consentono all'utente di spostare la propria la testina di riproduzione dello stream utilizzando Controller espanso o controlli touch su dispositivi compatibili con il tocco.

La LiveSeekableRange rappresenta l'intervallo di tempo di uno stream durante il quale un utente può eseguire ricerche. Il giorno Web Ricevitore puoi accedere a informazioni sull'intervallo cercabile tramite PlayerManager.getLiveSeekableRange(), che restituisce un LiveSeekableRange . Le proprietà principali dell'oggetto da tenere presenti sono:

  • start: l'ora di inizio (in secondi) dell'intervallo rispetto al l'inizio del flusso in secondi.
  • end: il tempo massimo possibile (in secondi) per cui il player può eseguire la ricerca, in base ai segmenti disponibili, rispetto all'inizio dello stream.
  • isMovingWindow: un valore booleano che indica se l'intervallo cercabile gli spostamenti (ovvero i segmenti meno recenti vengono rimossi dal manifest) con lo stream, dovrebbe essere true per tutti i live streaming.
  • isLiveDone: un valore booleano che indica se il live streaming ha terminati, il che significa che non vengono generati nuovi segmenti.

La dimensione dell'intervallo cercabile, rappresentata come tempo tra start e end è determinato dal numero di segmenti disponibili nello stream e si spostano insieme allo stream. Ad esempio, se, all'inizio del flusso, viene eseguita la ricerca l'intervallo è {start:0, end: 600, isMovingWindow: false, isLiveDone: false}, dieci secondi dopo l'avvio dello stream può diventare {start: 10, end: 610, isMovingWindow: true, isLiveDone: false}. È importante notare l'inizio le ore di fine nell'intervallo cercabile vengono aggiornate in base al tempo necessario generare un nuovo segmento. Di conseguenza, se la lunghezza tipica di un segmento per il tuo stream è di 10 secondi, l'ora di inizio e l'ora di fine verranno aggiornate ogni 10 secondi circa beh.

Disattiva ricerca

Per disattivare la ricerca all'interno di uno stream, devi rimuovere la funzionalità di ricerca dai comandi multimediali supportati sul ricevitore web:

// disable seeking in the LOAD messageInterceptor
playerManager.removeSupportedMediaCommands(cast.framework.messages.Command.SEEK, true);

Rimozione del comando multimediale supportato per SEEK indicatori alle applicazioni di invio e display touch per disattivare la ricerca, ma non i comandi vocali come "Hey Google, cerca indietro di 30 secondi". Vedi comandi multimediali supportati tramite comandi vocali guida per informazioni dettagliate su come disattivare i comandi multimediali per i comandi vocali.

Eventi framework dal vivo

Due eventi, LIVE_ENDED e LIVE_IS_MOVING_WINDOW_CHANGED, sono inclusi in l'API Live. Entrambi gli eventi vengono trasmessi LiveStatusEvent che contiene l'intervallo di ricerche live corrente.

Evento Descrizione
LIVE_ENDED Si attiva al termine di un live streaming. A questo punto, il valore end in LiveSeekableRange smetterà di essere aggiornato. Gli utenti potranno comunque visualizzare i contenuti compresi nell'intervallo di ricerche dal vivo.
LIVE_IS_MOVING_WINDOW_CHANGED Si attiva quando l'intervallo disponibile per la ricerca di un live streaming passa da una finestra fissa a una finestra mobile o viceversa. Nel caso di un live streaming, questo accade quando il player rileva che il file manifest sta rimuovendo i segmenti precedenti.

Scenari di live streaming

Esistono otto possibili tipi di scenari per il live streaming, ognuno dei quali vengono configurate impostando tre impostazioni principali:

  • Lo stream ha un'ora di inizio
  • Lo stream ha un'ora di fine
  • Gli utenti possono eseguire ricerche all'interno della finestra di ricerca del live streaming

Consulta la sezione Aggiunta di dati della guida al programma per informazioni su come configurare quei valori.

Di seguito sono riportate descrizioni e screenshot degli scenari supportati dal tramite Google Cloud CLI o tramite l'API Compute Engine. Le variabili T1 e T2 vengono utilizzate per rappresentare il timestamp nella rispettivamente a destra e a sinistra dell'interfaccia utente.

Inizio Ora di fine Cercabile T1 T2
Scenario 1 No No No Testa da gioco Non mostrato
Scenario 2 No No Testa Play Non mostrato
Scenario 3 No No Testa Play Non mostrato
Scenario 4 No Testa Play Non mostrato
Scenario 5 No No Mostra ora di inizio Testa Play
Scenario 6 No Mostra ora di inizio Testa Play
Scenario 7 No Mostra ora di inizio Mostra ora di fine
Scenario 8 Mostra ora di inizio Mostra ora di fine

Scenario uno

Inizio Ora di fine Cercabile T1 T2
No No No Riproduci testa Non mostrato

Lo scenario 1 non ha un'ora di inizio o di fine e gli utenti non riescono a eseguire la ricerca entro il flusso di dati. Quando un utente interrompe uno stream, la riproduzione riprenderà dal bordo del vivo dal luogo in cui lo stream è stato messo in pausa.

Scenario sette

Una TV che mostra l'UI in diretta di Chromecast per lo scenario 7 con ora orologio Un cellulare che mostra l'UI in tempo reale dello scenario 7 con l'ora dell'orologio

Inizio Ora di fine Cercabile T1 T2
No Testa da gioco Durata del programma

Lo scenario 7 ha un'ora di inizio e un'ora di fine, ma non è ricercabile. I due nell'interfaccia utente, T1 e T2, rappresentano il tempo di riproduzione corrente e il totale rispettivamente per la durata del programma. Se un utente mette in pausa/riprende la riproduzione, lo stream riprendi a livello perimetrale dello stream. Nell'esempio precedente, la sezione rossa di La barra di scorrimento rappresenta la parte dello stream dall'avvio dell'utente a guardare.

Scenario otto

Una TV che mostra l'UI in diretta di Chromecast per lo scenario 8 con ora orologio Un cellulare che mostra l'UI in tempo reale dello scenario 8 con tempo orologio

Inizio Ora di fine Cercabile T1 T2
Testa da gioco Durata del programma

Lo scenario 7 ha un'ora di inizio e un'ora di fine ed è cercabile. I due timestamp nell'interfaccia utente, T1 e T2, rappresentano il tempo di riproduzione corrente e il programma totale rispettivamente. Se un utente mette in pausa/riprende la riproduzione, lo stream riprenderà. nel momento in cui sono stati messi in pausa se si trova nella finestra ricercabile (l'area in rosso la barra di scorrimento rappresenta il punto in cui l'utente può eseguire la ricerca e l'area in bianco che rappresenta dove possono andare avanti.

Configurazione di uno scenario

La configurazione di uno stream come scenario dal vivo specifico prevede tre fasi:

  1. Imposta tipo di stream: contrassegna lo stream come in live streaming.
  2. Aggiungi dati della guida al programma: imposta un'ora di inizio. e la durata nell'oggetto MediaMetadata.
  3. Configura funzionalità di ricerca: attiva o disattiva la ricerca.

Comportamento di riproduzione

Mentre è in pausa, i metadati di riproduzione continueranno a essere aggiornati nell'interfaccia utente. che include la testa di riproduzione e i tempi di bordo dal vivo. Quando lo stream viene ripreso, Esistono alcuni comportamenti da tenere presenti che variano in base alla configurazione dello stream.

Stream ricercabili

Al momento della ripresa di un flusso cercabile:

  • Il bordo attivo deve essere aggiornato alla posizione in tempo reale e all'intervallo cercabile. verrà modificato di conseguenza.
  • Se la testina di riproduzione salta oltre il podcast corrente, la barra di scorrimento viene aggiornata. con i metadati del nuovo programma (inclusi ora di inizio e ora di fine, disponibile).
  • Se una finestra cercabile ha lunghezza "X", l'intervallo cercabile si estenderà di nuovo a al massimo "X" o all'inizio dello show, a seconda di quale sia il valore più piccolo.
  • Se l'utente è stato messo in pausa abbastanza a lungo da far sì che l'ora corrente non sia più attiva finestra ricercabile, il flusso riprenderà al primo punto (all'estrema sinistra) della finestra ricercabile.

Vai a LiveSeekableRange.end per riprendere la riproduzione dal vivo dopo la ripresa.

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

Stream non ricercabili

Alla ripresa di uno stream non cercabile:

  • In questo caso, la riproduzione riprenderà al bordo del live streaming.
  • Se il bordo attivo salta oltre lo show corrente, la barra di scorrimento dovrebbe aggiornato con i metadati del nuovo programma (inclusi ora di inizio e fine volta, se disponibile).

modifiche dell'API e personalizzazione della UI live

L'SDK Cast è dotato di supporto integrato per la creazione di interfacce utente personalizzate anziché usando l'interfaccia utente pronta all'uso. Tuttavia, è importante seguire le Elenco di controllo per la progettazione dell'esperienza utente di Cast durante la personalizzazione a riga di comando.

Ricevitore web

Sul ricevitore web, PlayerData include i seguenti campi per consentire agli sviluppatori di estendere i loro interfacce per i live streaming:

  • isLive: un flag che indica se lo stream corrente è un live streaming, anziché VOD.
  • liveSeekableRange: l'intervallo cercabile da mostrare sullo schermo per demarcare la finestra DVR.
  • mediaStartAbsoluteTime: quando la sezione è stata avviata in tempo assoluto (Epoca UNIX).
  • sectionStartTimeInMedia: ora di inizio della sezione in secondi rispetto al l'ora di inizio dell'elemento multimediale.
  • sectionDuration: durata della sezione in secondi.

Assicurati inoltre di tenere conto due eventi dal vivo durante la personalizzazione della UI.

SDK per Android

Come parte della funzionalità Live, l'utilizzo del widget Android Seekbar Widget nel UIMediaController è stato deprecato, utilizza invece CastSeekBar.