Verwenden Sie zeitversetzte APIs in Ihrem TV-Eingabedienst, damit Nutzer Inhalte pausieren, zurückspulen und Live-Programme in deinen Dienstkanälen vorspulen. Wenn Ihre App zeitversetzt sind, können Nutzer flexibel entscheiden, wie sie sich deine Inhalte ansehen:
- Nutzer können Programme bei kurzfristiger Unterbrechung pausieren. verpassen sie keine wichtigen Momente.
- Nutzer können Inhalte, die sie bereits gesehen haben, oder Inhalte, die sie bereits gesehen haben, vorspulen. oder interessiert sie nicht.
- Nutzer können zurückspulen und sich ihre Lieblingsmomente in Programminhalten noch einmal ansehen.
![](https://developer.android.google.cn/static/images/training/tv/tif/time-shift.png?authuser=19&hl=de)
Abbildung 1: Wiedergabesteuerung von Android TV für zeitversetztes Fernsehen
Bei der zeitversetzten Nutzung werden kurze, temporäre, aufgezeichnete Segmente von Programmdaten verwendet, die Möglichkeit zur Wiedergabe von Live-Programmen implementieren. Zeitversetztes Fernsehen kann nicht abgespielt werden Aufnahmen außerhalb der aktuellen Wiedergabesitzung. Das bedeutet, dass sie zeitversetztes Fernsehen, um ein Programm zu pausieren, um es am nächsten Tag anzusehen, oder um ein Programm zu pausieren später ansehen, während sie zu einem anderen Kanal wechseln.
Verwende bei Bedarf die TV-Aufzeichnungs-APIs. um deinen Nutzern die Möglichkeit zu geben, Programminhalte aufzuzeichnen, die sie sich außerhalb der aktuellen Wiedergabe ansehen können Sitzung.
Unterstützung für zeitversetztes Fernsehen hinzufügen
Um Ihrem TV-Eingabedienst zeitversetztes Fernsehen zu unterstützen, müssen Sie den
zeitversetzte APIs in Ihrer TvInputService.Session
-Klasse,
die Aufzeichnung und Wiedergabe von zeitversetzten
System, das Ihr Eingabedienst zeitversetztes Fernsehen unterstützt.
Die von Ihnen implementierten TvInputService.Session
-Methoden sind
Folgendes:
onTimeShiftGetCurrentPosition()
: wird vom System aufgerufen, um den aktuellen Wiedergabeposition in Millisekunden an. Weitere Informationen finden Sie in der Abschnitt Wiedergabezeiten verfolgen.onTimeShiftGetStartPosition()
: wird vom System aufgerufen, Position der aktuellen zeitversetzten Aufnahme in Millisekunden. Weitere Informationen siehe Abschnitt Wiedergabezeiten erfassen.onTimeShiftPause()
: wenn der Nutzer die Wiedergabe anhält.onTimeShiftResume()
: wenn der Nutzer die Wiedergabe fortsetzt.onTimeShiftSeekTo(long)
: wird aufgerufen, wenn das System nach einem eine neue Zeitposition. Normalerweise befindet sich die neue Position zwischen Startposition und die aktuelle Position.onTimeShiftSetPlaybackParams(PlaybackParams)
: vom System aufgerufen zur Bereitstellung von Wiedergabeparametern wie z. B. der Wiedergabegeschwindigkeit für die aktuelle Sitzung. Weitere Informationen finden Sie in der Support für Wiedergabeparameter.
Weitere Informationen dazu, wie Sie das von Ihrem Eingabedienst unterstützte System informieren zeitversetztes Fernsehen, siehe System über den Status der zeitversetzten Nutzung informieren .
Wenn Sie die TIF-Companion-Bibliothek zum Implementieren
TvInputService.Session
Kurs, Sie erhalten automatisch eine
Implementierung der zeitversetzten Nutzung mit ExoPlayer Sie können diese
oder die zeitversetzten
BaseTvInputService.Session
und eigene erstellen
Implementierung. Weitere Informationen zur Verwendung der TIF-Companion-Bibliothek finden Sie unter TV-Eingabedienst mit
der TIF-Companion-Bibliothek
Inhalte zu Beginn einer Sitzung aufzeichnen
Nutzer können Programminhalte anhalten, zurückspulen und vorspulen, indem sie auf die Wiedergabesteuerung für den Kanal, entweder durch Drücken von Auswählen während ansehen und dann zur Wiedergabesteuerung navigieren eine spezielle Wiedergabesteuerung auf einem Remote-Gerät.
Da die Nutzenden
zeitversetztes Fernsehen, wenn du dir Programminhalte ansiehst,
muss der Eingabedienst mit der Aufzeichnung zeitversetzter Inhalte beginnen, sobald der Nutzer
auf einen Kanal in deinem
onTune()
Implementierung. Außerdem müssen Sie
um das System darüber zu informieren, dass Sie
eine Aufzeichnung durchführen können, indem Sie
notifyTimeShiftStatusChanged(int)
,
wie in den
System über den Status der zeitversetzten Nutzung informieren
.
Speicherung aufgenommener Inhalte verwalten
Ihr TV-Eingabedienst ist für die Speicherung zeitversetzter Aufnahmen in
privaten App-Speicher und die Wiedergabe von Inhalten, wenn das System anruft
Ihre Methoden der zeitversetzten Nutzung, z. B.
onTimeShiftResume()
Wenn Ihre Inhalte bereits in der Cloud gespeichert sind und Ihre App
zeitversetzte Aufnahmen in der Cloud speichern,
des App-Speichers.
Falls in Ihren Inhalten geschützte Inhalte verwendet werden, ist Ihr TV-Eingabedienst für ordnungsgemäße Verschlüsselung aufgezeichneter Inhalte und Entschlüsselung der Inhalte während Wiedergabe starten.
Da aufgezeichnete Videoinhalte viel Speicherplatz benötigen, müssen Sie Aufgezeichnete Inhalte während der Sitzungswiedergabe sorgfältig verwalten. Wenn die Wiedergabe die Zeit überschreitet, die Sie aufzeichnen und speichern können, zeitversetztes Fernsehen, passen Sie die Aufzeichnung an, um den aktuellen Zwischenspeicher geladen werden, aber stellen Sie sicher, dass die aktuelle Uhrzeit erfasst wird. Wenn Nutzende beispielsweise Inhalte seit 31 Minuten abgespielt wurden und deine maximale zeitversetzte Aufnahme bei einer Dauer von 30 Minuten Minute 1 bis Minute 31.
Wenn Ihr TV-Eingabedienst das zeitversetzte Fernsehen nicht unterstützt, müssen Sie das System informieren. Weitere Informationen zur Benachrichtigung System zu Supporteinschränkungen für die zeitversetzte Nutzung finden Sie in den System über den Status der zeitversetzten Nutzung informieren .
Wenn der Nutzer zu einem anderen Kanal wechselt oder die Wiedergabe auf andere Weise beendet -Sitzung, löschen Sie Ihre aufgezeichneten zeitversetzten Daten.
System über den Status der zeitversetzten Nutzung informieren
Wenn Ihr TV-Eingabedienst zeitversetztes Fernsehen unterstützt, rufen Sie
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE)
in deinem
Implementierung von
onTune()
, wenn ein Nutzer abgestimmt
mit einem Kanal verknüpft sind.
Um das System zu informieren, wenn Ihr Eingabedienst zeitversetzte Funktionen bietet
ändern, verwenden
notifyTimeShiftStatusChanged(int)
Wenn Ihr TV-Eingabedienst beispielsweise keine zeitversetzte Nutzung unterstützt,
Wenn Sie Speicherplatz oder andere Gründe haben, können Sie sich unter
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE)
Wenn dein TV-Eingabedienst das zeitversetzte Fernsehen nicht unterstützt, kannst du dich unter
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED)
Eine Wiedergabesitzung wird erstellt. Das System behandelt jeden Eingabedienst,
ruft nie an
notifyTimeShiftStatusChanged()
als Eingabedienst, der keinen
die zeitversetzte Nutzung
unterstützen. Dies umfasst Eingabedienste mit API-Level 22 und
zuvor.
Wiedergabedauer erfassen
Die Startposition einer zeitversetzten Aufnahme ist die früheste absolute Zeit.
Position in Millisekunden seit der Epoche, zu der der Nutzer springen kann. Dies ist
in der Regel nach dem Start der Videowiedergabe
onTune()
wird aufgerufen.
Wenn sich der Nutzer jedoch eine Menge Inhalte ansieht,
deine App aufzeichnen kann, musst du mit der Aufzeichnung eines neuen Segments
zeitversetzt und die Startzeit entsprechend aktualisieren.
Die aktuelle Position einer zeitversetzten Aufnahme ist die aktuelle Wiedergabe. Position in Millisekunden seit der Epoche. Diese Position ändert sich kontinuierlich während der Wiedergabe. Normalerweise können Sie dies mit Ihrer Wiedergabe-Engine feststellen. wie im folgenden Beispiel gezeigt:
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; }
Achten Sie darauf, dass Sie die Startzeit angeben, zu der das System Ihre
onTimeShiftGetStartPosition()
ist nie größer als die aktuelle Zeitposition, die Sie in
onTimeShiftGetCurrentPosition()
.
Das System nutzt diese Aufrufe, um
die Dauer der zeitversetzten Nutzung in der Benutzeroberfläche für die Wiedergabesteuerung aktualisieren.
Wiedergabeparameter unterstützen
Zum Ändern der Wiedergabegeschwindigkeit beim zeitversetzten Fernsehen verwendet das System Wiedergabeparameter. Für Wenn der Nutzer beispielsweise die aktuelle Wiedergabe zurückspult, werden Parameter mit einer negativen Wiedergabegeschwindigkeit an deine App übergeben. Zeitversetztes Fernsehen unterstützt auch verschiedene Stufen, 2- oder 3-fache Wiedergabegeschwindigkeit. zum Zurückspulen oder Vorspulen.
Das System ruft Ihre
onTimeShiftSetPlaybackParams(PlaybackParams)
mit einem PlaybackParams
-Objekt, das Folgendes enthält:
Parameter für die aktuelle Sitzung. Anhand dieser Informationen können Sie
die Medienwiedergabe-Engine entsprechend konfigurieren.
Wenn deine Wiedergabe-Engine einen Parameter nicht unterstützt, das erwartete Verhalten so gut wie möglich emulieren. Wenn beispielsweise Ihre Wiedergabe 2-fache Geschwindigkeit nicht unterstützt; wiederholte Suchvorgänge bei der Wiedergabe verwenden um eine ungefähr doppelt so hohe Wiedergabegeschwindigkeit zu erreichen.
Ändern Sie die Einstellungen nach dem Festlegen der Parameter nur dann, wenn der Nutzer gibt einen Wiedergabebefehl aus, der einen anderen Parameter oder Schalter erfordert einem neuen Kanal zugewiesen.