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:
-
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 ustedActivity
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>
-
Agregue el control de velocidad de reproducción a su reproductor
Activity
:playbackSpeed = (TextView) findViewById(R.id.playbackSpeed); playbackSpeed.setVisibility(View.VISIBLE);
-
Establecer un
onClick
oyente en elTextView
:playbackSpeed.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showPlayerSpeedDialog(); } });
-
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(); }
-
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.