適用於Android的本地SDK的多個音頻軌道可進行離線播放

在本主題中,您將學習如何使用 Android 版 Brightcove 原生播放程式 SDK 使用離線播放時,如何傳回多個音訊和文字軌道。

管理多個曲目

默認情況下,沒有字幕文件,只有一個音軌被下載。要下載與視頻相關的其他資產,請按照以下步驟操作:

  1. 獲取視頻雲的參考離線目錄客戶。

    private OfflineCatalog catalog;
    ...
    catalog = new OfflineCatalog(this, eventEmitter, ACCOUNT_ID, POLICY_KEY);
    ...
  2. 致電getMediaFormatTracksAvailable方法,傳入視頻您要獲取其信息的對象,以及MediaFormatListener監聽返回的數據。

    OfflineCatalog.getMediaFormatTracksAvailable(
      @NonNull final Video video,
      @NonNull final MediaDownloadable.MediaFormatListener mediaFormatListener)
  3. MediaFormatListener調用以下方法:

    void onResult(MediaDownloadable mediaDownloadable, Bundle mediaFormatBundle);

    可下載的媒體對象包含信息,包括視頻格式,音頻語言和字幕。的mediaDownloadable對像被緩存,並在您調用時使用OfflineCatalog.downloadVideo(Video)

    對象包含有關可用媒體格式軌道的信息,並具有以下屬性:

  4. 從包中檢索數據列表。以下是檢索不同列表的示例:

    ArrayList<MediaFormat> video = bundle.getParcelableArrayList(MediaDownloadable.VIDEO_RENDITIONS);
    
    ArrayList<MediaFormat> audio = bundle.getParcelableArrayList(MediaDownloadable.AUDIO_LANGUAGES);
    
    ArrayList<String> roles = bundle.getStringArrayList(MediaDownloadable.AUDIO_LANGUAGE_ROLES);
    
    ArrayList<MediaFormat> captions = bundle.getParcelableArrayList(MediaDownloadable.CAPTIONS);
  5. 創建一個新的BundlefilteredBundle)以選擇要包括在下載內容中的音軌和隱藏式字幕。

    Bundle filteredBundle = new Bundle();
  6. 從先前創建的列表中過濾所需的曲目,然後將其添加到新曲目中filteredBundle

    ArrayList<MediaFormat> captions = bundle.getParcelableArrayList(MediaDownloadable.CAPTIONS);
    if (captions != null && captions.size() > 0) {
       ArrayList<MediaFormat> newCaptions = new ArrayList<>();
       newCaptions.add(captions.get(0));
    
    filteredBundle.putParcelableArrayList(MediaDownloadable.CAPTIONS, newCaptions);
    }
  7. 設置filteredBundleMediaDownloadable目的。

    mediaDownloadable.setConfigurationBundle(filteredBundle);
  8. 下載視頻。

    offlineCatalog.downloadVideo(video);

    在內部,OfflineCatalog將使用緩存的MediaDownloadable由...提供MediaDownloadable.MediaFormatListener打回來。

程式碼範例

有關下載其他音軌和字幕文件的完整示例,請參見離線播放示例應用