Skip to content

Most visited

Recently visited

navigation

Grabación de TV

Los servicios de entrada de TV le permiten al usuario pausar y reanudar la reproducción de canales mediante API de time-shifting. Android N expande la función de time-shifting permitiéndoles a los usuarios guardar múltiples sesiones grabadas.

Los usuarios pueden programar las grabaciones por adelantado o comenzar a grabar a la vez que miran un programa. Una vez que el sistema haya guardado una grabación, el usuario puede explorar, gestionar y reproducir las grabaciones usando la aplicación del sistema de TV.

Si deseas brindar funcionalidades de grabación a tu servicio de entrada de TV, debes indicarle al sistema que tu aplicación permite la grabación, implementar la habilidad para grabar programas, gestionar y comunicar los errores que ocurren durante la grabación y gestionar las sesiones grabadas.

Nota: La aplicación Live Channels todavía no permite que los usuarios creen grabaciones ni accedan a estas. Hasta que se realicen cambios en la aplicación Live Channels, es posible que sea difícil probar completamente la experiencia de grabación para tu servicio de entrada de TV.

Indicar la compatibilidad para 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 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 Declarar el servicio de entrada de TV en el manifiesto.

De forma alternativa, puedes indicar la compatibilidad para la grabación en tu código; para ello, sigue estos pasos:

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

Grabar una sesión

Luego de que el servicio de entrada de TV registra la compatibilidad con la funcionalidad de grabación, el sistema llama a tu TvInputService.onCreateRecordingSession() cuando necesita acceder a la implementación de grabación de tu aplicación. Implementa tu propia subclase TvInputService.RecordingSession y devuélvela cuando el callback de onCreateRecordingSession() se dispare. Esta subclase es responsable de cambiar a los datos del canal correcto, de grabar los datos solicitados y de comunicar el estado y los errores de grabación al sistema.

Cuando el sistema llama a RecordingSession.onTune(), pasando en un URI de canal, sintoniza el canal que el URI especifica. Notifícale al sistema que tu aplicación se ha sintonizado al canal deseado llamando a notifyTuned() o, si tu aplicación no pudo sintonizarse al canal correcto, llama a notifyError().

El sistema invoca, a continuación, el callback RecordingSession.onStartRecording(). Tu aplicación debe comenzar a grabar inmediatamente. Cuando el sistema invoca este callback, puede brindar un URI que contiene información sobre el programa que se está por grabar. Cuando finaliza la grabación, debes copiar estos datos a la tabla de datos RecordedPrograms.

Finalmente, el sistema llama a RecordingSession.onStopRecording(). En este momento, tu aplicación debe dejar de grabar inmediatamente. También debes crear una entrada en la tabla RecordedPrograms. Esta entrada debe incluir el URI de datos de la sesión grabada en la columna RecordedPrograms.COLUMN_RECORDING_DATA_URI y cualquier información del programa que el sistema haya brindado en la llamada inicial a onStartRecording().

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

Gestionar los errores de grabación

Si ocurre un error durante la grabación que hace que los datos grabados no se puedan usar, notifica al sistema llamando aRecordingSession.notifyError(). De forma similar, puedes llamar a notifyError() después de que se cree una sesión de grabación para que el sistema sepa que la aplicación ya no puede grabar sesiones.

Si ocurre un error durante la grabación, pero deseas brindarle al usuario una grabación parcial usable para su reproducción, llama a RecordingSession.notifyRecordingStopped() para permitir que el sistema use la sesión parcial.

Gestionar las 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 proveedor de contenido TvContract.RecordedPrograms . Esta información se accede mediante el URI de contenido RecordedPrograms.Uri. Usa 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 datos del proveedor de contenido, consulta Conceptos básicos sobre el proveedor de contenido.

Prácticas recomendadas

Los dispositivos de TV tienen un almacenamiento limitado, de modo 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 espacio suficiente para guardar una sesión grabada.

Cuando el usuario inicie la grabación, el registro de datos debe comenzar lo antes posible. Para facilitar este proceso, completa cualquier tarea anterior demandante, como acceder al espacio de almacenamiento y asignarlo, cuando el sistema invoque el callback onCreateRecordingSession(). Hacerlo te permite comenzar a grabar inmediatamente cuando el callback onStartRecording() se dispare.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)