使用指南

Media3 1.11 - 最新消息

3 分鐘小故事
查看 Toni Heidenreich 的個人資料
Toni Heidenreich Android 軟體工程師

Media3 1.11 版已發布。這個版本支援絕大多數頂尖的 Android 媒體應用程式,並在播放、編輯和 UI 元件方面推出新功能、修正錯誤及改善效能。我們將擴充 Jetpack Compose UI 模組,提供可自訂的Player插槽和易於使用的預設值、互動式手勢、狀態觀察器,以及使用 PlayerPool 預先載入短片的功能。此外,我們也更新了 Media3 Cast 整合功能,支援 SystemUI Output Switcher,並推出新的 Ktor HTTP 用戶端網路擴充功能,以及 Ogg 和 WAV 檔案的新多工公用程式。

請參閱下文的重點摘要,並查看完整的版本資訊,瞭解所有變更。

播放 UI 和 Compose

隨著 Android 成為 Compose 優先的平台,我們將持續擴充 media3-ui-compose 和 media3-ui-compose-material3 模組。本次更新可讓您更精細地控管播放器版面配置、提供更豐富的互動模式,並與 Material3 深度整合。

可自訂的播放器版面配置

Material 3 Player Composable 現在支援 topControlscenterControlsbottomControlserrorOverlay 的專屬內容版位。您可以插入自己的可組合項,也可以使用 PlayerDefaults 中發布的現成預設值:

Player(
  player = player,
  topControls = { PlayerDefaults.TopControls(player) },
  centerControls = { PlayerDefaults.CenterControls(player) },
  bottomControls = { PlayerDefaults.BottomControls(player) },
)

Player Composable 也整合了 FocusRequester 支援,可在 Android TV、摺疊式裝置和電腦環境中,順暢使用 D-Pad 和鍵盤瀏覽。

player_video.png
可組合播放器範例 (含自訂控制項)

手勢和播放速度控制項

PlaybackSpeedState 現在提供快轉/慢動作 API。demo-compose app 示範了如何透過長按手勢快轉播放,以及輕觸兩下進行搜尋。搭配 1.10 版推出的 ProgressSlider,Compose 播放器 UI 現在可提供豐富的觸控和手勢互動功能。

使用 PlayerPool 預先載入短篇影片

對於具有滑動視窗媒體動態消息的應用程式 (例如短篇直向影片),有效管理多個 ExoPlayer 執行個體是常見的挑戰。Media3 1.11 推出 PlayerPool (位於 common-ktx 中) 和 rememberPooledPlayer (位於 ui-compose 中),可自動處理播放器回收和預先載入作業。

新的 ShortFormPlayerScreen demo-compose 範例展示了這項功能,使用者捲動時,系統會將播放器集中管理、預先載入及無縫回收,並以垂直分頁動態饋給的形式呈現。

MiniController

media3-ui-compose-material3 中的新 MiniController 可組合函式提供精巧的播放列,顯示目前項目的標題、藝人、專輯封面和進度,以及播放/暫停控制項。與 media3-ui-compose-material3 中的所有預設 Composables 一樣,MiniController 支援整合 Material 3 動態色彩,可自動配合使用者的桌布主題。這非常適合用於持續顯示的底部功能表或迷你播放器,例如在使用者瀏覽內容或進行投放工作階段時。

mini_player.png
顯示專輯封面、媒體中繼資料和基本控制項的 Media3 MiniController

擴充中繼資料和錯誤的狀態保留項目

我們在 media3-ui-compose 中新增了多個反應式狀態持有者:

  • rememberCurrentMediaItemState:觀察目前播放項目的中繼資料
  • rememberPlaylistState:觀察完整播放清單和有效索引
  • rememberErrorState:追蹤播放錯誤,並在 Material 3 中使用相符的 ErrorText 可組合項和預設 ErrorOverlay

我們會在日後推出的版本中,持續新增內容和提供更多自訂選項。請在專案問題追蹤器中分享您的想法。

現代化 Cast 整合

Media3 1.11 更新了 Cast 擴充功能,提供程式輔助設定選項,並支援作業系統層級的轉送。

CastParams 和 SystemUI 輸出端切換器

