Obsługa przesuwania w czasie

Korzystaj z interfejsów API przesuwających w czasie w usłudze wejścia TV, aby umożliwić użytkownikom wstrzymywanie, przewijanie do tyłu aby przyspieszyć programy na żywo na Twoich kanałach usługowych. Jeśli aplikacja obsługuje YouTube przesuwa się w czasie, więc użytkownicy zyskują elastyczność w sposobie, w jaki oglądają Twoje treści:

  • Użytkownicy mogą wstrzymywać programy, mając do czynienia z krótkotrwałą przerwą, aby nigdy nie przegapić kluczowych momentów.
  • Użytkownicy mogą przewijać treści, które już widzieli, lub które co ich nie interesuje.
  • Użytkownicy mogą przewijać ulubione momenty w programie i ponownie je oglądać.

Rysunek 1. Elementy sterujące odtwarzaniem w Androidzie TV służące do przesuwania w czasie.

Funkcja przesuwania w czasie wykorzystuje krótkie, tymczasowe, zarejestrowane segmenty danych programu, implementować możliwość odtwarzania programów na żywo. Użytkownicy nie mogą odtworzyć tego przesunięcia w czasie nagrania poza bieżącą sesją odtwarzania. Oznacza to, że nie może korzystać z przesuwam w czasie, aby wstrzymać program i obejrzeć następny dzień, lub wstrzymać program, aby obejrzeć je później, podczas gdy przełączają się na inny kanał.

Jeśli chcesz, użyj interfejsów API do nagrywania telewizji. aby umożliwić użytkownikom nagrywanie treści programu i odtwarzanie ich poza aktualnie odtwarzanym materiałem .

Dodawanie obsługi przesuwania w czasie

Aby dodać obsługę przesuwania w czasie do usługi wejścia TV, musisz zaimplementować funkcję interfejsy API przesuwające w czasie w klasie TvInputService.Session, obsługiwać nagrywanie i odtwarzanie nagrań z przesunięciem w czasie w aplikacji oraz powiadamiać system, z którego usługa wejściowa obsługuje przesunięcie w czasie.

Wdrażane przez Ciebie metody TvInputService.Session to następujące:

Więcej informacji na temat informowania systemu, że usługa wejściowa obsługuje przesuwanie w czasie, Powiadamianie systemu o stanie przesunięcia w czasie .

Jeśli używasz biblioteki towarzyszącej TIF do implementacji TvInputService.Session zajęcia, automatycznie otrzymasz: wdrożenia przesuwania czasowego z wykorzystaniem ExoPlayer. Możesz użyć tej lub zastąpić metody interfejsu API przesunięte w czasie BaseTvInputService.Session i podaj własne implementacji. Więcej informacji o korzystaniu z biblioteki towarzyszącej TIF znajdziesz w artykule Tworzenie usługi wejścia TV za pomocą w bibliotece towarzyszącej TIF.

Nagrywaj treści po rozpoczęciu sesji

Użytkownik może wstrzymywać, przewijać i przewijać do przodu treści programu za pomocą elementów sterujących odtwarzaniem na kanale, przez naciśnięcie klawisza Select obejrzenia treści, a następnie przejdź do elementów sterujących odtwarzaniem lub specjalne elementy sterujące odtwarzaniem na urządzeniu zdalnym.

Ponieważ użytkownik może możesz w dowolnym momencie użyć przesunięcia w czasie, oglądając programy, usługa wejściowa musi rozpocząć nagrywanie treści przesuwanych w czasie, gdy tylko użytkownik dostraja się do kanału na Twoim onTune() implementacji. Musisz także wykonać te czynności: poinformują system o możliwości nagrywania przez wywołanie notifyTimeShiftStatusChanged(int), zgodnie z opisem w Powiadamianie systemu o stanie przesunięcia w czasie .

Zarządzanie przechowywaniem nagranych treści

Twoja usługa wejścia TV odpowiada za przechowywanie nagrań z przesunięciem w czasie w pamięci aplikacji w prywatnym miejscu i odtwarzania treści po wywołaniu przez system przesuwania w czasie, onTimeShiftResume() Jeśli treści są już przechowywane w chmurze i aplikacja może zarządzać nagrania z przesunięciem w czasie w chmurze, możesz zamiast tego skorzystać z miejsca w chmurze pamięci aplikacji.

Jeśli Twoje treści zawierają treści chronione, usługa wejścia TV odpowiada za poprawne szyfrowanie nagranych treści i ich odszyfrowywanie podczas odtwarzania.

Nagrane treści wideo mogą zajmować dużo miejsca, dlatego ostrożnie zarządzać nagranymi treściami podczas odtwarzania w sesji. Jeśli odtwarzanie czas trwania sesji przekracza czas, który możesz nagrać i zapisać lub przesunięcie w czasie, możesz dostosować nagranie przesunięcie w czasie, by zachować w bieżącym buforze, ale upewnij się, że przechwycony jest bieżący czas. Jeśli na przykład użytkownik odtwarza treści od 31 minut, a Twoje maksymalne przesunięcie w czasie rozmiar to 30 minut. Dostosuj nagranie i czas rozpoczęcia, aby zmieścić od minuty 1 do 31 minuty.

