Configuración de la velocidad de reproducción en dispositivos Android

En este tema, aprenderá a agregar la función de reproducción de velocidad variable a las aplicaciones mediante el SDK nativo de Brightcove para Android.

Introducción

Para algunas de sus aplicaciones, es posible que desee brindar al usuario la capacidad de cambiar la velocidad de reproducción mientras mira videos (es decir, entornos de aprendizaje electrónico). Puede agregar esta funcionalidad con el SDK nativo para Android.

En la clase de actividad de su reproductor, puede crear un menú de diálogo para seleccionar de una lista deseada de velocidades de reproducción.

Implementación

Para agregar reproducción de velocidad variable a su aplicación de Android, siga estos pasos:

  1. Primero, cree el menú donde puede seleccionar una velocidad. Aquí usaremos un TextView que, cuando se toca, abrirá el menú que contiene los valores de velocidad. Otras opciones de menú incluyen Spinners.

    private TextView playbackSpeed;

    Luego, agregue el TextView para usted Activity diseño:

    <com.brightcove.player.view.BrightcoveExoPlayerVideoView
       android:id="@+id/brightcove_video_view"
       android:layout_width="match_parent"
       android:layout_height="280dp"
       android:layout_gravity="center_horizontal|top"/>
    
    <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal"
       android:layout_gravity="center_vertical"
       android:layout_below="@id/brightcove_video_view"
       android:padding="20dp">
    
       <TextView
           android:id="@+id/playbackSpeed"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:gravity="end"
           android:padding="20dp"
           android:text="Change Speed"
           android:textAlignment="textEnd" />
    
    </LinearLayout>
  2. Agregue el control de velocidad de reproducción a su reproductor Activity:

    playbackSpeed = (TextView) findViewById(R.id.playbackSpeed);
    playbackSpeed.setVisibility(View.VISIBLE);
  3. Establecer un onClick oyente en el TextView:

    playbackSpeed.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           showPlayerSpeedDialog();
       }
    });
    
  4. Agregue un método para mostrar el cuadro de diálogo de velocidad del jugador:

    private void showPlayerSpeedDialog() {
       String[] playerSpeedArrayLabels = {"0.8x", "1.0x", "1.2x", "1.5x", "1.8x", "2.0x"};
    
       PopupMenu popupMenu = new PopupMenu(MainActivity.this, playbackSpeed);
       for (int i = 0; i < playerSpeedArrayLabels.length; i++) {
           popupMenu.getMenu().add(i, i, i, playerSpeedArrayLabels[i]);
       }
       popupMenu.setOnMenuItemClickListener(item -> {
           int id = item.getItemId();
           CharSequence itemTitle = item.getTitle();
           float playbackSpeed = Float.parseFloat(itemTitle.subSequence(0, 3).toString());
           changePlayerSpeed(playbackSpeed, itemTitle.subSequence(0, 3).toString());
           return false;
       });
       popupMenu.show();
    }
    
  5. Agregue un método para cambiar la velocidad del jugador al valor seleccionado en el menú. Además, el método puede establecer el valor seleccionado en la etiqueta de la TextView:

    private void changePlayerSpeed(float speed, String speedLabel) {
       // Set playback speed
       ((ExoPlayerVideoDisplayComponent) brightcoveVideoView.getVideoDisplay()).getExoPlayer().setPlaybackParameters(new PlaybackParameters(speed, 1.0f));
       // Set playback speed label
       playbackSpeed.setText("Speed: " + speedLabel + "x");
    }
    

Manejo de problemas de reproducción

Si tiene problemas para configurar velocidades de reproducción más altas o más bajas, considere restringir si mostrar el control de velocidad de reproducción o restringir las velocidades disponibles, según:

  • Nivel de SO usando:

    Build.VERSION_CODES.<API_LEVEL>
  • Fabricante que utiliza: (la fiabilidad no está garantizada)

    Build.MANUFACTURER
    or
    Build.BRAND
    
  • Perfil de hardware (TV o teléfono / móvil) comprobando el valor booleano de:

    BrightcoveMediaController.checkTvMode(Context context)

Limitaciones

Es importante tener en cuenta que, si bien es posible establecer la velocidad de reproducción con ExoPlayer y Brightcove Native SDK para Android, no garantiza que establecer una velocidad de reproducción determinada proporcionará una experiencia de visualización y audición perfecta.

Las pruebas han revelado que es posible establecer una velocidad de reproducción que será demasiado alta para que las versiones anteriores del sistema operativo y los dispositivos de menor especificación la manejen sin una degradación inaceptable en la calidad de audio y video.

Si desea implementar el control de velocidad de reproducción, se recomienda que considere lo siguiente:

  • ¿Cuál es el nivel de sistema operativo Android más antiguo para el que está diseñada mi aplicación?
    • Es posible que los sistemas operativos más antiguos no tengan el soporte de códec adecuado para velocidades de reproducción más altas o más bajas de lo normal
    • Los sistemas operativos más antiguos pueden tener conjuntos de chips más antiguos que no pueden procesar los datos de video y audio de manera eficiente
  • ¿Mi contenido está protegido por DRM?
    • Dado que las pruebas han revelado algunos problemas relacionados con DRM con la velocidad de reproducción, no queremos descartar la posibilidad de problemas de descifrado al reproducir a velocidades más altas o más bajas de lo normal.
  • ¿Mi contenido utiliza subtítulos o varias pistas de audio?
    • Habilitar o deshabilitar subtítulos, o cambiar entre subtítulos, especialmente en dispositivos más antiguos o niveles de sistema operativo, es una circunstancia a considerar.