Resumen
La reproducción sin conexión con los SDK de Brightcove Native Player para iOS y Android permite a los editores llegar a sus espectadores de formas completamente nuevas y, al mismo tiempo, garantizar la seguridad de su contenido. Nuestros SDK ofrecen soluciones poderosamente simples para problemas complejos de reproducción fuera de línea, incluida la gestión de descargas, la gestión de catálogos fuera de línea, análisis, DRM y, por supuesto, reproducción.
Al usar la reproducción sin conexión, los usuarios pueden descargar contenido de video protegido por DRM y claro (no cifrado) en sus dispositivos y verlo cuando no están conectados.
Requisitos
Los SDK de Brightcove Native Player admiten la reproducción sin conexión con las siguientes versiones:
Versión del SDK nativo de Brightcove
- SDK nativo para Android 7.0.1 o posterior
- SDK nativo para iOS 6.0.1 o posterior
Versión del sistema operativo del dispositivo
- Android 5.0 o superior
- iOS 10.0+, pero se recomienda 10.3+
Configuración
Para comenzar, haga lo siguiente:
- Póngase en contacto con su administrador de cuentas para habilitar su cuenta para la reproducción sin conexión.
- Asegúrese de utilizar Dynamic Delivery cuando ingiera sus videos.
- Prepara cada video que desea habilitar para su descarga.
Entrega de contenido
La transmisión de video aprovecha la función de transmisión de velocidad de bits múltiple de Video Cloud, que detecta el ancho de banda en la fuente y ofrece la mejor calidad para el dispositivo. La función de reproducción sin conexión admite los siguientes tipos de transmisión:
- Androide: Transmisión dinámica adaptable a través de HTTP (DASH)
- iOS: Transmisión en directo HTTP de Apple (HLS)
Representación descargada
Quizás se pregunte qué versión se descarga y se usa para la reproducción sin conexión. Aquí está la respuesta:
Android : ExoPlayer establece la reproducción predeterminada. Para encontrar la versión actual, escuche la
ExoPlayerVideoDisplayComponent.RENDITION_CHANGED
evento.Internamente, Native SDK para Android usa DefaultTrackSelector . Puede establecer la tasa de bits máxima de la siguiente manera:
VideoDisplayComponent: videoDisplayComponent.setPeakBitrate(yourPeakBitrate);
iOS : si no especifica una tasa de bits para su descarga, obtendrá la representación más baja que tenga una pista de video.
Para elegir una variante específica en función de la tasa de bits o la resolución, consulte la sección Especificación de una tasa de bits de variante de la referencia SDK.
Seguridad
La protección del contenido descargado es lo más importante con nuestra solución sin conexión. Los SDK de Brightcove Native Player proporcionan la siguiente funcionalidad para garantizar que su contenido se almacene de forma segura en los dispositivos de los espectadores:
Contenido protegido por DRM
- Para el contenido protegido por DRM, los SDK nativos utilizan las siguientes tecnologías:
- Androide: DASH con Widevine Modular
-
iOS: HLS con Juego limpio
-
El contenido de video solo se puede ver en el dispositivo y la aplicación que lo descargó.
-
El contenido de video solo se puede ver hasta una fecha y hora específicas de vencimiento.
Los SDK nativos permiten a los usuarios alquilar o comprar videos. El vencimiento se aplica a los alquileres y se establece en la licencia DRM mediante la API de SDK nativos para descargar videos. Por el contrario, el vencimiento establecido en el token Fastly se aplica al contenido de transmisión.
- Las URL de video devueltas al cliente caducarán para que otros no puedan usarlas.
Todo el contenido
- Cuando se elimina la aplicación, se elimina todo el contenido descargado.
- Su aplicación puede eliminar el contenido almacenado localmente en cualquier momento.
Gestión de descargas
Los SDK de Brightcove Native Player manejan las complejidades de descargar contenido al dispositivo de un espectador, lo que simplifica enormemente el proceso para las aplicaciones nativas.
- Los editores pueden elegir la calidad de reproducción del contenido a descargar.
- Los subtítulos se pueden descargar y mostrar sin conexión.
- Los SDK nativos admiten varias pistas de audio. Para obtener detalles sobre la descarga de pistas adicionales, consulte lo siguiente:
Funcionalidad
La siguiente funcionalidad se puede agregar a sus aplicaciones para respaldar la administración de descargas:
- Mostrar contenido
- Verifique el tamaño de la descarga
- Mostrar estado de descarga
- Gestionar descargas
- Mostrar espacio de almacenamiento local
- Pausar / reanudar / cancelar descarga
Mostrar contenido
Muestra una lista de contenido disponible para transmisión o descarga.
Cuando configuras un video offline_enabled
propiedad a cierto , los SDK nativos marcarán este video como descargable.
Preparar videos
Para marcar un video como descargable, debe hacer lo siguiente:
- Si aún no lo ha hecho, comuníquese con su administrador de cuentas para habilitar su cuenta para la reproducción sin conexión.
-
Para cada video que desee que se pueda descargar, configure la opción sin conexión habilitada mediante una de las siguientes acciones:
Utilice Video Cloud Studio
Utilice Video Cloud Studio para habilitar la reproducción sin conexión.
Utilice la API de CMS
También puede utilizar el API de CMS para configurar el offline_enabled campo a un valor de cierto.
Aquí hay un ejemplo usando curl:
curl --header "Authorization: Bearer $oauth_token" --request PATCH --data ' {"offline_enabled" : true} ' https://cms.api.brightcove.com/v1/accounts/your account id/videos/your video id
Cuando trabaje con contenido claro, consulte la Mejores prácticas sección para obtener consejos sobre cómo mostrar su contenido.
Verifique el tamaño de la descarga
Brightcove recomienda que antes de solicitar una descarga, se asegure de que haya suficiente espacio en el almacenamiento del dispositivo para la descarga. Para obtener una estimación del tamaño total de la descarga del video, siga estos pasos:
- Para iOS, revise la información en el Comprobar tamaño de descarga sección de la Guía para desarrolladores de aplicaciones iOS para la reproducción sin conexión.
-
Para Android, puede obtener un presupuesto en el OnDownloadStarted devolución de llamada desde el
DownloadEventListener
. A continuación, se muestra un ejemplo de cómo configurar el detector de eventos:MediaDownloadable.DownloadEventListener downloadEventListener = new MediaDownloadable.DownloadEventListener() { //Your implementation. } OfflineCatalog catalog = new OfflineCatalog(context, eventEmitter, accountId, policyKey); catalog.addDownloadEventListener(downloadEventListener);
Mostrar espacio de almacenamiento local
Informe al usuario cuando no haya suficiente almacenamiento local para completar la descarga del elemento actual y cualquier elemento en la cola.
Los SDK proporcionan el tamaño y el progreso estimados para que pueda determinar si hay suficiente espacio para las descargas.
Mostrar estado de descarga
Muestra la descarga actual junto con su estado.
Los SDK devolverán el tamaño total estimado, el estado actual de la descarga y el porcentaje de la información del progreso de la descarga.
Gestionar descargas
Descarga de varios videos
Los SDK nativos permitirán que varios videos se pongan en cola para su descarga. Por ejemplo, un usuario puede descargar varios episodios de una temporada y los SDK nativos administrarán el proceso proporcionando el estado de descarga de cada activo.
Descarga de pistas secundarias (iOS)
Con iOS 13, Apple ha cambiado el funcionamiento de las descargas. Para obtener más detalles, consulte la Guía del desarrollador de aplicaciones iOS para la descarga de videos y la reproducción sin conexión guía.
Debido a este cambio, la aplicación de muestra de descarga sin conexión de iOS puede parecer que vuelve a descargar videos con múltiples pistas de audio. Esto se debe a que se proporciona el progreso de la descarga para cada pista. Por lo tanto, la barra de progreso comenzará de nuevo desde cero para cada pista de audio adicional.
Aquí hay una breve descripción de AVMediaSelectionOptions
, subtítulos y pistas de audio alternativas: Adición de subtítulos y pistas de audio alternativas
Determinar la descarga total
¿Hay alguna forma de conseguir didProgressTo
para la descarga total de un token de video?
No. Para un token de video sin conexión, no hay un valor de progreso de descarga agregado. El desarrollador de la aplicación determina cuántas descargas de activos se realizarán. La primera descarga de activos es el video principal y las pistas de audio y texto preferidas. Por lo general, es la descarga más grande y el progreso avanzará de 0.00 a 100.00.
Si una solicitud de descarga incluye selecciones de medios adicionales (que el desarrollador de la aplicación solicita explícitamente), el tiempo total de descarga es simplemente el del video principal y la selección de medios preferidos, más el de cada selección de medios adicional. Al representar el progreso total en la interfaz de usuario, elija un valor de escala para cada descarga, de modo que la suma de todas las descargas totalice el 100% y sume los tiempos de descarga escalados de cada selección de medios.
Identificar tipos de objetos
¿Hay alguna forma de identificar qué tipo de objeto (video o pista de texto) cada didProgressTo
eventos relacionados con?
Si. Las descargas adicionales son de objetos de la opción de selección de medios de Apple (AVMediaSelectionOption
), no pistas. El objeto de selección de medios que se está descargando se identifica en la devolución de llamada de progreso. (BCOVOfflineVideoManagerDelegate.h)
Apple proporciona métodos para examinar los atributos de una opción de selección de medios. Para obtener más información, consulte Apple AVMediaSelectionOption.
Puede ver los valores de metadatos en la consola del depurador de Xcode al ejecutar el Aplicación de muestra OfflinePlayer (no se deje engañar por las dos opciones en inglés, es solo una aplicación de muestra)
OfflinePlayer[523:355259] AVMediaSelection option 0 | legible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 0 | audible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 1 | legible display name: English
OfflinePlayer[523:355259] AVMediaSelection option 1 | audible display name: English
Puedes ver cómo se hace en el Código de DownloadManager.
Pausar / reanudar / cancelar descarga
Permita que el usuario pause, reanude o cancele la descarga de contenido.
La funcionalidad de descarga se reanudará donde se detuvo si el usuario hace una pausa / reanuda o si se interrumpe la descarga. Por ejemplo, si pierde la conexión Wi-Fi durante la descarga, se reanudará donde lo dejó cuando se vuelva a conectar.
Si cancela la descarga de un video, se borrará cualquier progreso realizado.
Gestión de catálogos locales
Los SDK de Brightcove Native Player simplifican el proceso de gestión del contenido local descargado.
La siguiente funcionalidad se puede agregar a sus aplicaciones para respaldar la administración del catálogo local:
Mostrar contenido descargado
Muestra todos los episodios descargados de cada programa / temporada.
Los SDK devuelven metadatos y detalles de reproducción de todo el contenido descargado. Estos metadatos incluyen el título del video, la descripción, las miniaturas, los subtítulos disponibles, las pistas de audio disponibles, etc.
Hay nuevas propiedades de metadatos específicas para la reproducción sin conexión, que incluyen lo siguiente:
Contenido protegido por DRM
- Identificador de token
- Fecha de caducidad de la licencia
Todo el contenido
- Hora de inicio y finalización de la descarga
- Nombre de la miniatura descargada junto con la URL del archivo
- Nombre del póster descargado junto con la URL de su archivo
- URL de archivo relativo y derivado del paquete de video
Luego, puede filtrar los resultados para su implementación específica.
Eliminar contenido local
Permita que los usuarios eliminen contenido del almacenamiento local.
Los SDK exponen un método para eliminar un video junto con sus metadatos y activos relacionados.
Reproducción de contenido
Los SDK nativos le permiten reproducir contenido en las siguientes situaciones:
- Reproduce un video mientras se descarga.
- Reproduzca un video después de que se haya descargado. El contenido descargado se puede reproducir localmente cuando el dispositivo está fuera de línea o en línea. El video sin conexión solo se puede reproducir desde el almacenamiento local.
- Si elige transmitir una versión en línea del video, debe recuperar un nuevo objeto de video del Servicio de reproducción.
Analítica
Se han introducido análisis para medir datos relacionados con el flujo sin conexión. Para obtener más detalles, consulte la Análisis relacionados con la reproducción sin conexión con los SDK nativos documento.
Muestras
La siguiente tabla contiene vínculos a ejemplos de código para mostrarle cómo comenzar con la reproducción sin conexión:
Aplicación de muestra | Descripción |
---|---|
Reproducción sin conexión de iOS | Descargue y reproduzca videos HLS, incluidos aquellos protegidos con cifrado FairPlay. Para obtener detalles del desarrollador, consulte la Guía para desarrolladores de aplicaciones iOS para reproducción sin conexión. |
Reproducción sin conexión de Android | Descargue y reproduzca videos DASH, incluidos aquellos protegidos con cifrado Widevine. |
Preguntas más frecuentes
A continuación encontrará respuestas a algunas preguntas generales.
Contenido protegido por DRM
¿Puede el usuario cambiar el reloj del sistema para omitir la fecha de vencimiento?
Androide: La caducidad absoluta determina la fecha y la hora hasta la cual una licencia es válida. Widevine y la capa DRM de Android hacen cumplir esto. Teóricamente, la capa DRM en Android debe evitar que el usuario pase por alto el período de vencimiento. Cualquier problema que podamos haber encontrado se describe en las notas de la versión del sistema operativo Android.
iOS: FairPlay aplica la expiración de la licencia. iOS maneja todas las comprobaciones de cambios de reloj, etc. Una aplicación tiene la opción de verificar la expiración de la licencia para alertar al usuario de que la licencia ha expirado. Esto puede ser preferible a simplemente reproducir un video caducado y luego recibir un error de reproducción.
¿Continuarán cargándose la licencia y los videos sin conexión mientras la aplicación esté en segundo plano?
Androide: Si. Por lo general, la licencia se descarga inmediatamente, pero incluso la licencia se puede descargar mientras la aplicación está en segundo plano.
iOS: La carga de la licencia debería ocurrir en primer plano. Tenemos una método para precargar la licencia. La descarga del contenido de video principal puede ocurrir mientras la aplicación está en segundo plano.
Todo el contenido
¿Cuál es el formato de video que se usa para descargar contenido sin conexión?
Androide: DASH protegido por DRM o DASH no cifrado.
iOS: HLS al vapor. Puede especificar una tasa de bits para la descarga para usar una variante específica.
¿Los videos descargados se reproducirán localmente o se transmitirán cuando el usuario esté en línea?
Un video descargado se puede reproducir mientras está en línea o sin conexión, pero siempre usará el video descargado. Si elige reproducir una versión en línea del video, debe recuperar un nuevo objeto de video del Servicio de reproducción. El video sin conexión solo se puede reproducir desde el almacenamiento local.
Mejores prácticas
Las siguientes pautas deberían ayudar al desarrollar su aplicación para la reproducción sin conexión.
Visualización de botones de pausa / cancelación
Los botones de pausa y cancelación deben mostrarse cuando se inicia la descarga de video.
Androide: Debería mostrar los botones de pausa y cancelación como parte de la llamada al onDownloadStarted
devolución de llamada en el DownloadEventListener
. Para obtener más detalles, consulte la Aplicación de muestra de reproducción sin conexión.
iOS: Para obtener detalles sobre cómo crear una aplicación para la reproducción sin conexión, consulte la Guía para desarrolladores de aplicaciones iOS.
Visualización de contenido claro
Si su cuenta no está habilitada para DRM o está trabajando con contenido claro, los SDK nativos de Brightcove no realizarán una solicitud de licencia del lado del servidor. Por lo tanto, el contenido claro no se considera disponible para alquiler o compra. En la mayoría de los casos, para un contenido claro, se recomienda que oculte el renta y comprar botones y mostrar un solo descargar en su lugar.
Habilitando la función
Comuníquese con su gerente de cuenta para conocer los precios y habilitar la función de reproducción sin conexión para su cuenta.
Solución de problemas
Los siguientes consejos pueden ayudarlo a investigar problemas al descargar videos.
Puede ocurrir un error cuando un usuario intenta descargar un activo a una tasa de bits más alta de la que el dispositivo puede manejar debido a una red lenta.
Para evitar esto, puede agregar código para verificar las capacidades del dispositivo y evitar que los dispositivos con conexiones lentas intenten descargar activos de alta tasa de bits. Puede probar con un dispositivo real mientras acelera la conexión y ver el tráfico de la red con el Charles proxy herramienta.
Androide
Para obtener detalles sobre el manejo de errores, consulte la Mensajes de error del SDK nativo para Android documento. Esto incluye mensajes de error relacionados con la reproducción sin conexión.
iOS
Para obtener detalles sobre el manejo de errores, consulte la Manejo de errores con el SDK nativo para iOS documento.
Cuando el código de reproducción sin conexión recibe un error, lo detectamos y lanzamos un NSError. Para obtener el error subyacente, puede intentar esto:
NSError *underlyingError = initialError.userInfo[NSUnderlyingErrorKey];
Para obtener más información, consulte el Guía para desarrolladores de aplicaciones iOS para reproducción sin conexión.
Problemas conocidos
Para obtener una lista de problemas conocidos para los sistemas operativos Android e iOS que afectan la reproducción sin conexión con los SDK nativos, consulte la Problemas conocidos documento de apoyo.
Notas y limitaciones
Las siguientes notas se aplican a la función de reproducción sin conexión compatible con los SDK nativos:
Publicidad
Ni la publicidad del lado del cliente ni del lado del servidor es compatible con la reproducción sin conexión.
HLSe
El contenido de HLSe no es compatible con la reproducción sin conexión con Brightcove Native SDK para Android, iOS o tvOS.
Modo de bajo consumo
El modo de bajo consumo de los dispositivos puede afectar a determinadas funciones, incluida la descarga. Para obtener más información, consulte lo siguiente:
- Gestión de energía Android 9 (API nivel 28)
- Modo de bajo consumo en tu iPhone
- Reaccionar al modo de bajo consumo en iPhones
Videos compartidos
Los videos compartidos se pueden descargar para verlos sin conexión solo si el video original puede ser. La propiedad se hereda del video original y no se puede cambiar solo para videos compartidos.
Solo audio
Los SDK nativos admiten contenido de solo audio con reproducción sin conexión. Tú controlas lo que ven los espectadores, ya sea una imagen de póster o una pantalla personalizada.
El SDK nativo para Android requiere una VideoView
y el SDK nativo para iOS requiere una UIView
. Debido a esto, el audio de fondo no es compatible. Esto significa que el audio no seguirá reproduciéndose cuando un usuario envíe la aplicación a un segundo plano.
Androide: Eliminación de aplicaciones
Cuando se elimina la aplicación, se elimina todo el contenido descargado. Esto es cierto siempre que no se anule la ubicación de almacenamiento predeterminada.
iOS: Salida en antena
Como función de seguridad, no puede transmitir un video HLS sin conexión a un dispositivo AirPlay para su reproducción. Esto está confirmado por Apple como un AVFoundation
limitación.