Media3
最近更新時間 | 穩定版 | 候選版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2023 年 2 月 16 日 | - | 1.0.0-rc01 | - | - |
宣告依附元件
如果要為 Media3 新增依附元件,您必須將 Google Maven 存放區新增至專案。詳情請參閱 Google 的 Maven 存放區。
在應用程式或模組的 build.gradle
檔案中,新增您需要的構件依附元件:
Groovy
dependencies { def media3_version = "1.0.0-rc01" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" }
Kotlin
dependencies { val media3_version = "1.0.0-rc01" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") }
如要進一步瞭解依附元件,請參閱「新增建構依附元件」一文。
意見回饋
您的意見可協助我們改善 Jetpack。您可以使用 Media3 Issue Tracker 尋找問題的答案、已知問題和功能要求,以及提出新問題。
1.0.0 版
1.0.0-rc01 版
2023 年 2 月 16 日
發布了 androidx.media3:media3-*:1.0.0-rc01
。1.0.0-rc01 版包含以下修訂項目。
此版本可對應至 ExoPlayer 2.18.3 版。
- 核心程式庫:
- 調整轉譯器的解碼器排序邏輯,以維持
MediaCodecSelector
的偏好設定,即使解碼器回報可能無法順利播放媒體亦然。舉例來說,在預設選取器中,系統會優先採用僅提供功能性支援的硬體解碼器,而非完全支援格式的軟體解碼器。(#10604)。 - 新增
ExoPlayer.Builder.setPlaybackLooper
,可為新的 ExoPlayer 執行個體設定既有的播放執行緒。 - 允許清除下載管理員協助程式。(#10776)。
- 新增參數至
BasePlayer.seekTo
,以指示用於搜尋的指令。 - 在 API 21 以上版本載入可繪項目時使用主題。(#220)。
- 新增
ConcatenatingMediaSource2
,允許將多個媒體項目合併至單一視窗。(#247)。
- 調整轉譯器的解碼器排序邏輯,以維持
- 擷取工具:
- 剖析 trak atom 時,如果範例資料表 (stbl) 缺少必要的範例說明 (stsd),則請擲回
ParserException
而非NullPointerException
。 - 在 fMP4 中直接搜尋同步影格時,正確略過範例 (#10941)。
- 剖析 trak atom 時,如果範例資料表 (stbl) 缺少必要的範例說明 (stsd),則請擲回
- 音訊:
- 使用壓縮的音訊格式位元率來計算直接播放 (直通) 中
AudioTrack
的緩衝區大小下限。
- 使用壓縮的音訊格式位元率來計算直接播放 (直通) 中
- 文字:
- 如果字幕檔案不含任何提示,則請修正
TextRenderer
將無效 (負面) 索引傳遞至Subtitle.getEventTime
的問題。 - SubRip:針對開頭為位元組順序標記的 UTF-16 檔案新增支援。
- 如果字幕檔案不含任何提示,則請修正
- 中繼資料:
- 依據 ID3 v2.4 的許可,從 ID3 影格剖析多個以空值分隔的值。
- 新增
MediaMetadata.mediaType
,來表示內容類型或中繼資料說明的資料夾類型。 - 新增
MediaMetadata.isBrowsable
以取代MediaMetadata.folderType
。資料夾類型會在下一個版本中被淘汰。
- DASH:
- 為圖片調整集新增完整剖析功能,包括圖塊數量。(#3752)。
- UI:
- 工作階段:
- 新增抽象
SimpleBasePlayer
,以協助實作自訂玩家的Player
介面。 - 新增輔助方法,以將平台工作階段符記轉換為 Media3
SessionToken
(#171)。 - 使用
onMediaMetadataChanged
來觸發平台媒體工作階段的更新作業。(#219)。 - 將媒體工作階段新增為
DefaultMediaNotificationProvider
的getMediaButtons()
引數,並使用不可變動的清單以確保清晰度。(#216)。 - 新增
onSetMediaItems
回呼監聽器以提供修改/設定MediaItem
清單的方式,在播放器上設定索引和位置之前,依工作階段起始索引和位置 (#156)。 - 避免在非藍牙媒體按鈕事件上輕觸兩下偵測 (#233)。
- 使
QueueTimeline
出現可疑的舊版工作階段狀態時更可靠 (#241)。
- 新增抽象
- 中繼資料:
- 依據 ID3 v2.4 的許可,從 ID3 影格剖析多個以空值分隔的值。
- 新增
MediaMetadata.mediaType
,來表示內容類型或中繼資料說明的資料夾類型。 - 新增
MediaMetadata.isBrowsable
以取代MediaMetadata.folderType
。資料夾類型會在下一個版本中被淘汰。
- Cast 擴充功能:
- 將 Cast SDK 版本遞增升級至 21.2.0。
- IMA 擴充功能:
- 移除應用程式執行緒上
ImaServerSideAdInsertionMediaSource
的播放器監聽器,以免發生執行緒問題。 - 將屬性
focusSkipButtonWhenAvailable
新增至ImaServerSideAdInsertionMediaSource.AdsLoader.Builder
,以要求在電視裝置上聚焦略過按鈕,並根據預設將其設定為 true。 - 將方法
focusSkipButton()
新增至ImaServerSideAdInsertionMediaSource.AdsLoader
,以程式輔助方式要求聚焦略過按鈕。 - 將 IMA SDK 版本遞增升級至 3.29.0。
- 移除應用程式執行緒上
- 試用版應用程式︰
- 在執行階段要求下載通知的通知權限。(#10884)。
1.0.0-beta03 版
2022 年 11 月 22 日
發布了 androidx.media3:media3-*:1.0.0-beta03
。1.0.0-beta03 版包含以下修訂項目。
此版本可對應至 ExoPlayer 2.18.2 版。
- 核心程式庫:
- 新增
ExoPlayer.isTunnelingEnabled
來檢查目前所選的音軌是否已啟用穿隧。(#2518)。 - 新增
WrappingMediaSource
來將換行簡化為MediaSource
。(#7279)。 - 在播放因可用記憶體不足而卡住時捨棄背景緩衝區。
- 啟用卸載時關閉追蹤「doSomeWork」區塊。
- 修正
PlaybackStatsListener
中快速跳轉的工作階段追蹤問題。(#180)。 - 在單一項目播放清單中呼叫
seekToNext
或seekToPrevious
時,傳送缺少的onMediaItemTransition
回呼 (#10667)。 - 新增傳回算繪影片的途徑尺寸的
Player.getSurfaceSize
。 - 修正在播放器釋出期間移除事件監聽器會導致
IllegalStateException
的錯誤。(#10758)。
- 新增
- 版本:
- 強制執行最低
compileSdkVersion
,以避免編譯錯誤。(#10684)。 - 避免包含在其他 Gradle 版本時,發布模塊。
- 強制執行最低
- 音軌選取:
- 如果螢幕不支援它,則使用 Dolby Vision 的其他音軌。(#8944)。
- 下載內容:
- 影片:
- 如果螢幕不支援 Dolby Vision,不妨試試替代解碼器。 (#9794)。
- 音訊:
- 將
SingleThreadExecutor
用於發布AudioTrack
執行個體,以免同時發布多個播放器時發生 OutOfMemory 錯誤。(#10057)。 - 已針對 AudioTrack 卸載狀態新增
AudioOffloadListener.onExperimentalOffloadedPlayback
。(#134)。 - 始
AudioTrackBufferSizeProvider
成為公用介面。 - 新增
ExoPlayer.setPreferredAudioDevice
以設定偏好的音訊輸出裝置 (#135)。 - 將
androidx.media3.exoplayer.audio.AudioProcessor
重新命名為androidx.media3.common.audio.AudioProcessor
。 - 將 8 聲道和 12 聲道音訊對應到所有 7.1 和 7.1.4 聲道遮罩 (#10701)。
- 將
- 中繼資料:
- 現在可以設定
MetadataRenderer
,以在中繼資料可用時盡快轉譯。建立具有MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
的執行個體,以指定轉譯器要否要提早輸出中繼資料,或與播放器位置同步。
- 現在可以設定
- DRM:
- 解決 Android 13 ClearKey 實作中的錯誤,該錯誤會傳回非空白但無效的授權網址。
- 修正在播放清單中切換數位版權管理配置 (例如 Widevine 至 ClearKey) 時會發生
setMediaDrmSession failed: session not opened
錯誤。
- 文字:
- CEA-608:確保系統正確處理欄位 2 的服務切換指令。(#10666)。
- DASH:
- 從資訊清單中剖析
EventStream.presentationTimeOffset
(#10460)。
- 從資訊清單中剖析
- UI:
- 將播放器目前的覆寫設定做為
TrackSelectionDialogBuilder
中的預設值使用 (#10429)。
- 將播放器目前的覆寫設定做為
- 工作階段:
- 即使某些需要非同步解析,仍可確保指令以正確順序執行 (#85)。
- 新增
DefaultMediaNotificationProvider.Builder
以建構DefaultMediaNotificationProvider
執行個體。建構工具可以設定供應商使用的通知 ID、通知管道 ID 和通知管道名稱。此外,請新增方法DefaultMediaNotificationProvider.setSmallIcon(int)
,以設定通知小圖示。(#104)。 - 確保在不捨棄
MediaController.release()
前傳送指令。(#99)。 SimpleBitmapLoader
可以從file://
URI 載入點陣圖 (#108)。- 修正防止
MediaController
在一段時間內搜尋廣告 (#122) 的斷言。 - 播放結束後,
MediaSessionService
就會停止在前景播放,並顯示可重新啟動播放上一次所播放媒體項目的通知。(#112)。 - 請勿為了暫停而啟動具有待處理意圖的前景服務。(#167)。
- 手動隱藏與
DefaultNotificationProvider
在 API 26 和 API 27 (API 28 以上版本會自動隱藏標記) 上建立通知相關聯的「標記」(#131)。 - 修正從舊版 MediaSession 至 Media3 MediaController 的第二個繫結機制連線導致 IllegalStateException 的錯誤。(#49)。
- RTSP:
- 我是:
- FFmpeg 擴充功能:
- 新增必要的旗標,以連結 FFmpeg 程式庫與 NDK 23.1.7779620 以上版本 (#9933)。
- AV1 擴充功能:
- 請更新 CMake 版本,以免與最新的 Android Studio 版不相容 (#9933)。
- Cast 擴充功能:
- 實作
getDeviceInfo()
,以便在使用MediaController
控制播放時能夠識別CastPlayer
。(#142)。
- 實作
- 轉換程式:
- 新增多工器監控計時器,以偵測何時產生輸出樣本時太慢。
- 移除已淘汰的符號:
- 移除
Transformer.Builder.setOutputMimeType(String)
。這項功能已停用。使用預設多工器時,MIME 類型一律為 MP4。
- 移除
1.0.0-beta02 版
2022 年 7 月 22 日
發布了 androidx.media3:media3-*:1.0.0-beta02
。1.0.0-beta02 版包含以下修訂項目。
此版本可對應至 ExoPlayer 2.18.1 版。
- 核心程式庫:
- 確認透過
ExoPlayer.setShuffleOrder
變更ShuffleOrder
會導致使用reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
向Player.Listener#onTimelineChanged
呼叫 (#9889)。 - 如果是漸進式媒體,請只加入在緩衝處理位置選取的曲目 (#10361)。
- 允許所有 ExoPlayer 記錄輸出使用自訂記錄器 (#9752)。
- 修正
DefaultMediaSourceFactory
中的setDataSourceFactory
實作,在某些情況下無法正常運作的問題 (#116)。
- 確認透過
- 擷取工具:
- DASH:
- 從資訊清單中清除 ClearKey 授權網址 (#10246)。
- UI:
- 確保 TalkBack 會在播放控制項選單中公告目前使用中的速度選項 (#10298)。
- RTSP:
- 新增 VP8 片段化封包處理 (#110)。
- Leanback 擴充功能:
- 監聽
LeanbackAdapter
中的playWhenReady
變更 (10420)。
- 監聽
- 投放:
1.0.0-beta01 版
2022 年 6 月 16 日
發布了 androidx.media3:media3-*:1.0.0-beta01
。1.0.0-beta01 版包含這些以下修訂項目。
這與 ExoPlayer 2.18.0 版相對應。
- 核心程式庫:
- 透過
MediaMetricsManager
啟用 Android 平台診斷支援功能。ExoPlayer 會向平台傳送播放事件和效能資料,有助於在裝置提供系統效能與偵錯資訊。如果裝置使用者已啟用分享使用狀況與診斷資料功能,則 Google 也可能會收集以上資料。您可以透過ExoPlayer.Builder.setUsePlatformDiagnostics(false)
,讓應用程式選擇不採用 ExoPlayer 的平台診斷貢獻功能。 - 修正使用
MergingMediaSource
會造成音軌重設過度頻繁的問題,例如在播放途中側載字幕及變更選取的字幕便會發生這個情況 (#10248)。 - 停止在 API 29 及 30 偵測 5G-NSA 網路類型。這些播放動作會假設是透過 4G 網路進行。
- 不允許將
null
傳遞至MediaSource.Factory.setDrmSessionManagerProvider
和MediaSource.Factory.setLoadErrorHandlingPolicy
。如果有必要的話,可以明確傳遞DefaultDrmSessionManagerProvider
和DefaultLoadErrorHandlingPolicy
的執行個體。 - 新增
MediaItem.RequestMetadata
,方便在LocalConfiguration
還不明確時,代表播放媒體所需的中繼資料。另外也移除MediaMetadata.mediaUrl
,因為現在這個中繼資料已內含在RequestMetadata
。 - 新增
Player.Command.COMMAND_SET_MEDIA_ITEM
,以便讓播放器設定單翼項目。
- 透過
- 音軌選取:
- 將
TrackSelectionOverrides
類別壓平合併至TrackSelectionParameters
,並將TrackSelectionOverride
升級至頂層類別。 - 將
TracksInfo
重新命名為Tracks
,並將TracksInfo.TrackGroupInfo
重新命名為Tracks.Group
。Player.getCurrentTracksInfo
和Player.Listener.onTracksInfoChanged
也已經重新命名為Player.getCurrentTracks
和Player.Listener.onTracksChanged
。這包括「取消淘汰」Player.Listener.onTracksChanged
方法名稱,不過參數類型不同。 - 將
DefaultTrackSelector.buildUponParameters
和DefaultTrackSelector.Parameters.buildUpon
變更為回傳DefaultTrackSelector.Parameters.Builder
,而不是已淘汰的DefaultTrackSelector.ParametersBuilder
。 - 新增系統預設啟用的
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
。啟用後,DefaultTrackSelector
會偏好使用頻道數量並未超出裝置輸出能力範圍的音軌。在手持裝置上,DefaultTrackSelector
比起多頻道音訊格式更偏好使用立體聲/單聲道,除非多頻道格式可以設定空間音訊 (Android 12L 以上) 或是 Dolby 環場音效格式。另外,若在可以支援空間音訊的裝置上,則DefaultTrackSelector
會監控空間音訊化屬性的變更情況,並在變更時觸發選取新的音軌。設有television
UI 模式的裝置不受這些限制,系統會偏好使用最多頻道數量的格式。如果想啟用此功能,必須用Context
建構DefaultTrackSelector
執行個體。
- 將
- 影片:
- 將
DummySurface
重新命名為PlaceholderSurface
。 - 新增
MediaCodecVideoRenderer.getCodecMaxInputSize
的 AV1 支援功能。
- 將
- 音訊:
- 使用 LG AC3 音訊解碼器通告非標準的 MIME 類型。
- 將
AudioAttributes.getAudioAttributesV21()
的傳回類型從android.media.AudioAttributes
變更為新的AudioAttributesV21
包裝函式類別,防止 API 21 以下會發生 ART 驗證過慢的情況。 - 在 HTTP 即時串流不分區塊準備時,會發生未設定格式音訊頻道數量的情況,此時請查詢平台 (API 29 以上) 或為音訊直通假設音訊編碼頻道數量 (10204)。
- 如果解碼器輸出 12 頻道 PCM 音訊,請用頻道遮罩
AudioFormat.CHANNEL_OUT_7POINT1POINT4
設定AudioTrack
(#10322)。
- DRM
- 如果在變更格式後需要立即尋求 DRM 工作階段,請確定 DRM 工作階段一律可以正常更新 (10274)。
- 文字:
- 將
Player.getCurrentCues()
變更為回傳CueGroup
,而不是List<Cue>
。 - SSA:在
BorderStyle == 3
的情況下支援OutlineColour
樣式設定 (也就是說OutlineColour
會設定提示的背景) (#8435)。 - CEA-708:將資料剖析為多個服務區塊,並忽略並未和目前選取的服務編號相關的區塊。
- 移除
RawCcExtractor
,這個項目只有 Google 內部字幕格式使用。
- 將
- 擷取工具:
- UI:
- 修正
useController=false
時,在PlayerView
上遞送事件到OnClickListener
組合的問題 (#9605)。同時,修正所有檢視畫面設定的遞送事件到OnLongClickListener
的問題。 - 修正在
ACTION_UP
之前,誤將退出PlayerView
邊界的觸控事件序列視為點擊的問題 (#9861)。 - 修正
PlayerView
輕觸時可能會觸發播放而不是隱藏控制項的無障礙功能問題 (#8627)。 - 重新編寫
TrackSelectionView
和TrackSelectionDialogBuilder
,以便正確搭配Player
介面使用,而不是ExoPlayer
。這樣做可讓檢視畫面和其他Player
實作內容一同使用,並可移除 UI 模組對於 ExoPlayer 模組的依附性。這是一項破壞性變更。 - 不在
PlayerView
音軌選取器內顯示強制文字音軌,當選擇「None」(無) 時,保留合適的強制文字音軌 (#9432)。
- 修正
- DASH:
- 從 DTS
AudioChannelConfiguration
元素剖析頻道數量,這樣便能重新啟用 DTS 串流的音訊直通 (#10159)。 - 禁止將
null
傳遞至DashMediaSource.Factory.setCompositeSequenceableLoaderFactory
。如果有必要的話,可以明確傳遞DefaultCompositeSequenceableLoaderFactory
的執行個體。
- 從 DTS
- HLS:
- 如果播放清單的轉碼器屬性並未含有該音訊轉碼器,則使用備用的分區塊準備 (#10065)。
- 禁止將
null
傳遞至HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
、HlsMediaSource.Factory.setPlaylistParserFactory
及HlsMediaSource.Factory.setPlaylistTrackerFactory
。如果有必要的話,可以明確傳遞DefaultCompositeSequenceableLoaderFactory
和DefaultHlsPlaylistParserFactory
的執行個體或DefaultHlsPlaylistTracker.FACTORY
的參考資料。
- 流暢串流:
- 禁止將
null
傳遞至SsMediaSource.Factory.setCompositeSequenceableLoaderFactory
。如果有必要的話,可以明確傳遞DefaultCompositeSequenceableLoaderFactory
的執行個體。
- 禁止將
- RTSP:
- 新增 H263 的 RTP 讀取工具 (#63)。
- 新增 MPEG4 的 RTP 讀取工具 (#35)。
- 新增 HEVC 的 RTP 讀取工具 (#36)。
- 新增 AMR 的 RTP 讀取工具。目前僅支援單頻道和非交錯 AMR 串流。不支援複合 AMR RTP 酬載 (#46)。
- 新增 VP8 的 RTP 讀取工具 (#47)。
- 新增 WAV 的 RTP 讀取工具 (#56)。
- 修正 RTSP 基本授權標頭。(#9544)。
- 停止檢查強制性的 SDP 欄位,因為 ExoPlayer 不需要這些欄位 (#10049)。
- 在剖析 RTSP 時間點時擲回已檢查過的例外狀況 (#10165)。
- 新增 VP9 的 RTP 讀取工具 (#47)。
- 新增 OPUS 的 RTP 讀取工具 (#53)。
- 資料來源:
- 將
DummyDataSource
重新命名為PlaceholderDataSource
。 - 解決 OkHttp 中斷處理的問題。
- 將
- 工作階段:
- 將
MediaSession.MediaItemFiller
替換為MediaSession.Callback.onAddMediaItems
,以便要求使用非同步解析。 - 當
MediaController
連結到舊版工作階段時,支援setMediaItems(s)
方法。 - 移除
MediaController.setMediaUri
和MediaSession.Callback.onSetMediaUri
。您可以用MediaController.setMediaItem
和MediaSession.Callback.onAddMediaItems
達到相同功能。 - 將舊版的
MediaController
播放媒體呼叫傳遞給MediaSession.Callback.onAddMediaItems
,而不是onSetMediaUri
。 - 新增
MediaNotification.Provider
和DefaultMediaNotificationProvider
,以便自訂通知內容。 - 新增
BitmapLoader
和SimpleBitmapLoader
,以便下載作品圖片。 - 新增
MediaSession.setCustomLayout()
,以便為舊版工作階段提供回溯相容性。 - 新增
MediaSession.setSessionExtras()
,以便提供和舊版工作階段同等的功能。 - 將
MediaSession.MediaSessionCallback
重新命名為MediaSession.Callback
,MediaLibrarySession.MediaLibrarySessionCallback
重新命名為MediaLibrarySession.Callback
,並將MediaSession.Builder.setSessionCallback
重新命名為setCallback
。 - 修正
MediaControllerImplLegacy
中的 NPE (#59)。 - 更新時間軸的工作階段位置 (#51)。
- 修正釋放控制器之後
MediaControllerImplBase
裡的 NPE (#74)。
- 將
- 廣告播放 / IMA:
- 將廣告輪詢頻率從 100ms 降為 200ms,以符合美國媒體評議會 (MRC) 建議內容。
- FFmpeg 擴充功能:
- 將 CMake 版本更新至
3.21.0+
,以避免發生導致 AndroidStudio Gradle 同步化失敗的 CMake 錯誤 (#9933)。
- 將 CMake 版本更新至
- 移除已淘汰的符號:
- 移除
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
。改用Player.Listener.onTracksChanged(Tracks)
。 - 移除
Player.getCurrentTrackGroups
和Player.getCurrentTrackSelections
。改用Player.getCurrentTracks
。您也可以繼續使用ExoPlayer.getCurrentTrackGroups
和ExoPlayer.getCurrentTrackSelections
,不過這些項目會繼續視為已淘汰的方法。 - 移除
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
和DEFAULT_TRACK_SELECTOR_PARAMETERS
等常數。請盡量改為使用getDefaultTrackSelectorParameters(Context)
或DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
。 - 移除建構函式
DefaultTrackSelector(ExoTrackSelection.Factory)
。請改用DefaultTrackSelector(Context, ExoTrackSelection.Factory)
。 - 移除
Transformer.Builder.setContext
。Context
應改為傳遞至Transformer.Builder
建構函式。
- 移除
1.0.0-alpha03 版
2022 年 3 月14 日
發布了 androidx.media3:media3-*:1.0.0-alpha03
。1.0.0-alpha03 版包含這些以下修訂項目。
這與 ExoPlayer 2.17.1 版相對應。
- 音訊:
- 修正在 HLS 中檢查 Dolby Atmos (E-AC3-JOC) 音訊功能時發生的錯誤。
- 擷取工具:
- FMP4:修正針對同時包含 v0 和 v1 emsg Atom 的串流,emsg 範例中繼資料可能以錯誤順序輸出的問題 (#9996)。
- 文字:
- 修正
SingleSampleMediaSource.Factory.setTrackId
和MediaItem.SubtitleConfiguration.Builder.setId
的互動方式,以便優先處理SubtitleConfiguration
欄位;如果未設定,改回使用Factory
值 (#10016)。
- 修正
- 廣告播放:
- 修正即時 HLS SSAI 串流中,廣告時段之間的音訊欠載問題。
1.0.0-alpha02 版
2022 年 3 月 2 日
發布了 androidx.media3:media3-*:1.0.0-alpha02
。1.0.0-alpha02 版包含這些以下修訂項目。
這與 ExoPlayer 2.17.0 版相對應。
- 核心程式庫:
- 新增受保護的方法
DefaultRenderersFactory.getCodecAdapterFactory()
,讓覆寫buildVideoRenderers()
或buildAudioRenderers()
的DefaultRenderersFactory
子類別可以存取轉碼器轉接器工廠,並將其傳遞至所建立的MediaCodecRenderer
執行個體。 - 將 ICY 標頭欄位
name
和genre
分別傳播至MediaMetadata.station
和MediaMetadata.genre
,這樣他們才能透過Player.Listener.onMediaMetadataChanged()
到達應用程式 (#9677 )。 - 從
DefaultHttpDataSource#getResponseHeaders
移除空值索引鍵。 - 建立
MediaCodec
執行個體失敗時,休眠然後再試一次。這個方法適用於部分裝置將途徑從安全轉碼器切換至其他轉碼器時發生的問題 (#8696)。 - 新增
MediaCodecAdapter.getMetrics()
,以便讓使用者從MediaCodec
取得指標資料。(#9766)。 - 修正 Maven 依附元件解析度 (#8353)。
- 針對未啟用低延遲功能或使用者要求設定速度的直播,停用自動速度調整項 (#9329)。
- 將
DecoderCounters#inputBufferCount
重新命名為queuedInputBufferCount
。 - 將
SimpleExoPlayer.renderers
設為私人。轉譯器可透過ExoPlayer.getRenderer
存取。 - 已將部分
AnalyticsListener.EventFlags
常數值更新為符合Player.EventFlags
中的值。 - 將
AnalyticsCollector
分割為介面和預設實作作業,若應用程式不需要,即可用 R8 將其移除。
- 新增受保護的方法
- 音軌選取:
- 在音軌選取中支援偏好的影片角色旗標 (#9402)。
- 更新影片音軌選取邏輯,在選取多重影片音軌以便調整時,採用偏好的 MIME 類型和角色旗標 (#9519)。
- 更新影片和音軌選取邏輯,僅選擇具有相同解碼器和硬體支援等級的可調整選項格式 (#9565)。
- 更新影片軌選取邏輯,如果主要的硬體加速解碼器支援多個轉碼器,則偏好選用效率較高的轉碼器 (#4835)。
- 偏好音訊內容偏好設定 (例如「預設」音軌或符合系統語言代碼語言的音軌),而不是技術音軌選取限制 (例如偏好的 MIME 類型或頻道數量上限)。
- 修正音軌選取問題:覆寫其中一個音軌組時,並未停用相同類型的其他音軌組 (#9675)。
- 修正未正確套用非空白及空白混合音軌覆寫的音軌選取問題 (#9649)。
TrackGroupArray
中TrackGroup
禁止重複。您隨時可以在TrackGroup
建構函式中設定id
,藉此區分TrackGroup
。此做法修正使用主動音軌覆寫後,在應用程式背景作業後恢復播放時發生的異常終止問題 (#9718)。- 修正
AdaptiveTrackSelection
中的邏輯,允許在網路頻寬足夠時提高品質,即使播放品質已非常接近目前最佳串流品質 (#9784)。
- 影片:
- 修正 Dolby Vision 中的解碼器備用邏輯,視需要使用相容的 H264/H265 解碼器。
- 音訊:
- 擷取工具:
- 文字:
- DRM:
- 從
DrmSessionManager.(pre)acquireSession
中playbackLooper
移除。當自訂MediaSource
中的應用程式使用DrmSessionManager
時,必須改將playbackLooper
傳遞至DrmSessionManager.setPlayer
。
- 從
- 廣告播放 / IMA:
- 新增 IMA 動態廣告插播 (DAI) 支援 (#8213)。
- 將方法新增至
AdPlaybackState
以允許重設廣告群組,以便系統再次播放廣告群組 (#9615)。 - 在廣告播放期間強制執行 1.0 的播放速度 (#9018)。
- 修正廣告群組載入失敗,並導致播放立即重設的問題 (#9929)。
- UI:
- DASH:
- HLS:
- RTSP:
- 轉換程式:
- 將最低 API 版提升至 21。
TransformationException
現已用於描述轉換期間發生的錯誤。- 新增
TransformationRequest
來指定轉換選項。 - 允許註冊多個事件監聽器。
- 修正轉換程式在部分轉碼器輸出讀取後卡住的問題。
- 修正釋出多工器時,
Transformer.getProgress
中可能擲回的 NPE。 - 新增用於套用轉換的試用版應用程式。
- MediaSession 擴充功能:
- 根據預設,
MediaSessionConnector
現在會在停止時清除播放清單。 如果希望應用程式保留播放清單,可在連接器上呼叫setClearMediaItemsOnStop(false)
。
- 根據預設,
- Cast 擴充功能:
- FFmpeg 擴充功能:
- 讓
build_ffmpeg.sh
依賴 LLVM 而非 GNU 的作業區公用程式 (#9933)。
- 讓
- Android 12 相容性:
- 升級 Cast 擴充功能,使其仰賴
com.google.android.gms:play-services-cast-framework:20.1.0
。先前版本的play-services-cast-framework
與指定 Android 12 的應用程式不相容,並在建立PendingIntent
時會因IllegalArgumentException
異常終止 (#9528))。
- 升級 Cast 擴充功能,使其仰賴
- 移除已淘汰的符號:
- 移除
Player.EventListener
。改用Player.Listener
。 - 移除
MediaSourceFactory#setDrmSessionManager
、MediaSourceFactory#setDrmHttpDataSourceFactory
和MediaSourceFactory#setDrmUserAgent
。改用MediaSourceFactory#setDrmSessionManagerProvider
。 - 移除
MediaSourceFactory#setStreamKeys
。改用MediaItem.Builder#setStreamKeys
。 - 移除
MediaSourceFactory#createMediaSource(Uri)
。改用MediaSourceFactory#createMediaSource(MediaItem)
。 - 將
setTag
從DashMediaSource
、HlsMediaSource
和SsMediaSource
中移除。改用MediaItem.Builder#setTag
。 - 移除
DashMediaSource#setLivePresentationDelayMs(long, boolean)
。使用MediaItem.Builder#setLiveConfiguration
和MediaItem.LiveConfiguration.Builder#setTargetOffsetMs
覆寫資訊清單,或使用DashMediaSource#setFallbackTargetLiveOffsetMs
提供備用值。 - 移除
(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
。無法再選擇不採用執行緒強制執行功能。 - 移除
ActionFile
和ActionFileUpgradeUtil
。使用 ExoPlayer 2.16.1 以下版,以使用ActionFileUpgradeUtil
將舊版操作檔案合併到DefaultDownloadIndex
。 - 移除
ProgressiveMediaSource#setExtractorsFactory
。改用ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
建構函式。 - 移除
ProgressiveMediaSource.Factory#setTag
和ProgressiveMediaSource.Factory#setCustomCacheKey
。改用MediaItem.Builder#setTag
和MediaItem.Builder#setCustomCacheKey
。 - 移除
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
和DefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
建構函式。改用DefaultRenderersFactory(Context)
建構函式、DefaultRenderersFactory#setExtensionRendererMode
和DefaultRenderersFactory#setAllowedVideoJoiningTimeMs
。 - 移除所有公開的
CronetDataSource
建構函式。改用CronetDataSource.Factory
。
- 移除
- 請將下列
IntDefs
變更為僅限@Target(TYPE_USE)
。這可能會導致 Kotlin 環境中的用量編譯作業中斷,移動備註類型的註解可修正此問題 (Int
)。@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(com.google.android.exoplayer2.ext.flac
套件中)@FlacExtractor.Flags
(com.google.android.exoplayer2.extractor.flac
套件中)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
1.0.0-alpha01 版
2021 年 10 月 27 日
發布了 androidx.media3:media3-*:1.0.0-alpha01
。1.0.0-alpha01 版包含這些以下修訂項目。
新功能
Media3 是媒體支援程式庫 (包括 ExoPlayer) 的新園地。第一個 Alpha 版包含下列早期功能性程式庫實作,目的是用於實作媒體應用實例:
- ExoPlayer,這是 Android 的應用程式等級媒體播放器,易於自訂及擴充。
- 媒體工作階段功能,用於公開和控制播放。這個新的工作階段模組使用與 ExoPlayer 相同的
Player
介面。 - 用於建立媒體播放使用者介面的 UI 元件。
- 其他程式庫中可與 ExoPlayer 搭配使用的模組包裝功能,例如透過 IMA SDK 插入廣告。
詳情請參閱 Media3 GitHub 專案。
ExoPlayer 先前是在另一個 ExoPlayer GitHub 專案中代管。在 Media3 中,其套件名稱為 androidx.media3.exoplayer
。我們打算持續維護及發布 ExoPlayer GitHub 專案一段時間,讓應用程式有時間遷移至 Media3。Media3 將取代所有 ExoPlayer 模組 (舊版 Media2 和 mediasession 擴充功能除外,前述兩者會以新版 media3-session
模組取代)。如此一來,不需使用轉接器/連接器類別,就能直接整合播放器及媒體工作階段。