在 Android 設備上設置播放速度

在本主題中,您將學習如何使用適用於 Android 的 Brightcove Native SDK 向應用程序添加變速播放功能。

簡介

對於您的某些應用程序,您可能希望為用戶提供在觀看視頻(即電子學習環境)時更改播放速度的功能。您可以使用適用於 Android 的本機 SDK 添加此功能。

在您的播放器 Activity 類中,您可以創建一個對話框菜單以從所需的播放速度列表中進行選擇。

實作

要向您的 Android 應用程序添加變速播放,請按照以下步驟操作:

  1. 首先,創建可以選擇速度的菜單。在這裡我們將使用一個TextView點擊後,將打開包含速度值的菜單。其他菜單選項包括 Spinners。

    private TextView playbackSpeed;

    然後,添加TextView給你的Activity佈局:

    <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. 將播放速度控制添加到您的播放器Activity :

    playbackSpeed = (TextView) findViewById(R.id.playbackSpeed);
    playbackSpeed.setVisibility(View.VISIBLE);
  3. 設置一個onClick上的聽眾TextView :

    playbackSpeed.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           showPlayerSpeedDialog();
       }
    });
    
  4. 添加一個方法來顯示播放器速度對話框:

    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. 添加一種將播放器速度更改為從菜單中選擇的值的方法。此外,該方法可以將所選值設置到標籤中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");
    }
    

處理播放問題

如果您在設置更高或更低的播放速度時遇到問題,請考慮限制是否顯示播放速度控件,或限制可用速度,具體取決於:

  • 操作系統級別使用:

    Build.VERSION_CODES.<API_LEVEL>
  • 製造商使用:(不保證可靠性)

    Build.MANUFACTURER
    or
    Build.BRAND
    
  • 硬件配置文件(電視或電話/手機)通過檢查以下布爾值:

    BrightcoveMediaController.checkTvMode(Context context)

限制

請務必注意,雖然可以使用 ExoPlayer 和適用於 Android 的 Brightcove Native SDK 設置播放速度,但不能保證設置給定的播放速度將提供無縫的觀看和收聽體驗。

測試表明,可以設置一個過高的播放速度,對於較舊的操作系統版本和較低規格的設備來說,在不出現不可接受的音頻和視頻質量下降的情況下無法處理。

如果要實現播放速度控制,建議您考慮以下幾點:

  • 我的應用程序適用的最舊的 Android 操作系統級別是什麼?
    • 較舊的操作系統可能沒有適當的編解碼器支持比正常更高或更低的播放速度
    • 較舊的操作系統可能具有較舊的芯片組,無法以高性能方式處理視頻和音頻數據
  • 我的內容是否受 DRM 保護?
    • 由於測試顯示播放速度存在一些與 DRM 相關的問題,我們不排除以高於或低於正常速度播放時出現解密問題的可能性
  • 我的內容是否使用隱藏式字幕或多音軌?
    • 啟用或禁用字幕,或在字幕之間切換,尤其是在較舊的設備或操作系統級別上,是一種需要考慮的情況。