Réglage de la vitesse de lecture sur les appareils Android

Dans cette rubrique, vous apprendrez à ajouter une fonctionnalité de lecture à vitesse variable aux applications à l'aide du SDK Brightcove Native pour Android.

Introduction

Pour certaines de vos applications, vous souhaiterez peut-être permettre à l'utilisateur de modifier la vitesse de lecture pendant qu'il regarde des vidéos (c'est-à-dire des environnements d'apprentissage en ligne). Vous pouvez ajouter cette fonctionnalité avec le SDK natif pour Android.

Dans votre classe d'activité de lecteur, vous pouvez créer un menu de dialogue pour sélectionner parmi une liste souhaitée de vitesses de lecture.

Mise en œuvre

Pour ajouter une lecture à vitesse variable à votre application Android, procédez comme suit :

  1. Tout d'abord, créez le menu dans lequel vous pouvez sélectionner une vitesse. Ici, nous utiliserons un TextView qui, une fois tapé, ouvrira le menu qui contient les valeurs de vitesse. Les autres options de menu incluent Spinners.

    private TextView playbackSpeed;

    Ajoutez ensuite le TextView à votre Activity mise en page :

    <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. Ajoutez le contrôle de la vitesse de lecture à votre lecteur Activity:

    playbackSpeed = (TextView) findViewById(R.id.playbackSpeed);
    playbackSpeed.setVisibility(View.VISIBLE);
  3. Définissez un onClick écouteur sur TextView:

    playbackSpeed.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           showPlayerSpeedDialog();
       }
    });
    
  4. Ajoutez une méthode pour afficher la boîte de dialogue de vitesse du lecteur :

    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. Ajoutez une méthode pour modifier la vitesse du lecteur à la valeur sélectionnée dans le menu. En outre, la méthode peut définir la valeur sélectionnée dans l'étiquette pour 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");
    }
    

Gestion des problèmes de lecture

Si vous rencontrez des problèmes pour régler des vitesses de lecture supérieures ou inférieures, envisagez de restreindre l'affichage du contrôle de vitesse de lecture ou de restreindre les vitesses disponibles, en fonction de :

  • Niveau du système d'exploitation en utilisant :

    Build.VERSION_CODES.<API_LEVEL>
  • Fabricant utilisant : (la fiabilité n'est pas garantie)

    Build.MANUFACTURER
    or
    Build.BRAND
    
  • Profil matériel (téléviseur ou téléphone/mobile) en vérifiant la valeur booléenne de :

    BrightcoveMediaController.checkTvMode(Context context)

Contraintes

Il est important de noter que s'il est possible de régler la vitesse de lecture avec l'ExoPlayer et le Brightcove Native SDK pour Android, cela ne garantit pas que la définition d'une vitesse de lecture donnée offrira une expérience de visualisation et d'écoute transparente.

Les tests ont révélé qu'il est possible de définir une vitesse de lecture qui sera trop élevée pour les anciennes versions du système d'exploitation et les appareils moins performants à gérer sans une dégradation inacceptable de la qualité audio et vidéo.

si vous souhaitez mettre en œuvre un contrôle de la vitesse de lecture, il est recommandé de prendre en compte les éléments suivants :

  • Quel est le plus ancien niveau de système d'exploitation Android auquel mon application est destinée ?
    • Les systèmes d'exploitation plus anciens peuvent ne pas prendre en charge les codecs appropriés pour des vitesses de lecture supérieures ou inférieures à la normale
    • Les systèmes d'exploitation plus anciens peuvent avoir des jeux de puces plus anciens qui ne peuvent pas traiter les données vidéo et audio de manière performante
  • Mon contenu est-il protégé par DRM ?
    • Étant donné que les tests ont révélé certains problèmes liés aux DRM avec la vitesse de lecture, nous ne voulons pas exclure la possibilité de problèmes de décryptage lors de la lecture à des vitesses supérieures ou inférieures à la normale.
  • Mon contenu utilise-t-il des sous-titres codés ou plusieurs pistes audio ?
    • L'activation ou la désactivation des sous-titres, ou le basculement entre les sous-titres, en particulier sur les anciens appareils ou les niveaux de système d'exploitation, est une circonstance à prendre en compte.