Transmitowanie na żywo

Pakiet Cast SDK zawiera wbudowane interfejsy API do obsługi treści na żywo. Obejmuje to m.in. elastyczny, gotowy do użycia interfejs w połączeniu z interfejsami API, które umożliwiają programistom tworzenie za pomocą kilku linijek kodu. Interfejs Live API obsługuje wyświetlanie godziny rozpoczęcia i zakończenia, metadane programu, elementy sterujące DVR oraz okna z możliwością przewijania.

Ten przewodnik pokazuje, jak skonfigurować strumień do interfejsów Live API, w tym: przykładowe fragmenty kodu i metadanych do konfigurowania podstawowych scenariuszy transmisji na żywo, zrzuty ekranu przedstawiające każdy scenariusz.

Wymagania wstępne

Znajomość podstaw wdrażania Zanim sprawdzisz, musisz mieć odbiornik internetowy Google. Aby uruchomić przykładowy kod, musisz mieć dostęp do aktywnego który jest zgodny z jednym z obsługiwanych typów multimediów. Ogólnie funkcja Na żywo obsługuje typowe konfiguracje transmisji na żywo dla obsługiwanych multimediów.

W przewodniku używane są następujące terminy:

  • Przewijane okno – zakres transmisji na żywo, w którym użytkownicy mogą przewijać treści.
  • Live Edge – najnowsza część transmisji na żywo dostępna dla odtwarzacza.
  • Play Head – sygnatura czasowa bieżącej pozycji odtwarzania w interfejsie.

Przesyłanie transmisji na żywo

Istnieją 2 sposoby konfigurowania pakietu SDK odbiornika internetowego pod kątem używania interfejsu Live API treść:

  1. za pomocą elementu przechwytującego wiadomości LOAD w aplikacji odbiornika internetowego. (zalecane)
  2. za pomocą żądania obciążenia wygenerowanego po stronie nadawcy lub odbiorcy.

Element przechwytujący zapewnia LoadRequestData , który zawiera wszystkie ważne metadane dotyczące żądania wczytywania. Do wskazuje, że żądanie wczytania dotyczy transmisji na żywo, streamType w mediaInformation do StreamType.LIVE. Pole MediaInformation.duration powinno mieć wartość -1, ponieważ instancje odtwarzacza są odpowiada za obliczenie, gdy treść ma wartość 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;
});

Dodawanie danych przewodnika po programach

Transmisje na żywo, zwłaszcza długotrwałe transmisje, takie jak kanały telewizyjne, mogą wyświetlanie metadanych przewodnika/programowania na podstawie bieżącego odtwarzania. pozycję w transmisji na żywo. Zdecydowanie zalecamy dostawców treści, aby dodawali programowanie metadanych w swoich aplikacjach odbiornika internetowego, aby zapewnić lepszemu użytkownikowi i uzyskiwanie dodatkowych informacji.

Wstępne dane przewodnika dla strumienia możesz skonfigurować w komunikacie LOAD aplikacji przechwytującej, tak samo jak zaznaczyliśmy, że jest to transmisja na żywo poprzedniego przykładu. Poszczególne sekcje lub programy w transmisji na żywo są reprezentowane jako MediaMetadata obiektów, które są następnie przechowywane w queue. Dla różnych typów programów, takich jak: MediaMetadata, dostępna jest inna klasa. TvShowMediaMetadata, MovieMediaMetadata, MusicTrackMediaMetadata ip.

W poniższym fragmencie kodu używamy obiektu MediaMetadata do określenia godziny rozpoczęcia każdego programu ze znakiem Sygnatura czasowa UNIX ze znakiem sectionStartAbsoluteTime usłudze. Czas trwania programu jest podany w sekundach.

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

Zakres przewijania na żywo

Pakiet Cast SDK zawiera elementy interfejsu i elementy sterujące, które pozwalają użytkownikowi suwak odtwarzania w strumieniu za pomocą Rozszerzony kontroler lub dotykowe.

LiveSeekableRange reprezentuje zakres czasu strumienia, w którym użytkownik może wyszukiwać. Dzień Dostęp do informacji o zakresie możliwego do przewijania można uzyskać za pomocą PlayerManager.getLiveSeekableRange() , która zwraca LiveSeekableRange obiektu. Główne właściwości obiektu, o którym należy pamiętać, to:

  • start – czas rozpoczęcia (w sekundach) zakresu w odniesieniu do na początku transmisji w sekundach.
  • end – maksymalny możliwy czas (w sekundach), do którego użytkownik może przewinąć film, na podstawie dostępnych segmentów względem początku transmisji.
  • isMovingWindow – wartość logiczna wskazująca, czy zakres możliwy do przewijania ruchy (tzn. starsze segmenty są usuwane z pliku manifestu) wraz ze strumieniem, Powinna mieć wartość true dla wszystkich transmisji na żywo.
  • isLiveDone – wartość logiczna wskazująca, czy w transmisji na żywo co oznacza, że nie są generowane żadne nowe segmenty.

