Compatibilidad con la grabación de contenido

Los servicios de entrada de TV permiten al usuario pausar y reanudar la reproducción de canales mediante APIs de time-shifting Android 7.0 expande la función de pausa en directo permitiendo que el usuario guarde múltiples sesiones grabadas.

Los usuarios pueden programar las grabaciones con anticipación o comenzar a grabar mientras miran contenido. un programa. Una vez que el sistema guarda una grabación, el usuario puede explorar, administrar y reproducir la grabación con la app de TV del sistema.

Si quieres ofrecer la funcionalidad de grabación a tu servicio de entrada de TV, haz lo siguiente: debes indicar al sistema que tu app admite la grabación; implementar la capacidad de grabar programas, manejar y comunicar cualquier error que ocurra durante la grabación y administrar las sesiones grabadas.

Cómo indicar la compatibilidad con la grabación

Para indicarle al sistema que tu servicio de entrada de TV permite grabar, configura el atributo android:canRecord en el archivo en formato XML de metadatos de servicio a true:

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

Para obtener más información sobre el archivo de metadatos del servicio, consulta Declara tu entrada de TV servicio en el manifiesto.

Como alternativa, puedes indicar la compatibilidad para la grabación en tu código usando estos pasos:

  1. En tu servicio de entrada de TV onCreate() método, crea un nuevo objeto TvInputInfo con el Clase TvInputInfo.Builder.
  2. Cuando crees el nuevo objeto TvInputInfo, llama a setCanRecord(true) antes de llamar build() para indicar que tu servicio admite la grabación.
  3. Registra tu objeto TvInputInfo con el sistema llamando a TvInputManager.updateTvInputInfo()

Cómo grabar una sesión

Cuando el servicio de entrada de TV registre que admite la grabación la funcionalidad, el sistema llama a tu TvInputService.onCreateRecordingSession() cuando necesita acceder la implementación de grabación de tu app. Implementa el tuyo la subclase TvInputService.RecordingSession y mostrarla cuando se activa la devolución de llamada onCreateRecordingSession() Esta subclase es responsable para cambiar a los datos del canal correcto, grabar los datos solicitados y comunicar el estado y los errores de registro al sistema.

Cuando el sistema llama RecordingSession.onTune(), pasando un URI del canal, sintoniza el canal que especifica el URI. Notifícale al sistema que tu app se sintonizó con el canal deseado llamando notifyTuned() o, si tu app no puede sintonizarse en el canal correcto, llama notifyError()

A continuación, el sistema invoca RecordingSession.onStartRecording(). Tu app debe comenzar a grabar de inmediato. Cuando el sistema invoca esta devolución de llamada, puede proporcionar un URI que contiene información acerca del programa que se está por grabar. Cuando la grabación haya terminado, copia los datos en RecordedPrograms en la tabla de datos.

Por último, el sistema llama RecordingSession.onStopRecording() En este punto, tu app debe detenerse a grabar de inmediato. También debes crear una entrada en la RecordedPrograms que incluya el URI de datos de la sesión registrada en el RecordedPrograms.COLUMN_RECORDING_DATA_URI y cualquier programa información que el sistema proporcionó en la llamada inicial a onStartRecording()

Para obtener más detalles sobre cómo acceder a la Tabla RecordedPrograms, consulta la sección Administrar sesiones grabadas.

Cómo resolver los errores de grabación

Si se produce un error durante la grabación que hace que los datos grabados no se puedan usar, notificar al sistema llamando notifyError() También puedes llamar notifyError() después de crear una sesión de grabación para informar al sistema que tu app ya no pueda grabar sesiones.

Si se produce un error durante la grabación, pero quieres proporcionar una la grabación parcial a los usuarios para su reproducción, llamar notifyRecordingStopped() para permitir que el sistema usa la sesión parcial.

Cómo administrar sesiones grabadas

El sistema mantiene información de todas las sesiones grabadas de todos de canales con capacidad para grabar RecordedPrograms proveedor de contenido. Se puede acceder a esta información a través del RecordedPrograms URI de registro de contenido. Usa las APIs del proveedor de contenido para leer, agregar y borrar entradas de esta tabla.

Para obtener más información sobre cómo trabajar con datos del proveedor de contenido, consulta Conceptos básicos sobre el proveedor de contenido

Prácticas recomendadas

Es posible que el almacenamiento de los dispositivos de TV sea limitado, así que usa tu buen juicio para y asignar almacenamiento para guardar las sesiones grabadas. Usa RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) cuándo no hay espacio suficiente para guardar una sesión grabada.

Cuando el usuario inicie la grabación, se empezarán a registrar los datos en cuanto de la forma más eficaz posible. Para facilitar esto, completa las tareas que requieren mucho tiempo por adelantado como acceder y asignar espacio de almacenamiento, cuando el sistema invoca onCreateRecordingSession(). Esto te permite empezar de forma inmediata cuando Se activa la devolución de llamada onStartRecording().