現在您可以使用 CastParams 設定 Cast 擴充功能:

val castParams = CastParams.Builder()
  .setShowSystemOutputSwitcherOnCastButtonClick(true)
  .build()


Cast.getSingletonInstance(context).initialize(castParams)

設定 setShowSystemOutputSwitcherOnCastIconClick(true) 會設定 MediaRouteButton 在支援的平台版本上開啟 Android 原生的 SystemUI Output Switcher,提供統一的輸出選擇器體驗。

在 Compose 中使用反應式 MediaRouteButton 狀態

使用 Jetpack Compose 的應用程式現在可以輕鬆新增媒體路徑按鈕 (又稱投放按鈕),自動觀察對話方塊狀態並據此更新。與 Media3 的 CastPlayer 一起使用時,不需要其他邏輯!

@Composable
fun TopAppBarWithCast() {
  Row {
    Text(text = "App Title")
    MediaRouteButton()
  }
}
cast_button_2.png
應用程式中的 Media3 媒體路線按鈕,可啟動預設的輸出端切換器對話方塊

核心播放和工作階段強化功能

Eclipsa Video - HAGC 動態 HDR 中繼資料 (API 37 以上)

Eclipsa Video 可在不同裝置上提供更一致的 HDR 體驗,包括一致的 HDR 白色基準、根據螢幕和周圍環境調整的動態範圍,確保所有裝置都能呈現符合創意原意的畫面。

ExoPlayer 現在支援播放漸進式媒體 (MP4、Matroska) 的必要 HAGC (ST 2094-50) 時間碼中繼資料。播放器會自動將 HAGC 中繼資料軌與相關聯的視訊軌合併,並透過頻外傳輸方式,將中繼資料傳送至 API 37 以上裝置的解碼器。在舊版裝置上,ExoPlayer 會順暢地退回標準 HDR 播放體驗,不會進行調整。  

eclipsa.png
插圖:顯示 Eclipsa 影片 HDR 的優點,例如色彩對比更一致

新的 Ktor HTTP 用戶端擴充功能

新的 media3-datasource-ktor 擴充功能模組提供 KtorDataSource,並由 Ktor HTTP 堆疊支援。這項功能提供以 Kotlin 為主、協同程式友善的替代方案,可取代現有的 Cronet 和 OkHttp 資料來源模組。

非同步 MediaSession 連線

MediaSession.Callback 現在包含 onConnectAsync(),可讓您非同步處理控制器連線嘗試,例如在接受連線前驗證授權。您可以傳回立即 Future,並使用 Futures.immediateFuture(ConnectionResult) 取得與現有 onConnect 相同的行為。 

override fun onConnectAsync(
  session: MediaSession,
  controller: MediaSession.ControllerInfo
): ListenableFuture<MediaSession.ConnectionResult> {
  return authenticateControllerAsync(controller)
}

更安全的 MediaSession 預設值

對於未在 MediaSession.Callback 中覆寫 onConnectonConnectAsync 的應用程式,程式庫現在預設會採用更安全的設定。具體來說,系統預設不會再與不受信任的控制器分享工作階段資料,也就是說,除非您明確實作這些回呼方法來授權連線,否則第三方或非系統應用程式無法存取工作階段資料 (這些應用程式沒有通知存取權)。

新的 Muxer 實作項目和容器剖析

OggMuxer 和 WavMuxer

我們新增了兩個專用多工器:OggMuxer用於將 OPUS 和 VORBIS 串流多工處理為標準 .ogg 檔案,以及 WavMuxer 用於產生未壓縮的浮點 PCM .wav 音訊檔案。

剖析容器並追蹤參照

  • MP4 軌參考 (tref): Mp4Muxer.addTrackReference 可將相依中繼資料或輔助軌連結至主要影片串流。
  • 章節擷取:系統現在會從 MP4 檔案 (.m4a.m4b) 擷取 QuickTime 和 Nero 章節,並將 Matroska 章節擷取為 Chapter 中繼資料項目,方便使用者瀏覽有聲書和 Podcast。

如有任何錯誤、問題或功能要求,請使用 Issue Tracker 回報。期待收到您的申請!

繼續閱讀