Media3
最近更新時間 | 穩定版 | 候選版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2024 年 7 月 10 日 | 1.3.1 | 1.4.0-rc01 | 1.4.0-beta01 | 1.4.0-alpha02 |
宣告依附元件
如果要為 Media3 新增依附元件,您必須將 Google Maven 存放區新增至專案。詳情請參閱 Google 的 Maven 存放區。
在應用程式或模組的 build.gradle
檔案中,新增您需要的構件依附元件:
Groovy
dependencies { def media3_version = "1.4.0" // 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 SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$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" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$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 reading and writing media containers implementation "androidx.media3:media3-container:$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.4.0" // 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 SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$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") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$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 reading and writing media containers implementation("androidx.media3:media3-container:$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.4.0 版
1.4.0-rc01 版
2024 年 7 月 10 日
發布了 androidx.media3:media3-*:1.4.0-rc01
。1.4.0-rc01 版包含這些修訂版本。
- 一般程式庫:
- 新增
Format.customData
,以儲存應用程式提供的Format
例項自訂資訊。
- 新增
- ExoPlayer:
- 文字:
- 修正 WebVTT 字幕樣本不含提示時,從
LegacySubtitleUtil
發生的IllegalArgumentException
,例如做為 DASH 串流的一部分 (#1516)。
- 修正 WebVTT 字幕樣本不含提示時,從
- 工作階段:
- 允許為每個控制器設定工作階段活動,以覆寫全域工作階段活動。您可以在連線時建立使用
AcceptedResultBuilder.setSessionActivivty(PendingIntent)
的ConnectionResult
,為控制器定義工作階段活動。連線後,您就能使用MediaSession.setSessionActivity(ControllerInfo, PendingIntent)
更新工作階段活動。 - 改善呼叫
MediaLibrarySession.Callback
的錯誤複製能力。現在可以使用MediaLibrarySession.Builder.setLibraryErrorReplicationMode()
選擇錯誤類型,或選擇停用預設為開啟的錯誤複製功能,藉此設定錯誤複製功能。
- 允許為每個控制器設定工作階段活動,以覆寫全域工作階段活動。您可以在連線時建立使用
- UI:
- 解決在 API 34 的 Compose
AndroidView
中使用SurfaceView
時,導致影片變形/裁剪的平台錯誤 (#1237)。
- 解決在 API 34 的 Compose
- 試用版應用程式..
- 請在裝置支援的情況下,使用
HttpEngineDataSource
做為HttpDataSource
。
- 請在裝置支援的情況下,使用
1.4.0-beta01 版
2024 年 6 月 26 日
發布了 androidx.media3:media3-*:1.4.0-beta01
。1.4.0-beta01 版包含這些修訂版本。
- ExoPlayer:
- 新增
ExoPlayer.isReleased()
以檢查是否已呼叫Exoplayer.release()
。 - 新增
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs
來設定seekToPrevious()
跳轉至上一個項目的最高位置 (#1425)。
- 新增
- 轉換程式:
- 移除
ExportResult.processedInputs
欄位。如果透過這個欄位取得轉碼器詳細資料,請改用DefaultDecoderFactory.listener
。如果是轉碼器例外狀況,您可以在ExportException.codecInfo
中找到轉碼器詳細資料。
- 移除
- 擷取工具:
- 修正 AVI 容器中的 PCM 音訊格式擷取問題。
- 圖片:
- 允許
null
做為ExoPlayer.setImageOutput
的參數,清除先前設定的ImageOutput
。
- 允許
- 效果:
- 移除未使用的
OverlaySettings.useHdr
,因為重疊的動態範圍和影格必須相符。 - 為
TextOverlay
新增 HDR 支援。文字重疊的亮度可使用OverlaySettings.setHdrLuminanceMultiplier
調整。
- 移除未使用的
- 工作階段:
- 新增
MediaSession.Callback.onPlayerInteractionFinished
以在特定控制器完成一系列玩家互動時通知工作階段。 - 新增
SessionError
並用於SessionResult
和LibraryResult
(而非錯誤代碼) 中,以提供更多錯誤相關資訊和如何盡可能解決錯誤。 - 為 media3 控制器測試應用程式發布程式碼,可用於測試與發布媒體工作階段的應用程式的互動。
- 將傳遞至 media3 的
MediaSession[Builder].setSessionExtras()
的額外項目傳播至 media1 控制器的PlaybackStateCompat.getExtras()
。 - 將平台工作階段的嚴重和一般錯誤對應到平台工作階段。
PlaybackException
會對應至PlaybackStateCompat
的嚴重錯誤狀態。使用MediaSession.sendError(ControllerInfo, SessionError)
傳送至媒體通知控制器的SessionError
會對應至PlaybackStateCompat
中的一般錯誤,這表示已設定錯誤代碼和訊息,但平台工作階段的狀態與STATE_ERROR
不同。
- 新增
- UI:
- HLS 擴充功能:
- 修正在即時播放期間,非主要播放播放清單不會重新整理的錯誤 (#1240)。
- 移除已淘汰的符號:
- 移除
Bundleable
介面。包括移除所有Bundleable.Creator<Foo> CREATOR
常數欄位。呼叫者應改為針對每種類型使用Bundle toBundle()
和static Foo fromBundle(Bundle)
方法。
- 移除
1.4.0-alpha02 版
2024 年 6 月 7 日
發布了 androidx.media3:media3-*:1.4.0-alpha02
。1.4.0-alpha02 版包含這些修訂版本。
- 一般程式庫:
- 將假設的免人工跳轉呼叫轉送至受保護的
BasePlayer.seekTo
和SimpleBasePlayer.handleSeek
方法,而不是忽略這些呼叫。如要在自訂播放器中實作這些方法,可能需要使用mediaItemIndex == C.INDEX_UNSET
處理這些額外呼叫。 - 移除強化版 Java 8 脫糖的編譯依附元件。(#1312)。
- 確保針對非圖片
MediaItem
忽略傳遞至MediaItem.Builder.setImageDurationMs
的時間長度 (如說明文件所述)。
- 將假設的免人工跳轉呼叫轉送至受保護的
- ExoPlayer:
- 將
reset
新增至BasePreloadManager
,藉此釋出所有保留來源,同時保留預先載入管理員例項。 - 新增
ExoPlayer.setPriority
(和Builder.setPriority
) 來定義用於PriorityTaskManager
的優先順序值,以及用於 MediaCodec 重要性 (來自 API 35)。 - 修正問題:更新最後一個重新緩衝時間,導致 CMCD 中的
bs
(緩衝區飢餓) 金鑰不正確。(#1124)。 - 新增
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
,表示來源已載入至結尾。這可讓DefaultPreloadManager
和自訂PreloadMediaSource.PreloadControl
實作項目預先載入下一個來源或採取其他動作。 - 修正在項目結尾無聲略過可觸發播放例外狀況的錯誤。
- 將
clear
新增至PreloadMediaSource
,捨棄預先載入期間。 - 新增錯誤代碼
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
,用於針對優先順序較高的工作回收轉碼器資源。 - 讓
AdsMediaSource
在初始內容媒體內容準備完成前載入片頭廣告 (#1358)。 - 修正在原始期間已從資訊清單中移除原始期間後,將多時段 DASH 直播重新準備時,播放作業移至
STATE_ENDED
的錯誤。 - 將
PreloadMediaSource.PreloadControl
中的onTimelineRefreshed
重新命名為onSourcePrepared
,並將onPrepared
重新命名為onTracksSelected
。請一併重新命名DefaultPreloadManager.Stage
中的 IntDefs。 - 新增動態排程的實驗性支援,讓工作與 CPU 喚醒週期更一致,並在轉譯器可進度時延遲喚醒。您可以在設定 ExoPlayer 執行個體時使用
experimentalSetDynamicSchedulingEnabled
啟用這項功能。 - 新增
Renderer.getDurationToProgressMs
。Renderer
可實作此方法來返回 ExoPlayer,在轉譯器播放前必須提前播放該時間長度。如果透過experimentalSetDynamicSchedulingEnabled
設定ExoPlayer
,則ExoPlayer
在計算排定工作工作的時間時,會呼叫這個方法。 - 新增
MediaCodecAdapter#OnBufferAvailableListener
,在輸入和輸出緩衝區可供MediaCodecRenderer
使用時發出快訊。在收到這些回呼時,MediaCodecRenderer
會發出ExoPlayer
信號;如果ExoPlayer
設為使用experimentalSetDynamicSchedulingEnabled
,則ExoPlayer
會安排工作迴圈的時間,因為轉譯器可以繼續進行。 - 針對
LoadControl
方法使用資料類別,而非個別參數。
- 將
- 轉換程式:
- 解決在處理 PCM 輸入時限制立體聲聲道數量的解碼器錯誤。
- 在
ExoPlayerAssetLoader
選取音軌時,請忽略音軌數量限制,因為這些音軌僅適用於播放。 - 將
androidx.media3.transformer.Muxer
介面替換為androidx.media3.muxer.Muxer
,並移除androidx.media3.transformer.Muxer
。 - 修正從內容 URI 配置載入 HEIC 圖片的問題。(#1373)。
- 調整「
AudioGraphInput
」中的音軌時間長度,提升影音同步效果。
- 擷取工具:
- MPEG-TS:向前轉動變更,將串流的最後一個存取單位傳遞至範例佇列,確保最後一個影格轉譯完成 (#7909)。整合修正以解決僅限 IFrame 串流(#1150) 和 H.262 HLS 串流出現的問題 (#1126)。
- MP3:優先使用
Info
影格的資料大小,而非基礎串流回報的大小 (例如檔案大小或 HTTPContent-Length
標頭)。這有助於從固定位元率尋求計算中排除無法播放的預告片資料 (例如專輯圖片),求得更準確 (#1376)。 - MP3:使用
Info
影格中的影格數和其他資料 (如有) 計算固定位元率搜尋時的平均位元率,而不是從Info
影格之後的影格位元率中外推。例如PCUT
影格 (#1376)。
- 音訊:
- 修正直通播放的 DTS:X 設定檔 2 編碼屬性 (#1299)。
- 如果是卸載播放,請在呼叫
AudioTrack.stop()
之前,在DefaultAudioSink
中重設串流完成的追蹤欄位,讓AudioTrack.StreamEventCallback#onPresentationEnded
正確識別已播放所有待處理資料。 - 修正
SilenceSkippingAudioProcessor
中不同音訊格式轉換 (例如將立體聲轉換為單聲道) 的錯誤可能會導致處理器擲回例外狀況 (#1352)。 - 實作
MediaCodecAudioRenderer.getDurationToProgressUs
,讓 ExoPlayer 以動態方式排定 MediaCodecAudioRenderer 可啟動進度的主要工作迴圈。
- 影片:
- 修正 Dolby Vision 的解碼器備用邏輯,視需要使用相容的 AV1 解碼器 (#1389)。
- 文字:
- 修正在略過跳轉位置前開始字幕的問題。此問題僅在 Media3 1.4.0-alpha01 中推出。
- 變更預設的子標題剖析行為,以在擷取期間而非轉譯期間發生 (請參閱 ExoPlayer 的架構圖來瞭解擷取和轉譯之間的差異)。
- 您可以呼叫
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
和TextRenderer.experimentalSetLegacyDecodingEnabled(true)
來覆寫這項變更。請參閱自訂說明文件,瞭解如何將這些元件整合至ExoPlayer
執行個體。日後推出的版本將移除這些方法 (以及所有對舊版字幕解碼的支援)。 - 具有自訂
SubtitleDecoder
實作的應用程式需要更新,才能實作SubtitleParser
(以及SubtitleParser.Factory
而非SubtitleDecoderFactory
)。
- 您可以呼叫
- PGS:修正執行長度解碼,將
0
解析為顏色索引,而非常值顏色值 (#1367)。 - CEA-708:忽略
rowLock
值。CEA-708-E S-2023 規格指出,無論串流中的值為何,系統應將rowLock
和columnLock
都假設為 true (未實作columnLock
支援,因此實際上會假設為一律為 false)。- 這項變更原本包含在
1.3.0-alpha01
版本資訊中,但這項變更在1.3.0-rc01
發布前不小心還原。我們已修正此問題,讓變更再次顯示。
- 這項變更原本包含在
- CEA-708:避免 ExoPlayer 對「設定畫筆位置」指令以無方式新增重複的換行符號 (#1315)。
- 中繼資料:
- 圖片:
- 新增非正方形 DASH 縮圖格線支援。(#1300)。
- 針對 API 34 以上版本新增 AVIF 支援功能。
- 資料來源:
- 允許
ByteArrayDataSource
在open()
期間解析位元組陣列的 URI,而非在建構時進行硬式編碼 (#1405)。
- 允許
- DRM:
- 允許在
DefaultDrmSessionManagerProvider
上設定LoadErrorHandlingPolicy
。(#1271)。
- 允許在
- 效果:
- IMA 擴充功能:
- 工作階段:
- Cronet 擴充功能:
- 修正
CronetDataSource
中的SocketTimeoutException
。在部分 Cronet 版本中,回呼提供的要求不一定相同。這會導致回呼未完成,並要求逾時 (https://issuetracker.google.com/328442628)。
- 修正
- HLS 擴充功能:
- DASH 擴充功能:
- Cast 擴充功能:
- 修正將
MediaQueueItem
的專輯名稱轉換為 Media3 媒體項目中的藝人的錯誤。(#1255)。
- 修正將
- 試用版應用程式..
- 允許透過指令列使用
Intent
引數設定重複模式。(#1266)。
- 允許透過指令列使用
- 移除已淘汰的符號:
- 從
DefaultHttpDataSource
、OkHttpDataSource
和CronetDataSource
中移除setContentTypePredicate(Predicate)
方法。請改為在每個XXXDataSource.Factory
上使用對等的方法。 - 移除
OkHttpDataSource
建構函式和OkHttpDataSourceFactory
。請改用OkHttpDataSource.Factory
。 - 移除
PlayerMessage.setHandler(Handler)
。改用setLooper(Looper)
。 - 移除
Timeline.Window.isLive
欄位。請改用isLive()
方法。 - 移除
DefaultHttpDataSource
建構函式。改用DefaultHttpDataSource.Factory
。 - 移除
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
。改用DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
。 - 移除
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
。改用MediaCodecInfo.canReuseCodec(Format, Format)
。 - 移除
DrmSessionManager.DUMMY
和getDummyDrmSessionManager()
方法。請改用DrmSessionManager.DRM_UNSUPPORTED
。 - 移除
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
、AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
、AudioRendererEventListener.onAudioInputFormatChanged(Format)
、VideoRendererEventListener.onVideoInputFormatChanged(Format)
。請改用採用DecoderReuseEvaluation
的超載。 - 移除
RendererSupport.FormatSupport
IntDef 和FORMAT_HANDLED
、FORMAT_EXCEEDS_CAPABILITIES
、FORMAT_UNSUPPORTED_DRM
、FORMAT_UNSUPPORTED_SUBTYPE
、FORMAT_UNSUPPORTED_TYPE
常數。請改用androidx.media3.common.C
中的對等 IntDef 和常數 (例如C.FORMAT_HANDLED
)。
- 從
1.4.0-alpha01 版
2024 年 4 月 17 日
發布了 androidx.media3:media3-*:1.4.0-alpha01
。1.4.0-alpha01 版包含這些修訂版本。
- ExoPlayer:
- 新增
BasePreloadManager
,根據rankingData
定義的優先順序協調多個來源的預先載入作業。擴充此類別即可自訂。新增DefaultPreloadManager
,這會使用PreloadMediaSource
將來源的媒體範例預先載入到記憶體,並且使用整數rankingData
表示 UI 中的項目索引。 - 將
PlayerId
新增至LoadControl
的大多數方法,啟用LoadControl
實作來支援多個播放器。 - 移除
Buffer.isDecodeOnly()
和C.BUFFER_FLAG_DECODE_ONLY
。您不需要將此標記設為轉譯器,解碼器會依據時間戳記決定略過緩衝區。自訂Renderer
實作應檢查緩衝時間是否至少為BaseRenderer.getLastResetPositionUs()
,以判斷是否應顯示範例。自訂SimpleDecoder
實作項目可視需要檢查isAtLeastOutputStartTimeUs
,或使用DecoderOutputBuffer.shouldBeSkipped
標示其他緩衝區來略過緩衝區。 - 允許
TargetPreloadStatusControl.getTargetPreloadStatus(T)
傳回空值,表示不要使用指定的rankingData
預先載入MediaSource
。 - 在
BasePreloadManager
中新增remove(MediaSource)
。
- 新增
- 轉換程式:
- 將
audioConversionProcess
和videoConversionProcess
新增至ExportResult
,說明輸出檔案中個別音軌的建立方式。 - 放鬆修剪最佳化 H.264 層級檢查。
- 新增透過序列切換 SDR 和 HDR 輸入媒體的支援。
- 新增樂曲層級音效支援功能。
- 新增將 Ultra HDR 圖片轉碼為 HDR 影片的支援功能。
- 修正
DefaultAudioMixer
在重設並重複使用後,無法輸出正確位元組數的問題。
- 將
- 影片:
- 修正在切換播放中途徑時,
Listener.onRenderedFirstFrame()
太早送達的問題。
- 修正在切換播放中途徑時,
- 資料來源:
- 為
android.resource://package/id
原始資源 URI 實作支援,其中package
與目前應用程式的套件不同。先前未記為可正常運作,但在存取其他套件中的資源會比依名稱存取資源更有效率。 - 立即檢查
DataSpec
建構函式中的url
為非空值。這個參數已加註為非空值。
- 為
- 效果:
- 支援在
SpeedChangeEffect
中的相同EditedMediaItem
或Composition
內多次變更速度。 - 支援超 HDR 點陣圖輸入的 HLG 和 PQ 輸出。
- 新增對 EGL_GL_COLORSPACE_BT2020_HLG_EXT 的支援,改善 ExoPlayer.setVideoEffect 和 Transformer DebugSurfaceView 中的 HLG 介面輸出內容。
- 翻轉
setOverlayFrameAnchor()
中套用的 x 和 y 值,以更新重疊矩陣實作方式,使其與說明文件一致。如果使用OverlaySettings.Builder.setOverlayFrameAnchor()
,請將 x 和 y 值乘以-1
,即可翻轉其 x 和 y 值。
- 支援在
- 工作階段:
- 將
CommandButton.enabled
的預設值變更為true
,並確保控制器的值即使有關聯指令可用,仍會保持 false。 - 為
CommandButton
新增圖示常數,應使用,而非自訂圖示資源。 - 新增
MediaSessionService.isPlaybackOngoing()
,讓應用程式查詢是否需要在onTaskRemoved()
中停止服務。(#1219)。 - 新增
MediaSessionService.pauseAllPlayersAndStopSelf()
,方便暫停播放所有工作階段並呼叫stopSelf
以終止MediaSessionService
的生命週期。 - 覆寫
MediaSessionService.onTaskRemoved(Intent)
以提供安全的預設實作項目,讓服務在播放期間持續在前景執行,或以其他方式停止服務。
- 將
- 下載內容:
- 確保
DownloadHelper
不會洩漏未發布的Renderer
例項,否則最終可能會導致應用程式因IllegalStateException: Too many receivers, total of 1000, registered for pid
而異常終止 (#1224)。
- 確保
- 測試公用程式:
- 在
FakeRenderer
中實作onInit()
和onRelease()
。 - 變更
TestPlayerRunHelper.runUntil/playUntil
方法,避免發生重大錯誤 (例如回報給AnalyticsListener.onVideoCodecError
的錯誤)。請使用新的TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
方法鏈結停用這項行為。
- 在
- 試用版應用程式..
- 在短版試用版應用程式中使用
DefaultPreloadManager
。
- 在短版試用版應用程式中使用
- 移除已淘汰的符號:
- 移除
CronetDataSourceFactory
。改用CronetDataSource.Factory
。 - 移除部分
DataSpec
建構函式。改用DataSpec.Builder
。
- 移除
1.3.0 版
1.3.1 版
2024 年 4 月 11 日
發布了 androidx.media3:media3-*:1.3.1
。1.3.1 版包含這些修訂版本。
- 一般程式庫:
- 新增
Format.labels
以允許本地化或其他替代標籤。
- 新增
- ExoPlayer:
- 轉換程式:
- 新增解決因
MediaMuxer
不支援 API 30 之前的負面呈現時間戳記而擲回的例外狀況。
- 新增解決因
- 音軌選取:
DefaultTrackSelector
:偏好使用「合理」影格速率 (>=10fps) 的視訊軌,而不是低影格速率或不設定畫面的影片。這可確保玩家從動態相片中擷取「真實」視訊軌,其中包含兩組 HEVC 軌跡,其中兩個 HEVC 音軌的解析度較高,但影格數量非常少 (#1051)。
- 擷取工具:
- 音訊:
- 如果在卸載模式下初始化音軌失敗,可停用卸載,以允許轉譯器復原。
- 影片:
- 文字:
- WebVTT:防止直接連續的提示,從
WebvttParser.parse
建立額外的CuesWithTiming
執行個體 (#1177)。
- WebVTT:防止直接連續的提示,從
- DRM:
- 解決在部分 Android 14 裝置上,可由
MediaDrm
架構擲回的NoSuchMethodError
,而非ResourceBusyException
或NotProvisionedException
(#1145)。
- 解決在部分 Android 14 裝置上,可由
- 效果:
- 透過轉換色域,從 PQ 改善到 SDR 色調對應。
- 工作階段:
- UI:
- 如果
Locale
無法辨識顯示名稱,就會加入音軌語言名稱的備用方案 (#988)。
- 如果
- DASH 擴充功能:
- 將資訊清單中的所有
Label
元素填入Format.labels
(#1054)。
- 將資訊清單中的所有
- RTSP 擴充功能:
- 略過 SDP 剖析 (#1087) 中的空白工作階段資訊值 (i-tag)。
- 解碼器擴充功能 (FFmpeg、VP9、AV1、MIDI 等):
- 預設停用 MIDI 擴充功能做為本機依附元件,因為必須設定額外的 Maven 存放區。如果使用者需要本機依附元件中的這個模組,可以重新啟用該模組。
1.3.0 版
2024 年 3 月 6 日
發布了 androidx.media3:media3-*:1.3.0
。1.3.0 版包含這些修訂版本。
- 一般程式庫:
- 實作
android.resource://package/[type/]name
原始資源 URI 的支援功能,其中package
與目前應用程式的套件不同。我們一直記錄這種方法可以正常運作,但到目前為止並未正確實作。 - 請將應用程式程式碼設定的 MIME 類型正規化,或從媒體讀取到完全小寫。
- 使用完整的
MediaItem
(而非AdPlaybackState
中的單一Uri
) 定義廣告。 - 將
minSdk
調高至 19 (Android KitKat)。與所有其他 AndroidX 程式庫一致,我們必須升級至最新版本的 AndroidX 依附元件。 - 當至少一個非空值時,在
MediaMetadata.Builder.populate(MediaMetadata)
中填入artworkUri
和artworkData
(#964)。
- 實作
- ExoPlayer:
- 新增
PreloadMediaSource
和PreloadMediaPeriod
,讓應用程式可在播放前於特定起始位置預先載入內容媒體來源。PreloadMediaSource
負責準備內容媒體來源以接收Timeline
、在指定開始位置準備及快取期間,選取軌道並載入該時段的媒體資料。應用程式實作PreloadMediaSource.PreloadControl
,並將預先載入的來源設為播放器進行播放,藉此控制預先載入進度。 - 新增
ExoPlayer.setImageOutput
,讓應用程式能夠設定ImageRenderer.ImageOutput
。 DefaultRenderersFactory
現在預設會向玩家提供ImageRenderer
的空值ImageOutput
和ImageDecoder.Factory.DEFAULT
。- 無聲片段略過時,發出
Player.Listener.onPositionDiscontinuity
事件 (#765)。 - 新增實驗性支援,可在擷取期間剖析字幕。您可以使用
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
啟用這項功能。 - 使用
PreloadMediaSource
支援自動調整媒體來源。 - 使用 HttpEngine API 實作
HttpEngineDataSource
(HttpDataSource
)。 - 禁止將
CompositeSequenceableLoader
設為子類別。這個元件先前設為可擴充,但從未在程式庫中建立子類別。自訂作業則可使用裝飾器模式包裝執行個體,並導入自訂的CompositeSequenceableLoaderFactory
。 - 修正重複時間會導致這個項目的中繼資料遭到清除的問題 (#1007)。
- 將
BundledChunkExtractor.Factory
和DefaultHlsExtractorFactory
中的experimentalSetSubtitleParserFactory
方法重新命名為setSubtitleParserFactory
,並禁止傳遞null
。您可以使用新的experimentalParseSubtitlesDuringExtraction(boolean)
方法控管剖析行為。 - 新增對自訂在擷取期間所用
SubtitleParser.Factory
的支援功能。這可以用MediaSource.Factory.setSubtitleParserFactory()
達成。 - 將來源前置字串新增至從
MergingMediaSource
產生的所有Format.id
欄位。這有助於識別產生Format
的來源。(#883)。 - 修正用於驗證自訂共用媒體用戶端資料 (CMCD) 金鑰名稱的規則運算式,修改後只檢查連字號 (#1028)。
- 停止雙重編碼 CMCD 查詢參數 (#1075)。
- 新增
- 轉換程式:
- 音軌選取:
- 新增
DefaultTrackSelector.selectImageTrack
以啟用映像檔軌選取功能。 - 新增
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
以決定是否同時選取圖片軌或影片軌。預設值為false
,表示優先選取影片音軌。
- 新增
- 擷取工具:
- 將其他 AV1C 剖析新增至 MP4 擷取器,以擷取
ColorInfo.colorSpace
、ColorInfo.colorTransfer
和ColorInfo.colorRange
值 (#692)。 - MP3:使用固定位元率 (CBR) 尋找具有
Info
標頭 (相當於Xing
標頭的 CBR 值) 的檔案。我們先前使用來自Info
標頭的跳轉資料表,但相較於忽略該表格 (假設檔案為 CBR),搜尋的精確性會降低。 - MPEG2-TS:新增 DTS、DTS-LBR 和 DTS:X Profile2 (#275)。
- 從 TS 描述元中擷取音訊類型,並對應至角色標記,讓使用者做出更明智的音軌選擇 (#973)。
- 將其他 AV1C 剖析新增至 MP4 擷取器,以擷取
- 音訊:
- 影片:
- 變更採用
VideoFrameProcessor.Factory
引數的MediaCodecVideoRenderer
建構函式,並將其替換為接受VideoSinkProvider
引數的建構函式。要插入自訂VideoFrameProcessor.Factory
的應用程式可將使用自訂VideoFrameProcessor.Factory
的CompositingVideoSinkProvider
執行個體化,並將影片接收器供應器傳遞至MediaCodecVideoRenderer
。
- 變更採用
- 文字:
- 修正點陣圖提示的序列化作業,以解決使用
DefaultExtractorsFactory.setTextTrackTranscodingEnabled
時的Tried to marshall a Parcel that contained Binder objects
錯誤 (#836)。 - CEA-708:忽略
rowLock
值。CEA-708-E S-2023 規格指出,無論串流中的值為何,系統應將rowLock
和columnLock
都假設為 true (未實作columnLock
支援,因此實際上會假設為一律為否)。
- 修正點陣圖提示的序列化作業,以解決使用
- 圖片:
- 新增 DASH 縮圖支援功能。格線圖片會經過裁剪,並使用接近呈現時間的
ImageOutput
提供的個別縮圖。
- 新增 DASH 縮圖支援功能。格線圖片會經過裁剪,並使用接近呈現時間的
- DRM:
- 根據預設,請立即播放 DRM 內容中的「清除待開發客戶」未加密樣本,即使後續加密樣本的金鑰尚未準備就緒。如果播放位置達到加密樣本時,金鑰仍尚未準備就緒 (但先前播放位置目前尚未啟動),就可能會導致播放中停播。您可以使用
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
或DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
停用這項行為。
- 根據預設,請立即播放 DRM 內容中的「清除待開發客戶」未加密樣本,即使後續加密樣本的金鑰尚未準備就緒。如果播放位置達到加密樣本時,金鑰仍尚未準備就緒 (但先前播放位置目前尚未啟動),就可能會導致播放中停播。您可以使用
- IMA 擴充功能:
- 修正無法在缺少適當副檔名的情況下播放 DASH 和 HLS 廣告的問題。
- 工作階段:
- 停用電視應用程式的按兩下偵測功能 (#962)。
- 修正僅含有非空值額外項目的
MediaItem.RequestMetadata
無法在媒體控制器和工作階段之間傳輸的問題。 - 將建構函式新增至僅接受
Context
(而非MediaLibraryService
) 的MediaLibrarySession.Builder
建構函式。
- HLS 擴充功能:
- 將
HlsMediaPeriod
減少為私人套件的瀏覽權限。這個類型不應直接從 HLS 套件外部依附。 - 解析功能可更有效率地跳轉至區段的開頭 (#1031)。
- 將
- 解碼器擴充功能 (FFmpeg、VP9、AV1、MIDI 等):
- MIDI 解碼器:忽略 SysEx 事件訊息 (#710)。
- 測試公用程式:
- 不要在
TestPlayerRunHelper.playUntilPosition
後暫停播放。這項測試會將播放保持在播放狀態,但會暫停進度,直到測試能夠新增斷言和進一步操作為止。
- 不要在
- 試用版應用程式..
- 新增簡短示範模組,示範將
PreloadMediaSource
與短篇內容應用實例搭配使用。
- 新增簡短示範模組,示範將
1.3.0-rc01 版
2024 年 2 月 22 日
使用 1.3.0 穩定版。
1.3.0-beta01 版
2024 年 2 月 7 日
使用 1.3.0 穩定版。
1.3.0-alpha01 版
2024 年 1 月 15 日
使用 1.3.0 穩定版。
1.2.0 版
1.2.1 版
2024 年 1 月 9 日
- ExoPlayer:
- 轉換程式:
- 解決編碼器因設定高運作率而在設定時間擲回的問題。
- 擷取工具:
- 音訊:
- 修正多次呼叫
SilenceSkippingAudioProcessor
時對 EOS 的處理方式 (#712)。
- 修正多次呼叫
- 影片:
- 針對 Galaxy Tab S7 FE、Chromecast (支援 Google TV) 和 Lenovo M10 FHD Plus 的裝置問題新增解決方法,導致系統將 60fps 的 AVC 串流標示為不支援 (#693)。
- 中繼資料:
- 修正僅透過大寫金鑰 Vorbis 註解填入
MediaMetadata
的錯誤 (#876)。 - 在剖析非常大型的 ID3 影格時擷取
OutOfMemoryError
,這表示播放作業可以在沒有標記資訊的情況下繼續,而不會完全播放失敗。
- 修正僅透過大寫金鑰 Vorbis 註解填入
- DRM:
- 將錯誤的 ClearKey
https://default.url
授權網址的解決方法擴大至 API 33 以上版本 (先前僅適用於 API 33),(#837)。 - 修正從加密模式切換為清除內容 (無連接介面時) 時發生的
ERROR_DRM_SESSION_NOT_OPENED
問題。這個錯誤是因為誤用安全解碼器播放清楚的內容。
- 將錯誤的 ClearKey
- 工作階段:
- UI:
- DASH 擴充功能:
- 在 DASH 資訊清單 (#688) 中,將「f800」剖析為 Dolby 的聲道數。
- 解碼器擴充功能 (FFmpeg、VP9、AV1、MIDI 等):
- Cast 擴充功能:
- 清理
Timeline
建立作業,以免在投放裝置上載入媒體失敗時導致應用程式當機 (#708)。
- 清理
1.2.0 版
2023 年 11 月 15 日
- 一般程式庫:
- 在
Log.Logger
介面中的方法新增@Nullable Throwable
參數。這些方法的message
參數不再包含傳遞至Log.{d,i,w,e}()
方法的任何Throwable
相關資訊,因此如有必要,實作需要手動附加這項資訊 (可能是使用Logger.appendThrowableString(String, Throwable)
)。 - 修正 Kotlin 相容性問題,讓系統無法偵測可為空值的一般類型參數和可為空值的陣列元素類型為空值。範例包括
TrackSelectorResult
和SimpleDecoder
方法參數 (#6792)。 - 變更
Util.shouldShowPlayButton
中的預設 UI 和通知行為,在暫停播放時顯示「播放」按鈕 (例如因短暫音訊焦點遺失)。您可以使用PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
或MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
來維護舊版行為。(#11213)。 - 將
androidx.annotation:annotation-experimental
升級至1.3.1
以修正 https://issuetracker.google.com/251172715。 - 將
ExoPlayer.setAudioAttributes
移至Player
介面。
- 在
- ExoPlayer:
- 修正因無法正確識別僅限解碼的範例而造成的 AC4 串流尋找問題 (#11000)。
- 透過
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
啟用這項功能時,在不合適的音訊輸出裝置 (例如 Wear OS 裝置的內建喇叭) 上新增抑製播放功能。如果在沒有合適的音訊輸出可用時嘗試播放,或是所有適當的輸出在播放期間都中斷連線,則播放抑制原因會更新為Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
。連接合適的輸出內容後,就會移除隱藏原因。 - 新增
MediaSource.canUpdateMediaItem
和MediaSource.updateMediaItem
,以透過Player.replaceMediaItem(s)
接受MediaItem
更新。 - 允許針對程式庫透過
Player.replaceMediaItem(s)
提供的所有MediaSource
類別更新MediaItem
(#33、#9978)。 - 將
MimeTypes.TEXT_EXOPLAYER_CUES
重新命名為MimeTypes.APPLICATION_MEDIA3_CUES
。 - 新增
PngExtractor
,用於傳送及讀取整個 PNG 檔案至TrackOutput
中做為一個範例。 - 將
SequenceableLoader
介面中的SequenceableLoader.continueLoading(long)
方法強化為SequenceableLoader.continueLoading(LoadingInfo loadingInfo)
。LoadingInfo
包含其他參數,包括現有的playbackPositionUs
以外的playbackSpeed
和lastRebufferRealtimeMs
。 - 將
ChunkSource
介面中的ChunkSource.getNextChunk(long, long, List, ChunkHolder)
方法強化為ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
。 - 在通用媒體用戶端資料 (CMCD) 記錄中加入其他欄位:緩衝區星號 (
bs
)、期限 (dl
)、播放速率 (pr
) 和啟動 (su
) (#8699)。 - 將亮度和色度位元新增至
ColorInfo
(#491)。 - 在通用媒體客戶資料 (CMCD) 記錄中新增其他欄位:下一個物件要求 (
nor
) 和下一個範圍要求 (nrr
) (#8699)。 - 新增使用查詢參數 (#553) 傳輸常用媒體客戶資料 (CMCD) 資料的功能。
- 修正
ExperimentalBandwidthMeter
中的ConcurrentModificationException
(#612)。 - 在
CompositeMediaSource.getMediaTimeForChildMediaTime
中新增MediaPeriodId
參數。 - 支援
ConcatenatingMediaSource2
中的ClippingMediaSource
(以及具有週期/時間範圍偏移的其他來源) (#11226)。 - 變更
BaseRenderer.onStreamChanged()
,以便一併接收MediaPeriodId
引數。
- 轉換程式:
- 剖析圖片輸入內容的 EXIF 旋轉資料。
- 移除
TransformationRequest.HdrMode
註解類型及其相關聯的常數。請改用Composition.HdrMode
及其相關聯的常數。 - 簡化
OverlaySettings
來修正旋轉問題。 - 已將
SampleConsumer.queueInputBitmap
的frameRate
和durationUs
參數變更為TimestampIterator
。
- 音軌選取:
- 新增
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
以明確允許或禁止非流暢的調整作業。預設會維持目前的true
行為。
- 新增
- 擷取工具:
- MPEG-TS:將串流的最後一個存取單位傳遞至範例佇列,確保最後一個影格轉譯完成 (#7909)。
- 修正判斷
rotationDegrees
時的錯字。已將projectionPosePitch
變更為projectionPoseRoll
(#461)。 - 移除可以使用
instanceof
直接檢查Extractor
例項的這項假設。如果要在執行階段存取Extractor
的實作詳細資料,您必須先呼叫Extractor.getUnderlyingInstance
。 - 新增
BmpExtractor
。 - 新增
WebpExtractor
。 - 新增
HeifExtractor
。 - 將 QuickTime 傳統版支援新增至
Mp4Extractor
。
- 音訊:
- 在 MP4 和 Matroska 中新增對 24/32 位元大端序 PCM 的支援,以及在 MP4 中剖析
lpcm
的 PCM 編碼。 - 新增擷取 MP4 中 Vorbis 音訊的功能。
- 新增
AudioSink.getFormatOffloadSupport(Format)
,用於擷取接收器可透過DefaultAudioOffloadSupportProvider
為格式提供的卸載支援層級。這個方法會傳回包含isFormatSupported
、isGaplessSupported
和isSpeedChangeSupported
的新AudioOffloadSupport
。 - 新增
AudioSink.setOffloadMode()
,並設定音訊接收器上的卸載設定。預設值為AudioSink.OFFLOAD_MODE_DISABLED
。 - 您可以透過
TrackSelectionParameters
中的setAudioOffloadPreference
啟用卸載。如果啟用偏好設定,裝置支援該格式卸載,且音軌選取作業為單一音軌,系統就會啟用音訊卸載。 - 如果將
audioOffloadModePreference
設為AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
,則DefaultTrackSelector
只會在卸載中支援該音軌格式時,才會選取音軌。如果卸載不支援任何音軌,就不會選取音軌。 - 在追蹤轉換後,如果 API 級別 33 之前發生播放位置問題,停用在 API 級別 33 之前的卸載支援功能。
- 從
DefaultRenderersFactory.buildAudioSink
方法簽章中移除參數enableOffload
。 - 移除方法
DefaultAudioSink.Builder.setOffloadMode
。 - 移除 intdef 值
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
。 - 新增對 Opus 在卸載播放期間無礙中繼資料的支援。
- 如果在首次寫入失敗時停用卸載,允許轉譯器復原。(#627)。
- 根據預設,啟用純音訊卸載播放功能時,啟用卸載排程功能。
- 刪除
ExoPlayer.experimentalSetOffloadSchedulingEnabled
和AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
。 - 已將
onExperimentalSleepingForOffloadChanged
重新命名為onSleepingForOffloadChanged
,並將onExperimentalOffloadedPlayback
重新命名為onOffloadedPlayback
。 - 將音訊卸載模式相關的
TrackSelectionParameters
介面和定義移至內部AudioOffloadPreferences
類別。 - 將
onAudioTrackInitialized
和onAudioTrackReleased
回呼新增至AnalyticsListener
、AudioRendererEventListener
和AudioSink.Listener
。 - 修正 DTS Express 音訊緩衝區反向溢位問題 (#650)。
- 修正 E-AC3-JOC 功能檢查擲回
IllegalArgumentException
的錯誤。(#677)。
- 在 MP4 和 Matroska 中新增對 24/32 位元大端序 PCM 的支援,以及在 MP4 中剖析
- 影片:
- 允許
MediaCodecVideoRenderer
使用自訂VideoFrameProcessor.Factory
。 - 修正如果音訊串流的開頭是負時間戳記,就無法轉譯第一個影格的錯誤 (#291)。
- 允許
- 文字:
- 移除
ExoplayerCuesDecoder
。包含sampleMimeType = application/x-media3-cues
的文字軌現在由TextRenderer
直接處理,不需SubtitleDecoder
例項。
- 移除
- 中繼資料:
- 系統不會再針對「僅限解碼」的範例呼叫
MetadataDecoder.decode
,因為實作必須一律傳回空值。
- 系統不會再針對「僅限解碼」的範例呼叫
- 效果:
- 新增
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
,根據時間戳記將點陣圖輸入內容排入佇列。 - 將
VideoFrameProcessor.registerInputStream()
變更為非封鎖。應用程式必須實作VideoFrameProcessor.Listener#onInputStreamRegistered()
。 - 已將
VideoFrameProcessor.queueInputBitmap
的frameRate
和durationUs
參數變更為TimestampIterator
。
- 新增
- IMA 擴充功能:
- 修正多時段 DASH 直播如果不是播放清單中第一個項目,可能會擲回例外狀況 (#571)。
- 呼叫
AdsLoader.destroy()
前,請先發布 StreamManager - 將 IMA SDK 版本遞增升級至 3.31.0。
- 工作階段:
- 將
DefaultMediaNotificationProvider
中的通知前景服務行為設為FOREGROUND_SERVICE_IMMEDIATE
(#167)。 - 請只使用 API 31 以上的
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
,以免在 Samsung 裝置上無法使用已淘汰的 API (#167)。 - 使用媒體通知控制器做為 Proxy,即可設定用來填入通知和平台工作階段的可用指令和自訂版面配置。
- 轉換 Media3 中
MediaSessionService.onStartCommand()
收到的媒體按鈕事件,而不是將其轉送至平台工作階段和返回 Media3。如此一來,呼叫端控制器一律是媒體通知控制器,應用程式便能在所有支援的 API 級別上,輕鬆辨識來自通知的呼叫。 - 修正在連線至舊版
MediaSessionCompat
時MediaController.getCurrentPosition()
無法推動的錯誤。 - 新增
MediaLibrarySession.getSubscribedControllers(mediaId)
來提升便利性。 - 覆寫
MediaLibrarySession.Callback.onSubscribe()
,斷言控制器訂閱的父項 ID 可供使用。如果成功,系統會接受訂閱項目,並立即呼叫notifyChildrenChanged()
以通知瀏覽器 (#561)。 - 新增 Automotive OS 工作階段示範模組,並啟用 Android Auto 的工作階段示範。
- 如果媒體通知控制器無法使用
COMMAND_GET_TIMELINE
,請勿設定架構工作階段的佇列。如果使用 Android Auto 做為從架構工作階段讀取的用戶端控制器,Android Auto 使用者介面中的queue
按鈕就不會顯示 (#339)。 - 根據預設,請使用
DataSourceBitmapLoader
,而非SimpleBitmapLoader
。(#271、#327)。 - 新增
MediaSession.Callback.onMediaButtonEvent(Intent)
,允許應用程式覆寫預設媒體按鈕事件處理機制。
- 將
- UI:
- 為 Wear OS 裝置新增
Player.Listener
實作項目,以便處理Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
造成的播放抑製作業,方法是啟動系統對話方塊,讓使用者連結合適的音訊輸出裝置 (例如藍牙耳機)。如果在可設定的逾時時間內 (預設為 5 分鐘) 連結合適的裝置,事件監聽器就會自動繼續播放。
- 為 Wear OS 裝置新增
- 下載內容:
- 針對
DownloadService
宣告「資料同步處理」前景服務類型,以便與 Android 14 相容。使用這項服務時,應用程式也必須在資訊清單中將dataSync
新增為foregroundServiceType
,並新增FOREGROUND_SERVICE_DATA_SYNC
權限 (#11239)。
- 針對
- HLS 擴充功能:
- 重新整理 HLS 即時播放清單,系統會以上次載入開始時間 (而非上次載入完成時間) 計算的間隔時間 (#663)。
- DASH 擴充功能:
- 允許在區隔範本網址中使用多個相同的 DASH ID。
- 新增實驗性支援,可在擷取期間剖析字幕。這對合併重疊的字幕有更完善的支援,包括解決在字幕片段之間轉換時閃爍的閃爍問題。您可以使用
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
啟用這項功能 (#288)。
- RTSP 擴充功能:
- 解碼器擴充功能 (FFmpeg、VP9、AV1、MIDI 等):
- 發布 MIDI 解碼器模組,支援使用 Jsyn 程式庫合成音訊,支援播放標準 MIDI 檔案。
- 新增
DecoderOutputBuffer.shouldBeSkipped
即可直接標示不需要提供的輸出緩衝區。建議使用此方法,而非即將淘汰的C.BUFFER_FLAG_DECODE_ONLY
。 - 新增
Decoder.setOutputStartTimeUs
和SimpleDecoder.isAtLeastOutputStartTimeUs
,允許解碼器在開始時間之前捨棄純程式碼範例。建議改用即將淘汰的Buffer.isDecodeOnly
。 - 修正將 MIDI 解碼器構件發布至 Maven 存放區的錯誤。構件已重新命名為
media3-exoplayer-midi
(#734)。
- Leanback 擴充功能:
- 修正停用途徑可能會導致 Leanback 程式碼內
ArithmeticException
的錯誤 (#617)。
- 修正停用途徑可能會導致 Leanback 程式碼內
- 測試公用程式:
- 讓
TestExoPlayerBuilder
和FakeClock
與 Espresso UI 測試和 Compose UI 測試相容。修正了在 Espresso 或 Compose 檢視畫面互動期間,播放出現非確定性進展的錯誤。
- 讓
- 移除已淘汰的符號:
- 移除
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
和TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
。請改用Composition.Builder.setHdrMode(int)
,並將Composition
傳遞至Transformer.start(Composition, String)
。 - 移除已淘汰的
DownloadNotificationHelper.buildProgressNotification
方法,改用採用notMetRequirements
參數且未淘汰的方法。
- 移除
1.2.0-rc01 版
2023 年 11 月 1 日
使用 1.2.0 穩定版。
1.2.0-beta01 版
2023 年 10 月 19 日
使用 1.2.0 穩定版。
1.2.0-alpha02 版
2023 年 9 月 29 日
使用 1.2.0 穩定版。
1.2.0-alpha01 版
2023 年 8 月 17 日
使用 1.2.0 穩定版。
1.1.0 版本
1.1.1 版
2023 年 8 月 16 日
- 一般程式庫:
- 從所有模組中移除意外新增的
multidex
依附元件 (#499)。
- 從所有模組中移除意外新增的
- ExoPlayer:
- 修正
PlaybackStatsListener
中在清除播放清單後建立假的PlaybackStats
的問題。 - 在通用媒體客戶資料 (CMCD) 記錄中加入其他欄位:串流格式 (sf)、串流類型 (st)、版本 (v)、最高位元率 (tb)、物件時間長度 (d)、測量總處理量 (mtp) 和物件類型 (#8699)。
- 修正
- 音訊:
- 修正在播放極短檔案時,
Player.getState()
從未轉換為STATE_ENDED
的錯誤 (#538)。
- 修正在播放極短檔案時,
- 音訊卸載:
- 依照 RFC 7845 將 Ogg ID 標頭和註解標頭頁面附加至位元流,以便卸載 Opus 播放。
- 影片:
- H.265/HEVC:修正剖析 SPS 短期和長期參考相片資訊的問題。
- 文字:
- CEA-608:變更提示截斷邏輯,只將顯示的文字納入考量。先前將提示長度限制為 32 個字元時 (在技術規範下,規格可正確正確),但先前含有縮排和定位位偏移 (#11019)。
- IMA 擴充功能:
- 將 IMA SDK 版本遞增升級至 3.30.3。
- 工作階段:
- 在控制器的狀態中新增自訂版面配置,並提供 getter 以存取該版面配置。自訂版面配置變更時,系統會呼叫
MediaController.Listener.onCustomLayoutChanged
。如果應用程式想要將不同的自訂版面配置傳送至不同的 Media3 控制器,可以在MediaSession.Callback.onConnect
中使用AcceptedResultBuilder
,確保控制器在連線完成後可以使用自訂版面配置。 - 修正
MediaLibraryServiceLegacyStub
傳送錯誤至不支援Result
,但該錯誤會產生UnsupportedOperationException
的問題 (#78)。 - 修正
PlayerWrapper
透過舊版指令 (COMMAND_ADJUST_DEVICE_VOLUME
和COMMAND_SET_DEVICE_VOLUME
) 和新指令 (#554) 判斷volumeControlType
建立VolumeProviderCompat
的方式。COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
- 在控制器的狀態中新增自訂版面配置,並提供 getter 以存取該版面配置。自訂版面配置變更時,系統會呼叫
1.1.0 版本
2023 年 7 月 5 日
- 一般程式庫:
- 針對不適用的音訊路徑新增抑制原因,並在準備就緒的變更原因太長時播放。(#15)。
- 為玩家新增指令:
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- 為播放器新增超載方法,允許使用者指定音量標記:
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- 為
DeviceInfo
新增Builder
,並淘汰現有的建構函式。 - 新增
DeviceInfo.routingControllerId
即可指定遠端播放的轉送控制器 ID。 - 將
Player.replaceMediaItem(s)
新增為捷徑,用於在相同位置新增及移除項目。(#8046)。
- ExoPlayer:
- 只有在已明確選擇加入時,才能允許 ExoPlayer 控制裝置音量方法。您可以使用
ExoPlayer.Builder.setDeviceVolumeControlEnabled
存取下列項目:getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
和setDeviceVolume(int, int)
increaseDeviceVolume(int)
和increaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
和decreaseDeviceVolume(int, int)
- 新增
FilteringMediaSource
,以便從MediaSource
篩選可用的音軌類型。 - 新增支援在自動調整串流格式 DASH、HLS 和 SmoothStreaming 的傳出要求中納入通用媒體用戶端資料 (CMCD)。已整合下列欄位:
br
、bl
、cid
、rtp
和sid
(#8699)。API 結構和 API 方法:- CMCD 記錄功能預設為停用,請使用
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
啟用這項功能。 - 所有金鑰皆預設為啟用,請覆寫
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
來篩選出要記錄的金鑰。 - 覆寫
CmcdConfiguration.RequestConfig.getCustomData()
即可啟用自訂鍵記錄功能。
- CMCD 記錄功能預設為停用,請使用
- 在主要示範的資訊清單中新增額外動作,即可透過自訂
*.exolist.json
檔案更輕鬆地啟動試用版應用程式 (#439)。 - 新增
ExoPlayer.setVideoEffects()
,以便在影片播放期間使用Effect
。 - 更新
SampleQueue
,將sourceId
儲存為long
而非int
。這會變更公開方法SampleQueue.sourceId
和SampleQueue.peekSourceId
的簽名。 - 新增參數至
LoadControl
方法shouldStartPlayback
和onTracksSelected
,以便將這些方法與相關的MediaPeriod
建立關聯。 - 如要變更
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
的簽章,請新增時間軸參數,該參數中含有在對應中做為索引鍵的 UID。這是為了確保多時間直播發生並行問題。 - 淘汰
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
和BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
。可以改為呼叫不含mediaTimeOffsetUs
的方法變化版本。請注意,即使已淘汰的變化版本,也不會再為調度工具調度MediaLoadData
物件的startTimeUs
和endTimeUs
加入偏移值。 - 將
ExoTrackSelection.blacklist
重新命名為excludeTrack
,並將isBlacklisted
重新命名為isTrackExcluded
。 - 修正在空白播放清單上呼叫時,
ExoPlayer.setMediaItem(s)
和addMediaItem(s)
之間的行為不一致。
- 只有在已明確選擇加入時,才能允許 ExoPlayer 控制裝置音量方法。您可以使用
- 轉換程式:
- 移除
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
。改用ExoPlayerAssetLoader.Factory(MediaSource.Factory)
和Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
。 - 移除
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
。 - 修正在影片串流結束時收到輸入影格待處理的訊息時,轉換可能會停滯 (造成多工逾時) 的錯誤。
- 透過
MediaCodecList
查詢轉碼器 (而非使用findDecoder/EncoderForFormat
公用程式) 以擴大支援範圍。 - 移除
DefaultEncoderFactory
中的 B 框架設定,因為無法在部分裝置上運作。
- 移除
- 音軌選取:
- 新增預設為停用的
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
。啟用後,當轉譯器功能變更時,DefaultTrackSelector
會觸發新的音軌選取程序。
- 新增預設為停用的
- 擷取工具:
- 音訊:
- 修正在啟用隧道功能且
AudioProcessors
處於啟用狀態時,某些播放會失敗的錯誤,例如:無間隔剪輯功能 (#10847)。 - 在直接播放 (卸載) 時封裝 Ogg 封包中的 Opus 影格。
- 使用卸載排程在睡眠期間推估當前位置。
- 新增
Renderer.release()
和AudioSink.release()
,以在玩家生命週期結束時釋出資源。 - 監聽
DefaultAudioSink
中的音訊功能變更。在DefaultAudioSink
的建構函式中新增必要參數context
,其中DefaultAudioSink
會註冊為AudioCapabilitiesReceiver
的事件監聽器,並在功能變更時更新其audioCapabilities
屬性。 - 透過
AudioSink.Listener
介面中的新事件onAudioCapabilitiesChanged
和觸發onRendererCapabilitiesChanged
事件的新介面RendererCapabilities.Listener
傳播音訊功能變更。 - 新增
ChannelMixingAudioProcessor
,以將縮放/混音套用至聲道。 - 將新的 int 值
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
新增至DecoderDiscardReasons
,以在音訊功能變更之後,略過略過模式時捨棄音訊解碼器。 - 新增 DTS Express 和 DTS:X 的直接播放支援 (#335)。
- 修正在啟用隧道功能且
- 影片:
- 在轉譯器停用時,讓
MediaCodecVideoRenderer
回報寬度和高度為 0 的VideoSize
。當Player.getVideoSize()
變更時,系統會據此呼叫Player.Listener.onVideoSizeChanged
。這項變更實施後,當Player.getCurrentTracks
不支援影片,或尚未決定支援的視訊軌時,ExoPlayer 的影片寬度和高度為 0。MediaCodecVideoRenderer
- 在轉譯器停用時,讓
- DRM:
- 針對
DefaultDrmSession
上不應從 DRM 套件外部呼叫的幾種僅限內部的方法,降低其瀏覽權限:void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- 針對
- Muxer:
- 新增 muxer 程式庫,可用來建立 MP4 容器檔案。
- IMA 擴充功能:
- 為 DAI 啟用多週期直播 DASH 串流。請注意,目前的實作方式尚未支援在直播中跳轉 (#10912)。
- 修正在直播中插入新廣告群組的錯誤,因為連續時間軸的計算內容位置略有不同。
- 工作階段:
- 新增輔助方法
MediaSession.getControllerForCurrentRequest
,取得目前呼叫Player
方法的控制器相關資訊。 - 新增
androidx.media3.session.MediaButtonReceiver
,讓應用程式可以使用藍牙耳機等媒體按鈕事件 (#167) 實作繼續播放功能。 - 在
MediaSession.Callback.onAddMediaItems
中新增預設實作,允許要求的MediaItems
在有LocalConfiguration
(例如 URI) 時傳遞至Player
(#282)。 - Android 12 以下版本預設會在精簡媒體通知檢視畫面中新增「跳轉到上一個」和「瀏覽下一個」指令按鈕 (#410)。
- 在
MediaSession.Callback.onAddMediaItems
中新增預設實作,允許要求的MediaItems
在有LocalConfiguration
(例如 URI) 時傳遞至Player
(#282)。 - Android 12 以下版本預設會在精簡媒體通知檢視畫面中新增「跳轉到上一個」和「瀏覽下一個」指令按鈕 (#410)。
- 新增輔助方法
- UI:
- 新增公用程式方法
shouldShowPlayButton
和handlePlayPauseButtonAction
,以編寫具有播放/暫停按鈕的自訂 UI 元素。
- 新增公用程式方法
- RTSP 擴充功能:
- DASH 擴充功能:
- 移除多時段 DASH 串流的媒體時間偏移從
MediaLoadData.startTimeMs
和MediaLoadData.endTimeMs
。 - 修正重新準備多時段即時 Dash 媒體來源會產生
IndexOutOfBoundsException
的錯誤 (#10838)。
- 移除多時段 DASH 串流的媒體時間偏移從
- HLS 擴充功能:
- 新增
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
,以便設定載入執行緒的逾時時間,等待TimestampAdjuster
初始化完成。如果初始化作業未在逾時前完成,系統會擲回PlaybackException
,避免播放一直停滯。逾時預設為零 (#323)。
- 新增
- 測試公用程式:
- 檢查
DataSourceContractTest
中的 URI 配置大小寫是否有大小寫之分。
- 檢查
- 移除已淘汰的符號:
- 移除
DefaultAudioSink
建構函式,請改用DefaultAudioSink.Builder
。 - 移除
HlsMasterPlaylist
,請改用HlsMultivariantPlaylist
。 - 移除
Player.stop(boolean)
。如果reset
為true
,請改用Player.stop()
和Player.clearMediaItems()
。 - 移除兩個已淘汰的
SimpleCache
建構函式,改用採用DatabaseProvider
的非已淘汰建構函式,以便提升效能。 - 移除
DefaultBandwidthMeter
建構函式,請改用DefaultBandwidthMeter.Builder
。 - 移除
DefaultDrmSessionManager
建構函式,請改用DefaultDrmSessionManager.Builder
。 - 移除兩個已淘汰的
HttpDataSource.InvalidResponseCodeException
建構函式,並使用接受其他欄位(cause
、responseBody
) 且未淘汰的建構函式,改善錯誤記錄功能。 - 移除
DownloadHelper.forProgressive
、DownloadHelper.forHls
、DownloadHelper.forDash
和DownloadHelper.forSmoothStreaming
,改用DownloadHelper.forMediaItem
。 - 移除已淘汰的
DownloadService
建構函式,請使用含有channelDescriptionResourceId
參數選項且未淘汰的建構函式。 - 移除 Charset 的已淘汰 String 常數 (
ASCII_NAME
、UTF8_NAME
、ISO88591_NAME
、UTF16_NAME
和UTF16LE_NAME
),請改用kotlin.text
套件、java.nio.charset.StandardCharsets
或com.google.common.base.Charsets
中的 Kotlin 圖表。 - 移除已淘汰的
WorkManagerScheduler
建構函式,請改用一個未淘汰的建構函式,且該建構函式會改為提供Context
參數。 - 移除已淘汰的方法
createVideoSampleFormat
、createAudioSampleFormat
、createContainerFormat
和createSampleFormat
(用於將Format
類別執行個體化)。改為使用Format.Builder
建立Format
的例項。 - 移除已淘汰的方法
copyWithMaxInputSize
、copyWithSubsampleOffsetUs
、copyWithLabel
、copyWithManifestFormatInfo
、copyWithGaplessInfo
、copyWithFrameRate
、copyWithDrmInitData
、copyWithMetadata
、copyWithBitrate
和copyWithVideoSize
,改用Format.buildUpon()
和 setter 方法。 - 移除已淘汰的
ExoPlayer.retry()
,請改用prepare()
。 - 移除已淘汰的零引數
DefaultTrackSelector
建構函式,請改用DefaultTrackSelector(Context)
。 - 移除已淘汰的
OfflineLicenseHelper
建構函式,請改用OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
。 - 移除已淘汰的
DownloadManager
建構函式,請改用採用Executor
的建構函式。 - 移除已淘汰的
Cue
建構函式,請改用Cue.Builder
。 - 移除已淘汰的
OfflineLicenseHelper
建構函式,請改用OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
。 - 移除四種已淘汰的
AnalyticsListener
方法:onDecoderEnabled
,請改用onAudioEnabled
和/或onVideoEnabled
。onDecoderInitialized
,請改用onAudioDecoderInitialized
和/或onVideoDecoderInitialized
。onDecoderInputFormatChanged
,請改用onAudioInputFormatChanged
和/或onVideoInputFormatChanged
。onDecoderDisabled
,請改用onAudioDisabled
和/或onVideoDisabled
。
- 移除已淘汰的
Player.Listener.onSeekProcessed
和AnalyticsListener.onSeekProcessed
,請改用onPositionDiscontinuity
搭配DISCONTINUITY_REASON_SEEK
。 - 移除
ExoPlayer.setHandleWakeLock(boolean)
,請改用setWakeMode(int)
。 - 移除已淘汰的
DefaultLoadControl.Builder.createDefaultLoadControl()
,請改用build()
。 - 移除已淘汰的
MediaItem.PlaybackProperties
,請改用MediaItem.LocalConfiguration
。已淘汰的欄位MediaItem.playbackProperties
現在是MediaItem.LocalConfiguration
類型。
- 移除
1.1.0-rc01 版本
2023 年 6 月 21 日
使用 1.1.0 穩定版。
1.1.0-beta01 版本
2023 年 6 月 7 日
使用 1.1.0 穩定版。
1.1.0-alpha01 版
2023 年 5 月 10 日
使用 1.1.0 穩定版。
1.0.0 版本
1.0.2 版
2023 年 5 月 18 日
發布了 androidx.media3:media3-*:1.0.2
。1.0.2 版包含此連結所列的修訂項目。
此版本可對應至 ExoPlayer 2.18.7 版。
這個版本包含自 1.0.1 版以來的下列變更:
- 核心程式庫:
- 新增
Buffer.isLastSample()
,表示Buffer
是否包含C.BUFFER_FLAG_LAST_SAMPLE
旗標。 - 修正在未讀取「串流結尾」樣本的情況下,將最後一個含有影格的範例從佇列中移除,可能無法轉譯最後一個影格的問題。(#11079)。
- 新增
- 擷取工具:
- 透過重複使用 RTSP 和 MP4 擷取器已使用的剖析邏輯,修正 MPEG-TS 檔案中 H.265 SPS 的剖析問題 (#303)。
- 文字:
- SSA:針對開頭為位元組順序標記的 UTF-16 檔案新增支援 (#319)。
- 工作階段:
- 修正問題:當連線至舊版
MediaSessionCompat
並更新其動作時,MediaController
不會更新可用的指令。 - 修正導致
MediaLibraryService
在 API 30 上使用params.isRecent == true
從系統 UI 呼叫Callback.onGetLibraryRoot
時,無法傳回空值的錯誤 (#355)。 - 修正
MediaSessionService
或MediaLibraryService
的記憶體流失問題 (#346)。 - 修正
MediaSession
中合併的Timeline
和位置更新合併後,可能會導致MediaController
擲回IllegalStateException
的錯誤。
- 修正問題:當連線至舊版
1.0.1 版
2023 年 4 月 18 日
發布了 androidx.media3:media3-*:1.0.1
。1.0.1 版包含以下修訂項目。
此版本可對應至 ExoPlayer 2.18.6 版。
- 核心程式庫:
- 跳轉至預設位置時,重設目標直播覆寫設定 (#11051)。
- 修正媒體中的空白範例串流可能會導致播放停滯的錯誤。
- 工作階段:
- 修正在舊版
MediaSessionCompat
發布多個相同佇列項目,導致MediaController
發生例外狀況的錯誤。(#290)。 - 將缺少的
MediaSession.broadcastCustomCommand
轉送新增至舊版MediaControllerCompat.Callback.onSessionEvent
(#293)。 - 修正呼叫
MediaSession.setPlayer
無法更新可用指令的錯誤。 - 修正從
MediaController
傳送的TrackSelectionOverride
執行個體在參照含有Format.metadata
的群組時,會略過的問題。(#296)。 - 修正需要
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
才能透過舊版MediaSessionCompat
存取中繼資料的問題。 - 修正在
MediaSessionService
中使用時,背景執行緒上的MediaSession
執行個體造成當機的問題 (#318)。 - 修正程式庫宣告媒體按鈕接收器,沒有應用程式有此意圖的問題 (#314)。
- 修正在舊版
- DASH:
- 修正空白區段時間軸的處理方式。(#11014)。
- RTSP:
- 如果使用 UDP 的 RTSP 設定失敗,並發生 RTSP 錯誤 461 UnsupportedTransport,請使用 TCP 重試 (#11069)。
1.0.0 版本
2023 年 3 月 22 日
發布了 androidx.media3:media3-*:1.0.0
。1.0.0 版包含此連結所列的修訂項目。
此版本可對應至 ExoPlayer 2.18.5 版。
自 1.0.0-rc02 以來沒有任何變更。
1.0.0-rc02 版
2023 年 3 月 2 日
發布了 androidx.media3:media3-*:1.0.0-rc02
。查看 1.0.0-rc02 版的修訂項。
此版本可對應至 ExoPlayer 2.18.4 版。
- 核心程式庫:
- 下載內容:
- 將兩個區段的開始時間差異,設為可在
SegmentDownloader
和子類別中合併設定 (#248)。
- 將兩個區段的開始時間差異,設為可在
- 音訊:
- 影片:
- 將 HEVC HDR10 格式對應至
HEVCProfileMain10HDR10
,而不是HEVCProfileMain10
。 - 針對 Chromecast (支援 Google TV) 和 Lenovo M10 FHD Plus 的裝置問題,新增導致 60fps AVC 串流標示為不支援的 (#10898)。
- 修正在播放畫面更新率遠高於螢幕刷新率的媒體時,影格版本效能問題。
- 將 HEVC HDR10 格式對應至
- 投放:
- 修正在媒體項目之間轉換時的暫時性
STATE_IDLE
(#245)。
- 修正在媒體項目之間轉換時的暫時性
- RTSP:
- 擷取剖析無效 RTSP 描述回應訊息時擲回的 IllegalArgumentException 。(#10971)。
- 工作階段:
- 修正通知播放/暫停按鈕未隨著玩家狀態更新的錯誤 (#192)。
- IMA 擴充功能:
- 修正因未收到第一個
LOADED
事件 (而在不含廣告的情況下) 而無法啟動 DAI 串流的錯誤。
- 修正因未收到第一個
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 聲道音訊對應到所有 Android 版本的 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 月 21 日
發布了 androidx.media3:media3-*:1.0.0-beta02
。查看 1.0.0-beta02 版的修訂項。
此版本可對應至 ExoPlayer 2.18.1 版。
- 核心程式庫:
- 擷取工具:
- 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:
- 將廣告輪詢率從 100 毫秒降至 200 毫秒,以符合美國媒體評議會 (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
模組取代)。如此一來,不需使用轉接器/連接器類別,就能直接整合播放器及媒體工作階段。