Resumen
El modo de imagen en imagen (PIP) permite a los usuarios realizar múltiples tareas en sus dispositivos. Con esta función, puede crear aplicaciones en las que se fija una pequeña ventana de reproducción de video en una esquina de la pantalla mientras el usuario realiza otras tareas.
Características
La función de imagen en imagen proporcionada por los SDK nativos de Brightcove admite las siguientes funciones:
- Cuando un usuario ingresa una imagen en modo de imagen al hacer clic en el ícono PIP en la barra de control, un desarrollador puede ingresar al modo PIP mediante programación.
- El usuario puede arrastrar la ventana PIP por las esquinas de la pantalla para colocarla en la ubicación más conveniente.
- El usuario puede pausar y reproducir el video en la ventana PIP o eliminarlo por completo. El usuario también puede maximizar el video a la experiencia dentro de la aplicación.
- El modo PIP funciona sobre la aplicación, el fondo del dispositivo y otras aplicaciones.
Versiones admitidas
El modo Imagen en imagen es compatible con las siguientes versiones:
Versión del sistema operativo del dispositivo
- Androide: Oreo 8.0+ (API nivel 26+)
- iOS: 10.0+
Versión del SDK nativo
- Androide: Brightcove Native SDK para Android versión 6.1.0+
- iOS: SDK nativo de Brightcove para iOS versión 6.4.4+
Implementación de Android
Los siguientes temas lo ayudarán a comenzar con la función de imagen en imagen:
Para obtener más detalles, consulte la Guía de soporte de imagen en imagen.
Uso de BrightcovePlayer
La forma más fácil de comenzar a utilizar imagen en imagen es hacer que su actividad extienda el BrightcovePlayer
. Para ello, sigue estos pasos:
- En tus styles.xml archivo, habilite el botón de imagen en imagen agregando el siguiente código:
<style name="BrightcoveControlBar" parent="BrightcoveControlBarDefault"> <item name="brightcove_picture_in_picture">true</item> </style>
- En tus AndroidManifest.xml expediente, declarar imagen en soporte de imagen para la actividad agregando lo siguiente:
<activity android:name="VideoActivity" android:resizeableActivity="true" android:supportsPictureInPicture="true" android:configChanges= "screenSize|smallestScreenSize|screenLayout|orientation" ...
Este es un paso importante. Si no lo declara, cuando un usuario presiona el botón de imagen en imagen en Brightcove Media Controller, un
IllegalStateException
será arrojado:java.lang.IllegalStateException: enterPictureInPictureMode: Current activity does not support picture in picture
Al entrar en la imagen en el modo de imagen, la actividad en sí cambia de tamaño, conservando todos los componentes de la actividad en la imagen en la ventana de imagen. Para evitar esto y proporcionar una implementación más fácil, la vista de video de Brightcove entrará en pantalla completa automáticamente para coincidir con el ancho y alto del diseño principal, mostrando solo el video en la imagen en la ventana de imagen. Una vez que salga de este modo, la vista de video de Brightcove volverá a su estado original.
Si no desea imagen en imagen en su aplicación, puede deshabilitar el botón de imagen en imagen agregando el siguiente código en su styles.xml expediente:
<style name="BrightcoveControlBar" parent="BrightcoveControlBarDefault">
<item name="brightcove_picture_in_picture">false</item>
</style>
Usar una actividad regular
Si está utilizando una actividad que no se extiende BrightcovePlayer
, además de declarar soporte para imagen en imagen como se menciona en la sección anterior, debe seguir algunos pasos adicionales:
- Abre el MainActivity.java expediente.
- En el
onCreate
método de la actividad, registre la actividad con BrightcovePictureInPictureManager
:PictureInPictureManager.getInstance().registerActivity(Activity, BrightcoveVideoView)
- En el
onDestroy
método, anule el registro de la actividad:PictureInPictureManager.getInstance().unregisterActivity(Activity)
- Anular el
onPictureInPictureModeChanged
Método de actividad y llamaronPictureInPictureModeChanged()
método como se muestra a continuación:@Override public void onPictureInPictureModeChanged (boolean isInPictureInPictureMode, Configuration newConfig) { super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); PictureInPictureManager.getInstance().onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); }
- Finalmente, anule el
onUserLeaveHint()
Método de actividad y llamaronUserLeaveHint()
Como se muestra abajo:@Override public void onUserLeaveHint () { super.onUserLeaveHint(); PictureInPictureManager.getInstance().onUserLeaveHint(); }
Después de seguir estos pasos, el botón de imagen en imagen aparecerá automáticamente en Brightcove Media Controller. También puede activar imagen en imagen mediante programación de la siguiente manera:
PictureInPictureManager.getInstance().enterPictureInPictureMode()
Personalización de imagen en imagen
Puede personalizar el comportamiento y la apariencia de la imagen en la ventana de imagen a través del PictureInPictureManager
. Por ejemplo, puede cambiar la relación de aspecto de la ventana o habilitar / deshabilitar los subtítulos para sus videos.
Android Oreo proporciona de forma nativa tres parámetros que se pueden personalizar:
- relación de aspecto
setAspectRatio(Rational)
- sugerencia de límites de fuente
setSourceRectHint(Rect)
- lista de acciones remotas
setUserActions(List<RemoteAction>)
Acciones del usuario
Brightcove agrega un RemoteAction
por defecto, que maneja el Play/Pause
eventos de vídeo y establece sus respectivos iconos. Esto significa que el valor predeterminado RemoteAction
se agregará a la lista de acciones remotas que establezca con lo siguiente:
setUserActions
Tenga en cuenta que solo puede establecer un número limitado de acciones. Para obtener el número máximo de acciones , llame a lo siguiente:
Activity.getMaxNumPictureInPictureActions()
Subtítulos
Puede habilitar / deshabilitar los subtítulos ocultos al reproducir un video en el modo Imagen en imagen llamando a lo siguiente en el inPictureInPictureManager
.
setClosedCaptionsEnabled(boolean)
Los subtítulos ocultos están deshabilitados de forma predeterminada en los teléfonos, pero están habilitados en las tabletas. Para reducir el tamaño de los subtítulos mientras se reproduce en el modo Imagen en imagen, llame a lo siguiente para establecer un valor entre 0
y 1.0f
.
setClosedCaptionsReductionScaleFactor(float)
De forma predeterminada, el tamaño de los subtítulos ocultos en la imagen en el modo de imagen es 0.5f
o 50% del tamaño original. Por último, para ingresar la imagen en el modo de imagen cuando la actividad onUserLeaveHint()
se llama, establezca lo siguiente en true
:
setOnUserLeaveEnable(boolean)
Parámetros
Para recuperar la imagen actual en los parámetros de imagen, puede llamar a lo siguiente:
PictureInPicture.getBrightcovePictureInPictureParams()
Esta llamada devuelve el BrightcovePictureInPictureParams
object, que tiene los getters para todos los parámetros discutidos anteriormente.
Implementación de iOS
Para comenzar con imagen en imagen, agregue showPictureInPictureButton
a BCOVPUIPlayerViewOptions
. Cuando se establece en verdadero, se agregará un botón de imagen en imagen a los controles del reproductor en los dispositivos compatibles.
Imagen en imagen es una de las nuevas funciones con iOS 14.
Para obtener más detalles, consulte lo siguiente:
- La Imagen en imagen sección de referencia de Brightcove Native SDK para iOS
- De Apple Adopción de imagen en imagen en un reproductor personalizado documento
Para ver un ejemplo de código, consulte el Aplicación básica de reproducción de video.
Limitaciones
Androide
- Imagen en imagen solo funcionará en dispositivos con Android Oreo o superior
- Actualmente no es compatible con Android TV.
- Los videos con anuncios no son compatibles
- Los videos 360 no son compatibles
iOS
- Picture in Picture es compatible con los anuncios del lado del servidor (SSAI) de Brightcove, pero PIP no es compatible con los anuncios del lado del cliente, incluidos IMA, FreeWheel o Pulse.
- Los videos 360 no son compatibles
Problemas conocidos
Androide
- Descubrimos que los videos protegidos por Widevine que se reproducen en modo imagen en imagen se volverán transparentes o negros en el Pixel C con Android 8.0. El problema no se puede reproducir en el mismo dispositivo con Android 8.1.