Picture in Picture con los SDK nativos

En este tema, aprenderá a implementar el modo Picture in Picture en sus aplicaciones utilizando los SDK de Brightcove Native Player.

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.

Imagen en modo de imagen
Imagen en modo de imagen

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:

  1. 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>
  2. 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:

  1. Abre el MainActivity.java expediente.
  2. En el onCreate método de la actividad, registre la actividad con Brightcove PictureInPictureManager:
    PictureInPictureManager.getInstance().registerActivity(Activity, BrightcoveVideoView)
  3. En el onDestroy método, anule el registro de la actividad:
    PictureInPictureManager.getInstance().unregisterActivity(Activity)
  4. Anular el onPictureInPictureModeChanged Método de actividad y llamar onPictureInPictureModeChanged() 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);
      }
  5. Finalmente, anule el onUserLeaveHint() Método de actividad y llamar onUserLeaveHint() 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:

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:

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.