Einstellen der Wiedergabegeschwindigkeit auf Android-Geräten

In diesem Thema erfahren Sie, wie Sie mit dem Brightcove Native SDK für Android Funktionen für die Wiedergabe mit variabler Geschwindigkeit zu Apps hinzufügen können.

Einleitung

Für einige Ihrer Apps möchten Sie dem Benutzer möglicherweise die Möglichkeit bieten, die Wiedergabegeschwindigkeit zu ändern, während er Videos ansieht (z. B. eLearning-Umgebungen). Sie können diese Funktionalität mit dem Native SDK für Android hinzufügen.

In Ihrer Player-Aktivitätsklasse können Sie ein Dialogmenü erstellen, um aus einer gewünschten Liste von Wiedergabegeschwindigkeiten auszuwählen.

Implementierung

Führen Sie die folgenden Schritte aus, um Ihrer Android-App eine Wiedergabe mit variabler Geschwindigkeit hinzuzufügen:

  1. Erstellen Sie zunächst das Menü, in dem Sie eine Geschwindigkeit auswählen können. Hier verwenden wir a TextView die beim Antippen das Menü mit den Geschwindigkeitswerten öffnet. Andere Menüoptionen umfassen Spinner.

    private TextView playbackSpeed;

    Fügen Sie dann die TextView zu deinem Activity Layout:

    <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. Fügen Sie Ihrem Player die Steuerung der Wiedergabegeschwindigkeit hinzu Activity:

    playbackSpeed = (TextView) findViewById(R.id.playbackSpeed);
    playbackSpeed.setVisibility(View.VISIBLE);
  3. Stellen Sie ein onClick Hörer auf dem TextView:

    playbackSpeed.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           showPlayerSpeedDialog();
       }
    });
    
  4. Fügen Sie eine Methode hinzu, um den Player-Geschwindigkeitsdialog anzuzeigen:

    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. Fügen Sie eine Methode hinzu, um die Spielergeschwindigkeit auf den im Menü ausgewählten Wert zu ändern. Außerdem kann die Methode den ausgewählten Wert in das Etikett für die 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");
    }
    

Handhabung von Wiedergabeproblemen

Wenn Sie Probleme beim Einstellen höherer oder niedrigerer Wiedergabegeschwindigkeiten haben, sollten Sie die Anzeige der Wiedergabegeschwindigkeitssteuerung oder die verfügbaren Geschwindigkeiten einschränken, basierend auf:

  • Betriebssystemebene mit:

    Build.VERSION_CODES.<API_LEVEL>
  • Hersteller verwendet: (Zuverlässigkeit nicht garantiert)

    Build.MANUFACTURER
    or
    Build.BRAND
    
  • Hardwareprofil (TV oder Telefon/Mobiltelefon) durch Prüfen des booleschen Wertes von:

    BrightcoveMediaController.checkTvMode(Context context)

Einschränkungen

Es ist wichtig zu beachten, dass es zwar möglich ist, die Wiedergabegeschwindigkeit mit dem ExoPlayer und dem Brightcove Native SDK für Android einzustellen, dies jedoch nicht garantiert, dass die Einstellung einer bestimmten Wiedergabegeschwindigkeit ein nahtloses Wiedergabe- und Hörerlebnis bietet.

Tests haben gezeigt, dass es möglich ist, eine Wiedergabegeschwindigkeit einzustellen, die für ältere Betriebssystemversionen und Geräte mit niedrigeren Spezifikationen zu hoch ist, um ohne eine inakzeptable Verschlechterung der Audio- und Videoqualität zu verarbeiten.

Wenn Sie die Steuerung der Wiedergabegeschwindigkeit implementieren möchten, sollten Sie Folgendes beachten:

  • Was ist die älteste Android-Betriebssystemversion, für die meine Anwendung bestimmt ist?
    • Ältere Betriebssysteme verfügen möglicherweise nicht über die richtige Codec-Unterstützung für höhere oder niedrigere Wiedergabegeschwindigkeiten als normal
    • Ältere Betriebssysteme haben möglicherweise ältere Chipsätze, die die Video- und Audiodaten nicht performant verarbeiten können
  • Sind meine Inhalte DRM-geschützt?
    • Da Tests einige DRM-bezogene Probleme mit der Wiedergabegeschwindigkeit ergeben haben, möchten wir die Möglichkeit von Entschlüsselungsproblemen beim Spielen mit höheren oder niedrigeren Geschwindigkeiten als normal nicht ausschließen
  • Verwendet mein Inhalt Untertitel oder mehrere Audiospuren?
    • Das Aktivieren oder Deaktivieren von Untertiteln oder das Wechseln zwischen Untertiteln, insbesondere auf älteren Geräten oder Betriebssystemversionen, ist ein zu berücksichtigender Umstand.