Compatibilidad con la grabación de contenido

Los servicios de entrada de TV permiten al usuario pausar y reanudar la reproducción de canales por medio de las APIs de pausa en directo . Android 7.0 amplía las funciones de pausa en directo, ya que le permite al usuario guardar varias sesiones grabadas.

Los usuarios pueden programar las grabaciones con anticipación o comenzar a grabar cuando están mirando un programa. Una vez que el sistema haya guardado una grabación, el usuario puede explorarla, administrarla y reproducirla por medio de la app para TV del sistema.

Si deseas proporcionar funcionalidades de grabación para tu servicio de entrada de TV, debes indicarle al sistema que tu app admite la grabación, implementar la capacidad para grabar programas, y controlar y comunicar los errores que puedan producirse.

Cómo indicar la compatibilidad con la grabación

Para comunicarle al sistema que tu servicio de entrada de TV permite la grabación, configura el atributo android:canRecord de tu archivo en formato XML de metadatos de servicio en 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 de servicio, consulta Cómo declarar tu servicio de entrada de TV en el manifiesto.

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

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

Cómo grabar una sesión

Después de que el servicio de entrada de TV registra la compatibilidad con la funcionalidad de grabación, el sistema llama al método TvInputService.onCreateRecordingSession cuando necesita acceder a la implementación de grabación de tu app. Implementa tu propia subclase TvInputService.RecordingSession y devuélvela cuando se active la devolución de llamada onCreateRecordingSession. Esta subclase es responsable de cambiar a los datos de canal correctos, grabar los datos solicitados y comunicar el estado y los errores de grabación al sistema.

Cuando el sistema llama a RecordingSession.onTune y le pasa un URI de canal, sintoniza el canal que el URI especifica Notifica al sistema que tu app se sintonizó con el canal elegido llamando a notifyTuned o, si tu app no puede sintonizar el canal adecuado, llama a notifyError.

A continuación, el sistema invoca la devolución de llamada RecordingSession.onStartRecording. Tu app debe comenzar a grabar de inmediato. Cuando el sistema invoca esta devolución de llamada, puede proporcionar un URI que contenga información sobre el programa que está a punto de grabarse. Cuando finalice la grabación, copia estos datos en la tabla de datos RecordedPrograms.

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

Para obtener más información sobre cómo acceder a la RecordedPrograms tabla, consulta la sección Cómo administrar sesiones grabadas.

Cómo resolver los errores de grabación

Si durante la grabación se produce algún error que hace que no se puedan usar sus datos, debes notificar al sistema mediante una llamada a notifyError. También puedes llamar a notifyError después de crear una sesión de grabación para informarle al sistema que tu app ya no puede grabar sesiones.

Si se produce un error durante la grabación, pero quieres darle a los usuarios una grabación parcial para reproducir, llama a notifyRecordingStopped a fin de permitir que el sistema use la sesión parcial.

Cómo administrar sesiones grabadas

El sistema mantiene información de todas las sesiones grabadas de todas las aplicaciones de canal con funcionalidad de grabación en la tabla de proveedores de contenido RecordedPrograms. Se puede acceder a esta información por medio de los URI de grabación de contenido RecordedPrograms. Usa las API de proveedor de contenido para leer, agregar y borrar entradas de esta tabla.

Para obtener más información sobre cómo trabajar con los datos de los proveedores de contenido, consulta Conceptos básicos sobre proveedores de contenido.

Prácticas recomendadas

Es posible que los dispositivos de TV tengan almacenamiento limitado, por lo que debes ser cuidadoso a la hora de asignar el almacenamiento para guardar las sesiones grabadas. Usa RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) cuando no haya suficiente espacio para guardar una sesión grabada.

Cuando el usuario inicie la grabación, comienza a grabar datos lo antes posible. Para facilitar este proceso, completa cualquier tarea anterior que demande mucho tiempo, como acceder al espacio de almacenamiento y asignarlo, cuando el sistema invoque la devolución de llamada onCreateRecordingSession. Si lo haces, podrás comenzar a grabar de inmediato cuando se active la devolución de llamada onStartRecording.