Rozmiar zakresu, który można przewijać, wyrażony jako czas od start do end, zależy od liczby segmentów dostępnych w strumieniu i zostanie wraz ze strumieniem danych. Jeśli na przykład na początku strumienia dostępny jest element do przewijania, zakres to {start:0, end: 600, isMovingWindow: false, isLiveDone: false}, dziesięć sekund po rozpoczęciu transmisji może zmienić się w {start: 10, end: 610, isMovingWindow: true, isLiveDone: false}. Koniecznie zapisz czasy zakończenia w zakresie możliwym do przewijania są aktualizowane na podstawie czasu potrzebnego do wygenerować nowy segment. Jeśli więc typowa długość segmentu dla transmisji wynosi 10 sekund, czas rozpoczęcia i zakończenia będą aktualizowane mniej więcej co 10 sekund, cóż.

Wyłącz przewijanie

Aby wyłączyć przewijanie w strumieniu, musisz usunąć funkcję przewijania z obsługiwanych poleceń multimedialnych na odbiorniku internetowym:

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

Usunięcie obsługiwanego polecenia multimedialnego dla sygnałów SEEK z aplikacji nadawców i ekranów dotykowych, aby wyłączyć przewijanie, ale nie wyłącza poleceń głosowych, takich jak „OK Google, przewiń o 30 sekund do tyłu”. Zobacz obsługiwane polecenia multimedialne głosowe .

Wydarzenia na żywo

W ramach programu uwzględnione są 2 wydarzenia: LIVE_ENDED i LIVE_IS_MOVING_WINDOW_CHANGED za pomocą interfejsu Live API. Oba zdarzenia są przekazywane LiveStatusEvent który zawiera bieżący aktywny zakres do przeszukiwania.

Zdarzenie Opis
LIVE_ENDED Wywoływane po zakończeniu transmisji na żywo. W tym momencie wartość end w tabeli LiveSeekableRange przestanie być aktualizowana. Użytkownicy nadal będą mogli oglądać treści w możliwości przewijania na żywo.
LIVE_IS_MOVING_WINDOW_CHANGED Wywoływane, gdy możliwy do przewijania zakres transmisji na żywo zmienia się ze stałego okna na ruchome lub odwrotnie. W przypadku transmisji na żywo stanie się tak, gdy odtwarzacz wykryje, że plik manifestu usuwa wcześniejsze segmenty.

Scenariusze transmisji na żywo

Istnieje 8 rodzajów scenariuszy transmisji na żywo, z których każdy można skonfigurować przez skonfigurowanie 3 podstawowych ustawień:

  • Transmisja ma godzinę rozpoczęcia
  • Transmisja ma czas zakończenia
  • Użytkownicy mogą wyszukiwać w oknie transmisji na żywo, które można przewijać

Patrz Dodawanie danych z przewodnika po programach, aby dowiedzieć się, jak skonfigurować tych wartości.

Poniżej znajdziesz opisy i zrzuty ekranu przedstawiające scenariusze obsługiwanych przez transmisję na żywo API. Zmienne T1 i T2 służą do reprezentowania sygnatury czasowej na odpowiednio lewą i prawą stronę interfejsu.

Godzina rozpoczęcia Czas zakończenia Przewijane T1 T2
Scenariusz 1 Nie Nie Nie Głowica odtwarzania Niewyświetlana
Scenariusz 2 Nie Nie Tak Odtwarzaj głowa Niewyświetlane
Scenariusz 3 Nie Tak Nie Odtwarzaj głowa Niewyświetlane
Scenariusz 4 Nie Tak Tak Odtwarzaj głowa Niewyświetlane
Scenariusz 5 Tak Nie Nie Pokaż czas rozpoczęcia Odtwarzaj głowa
Scenariusz 6 Tak Nie Tak Pokaż czas rozpoczęcia Graj z głowicą
Scenariusz 7 Tak Tak Nie Pokaż czas rozpoczęcia Pokaż czas zakończenia
Scenariusz 8 Tak Tak Tak Pokaż czas rozpoczęcia Pokaż czas zakończenia

Scenariusz pierwszy

Godzina rozpoczęcia Czas zakończenia Przewijane T1 T2
Nie Nie Nie Głowa do gry Niewyświetlana

Pierwszy scenariusz nie ma godziny rozpoczęcia ani zakończenia, a użytkownicy nie mogą wyszukiwać w okresie . Gdy użytkownik zatrzyma transmisję, odtwarzanie zostanie wznowione od krawędzi transmisji na żywo. miejsca wstrzymania transmisji.

Scenariusz siódmy

Telewizor wyświetlający interfejs na żywo Chromecasta w sytuacji 7 z godziną zegara Telefon komórkowy przedstawiający interfejs na żywo do scenariusza 7 z czasem zegara

Godzina rozpoczęcia Czas zakończenia Przewijane T1 T2
Tak Tak Nie Głowica odtwarzania Czas trwania programu

