Aufzeichnung von Inhalten unterstützen

Mit TV-Eingabediensten können Nutzer die Wiedergabe von Sendern mit Time-Shifting-APIs pausieren und fortsetzen. In Android 7.0 wurde die Time-Shifting-Funktion erweitert, sodass Nutzer mehrere aufgezeichnete Sitzungen speichern können.

Nutzer können Aufzeichnungen im Voraus planen oder eine Aufzeichnung starten, während sie sich eine Sendung ansehen. Sobald das System eine Aufzeichnung gespeichert hat, können Nutzer sie mit der TV-App des Systems durchsuchen, verwalten und wiedergeben.

Wenn Sie eine Aufzeichnungsfunktion für Ihren TV-Eingabedienst anbieten möchten, müssen Sie dem System mitteilen, dass Ihre App Aufzeichnungen unterstützt, die Möglichkeit zum Aufzeichnen von Sendungen implementieren, alle Fehler verarbeiten und kommunizieren, die während der Aufzeichnung auftreten, und Ihre aufgezeichneten Sitzungen verwalten.

Unterstützung für Aufzeichnungen angeben

Wenn Sie dem System mitteilen möchten, dass Ihr TV-Eingabedienst Aufzeichnungen unterstützt, legen Sie das Attribut android:canRecord in der XML-Datei mit den Metadaten Ihres Dienstes auf true fest:

<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
  android:canRecord="true"
  android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />

Weitere Informationen zur Datei mit den Metadaten des Dienstes finden Sie unter TV-Eingabedienst im Manifest deklarieren.

Alternativ können Sie die Unterstützung für Aufzeichnungen in Ihrem Code mit den folgenden Schritten angeben:

  1. Erstellen Sie in der Methode onCreate Ihres TV-Eingabedienstes ein neues TvInputInfo Objekt mit der TvInputInfo.Builder Klasse.
  2. Rufen Sie beim Erstellen des neuen TvInputInfo-Objekts setCanRecord(true) auf, bevor Sie build aufrufen, um anzugeben, dass Ihr Dienst Aufzeichnungen unterstützt.
  3. Registrieren Sie Ihr TvInputInfo-Objekt beim System, indem Sie TvInputManager.updateTvInputInfo aufrufen.

Sitzung aufzeichnen

Nachdem Ihr TV-Eingabedienst registriert hat, dass er die Aufzeichnungsfunktion unterstützt, ruft das System die Methode TvInputService.onCreateRecordingSession Ihrer App auf, wenn es auf die Aufzeichnungsimplementierung Ihrer App zugreifen muss. Implementieren Sie Ihre eigene Unterklasse TvInputService.RecordingSession und geben Sie sie zurück, wenn der Callback onCreateRecordingSession ausgelöst wird. Diese Unterklasse ist dafür verantwortlich, zu den richtigen Kanaldaten zu wechseln, die angeforderten Daten aufzuzeichnen und den Aufzeichnungsstatus und Fehler an das System zu senden.

Wenn das System RecordingSession.onTune aufruft und einen Kanal-URI übergibt, wechseln Sie zu dem Kanal, der im URI angegeben ist. Teilen Sie dem System mit, dass Ihre App zum ausgewählten Kanal gewechselt hat, indem Sie notifyTuned aufrufen. Wenn Ihre App nicht zum richtigen Kanal wechseln kann, rufen Sie notifyError auf.

Das System ruft dann den Callback RecordingSession.onStartRecording auf. Ihre App muss sofort mit der Aufzeichnung beginnen. Wenn das System diesen Callback aufruft, kann es einen URI bereitstellen, der Informationen zur Sendung enthält, die aufgezeichnet werden soll. Kopieren Sie diese Daten nach Abschluss der Aufzeichnung in die Datentabelle RecordedPrograms.

Schließlich ruft das System RecordingSession.onStopRecording auf. An diesem Punkt muss Ihre App die Aufzeichnung sofort beenden. Sie müssen auch einen Eintrag in der RecordedPrograms Tabelle erstellen, der den URI der aufgezeichneten Sitzungsdaten in der RecordedPrograms.COLUMN_RECORDING_DATA_URI Spalte und alle Programminformationen enthält, die das System beim ersten Aufruf von onStartRecording bereitgestellt hat.

Weitere Informationen zum Zugriff auf die RecordedPrograms Tabelle, finden Sie im Abschnitt Aufgezeichnete Sitzungen verwalten.

Aufzeichnungsfehler verarbeiten

Wenn während der Aufzeichnung ein Fehler auftritt, der zu unbrauchbaren aufgezeichneten Daten führt, benachrichtigen Sie das System, indem Sie notifyError aufrufen. Sie können notifyError auch aufrufen, nachdem eine Aufzeichnungssitzung erstellt wurde, um dem System mitzuteilen, dass Ihre App keine Sitzungen mehr aufzeichnen kann.

Wenn während der Aufzeichnung ein Fehler auftritt, Sie aber eine teilweise Aufzeichnung zur Wiedergabe für Nutzer bereitstellen möchten, rufen Sie notifyRecordingStopped auf, damit das System die teilweise Sitzung verwenden kann.

Aufgezeichnete Sitzungen verwalten

Das System verwaltet Informationen zu allen aufgezeichneten Sitzungen aus allen aufzeichnungsfähigen Kanal-Apps in der Content-Provider-Tabelle RecordedPrograms. Diese Informationen sind über die Content-Aufzeichnungs-URIs von RecordedPrograms zugänglich. Verwenden Sie Content-Provider-APIs, um Einträge aus dieser Tabelle zu lesen, hinzuzufügen und zu löschen.

Weitere Informationen zum Arbeiten mit Content-Provider-Daten finden Sie unter Grundlagen zu Content-Providern.

Best Practices

TV-Geräte haben möglicherweise nur begrenzten Speicherplatz. Gehen Sie daher sorgfältig vor, wenn Sie Speicherplatz zum Speichern aufgezeichneter Sitzungen zuweisen. Verwenden Sie RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE), wenn nicht genügend Speicherplatz zum Speichern einer aufgezeichneten Sitzung vorhanden ist.

Wenn der Nutzer die Aufzeichnung startet, beginnen Sie so schnell wie möglich mit der Aufzeichnung von Daten. Führen Sie dazu alle zeitaufwendigen Aufgaben im Voraus aus, z. B. den Zugriff auf und die Zuweisung von Speicherplatz, wenn das System den Callback onCreateRecordingSession aufruft. So können Sie sofort mit der Aufzeichnung beginnen, wenn der Callback onStartRecording ausgelöst wird.