Jeśli usługa wejścia TV nie obsługuje przesunięcia w czasie z powodu braku musisz poinformować o tym system. Więcej informacji o tym, jak powiadamiać o ograniczeniach obsługi przesuwających się w czasie, zapoznaj się z Powiadamianie systemu o stanie przesunięcia w czasie .

Gdy użytkownik przełączy się na inny kanał lub w inny sposób zakończy odtwarzanie usuń zarejestrowane dane o przesunięciu w czasie.

Powiadamianie systemu o stanie przesunięcia w czasie

Jeśli Twoja usługa wejścia TV obsługuje przesunięcie w czasie, notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) w: implementacja onTune(), gdy użytkownik odtwarza treści do kanału.

Aby informować system o dowolnych możliwościach usługi wejściowej dotyczących przesuwania w czasie zmień, użyj notifyTimeShiftStatusChanged(int) Na przykład jeśli usługa wejścia TV nie obsługuje przesunięcia w czasie z powodu ograniczenia dostępnego miejsca na dane lub z innych powodów, notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE)

Jeśli usługa wejścia TV w ogóle nie obsługuje przesuwania w czasie, zadzwoń pod numer notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) po utworzeniu sesji odtwarzania. System traktuje każdą usługę wejściową, która nigdy nie dzwoni notifyTimeShiftStatusChanged() jako usługi wejściowej, która nie może i obsługują przesunięcia w czasie. Dotyczy to usług wprowadzania danych używających interfejsu API poziomu 22 oraz wcześniej.

Śledź czas odtwarzania

Pozycja początkowa nagrania z przesunięciem w czasie to najwcześniejszy czas bezwzględny pozycja, do której użytkownik może szukać w milisekundach od początku epoki. To jest zwykle jest to czas, po którym rozpoczyna się odtwarzanie filmu Funkcja onTune() jest wywoływana. Jeśli jednak użytkownik obejrzy ilość treści, która przekracza to, co Twoja aplikacja może nagrywać, musisz rozpocząć nagrywanie nowego segmentu dla przesuniesz w czasie i odpowiednio zaktualizuję godzinę rozpoczęcia.

Bieżąca pozycja nagrania z przesunięciem w czasie to bieżące odtwarzanie położenie w milisekundach od początku epoki. Ta pozycja zmienia się w sposób ciągły podczas odtwarzania. Zwykle można to ustalić za pomocą mechanizmu odtwarzania Jak w tym przykładzie:

Kotlin

override fun onTimeShiftGetCurrentPosition(): Long =
        tvPlayer?.run {
            currentProgram?.let { program ->
                currentPosition + program.startTimeUtcMillis
            }
        } ?: TvInputManager.TIME_SHIFT_INVALID_TIME

Java

@Override
public long onTimeShiftGetCurrentPosition() {
  if (getTvPlayer() != null && currentProgram != null) {
    return getTvPlayer().getCurrentPosition() +
      currentProgram.getStartTimeUtcMillis();
  }
  return TvInputManager.TIME_SHIFT_INVALID_TIME;
}

Upewnij się, że godzina rozpoczęcia podana, gdy system wywołuje Twój onTimeShiftGetStartPosition() nigdy nie jest większa niż bieżąca pozycja czasu podana w onTimeShiftGetCurrentPosition() System używa tych wywołań, aby: zaktualizować czas trwania przesunięcia w czasie w interfejsie elementów sterujących odtwarzaniem.

Obsługa parametrów odtwarzania

Aby zmienić szybkość odtwarzania podczas przesuwania w czasie, system wykorzystuje parametry odtwarzania. Dla: Jeśli użytkownik zdecyduje się przewinąć obecne odtwarzanie do tyłu, są przesyłane do Twojej aplikacji z ujemną szybkością odtwarzania. Przesunięcie w czasie obsługuje też kilka różnych poziomów szybkości odtwarzania – 2- lub 3-krotnie. aby przewinąć film do tyłu lub do przodu.

System wywoła onTimeShiftSetPlaybackParams(PlaybackParams) z obiektem PlaybackParams, który zawiera w bieżącej sesji. Wykorzystaj te informacje, aby: odpowiednio skonfigurować mechanizm odtwarzania multimediów.

Jeśli mechanizm odtwarzania nie obsługuje jakiegoś parametru, jak najlepiej emulować oczekiwane działanie. Jeśli na przykład podczas odtwarzania mechanizm nie obsługuje 2-krotnej szybkości przewijania, użyj powtarzających się przewijania w trakcie odtwarzania prawie dwukrotnie.

Po skonfigurowaniu parametrów nie zmieniaj tych ustawień, chyba że użytkownik generuje polecenie odtwarzania, które wymaga innego parametru lub przełączników na nowy kanał.