Scenariusz 7 ma godzinę rozpoczęcia i zakończenia, ale nie można go wyszukać. Obie sygnatury czasowe w interfejsie, T1 i T2, reprezentują bieżący czas odtwarzania i łączny czas odtwarzania. czas trwania programu. Jeśli użytkownik wstrzyma lub wznowi odtwarzanie, aby wznowić wyświetlanie na brzegu transmisji. W powyższym przykładzie czerwona sekcja parametru pasek przewijania reprezentuje część strumienia od momentu rozpoczęcia odtwarzania oglądania.

Scenariusz ósmy

Telewizor wyświetlający interfejs na żywo Chromecasta w sytuacji 8 z czasem zegara Telefon komórkowy przedstawiający interfejs na żywo do scenariusza 8 z czasem zegara

Godzina rozpoczęcia Czas zakończenia Przewijane T1 T2
Tak Tak Tak Głowica odtwarzania Czas trwania programu

Scenariusz 7 ma godzinę rozpoczęcia i zakończenia oraz można go przewinąć. 2 sygnatury czasowe w interfejsie, T1 i T2, reprezentują bieżący czas odtwarzania i łączny program czas trwania konwersji. Jeśli użytkownik wstrzyma lub wznowi odtwarzanie, transmisja zostanie wznowiona. w momencie wstrzymania, jeśli znajduje się on w oknie przewijania – obszar zaznaczony na czerwono pasek przewijania wskazuje, do którego miejsca użytkownik może przewinąć, a obszar jest biały. wskazuje, dokąd może się udać.

Konfigurowanie scenariusza

Konfigurowanie strumienia jako konkretnej scenariusza transmisji na żywo składa się z 3 części:

  1. Ustaw typ transmisji – oznacz strumień jako transmisji na żywo.
  2. Dodaj dane z przewodnika po programach – ustaw czas rozpoczęcia i czas trwania w obiekcie MediaMetadata.
  3. Skonfiguruj funkcję przewijania – włącz lub wyłączyć przewijanie.

Odtwarzanie

Po wstrzymaniu odtwarzania w interfejsie wciąż będą aktualizowane metadane odtwarzania. uwzględnia czas odtwarzania i czas krawędzi transmisji na żywo. Po wznowieniu transmisji warto wziąć pod uwagę kilka zachowań, które różnią się w zależności od konfiguracji strumienia.

Strumienie do wyszukania

Po wznowieniu odtwarzania z możliwością przewijania:

  • Brzeg obrazu zostanie zaktualizowany do bieżącej lokalizacji i zakresu przewijania zostaną odpowiednio dostosowane.
  • Jeśli suwak odtwarzania przeskoczy nad bieżący program, pasek przewijania zostanie zaktualizowany. z metadanymi nowego programu (łącznie z godziną rozpoczęcia i zakończenia, jeśli dostępna).
  • Jeśli okno z możliwością przewijania ma długość „X”, zakres przewijania zostanie rozszerzony do nie więcej niż „X” lub od początku programu, w zależności od tego, który okres jest mniejszy.
  • Jeśli użytkownik był wstrzymany na tyle długo, że bieżąca godzina została przerwana w oknie, które można przewijać, strumień zostanie wznowiony w najwcześniejszym punkcie (najdalej po lewej) okna z możliwością przewijania.

Przewiń do LiveSeekableRange.end aby wznowić odtwarzanie na krawędzi po wznowieniu.

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

Strumienie, których nie można wyszukać

Po wznowieniu transmisji, której nie można wyświetlić:

  • W takim przypadku odtwarzanie zostanie wznowione na samym brzegu transmisji na żywo.
  • Jeśli krawędź transmisji na żywo przeskakuje poza bieżący program, pasek przewijania powinien być zaktualizowany o metadane nowego programu (w tym godzinę rozpoczęcia i zakończenia). jeśli jest dostępny).

Zmiany powierzchni interfejsu API dostosowywanie interfejsu transmisji na żywo,

Pakiet Cast SDK ma wbudowaną obsługę tworzenia niestandardowych interfejsów użytkownika, a nie za pomocą gotowego interfejsu użytkownika. Ważne jest jednak przestrzeganie z listy kontrolnej projektowania UX przesyłania za pomocą prostego interfejsu online.

Odbiornik internetowy

W odbiorniku internetowym PlayerData zawiera następujące pola, aby umożliwić programistom rozszerzenie interfejsów do transmisji na żywo:

  • isLive – flaga wskazująca, czy bieżąca transmisja jest transmisją na żywo, zamiast VOD.
  • liveSeekableRange – zakres przewijania wyświetlany na ekranie. w oknie DVR.
  • mediaStartAbsoluteTime – moment rozpoczęcia sekcji w czasie bezwzględnym. (Epoka UNIX).
  • sectionStartTimeInMedia – czas rozpoczęcia sekcji w sekundach w stosunku do czas rozpoczęcia multimediów.
  • sectionDuration – czas trwania sekcji w sekundach.

Weź także pod uwagę 2 wydarzenia na żywo podczas dostosowywania interfejsu użytkownika.

Pakiet SDK do Androida

W ramach funkcji Na żywo korzystanie z widżetu Android Seekbar w Interfejs UIMediaController został wycofany. Zamiast niego użyj interfejsu CastSeekBar.