Media3
| 最近更新時間 | 穩定版 | 候選版 | Beta 版 | Alpha 版 |
|---|---|---|---|---|
| 2026 年 10 月 26 日 | 1.11.1 | - | - | 1.12.0-alpha02 |
宣告依附元件
如果要為 Media3 新增依附元件,您必須將 Google Maven 存放區新增至專案。詳情請參閱 Google 的 Maven 存放區。
在應用程式或模組的 build.gradle 檔案中,新增您需要的構件依附元件:
Groovy
dependencies { def media3_version = "1.11.1" // 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 using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views 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 inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$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" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.11.1" // 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 using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$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 inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$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") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
如要進一步瞭解依附元件,請參閱「新增建構依附元件」一文。
意見回饋
您的意見可協助我們改善 Jetpack。您可以使用 Media3 Issue Tracker 尋找問題的答案、已知問題和功能要求,以及提出新問題。
1.12.0 版
1.12.0-alpha02 版
2026 年 10 月 26 日
1.12.0-alpha02 版本包含以下修訂項目。
- Effect Play 服務:
- 推出新的
media3-effect-play-services模組,提供 Google Play 服務媒體效果,包括用於影片強化的EnhancementSessionDecorator和用於音訊來源分離的StudioSoundAudioProcessor。
- 推出新的
1.12.0-alpha01 版
2026 年 10 月 21 日
1.12.0-alpha01 版本包含以下修訂項目。
- 通用程式庫:
- 新增
C.COLOR_SPACE_DISPLAY_P3,並在MediaFormatUtil和ColorInfoISO 色彩對應中支援 Display P3 色域。 - 新增中央
Flags註冊資料庫,用於管理實驗性功能旗標和階段推出 (Flags.setCanaryModeEnabled)。已遷移許多現有的@ExperimentalApi方法,改用新的旗標 API。 - 新增
MediaMetadata.playlistId、MediaMetadata.Builder.setPlaylistId(String)、MediaMetadata.categories和MediaMetadata.Builder.setCategories(List<String>)。 - 將
androidx.media3.common.util.NonNullApi替換為 JSpecifyorg.jspecify.annotations.NullMarked。
- 新增
- ExoPlayer:
- 修正 DASH 多時段播放時,如果下個時段的第一個區塊無法載入,播放就會卡住的問題 (#3396)。
- 載入重試次數用盡時,在
AnalyticsListener.onLoadError和MediaSourceEventListener.onLoadError中回報wasCanceled = true。 - 支援使用
ExoPlayer.addVideoFrameMetadataListener和ExoPlayer.removeVideoFrameMetadataListener註冊多個VideoFrameMetadataListener執行個體,並淘汰ExoPlayer.setVideoFrameMetadataListener和ExoPlayer.clearVideoFrameMetadataListener。 - 分割並偏移每個時段的
AdPlaybackState,即可支援多時段內容 (例如 DASH) 中的廣告。 - 修正
PreCacheHelper中的競爭狀況,取消進行中的準備要求仍可能啟動背景下載。 - 限制
ProgressiveMediaSource和DefaultMediaSourceFactory上的setLoadOnlySelectedTracks(true),只篩除未選取的影片和圖片軌。系統一律會載入音訊和文字軌,以便順暢切換音軌,不必重新緩衝處理。 - 預設在
ProgressiveMediaSource和DefaultMediaSourceFactory上啟用setLoadOnlySelectedTracks(true)。這樣可以節省記憶體,並在未選取所有音軌時,更準確地計算DefaultLoadControl緩衝區分配。請注意,如果在播放期間啟用未選取的影片或圖片軌,可能會導致額外的緩衝處理。 - 修正啟用動態排程時,
Player.getCurrentPosition()可能會傳回過時值 (每秒僅更新幾次) 的問題 (#3286)。 - 修正
AudioTrack播放頭位置意外減少或重設,可能誤視為整數溢位,導致播放停滯在緩衝狀態的問題 (#3407)。 - 移除實驗性
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean)。 - 避免從插頁式廣告或廣告返回結尾處剪輯的內容時,不必要地重新啟用轉譯器和發生故障 (#3371)。
- 修正以下問題:啟用
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION時,即將播放的播放清單項目發生轉譯器錯誤,可能會提前中斷目前的播放作業。 - 修正啟用
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION時,ExoPlayer將轉譯器轉換至未準備好的媒體週期,可能發生的NullPointerException。 - 修正啟用
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESS時,動態排程期間可能會意外略過或捨棄影片影格的問題。 - 修正直播廣告期間停止播放時,數據分析事件監聽器中的
ArrayIndexOutOfBoundsException(#3423)。 - 修正以下問題:
PreloadMediaSource可能會在從未呼叫preload()時,意外發布預先載入事件 (#3408)。 - 修正中繼資料軌忽略
Format.subsampleOffsetUs的問題,這會導致解碼的 SCTE-35 拼接指令中出現不正確的播放時間戳記 (#3413)。 - 修正對相同來源多次呼叫
preload()時,PreloadMediaSource和DefaultPreloadManager中的記憶體流失問題 (#3445)。 - 修正內容時間軸重新整理作業待處理時,釋出
AdsMediaSource會發生NullPointerException的問題 (#3442)。 - 修正以下問題:在跳轉後載入 (或在非零位置開始播放) 失敗並重試時,漸進式媒體的播放可能會跳至錯誤位置 (#3440)。
- 新增 Xiaomi TV Stick 4K (MiTV-AYFR0) H.264 解碼器在無縫變更解析度時凍結的解決方法 (#3457)。
- 修正
SteeringManifestTracker中的NullPointerException,在發布的載入完成或錯誤回呼執行前,追蹤器會停止 (#3443)。 - 支援從 MP4 檔案中的
mebx盒裝中繼資料軌,播放 HAGC (ST 2094-50) 定時中繼資料。 - 修正問題:播放清單中準備速度緩慢的媒體時段可能會遭到略過。
- CompositionPlayer:
- 支援使用
Composition.Builder.setVideoFrameAggregationParameters設定影片影格匯總的影格率,以便用於播放工作流程。 - 在影格匯總期間,選取時間戳記最接近的影格,修正因時間戳記量化或捨入不相符,導致多序列組合結構中影格遺漏的問題。這項功能僅適用於 API 29 以上版本,因為每個影片序列都需要額外保留一個影格。
- 支援使用
- 轉換程式:
- 支援使用
Composition.Builder.setVideoFrameAggregationParameters設定影片影格匯總的影格率,以便匯出工作流程。 - 在影格匯總期間,選取時間戳記最接近的影格,修正因時間戳記量化或捨入不相符,導致多序列組合結構中影格遺漏的問題。這項功能僅適用於 API 29 以上版本,因為每個影片序列都需要額外保留一個影格。
- 使用
AudioProcessors時,請遵循Transformer#setAudioMimeType(AUDIO_RAW)。在修正前,要求MimeTypes.AUDIO_RAW並套用AudioProcessor會導致輸出內容遭到壓縮。
- 支援使用
- 音軌選取:
- 修正問題:在某些裝置上,系統會錯誤地優先選擇 SDR 軌,而非支援的 Dolby Vision 軌 (#3135)。
- 擷取工具:
- Mp4Extractor:修正 MP4 中 Opus 的
dOps方塊剖析問題,其中PreSkip、InputSampleRate和OutputGain未從大端序轉換為小端序,導致在沒有編輯清單時,前 ~299 毫秒的音訊會遭到捨棄 (#3431)。 - 移除
Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES、Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265、FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES和FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265,因為 H.264 和 H.265 的 GOP 內樣本依附元件剖析功能預設為啟用。 - Mp4Extractor:修正從包含高度座標的
xyz方塊剖析地點中繼資料,以填入Mp4LocationData的問題。 - 新增
ExtractorUtil.getFramesPerEncodedSample,計算編碼音訊格式每個樣本的音訊影格數 (#3367)。 - 在
Mp4Extractor中新增FLAG_READ_XMP_METADATA,從頂層 UUID 方塊擷取 XMP 中繼資料。 - 在
PsExtractor中,先從每個 PES 封包中移除private_stream_1子串流標頭,再將酬載傳遞至音訊讀取器,藉此修正播放 DVD 樣式 MPEG-PS 內容時,AC-3、DTS 和 LPCM 音訊損毀的問題 (#3327)。 - 修正第 1 版
tfdt方塊編碼負baseMediaDecodeTime時,FragmentedMp4Extractor失敗的問題 (#3412)。 - MPEG-TS:支援剖析 H.264 和 H.265 影格封裝排列 SEI 訊息,以填入
Format.stereoMode(#3419)。 - 剖析 Dolby Vision Profile 20 設定資料,並拒絕不支援的 Dolby Vision 設定檔,而不是以不正確的顏色播放標準 HEVC (#3427)。
- MP3:還原 LAME/Xing 編碼器延遲和填補中繼資料調整,因為與許多
MediaCodecMP3 解碼器不相容 (#3425)。 - Matroska:修正剖析巢狀
ChapterAtom元素時的NullPointerException(#3438)。 - Ogg:修正錯誤,避免大小為 255 位元組倍數且在頁面邊界結束的封包與後續封包合併。
- MP4:剖析
Mp4Extractor和FragmentedMp4Extractor中mebx方格的時間中繼資料軌。含有it35金鑰的音軌會公開為MimeTypes.APPLICATION_ITUT_T35(啟用 HAGC 播放)。除非設定FLAG_EMIT_RAW_MEBX_DATA,否則系統會忽略其他mebx軌。如果設定FLAG_EMIT_RAW_MEBX_DATA,所有mebx軌都會以原始MimeTypes.APPLICATION_MEBX的形式發出。 - Ogg:支援擷取 Opus 結尾邊框間距,以便無縫播放 (#2576),並在跳轉至以連續封包開頭的頁面後,修正樣本時間戳記。
- Ogg:忽略串流中的 Opus ID 和註解標頭封包,修正鏈結 Ogg Opus 串流中的解碼錯誤和約 1 秒的時間戳記跳躍。
- Mp4Extractor:修正 MP4 中 Opus 的
- 檢查器:
- 支援使用
MetadataRetriever從 MP4 檔案擷取 XMP 中繼資料。 - 支援將
MediaExtractorCompat中的mebx盒裝定時中繼資料軌擷取為MimeTypes.APPLICATION_MEBX。
- 支援使用
- 檢查器頁框:
- 使用
FrameExtractor擷取 Ultra HDR 影格時,修正 SDR 基本圖片中廣色域 BT.2020 色彩的裁剪問題。色域外的顏色現在會輕微壓縮至 sRGB 色域,而非遭到截斷。
- 使用
- 音訊:
- 針對在錯誤執行緒上叫用
android.media.AudioDeviceCallback的裝置,新增解決方法 (#3386)。 - 修正使用壓縮卸載功能切換曲目後,播放可能停滯的問題。
- 解決 Amazon Fire TV Stick 在時段轉換期間,AC-3 音訊可能凍結的問題 (#3448)。
- 支援修剪 Ogg 和 WebM/Matroska Opus 無縫播放的串流結尾編碼器邊框間距 (#2576)。
- 修正動態卸載無縫延遲和曲目轉換期間的填補更新,以便套用至即將播放的曲目,而非正在播放的曲目。
- 除了播放清單中的無縫轉場效果外,還會修剪單一串流和播放清單中最終串流的編碼器結尾邊框間距 (#2576)。
- 在串流開頭編碼器延遲修剪完成後,且不需要修剪串流結尾邊框時,避免在
TrimmingAudioProcessor中複製不必要的音訊緩衝區。
- 針對在錯誤執行緒上叫用
- 影片:
- 修正釋出時間戳記相同的延遲影片影格回報方式,改為回報為捨棄而非略過。
- 文字:
- 效果:
- 使用 StudioSound GMSCore 模組,實作
SoundSeparationAudioProcessor來分離音訊來源。
- 使用 StudioSound GMSCore 模組,實作
- 多工器:
- 修正
Mp4Muxer和FragmentedMp4Muxer中 Opus 的dOps方塊寫入問題,其中PreSkip、InputSampleRate和OutputGain是以小端序而非大端序寫入 (#3431)。 - 支援使用
Mp4Muxer在Mp4LocationData中寫入 GPS 海拔高度。 - 新增
Muxer.Factory.create(ParcelFileDescriptor),允許直接多工處理至ParcelFileDescriptor。 - 根據預設,在分段 MP4 檔案的
traf方塊中寫入tfdt(Track Fragment Base Media Decode Time) 方塊,提供媒體解碼時間戳記。 - 支援在
Mp4Muxer中寫入 E-AC-3 和 E-AC-3 JOC (Dolby Atmos)dec3容器方塊。 - 新增
MediaMuxerCompat的 WebM 格式支援。 - 在分段 MP4 檔案結尾寫入
mfra(電影片段隨機存取) 方塊,以便使用FLAG_READ_MFRA_FOR_SEEK_MAP在FragmentedMp4Extractor中搜尋。 - 修正問題:在寫入其他樣本前,寫入 EOS 樣本會導致
Mp4Writer和FragmentedMp4Writer當機。 - 在容器標頭中宣傳
dby1相容品牌,修正將 Dolby 內容多工處理至 MP4 或片段 MP4 檔案時的容器相容性 (#3369)。 - 支援
Mp4Muxer和FragmentedMp4Muxer中的 32 位元浮點 PCM 音軌 (#3389)。 - 新增音軌時,拒絕
Mp4Muxer和FragmentedMp4Muxer中不支援的 Dolby Vision 設定檔。 - 支援
Mp4Muxer和FragmentedMp4Muxer中的 24 位元和 32 位元整數 PCM 音軌。
- 修正
- IMA 擴充功能:
- 在
ImaServerSideAdInsertionMediaSource中,將播放器暫停和繼續事件轉送至 IMA SDK。
- 在
- 工作階段:
- 新增
MediaConstants.EXTRAS_KEY_PLAYLIST_ID、MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE、MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URI和MediaConstants.EXTRAS_KEY_CATEGORIES,從舊版中繼資料和說明填入播放清單和項目中繼資料,並新增MediaConstants.EXTRAS_KEY_SUGGESTED_TYPE和MediaConstants.EXTRAS_KEY_TTL_SECONDS,用於建議LibraryParams.extras。 - 修正了在強制執行嚴格
PendingIntent限制的裝置上,建立或釋出MediaSession時發生的SecurityException異常終止問題。 - 修正以下問題:在 Android 12 (API 31 和 32) 上,當
MediaSessionService尚未在前景執行時,MediaSession.getControllerForCurrentRequest()會在播放要求期間傳回null。 - 修正
MediaController連線至回報負數最大音量的舊版工作階段時,IllegalArgumentException異常終止的問題。 - 修正以下問題:在暫停的舊版
MediaSessionCompat上呼叫MediaController.setMediaItem或setMediaItems,然後呼叫play(),可能會調度不支援的onPrepareFrom*回呼,而不是onPlayFrom*,或調度onPlay(),而不重新初始化要求的媒體項目。 - 修正收到自訂指令回應時,舊版
MediaBrowser中的NullPointerException(#3432)。 - 修正
IllegalArgumentException接收舊版中繼資料時,基礎Bundle中有重複鍵而導致當機的問題。 - 控制舊版
MediaSessionCompat時,合併在同一個Looper疊代中發出的傳出MediaControllerCompat.TransportControls呼叫 (例如,同時呼叫setMediaItem、prepare和play現在會調度單一onPlayFrom*回呼)。
- 新增
- UI:
- 修正啟用雙向文字換行時,RTL 字幕標點符號位置和跨度範圍保留的問題 (#3454、#3455)。
- 將
TrackSelectionState和TrackSelectionParametersState類別及其對應的可組合項狀態記住函式新增至media3-ui-compose模組。 - 導入
PresentationState.videoAspectRatio,並讓Modifier.resizeWithContentScale採用aspectRatio: Float?,而非sourceSizeDp: Size?。 - 將
CuesState類別和rememberCuesState可組合函式新增至media3-ui-compose模組,用於監聽播放器目前的字幕。 - 如果
ProgressSlider是以ExoPlayer或CompositionPlayer為基礎,請新增對拖曳模式的支援。 - 在
PresentationState中新增showArtwork支援,並用來計算ContentFrame和Player中提供的選用artwork可組合函式的算繪時間。新增Artwork可組合項,做為artwork版位的預設值。 - 在
PlayPauseButtonState(showBuffering、showRetry、showReplay) 中新增欄位,並在PlayPauseButton中使用這些欄位,算繪更多圖示和緩衝指標。 - 新增
PlaybackState類別,以便自訂播放狀態觀測,並導入BufferingIndicator做為與按鈕無關的元件。 - 修正
PlayerView和PlayerControlView在多時段直播的片尾廣告預留位置時段邊界顯示廣告標記的問題。 Player、ContentFrame、PlayerDefaults和MiniController的可組合版位不再接收播放器或控制項顯示設定做為參數。請改為從呼叫範圍擷取 (例如topControls現在是@Composable BoxScope.() -> Unit)。這是不穩定 API 的破壞性變更。- 將
alignment參數新增至ContentFrame、Player和Modifier.resizeWithContentScale,將縮放後的內容置於容器內,並將ContentFrame的內容裁剪至其邊界,這樣使用ContentScale.Crop縮放的影片就不會再繪製到容器外。 - 透過公開
isLive和liveOffsetMs,為ProgressSlider、ProgressStateWithTickCount和ProgressStateWithTickInterval新增直播 UI 支援。將LiveButton可組合函式新增至media3-ui-compose-material3(#2213)。
- Ktor 擴充功能:
- 修正
KtorDataSource可能會將串流中連線失敗視為輸入結束,而非擲回HttpDataSourceException的問題 (#3460)。
- 修正
- HLS 擴充功能:
- 將
EXT-X-STREAM-INF和EXT-X-I-FRAME-STREAM-INF上的VIDEO-RANGE(PQ和HLG) 剖析為Format.colorInfo(#3441)。 - 修正剖析含有 PES 媒體樣本的 MPEG-TS
EXT-X-MAP初始化片段時,發生的NullPointerException問題 (#3456)。 - 修正迴歸問題:
Format.id和Format.metadata針對公開的 HLS 軌道為null(#3402)。 - 將素材資源清單廣告剪輯至
X-PLAYOUT-LIMIT,並略過完全超過限制的廣告,以及在插頁式廣告省略X-RESUME-OFFSET且時間長度不明時,將內容繼續播放偏移量預設為 0 (即使已設定X-PLAYOUT-LIMIT)。 - 修正以下問題:解析
X-ASSET-LIST插頁式廣告時,會覆寫同一廣告群組中其他插頁式廣告的內容繼續播放偏移量。
- 將
- DASH 擴充功能:
- 支援剖析
DashManifestParser中的替代 MPD 插入 (urn:mpeg:dash:event:alternativeMPD:insert:2025) 和取代 (urn:mpeg:dash:event:alternativeMPD:replace:2025) 事件,並在Period.alternativeMpdEvents中將其公開為AlternativeMpdEvent執行個體。這項破壞性變更會影響子類別為DashManifestParser的應用程式:DashManifestParser.buildPeriod現在會採用額外的List<AlternativeMpdEvent>參數,且先前的超載已移除。覆寫DashManifestParser.parseEventStream(XmlPullParser)的應用程式必須改為覆寫DashManifestParser.parseEventStream(XmlPullParser, String),因為前者已淘汰,並將在日後版本中設為私人。 - 將
EssentialProperty和SupplementalProperty描述元中的 CICP 顏色資訊 (ColourPrimaries、TransferCharacteristics、MatrixCoefficients和VideoFullRangeFlag) 剖析為Format.colorInfo(#3426)。 - 支援在特技模式 (
http://dashif.org/guidelines/trickmode) 描述元@value屬性中,以空格分隔@id值清單 (#3315)。 - 支援剖析
DashManifestParser中的<ProducerReferenceTime>、在AdaptationSet.producerReferenceTimes中公開,並用於填入 VOD 串流的Timeline.Window.presentationStartTimeMs和Timeline.Window.windowStartTimeMs。 - 新增 DASH 內容導向支援 (#1689)。
- 修正剖析 DASH 資訊清單時,如果
<UTCTiming>元素缺少屬性,可能會發生NullPointerException的問題 (#3436)。
- 支援剖析
- RTSP 擴充功能:
- 修正 RTSP 用戶端關閉後,處理延遲的網路回應時發生的
IllegalStateException異常終止問題。 - 修正快速拖曳可能錯誤觸發 TCP 通訊協定備用機制的問題。
- 修正
IllegalStateException當機問題:在 RTSP 用戶端於曲目重新選取、工作階段終止或 URI 重新導向期間重設狀態後,處理延遲的網路回應時,可能會發生這個問題。 - 修正問題:在重新開始播放前再次跳轉,可能會導致
IllegalStateException停止運作。 - 修正問題:在跳轉作業待處理時向後跳轉,可能會導致音訊中斷和影片播放凍結。
- 修正以下問題:以匯總或非 IDR 封包結尾的 H.264 和 H.265 關鍵影格存取單元未標記為關鍵影格,導致播放作業持續緩衝處理 (#3434)。
- 修正 RTSP 用戶端關閉後,處理延遲的網路回應時發生的
- 解碼器擴充功能 (FFmpeg、VP9、AV1 等):
- Opus 擴充功能:修正解碼無效 Opus 資料時發生的 JNI 異常終止問題。
- Opus 擴充功能:修正預先略過和捨棄邊框間距落在同一個封包時,系統會忽略捨棄邊框間距的問題 (#2576)。
- Cast 擴充功能:
- 導入
SessionAvailabilityListener.SessionUnavailableReason來代表工作階段無法使用的原因,並為SessionAvailabilityListener.onCastSessionUnavailable提供超載方法來公開該原因。 - 修正停止投放工作階段後,播放作業會在裝置上意外恢復的問題。
- 當
RemoteMediaClient中的RemoteCastPlayer作業 (例如播放、暫停、變更速度、重複播放模式、音量、靜音或選取音軌) 失敗時,記錄錯誤 (#3373)。 - 修正 Cast 接收器佇列在搜尋作業待處理時變更或縮小時,
RemoteCastPlayer中的ArrayIndexOutOfBoundsException(#3372)。 - 修正預設 Cast 接收器的問題:時間軸只會填入目前播放項目周圍的媒體項目,而非整個播放清單 (#3129)。
- 修改播放清單 (
setMediaItems、addMediaItems、moveMediaItems、removeMediaItems) 或在RemoteCastPlayer中跳轉時,立即更新時間軸和播放位置,並將連續的播放清單作業排入佇列,以便依序可靠地執行 (#2639、#3272)。 - 修正以下問題:在
RemoteCastPlayer的空白佇列上呼叫addMediaItems時,無法在 Cast 接收端載入媒體項目 (#2402)。 - 修正
RemoteCastPlayer中的問題:到達 Cast 接收器佇列結尾時,系統會清除時間軸,而非保留播放清單。 - 修正以下問題:在載入媒體項目之前,如果在
RemoteCastPlayer上設定playWhenReady、repeatMode和playbackParameters,系統不會轉移或套用這些項目 (例如在CastPlayer中從本機轉移至遠端播放時) (#889)。
- 導入
- 試用版應用程式:
- 在工作階段示範應用程式目錄中,新增對受 DRM 保護媒體項目的支援,以及額外的 HLS 範例串流。
- 在工作階段試用應用程式中,使用
CastTrackSelector設定RemoteCastPlayer,即可在投放時選取字幕和音軌。
- 移除已淘汰的符號:
- 移除
DashUtil.buildDataSpec(Representation, RangedUri, int)和DashUtil.buildDataSpec(Representation, String, RangedUri, int)。請改用DashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>)。
- 移除
- 版本:
- 將 Gradle
minSdk提高至 24。
- 將 Gradle
1.11.0 版
1.11.1
2026 年 9 月 10 日
- ExoPlayer:
- 將漸進式媒體的 HAGC 中繼資料啟用/停用旗標從
MediaSource.Factory移至ExtractorsFactory。先前的setExperimentalEnableHagcPlayback方法已移除,並由ExtractorsFactory.setParseHagcMetadata取代。這也解決了 Matroska/WebM 容器無法停用的問題。 - 修正預熱非轉換次要轉譯器時,導致播放停滯的問題。
- 修正預熱問題:當跳轉重設並停用兩個轉譯器時,
Surface應傳回主要轉譯器。 - 修正
ArrayIndexOutOfBoundsException,當直播時間軸重新整理時,預設位置會移至目前播放的伺服器端插入廣告之後 (#3348)。 - 修正拖曳模式問題:啟用
ScrubbingModeParameters.allowSkippingMediaCodecFlush拖曳時,可能會短暫顯示過時的影片影格。
- 將漸進式媒體的 HAGC 中繼資料啟用/停用旗標從
- 擷取工具:
- Matroska:修正放置在叢集後的音軌不會產生可跳轉時間軸的問題 (#3377)。
- 音訊:
- 工作階段:
- HLS 擴充功能:
- DASH 擴充功能:
- 修正
presentationTimeOffset圖片軌的樣本時間戳記計算錯誤問題 (#3334)。
- 修正
- 解碼器擴充功能 (FFmpeg、VP9、AV1 等):
- Opus:修正同時初始化多個
OpusDecoder執行個體時,記憶體損毀的問題。 - MPEG-H:修正記憶體流失、非 ASCII 字元截斷,以及在記憶體不足的情況下,傳送指令至
MpeghUiManager時可能發生的原生程式碼錯誤 (#3365)。
- Opus:修正同時初始化多個
1.11.0 版
2026 年 8 月 5 日
- 通用程式庫:
- 新增
Format.channelMask以明確表示音訊聲道遮罩,並新增Util.getAudioTrackChannelConfig(Format)超載以安全地解析。 - 將 Kotlin 從 2.0.20 升級至 2.2.0。
- 新增
- ExoPlayer:
- 修正與時間相關的並行錯誤,這類錯誤可能會導致 ExoPlayer 發生
IllegalStateException或IndexOutOfBoundsException。 - 放寬
AdsMediaSource中的廣告群組數量檢查,允許在廣告群組完全處理完畢時減少廣告群組數量 (hasUnplayedAds()為false),以便在重設工作流程期間動態調整廣告群組大小。 - 將
getFlags()和FLAG_STRICT_DURATION新增至SampleStream,讓串流回報標記,並更新轉譯器,以動態方式檢查這些標記。 - 當串流格式未提供有效值時,改用
MediaCodecVideoRenderer中的影格率估算器和MediaCodecAudioRenderer中的轉碼器輸出格式,計算轉碼器運作速率,並避免不必要的轉碼器重設。 - 移除核心播放器中用戶端插入廣告的內容剪輯。而是由
AdsMediaSource處理裁剪邏輯。自訂用戶端插入廣告來源必須更新,才能在內部導入內容剪輯。 - 將具有格式正確但無法辨識的轉碼器設定檔或層級的曲目標示為
supported=NO_EXCEEDS_CAPABILITIES,而不是supported=YES(這是標示缺少或格式錯誤的設定檔或層級資訊的曲目的方式)。這樣一來,當有更合適的替代方案時,系統就不會選取這些裝置可能不支援的音軌。 - 新增
DefaultPreloadManager.SimpleRankingDataComparator,這是RankingDataComparator,會根據媒體項目與目前播放媒體項目索引的距離,比較媒體項目的排名。如果需要更精細的比較邏輯,應用程式可以覆寫其compare(Integer, Integer)方法。自訂SimpleRankingDataComparator可透過DefaultPreloadManager.Builder的新建構函式插入。 - 如果可用堆積記憶體似乎不足,請改用緩衝區位元組大小限制,降低
DefaultLoadControl.prioritizeTimeOverSizeThresholds的 OOM 風險。 - 調整未設定
MediaItem.imageDurationUs時靜態圖片的處理方式:JPEG 和 HEIC 靜態圖片現在會以極短的預設時間長度「播放」(與 PNG 和其他圖片先前的行為相同)。 - 新增
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter),將BandwidthMeter連結至MediaSource。不過,系統預設仍會呼叫採用自訂實作的已淘汰方法,因此建議您實作新方法,並使用BandwidthMeter.getTransferListener()達到與舊方法相同的效果。 - 在
DefaultBandwidthMeter中,新增對自訂InitialBitrateSupplier的支援。這樣一來,應用程式就能提供自己的邏輯,用於判斷初始位元率估計值,並在建立DefaultBandwidthMeter和變更網路類型時使用。供應商可透過DefaultBandwidthMeter.Builder.setInitialBitrateSupplier()設定。 - 預設啟用動態排程。
ExoPlayer播放工作迴圈會動態執行,而非以靜態間隔執行。 - 移除不必要的重設,這類重設可能會在將含有片頭廣告樣本的音軌加入有效播放時發生。
- 在
DefaultBandwidthMeter中,最佳化getInitialBitrateCountryGroupAssignment以傳回封裝成 32 位元整數 (而非陣列) 的國家/地區群組指派,減少程式碼大小並避免分配。 - 確保重試邏輯在其他重試 (將緩衝區大小減半) 失敗時,一律嘗試至少 1 秒的緩衝區空間,藉此修正部分裝置上的
AudioTrack初始化失敗問題 (#3207)。 - 修正部分裝置的轉碼器問題:如果轉碼器在接收輸入緩衝區前已清除,則會吞掉所有樣本。
- 新增實驗性
ExoPlayer.Builder.enablePerStreamMediaProgression(),允許依串流推進媒體處理。這可縮短播放清單項目之間的啟動延遲時間,並避免播放內容過短時「卡住」(#3122)。 - 修正與音訊工作階段 ID 使用方式相關的競爭狀況,系統會使用
ExoPlayer自動產生的初始音訊工作階段 ID,而非setAudioSessionId設定的值 (#3241)。 - 新增實驗性 HAGC (ST 2094-50) 時間中繼資料播放支援,適用於漸進式媒體 (例如 MP4、Matroska)。播放器會自動將 HAGC 中繼資料軌與相關聯的影片軌合併,並在 API 37 以上版本的裝置上,將中繼資料頻外傳送至解碼器。您可以透過
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false)停用這項行為。 - 新增
Format.selectionPriority,代表曲目選取中Format的相對偏好設定 (#3236)。 - 修正潛在的拖曳模式問題:跳轉至「串流結尾」時,拖曳可能會停滯。
- 修正與時間相關的並行錯誤,這類錯誤可能會導致 ExoPlayer 發生
- CompositionPlayer:
- 修正
TrackSelector例項未釋出的問題。
- 修正
- 轉換程式:
- 修正
ExportResult.fileSizeBytes可能超報的問題。
- 修正
- 音軌選取:
- 公開
BaseTrackSelection.DEFAULT_FORMAT_COMPARATOR並新增AdaptiveTrackSelection.Factory.setTrackFormatComparator,允許自訂格式排序和 ABR 選取優先順序,不限於僅依位元率排序。 - 修正與時間相關的並行問題,避免快速依序更新曲目選取參數時,導致部分更新遺失或遭到覆寫。
- 公開
- 擷取工具:
- MP4、MP3 和 FLAC:新增
FLAG_DISABLE_ARTWORK_METADATA,允許在剖析容器時捨棄附加圖片和封面設計中繼資料,減少執行階段記憶體消耗量 (#2077)。這項功能也可以透過DefaultExtractorsFactory.setDisableArtworkMetadata集中啟用。 - MP4:新增支援,可擷取 ITU-T T.35 (
it35) 定時中繼資料軌。 - MP4:新增支援功能,可擷取章節中繼資料 (Nero 和 QuickTime 格式)。如果兩者皆有,系統會優先採用 QuickTime 章節。擷取的章節資訊會以
Chapter項目形式顯示在曲目的Metadata中,以便在 MP4、M4A 和 M4B 檔案 (例如有聲書和 Podcast) 中原生瀏覽章節 (#2803)。 - WAV、Matroska 和 MP4:新增 64 位元浮點 PCM 音訊支援 (#3090)。
- Matroska:使用轉碼器位元串流中繼資料填入正確的
ColorInfo。 - MP4:新增支援,在沒有
sidx方塊時,使用mfra方塊在片段式 MP4 檔案中跳轉。如要啟用這項功能,請將FLAG_READ_MFRA_FOR_SEEK_MAP提供給FragmentedMp4Extractor,現在預設會在DefaultExtractorsFactory中完成 (#3088)。 - 忽略版本不受支援的
av1C資料。 - MP4:在
fpcm方塊中,新增對大端序浮點 PCM 的支援。 - Matroska:將章節資訊剖析為音軌
Metadata中的Chapter項目。 - MPEG-TS:將核心和擴充子串流合併為單一樣本,改善 DTS-HD 和 DTS Express 串流的擷取作業,修正先前將兩者輸出為獨立樣本時的播放問題 (#3147)。
- MP4:剖析空白中繼資料標記項目時,防止無限迴圈和超出範圍的讀取 (#3191)。
ilst - MPEG-TS:確保最後一個 PES 封包長度已知的串流,會算繪最後一個影格 (#3206)。
- MP3:修正含有 Xing 和 VBRI 標頭的檔案位元率回報問題。
- Matroska:處理最後一個叢集中定義的音軌 (#3250)。
- Matroska:新增 ALAC 支援 (#3268)。
- MP4:允許在片段式 MP4 檔案中使用可變長度的
sgpd方塊 (#3243)。 - AVI:修正問題,先前播放音軌上沒有主要畫面格標記的檔案時,會導致音訊遺失和
OutOfMemoryError。 - MP3:使用 Xing/Info 標頭中不含間隔的持續時間 (#3183)。
- MP3:調整 LAME/Xing 編碼器延遲和填補中繼資料,以符合解碼的 PCM 修剪 (#3200)。
- MP4、MP3 和 FLAC:新增
- 音訊:
- 在 ExoPlayer 的音訊轉譯器中,從就緒狀態轉換為未就緒狀態時,新增 100 毫秒的寬限期,以消除暫時性欠載,並避免在播放期間出現非預期的緩衝狀態 (#3210)。
- 變更
DefaultAudioTrackBufferSizeProvider中的預設 PCM 緩衝區空間邏輯,改用固定的 500 毫秒緩衝區,減少對裝置的依賴。 - 更新
MediaCodecAudioRenderer,從平台解碼器擷取空間 channelMask,讓DefaultAudioSink使用這個明確遮罩,而非從聲道數量推論。 - 將
AudioSink.configure的參數轉換為資料類別。ForwardingAudioSink.configure的自訂覆寫值必須遷移至新的方法簽章。 - 新增支援,在使用
EditedMediaItem.Builder#setSpeed(SpeedParameters)延展音訊串流時間時維持音高。 - 強化
ToFloatPcmAudioProcessor,支援將 8 位元 PCM、16 位元大端序 PCM 和 64 位元浮點 PCM 轉換為 32 位元浮點 PCM (#3090)。 - 將
DecoderAudioRenderer.getChannelMapping的傳回值變更為ImmutableIntArray。 - 修正錯誤:在壓縮卸載模式下播放無間隙音訊播放清單時,播放會卡住。
- 將
Timeline和週期 UID 轉送至AudioSink.configure和AudioProcessor.StreamMetadata,為音訊處理器提供播放清單背景資訊 (#418)。 - 設定正確的
AudioProcessor.StreamMetadata.positionOffsetUs,允許以時間為基礎的音訊處理 (#418)。 - 新增對大端序 32 位元和 64 位元浮點 PCM 的支援。
- 移除 EAC3-JOC 到 EAC3 的備用路徑,以便在 Google Pixel 裝置上播放,因為標準 EAC3 解碼器無法解碼 EAC3-JOC 串流 (#3257)。
- 影片:
- 修正影片加入邏輯,將加入期間捨棄的緩衝區計為略過,而非捨棄。
- 修正設定新介面時的立即算繪決策,避免不支援預留位置介面的裝置發生影格掉格。
- 修正
MediaCodecVideoRenderer中的影格率估算,考量捨棄或略過的影格,提高準確度。 - 允許設定提早排定影格的門檻。預設值為 50 毫秒,但可透過
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold()自訂。 - 修正
VideoFrameReleaseHelper中的錯誤,避免顯示變更觸發多餘的Choreographer回呼,以及主執行緒上過多的 CPU 喚醒。
- 文字:
- 中繼資料:
- 新增
MediaMetadata.discSubtitle欄位,並從 ID3v2.4TSST和 VorbisDISCSUBTITLE資料剖析。 - 從 ID3
TPOS影格剖析光碟編號和數量。
- 新增
- 效果:
- 清除
FinalShaderProgramWrapper中的重繪狀態,避免播放器在跳轉時凍結。
- 清除
- 多工器:
- 透過新的
addTrackReferenceAPI,在Mp4Muxer中新增對曲目參照 (tref方塊) 的支援。這可建立軌道之間的關係,例如將中繼資料軌連結至其描述的影片軌。 - 新增
OggMuxer,允許將OPUS或VORBIS媒體串流多工處理為ogg檔案格式。 - 新增
WavMuxer以生成 WAV 檔案 (支援整數和浮點 PCM)。 - 將
setAttemptStreamableOutputEnabled新增至InAppMp4Muxer.Factory,即可在沒有保留空間的情況下,寫入較小的非串流檔案。 - 在
Mp4Muxer和FragmentedMp4Muxer中新增 IAMF 音訊支援。
- 透過新的
- IMA 擴充功能:
- 新增
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlot,即可提供用於影片暫停廣告的廣告版位。 - 修正以下錯誤:連續播放可略過的 VAST 廣告時,第二則廣告會立即顯示略過按鈕 (#3165)。
- 新增
- 工作階段:
- 修正使用背景執行緒播放器迴圈的工作階段時,
MediaNotificationManager內可能發生的死結和IllegalStateException異常終止問題。 - 對
MediaSession方法強制執行更嚴格的執行緒規定。無效方法現在會自動將執行作業發布至應用程式迴圈執行緒,而狀態存取子 (getter) 則會明確擲回IllegalStateException(如果從應用程式迴圈以外的執行緒呼叫)。 - 在工作階段端追蹤每個控制器的狀態一致性,修正超出範圍的時間軸合併當機問題 (
MediaUtils.mergePlayerInfo中的IllegalStateException)。 - 新增
androidx.media3.session.MediaSessionManager,以便支援查詢有效媒體工作階段,並傳回 Media3SessionToken執行個體。 - 如果未覆寫方法,僅提供不受信任控制器的讀取權限,請變更
MediaSession.Callback.onConnect的預設行為。 - 新增支援功能,可透過新的 API
MediaSession.Builder#setPackageNameOverride建立MediaSession時覆寫套件名稱。呼叫端必須具備android.permission.OVERRIDE_MEDIA_SESSION_OWNER權限,才能覆寫工作階段的套件名稱。 - 新增
MediaSession.Callback.onConnectAsync()。新方法可讓您以非同步方式處理控制器的連線嘗試。應用程式可以透過Futures.immediateFuture(ConnectionResult)立即傳回Future,以達到先前的行為。建議您改用新方法,因為Callback.onConnect可能會遭到淘汰。 - 修正問題:藍牙 AVRCP 瀏覽功能無法在 API 36 和 37 上辨識
MediaLibraryService。 - 修正圖片大小接近平台限制時,
MediaSession中圖片雙重縮小比例的問題,解決通知模糊的問題 (#3134)。 - 修正
MediaNotificationManager中的ForegroundServiceStartNotAllowedException異常終止問題:當應用程式在背景執行時,非同步圖片點陣圖載入回呼嘗試啟動前景服務 (#3270)。 - 修正問題:
MediaController接收的PositionInfo物件缺少原始TimelineUID。工作階段現在會在狀態更新期間,可靠地轉譯及傳播這些 UID。 - 在
MediaSessionService.stopSelfSafely()中擷取ForegroundServiceStartNotAllowedException,修正當機問題 (#3310)。 - 修正當在同一個媒體項目中跳轉時,
MediaController上出現非預期的onMediaItemTransition()回呼 (#3248)。
- 修正使用背景執行緒播放器迴圈的工作階段時,
- UI:
- 修正播放途中重新組成
ContentFrame時,第一個影格會以錯誤大小算繪的問題 (#3238)。 - 將
CurrentMediaItemState類別和對應的rememberCurrentMediaItemState可組合項新增至media3-ui-compose模組。這個狀態容器用於demo-compose,顯示目前播放MediaItem的各種中繼資料資訊。 - 將
PlaylistState類別和對應的rememberPlaylistState可組合函式新增至media3-ui-compose模組。這個狀態容器用於demo-compose,顯示播放器上設定的MediaItems各種中繼資料資訊。 - 在
PlaybackSpeedState中新增快轉/慢動作 API。在demo-compose中使用這項功能,展示長按快轉。 - 將
MiniController可組合函式新增至media3-ui-compose-material3模組。這項功能提供精簡的預設控制項,可控制Player,同時顯示目前媒體項目的標題、藝人、圖片和進度。 - 將
ErrorState類別和對應的rememberErrorState可組合函式新增至media3-ui-compose模組。將ErrorText可組合函式新增至media3-ui-compose-material3,並設為Player的預設疊加層。 - 發布
PlayerDefaults物件,其中包含TopControls、CenterControls、BottomControls和ErrorOverlay的可組合項。 - 將
FocusRequester新增至Player可組合函式及其內容版位。 - 發布
PlayerPool(common-ktx) 和rememberPooledPlayer(ui-compose),支援在滑動視窗 UI 環境中預先載入MediaItems。在demo-compose中使用新的ShortFormPlayerScreen展示這項功能。 - 修正
PlayerView和 ComposePresentationState中的快門抑制錯誤,該錯誤會導致不支援期間 UID 查詢的時間軸發生當機 (#3264)。
- 修正播放途中重新組成
- 下載內容:
- 擷取媒體播放清單進行下載時,解析其中的 HLS 變數 (#3258)。
- Ktor 擴充功能:
- HLS 擴充功能:
- 新增對 HLS 內容導向和路徑複製的支援 (#1689)。
- 將
setWithAssetListReset新增至HlsInterstitialsAdsLoader,讓應用程式將已完整處理的素材資源清單插頁式廣告重設回無法使用的狀態,以便隨選重新解析。 - 剖析
EXT-X-STREAM-INF和EXT-X-I-FRAME-STREAM-INF的SCORE屬性,並填入Format.selectionPriority(#3236)。 - 修正錯誤:即使播放清單不再是主要或有效播放清單,排定的 HTTP 即時串流播放清單重新整理作業仍會繼續 (#3254)。
- 修正解析插頁式廣告素材清單時,內容繼續播放偏移量的計算方式 (#3322)。
- 修正播放清單要求失敗後,恢復低延遲直播播放時,音軌時間戳記意外不連續的問題 (#3311)。
- 修正
HlsMediaPeriod.getStreamKeys()中的錯誤:音訊轉碼中的 ID3 軌會被視為字幕 (#3333)。
- DASH 擴充功能:
- RTSP 擴充功能:
- 修正 UDP 通訊埠繫結錯誤,導致 RTSP 播放準備期間暫時停止播放或失敗的問題。
- Cast 擴充功能:
- 新增
CastParams類別,允許透過呼叫Cast.initialize(CastParams)設定 Cast。 - 新增
CastParams.getShowSystemOutputSwitcherOnCastIconClick()選項,在可用時觸發使用 SystemUI 輸出切換器,而非應用程式內 Cast 裝置挑選器。 - 新增
MediaRouteButtonState和rememberMediaRouteButtonState,支援觀察媒體路徑挑選器的顯示狀態,並在MediaRouteButton中新增state參數 (#3172)。 - 修正以下錯誤:
RemoteCastPlayer在選取音軌後,可能會永久卡在音軌遮蓋狀態,導致忽略 Cast 接收端後續的音軌更新 (#3237)。 - 修正錯誤:
DefaultMediaItemConverter嘗試加入從非 Media3 傳送端啟動的投放工作階段時,會擲回NullPointerException。 - 變更使用中的播放器時,防止
CastPlayer轉移無法播放的MediaItems(#3199)。 - 修正未設定的直播 (
liveConfiguration == UNSET) 會排入STREAM_TYPE_BUFFERED佇列的錯誤 (#3318)。
- 新增
- 測試公用程式:
- 展開
DataSourceContractTest,加入對POST要求的支援,包括標頭和主體,將一些POST資源新增至HttpDataSourceTestEnv,並在WebServerDispatcher中新增預期 HTTP 方法、標頭和主體的斷言。 - 針對
DataSource.open()傳回的長度,加強DataSourceContractTest中的斷言。可能導致C.LENGTH_UNSET的資源應使用TestResource.Builder.setMayResolveToUnknownLength(boolean)指出。 - 將
setPlaybackLooper新增到TestExoPlayerBuilder中。
- 展開
- 移除已淘汰的符號:
- 移除
androidx.media3.exoplayer.MetadataRetriever。改用androidx.media3.inspector.MetadataRetriever。 - 移除
androidx.media3.exoplayer.MediaExtractorCompat。改用androidx.media3.inspector.MediaExtractorCompat。 - 移除
Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA。請改用HeifExtractor從 HEIC 檔案擷取動態相片中繼資料。 - 移除
androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata。改用androidx.media3.extractor.metadata.MotionPhotoMetadata。 - 移除
androidx.media3.extractor.DummyTrackOutput。改用androidx.media3.extractor.DiscardingTrackOutput。 - 移除
androidx.media3.extractor.DummyExtractorOutput。改用androidx.media3.extractor.NoOpExtractorOutput。 - 移除
androidx.media3.common.C.generateAudioSessionIdV21。改用androidx.media3.common.util.Util.generateAudioSessionId。
- 移除
- 建構
- 更新
README.md操作說明,以便在本機依附 Media3 使用 Gradle 複合建構 (includeBuild)。core_settings.gradle指令碼已移除,且不再使用androidxMediaModulePrefix和androidxMediaEnableMidiModule屬性。
- 更新
1.11.0-rc01
請使用 1.11.0 穩定版。
1.11.0-beta01
2026 年 7 月 7 日
請使用 1.11.0 穩定版。
1.11.0-alpha01
2026 年 6 月 24 日
請使用 1.11.0 穩定版。
1.10.0 版本
1.10.1
2026 年 5 月 12 日
- 通用程式庫:
- 修正
SimpleBasePlayer和ForwardingSimpleBasePlayer中onAudioSessionIdChanged的處理方式。
- 修正
- ExoPlayer:
- 音軌選取:
- 調整
VideoTrackInfo中的音軌選取邏輯,解析備用 MIME 類型,並將 HDR 和轉碼器分數偏好設定移至畫質偏好設定 (#3135)。
- 調整
- 擷取工具:
- MP3:如果 Xing 資料長度超過已知串流長度,則忽略該資料 (#3117)。
- 修正設定
FLAG_OMIT_TRACK_SAMPLE_TABLE且曲目缺少同步範例 (stss) 方塊時,Mp4Extractor中的ArrayIndexOutOfBoundsException。
- 音訊:
- 修正以下錯誤:如果播放器中新增多個音訊轉譯器,音訊事件可能會轉送錯誤。
- 影片:
- 調整 API 30 以下版本在影格率變更時重複使用轉碼器的邏輯,避免在不必要的情況下重設轉碼器 (#3120)。
- 在
queueSecureInputBuffer中停用 API 31 以上版本的強制同步處理因應措施。這項因應措施是人為瓶頸,會強制解密作業依序執行,避免因 API 31 之前存在的架構問題而導致影片出現亂碼。
- 圖片:
- 修正拖曳模式中的問題:圖片更新只有在使用者「停止拖曳」時才會生效 (#2815)。
- 工作階段:
- 修正以下錯誤:如果應用程式執行緒不是主執行緒,
ForegroundServiceStartNotAllowedException不會跨執行緒邊界傳播 (#2499)。 - 修正以下錯誤:連線至僅限平台的會話時,
COMMAND_SEEK_TO_MEDIA_ITEM在MediaController中無法使用,該會話支援跳轉至其他項目,但不支援修改播放清單。 - 修正
MediaController無法在不允許PREPARE_FROM動作的平台媒體工作階段中設定媒體項目的問題。 - 修正透過平台控制器連線時,在 API 27 或更早版本上,自身程序未標示
Controller.isTrusted()的錯誤。
- 修正以下錯誤:如果應用程式執行緒不是主執行緒,
- HLS 擴充功能:
- DASH 擴充功能:
- 修正
SampleQueue在跳轉至目前取消的區塊時會當機的問題。
- 修正
1.10.0
2026 年 3 月 26 日
- 通用程式庫:
- 將
Player.mute()和Player.unmute()從UnstableApi升級為穩定版。 - 將
Format.pcmEncoding和C.PcmEncoding從UnstableApi升級為穩定版。 - 新增
Format.primaryTrackGroupId,以識別內嵌Format執行個體的主要群組 (#294)。
- 將
- ExoPlayer:
- 為
AdsMediaSource新增剪輯功能。 - 在
MediaCodecVideoRenderer中新增動態排程支援,以便根據可處理影片影格的時間,更妥善地安排排程工作和 CPU 喚醒週期。您可以使用DefaultRenderersFactory中的experimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()啟用這項功能。 - 允許在
DefaultPreloadManager.Builder中設定自訂DataSource.Factory。 - 將部分預設常數移至
ExoPlayer.Builder,允許在不使用 Robolectric 的情況下模擬ExoPlayer。一般不建議模擬這個複雜的介面,除非使用量極少/簡單/附隨性 (#2985)。- 因此必須將
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MS從ExoPlayer移至ExoPlayer.Builder(不淘汰)。
- 因此必須將
- 修正
ProgressiveMediaSource將過時的時間軸資訊傳播至播放器,導致佇列中的時段意外遭到移除的錯誤 (#3016)。 - 修正問題:在通話期間要求播放時,ExoPlayer 不會要求延遲音訊焦點。
- 修正從隨選內容轉換至直播內容時,可能會在隨選內容結尾重新緩衝處理的錯誤 (#3052)。
- 新增 Dolby Vision Profile 10 支援 (#2830)。
- 修正未初始化的片頭廣告會產生
ArrayIndexOutOfBoundsException的錯誤 (#3125)。
- 為
- CompositionPlayer:
- 新增對
EditedMediaItem.removeVideo的支援。
- 新增對
- 轉換程式:
EditedMediaItem.Builder.setFrameRate()現在可以設定影片的最大輸出影格率,這在使用setSpeed()提高媒體速度時特別有用。
- 音軌選取:
- 變更
DefaultTrackSelector.selectAllTracks的簽章,加入輸出陣列做為參數,並預先填入曲目覆寫。 - 修正無論是否選取對應的主要音軌,都會選取內嵌中繼資料音軌的問題 (#294)。
preferredVideoLanguages、preferredVideoLabels、preferredAudioLabels、preferredTextLabels和selectTextByDefault的穩定TrackSelectionParameters選項。
- 變更
- 擷取工具:
- MP4:支援在
moov等其他方塊前有大型uuid方塊的檔案 (#3046)。 - MP4:新增 MP4 容器中多功能視訊編碼 (VVC) 軌道的支援。
- MP4:支援在
- 檢查器:
- 破壞性變更:移除
FrameExtractor。使用者現在應依附新的:media3-inspector-frame模組,並將匯入項目更新為androidx.media3.inspector.frame.FrameExtractor。 - 導入新模組,用於擷取及處理已解碼的影片影格。
- 破壞性變更:移除
- 音訊:
- 將 IAMF 解碼器擴充功能的基礎解碼程式庫從
libiamf變更為iamf_tools。 - IAMF 解碼支援透過解碼器 (使用 IAMF 解碼器擴充功能時) 或 Android Spatializer 輸出雙耳音訊。
- 在 Automotive 情境中評估 AC-4 解碼器支援時,正確移除對
AC4Profile22和其他舊版設定檔的支援 (#2609)。 - 改善
DefaultAudioSink中AudioOutput初始化的重試邏輯 (#2905)。 - 解碼 IAMF 時,嘗試比對喇叭 (或空間音效處理器,如適用) 的輸出配置,同時使用 IAMF 擴充功能和媒體轉碼器解碼器,並由 AudioCapabilities 和 AudioCapabilitiesReceiver 中的新欄位和邏輯支援。
- 修正錯誤:在壓縮卸載模式下播放無間隙音訊播放清單時,播放會卡住。
- 將 IAMF 解碼器擴充功能的基礎解碼程式庫從
- 文字:
- VobSub:使用
START和STOPSPU 控制指令衍生提示時間長度,而非一律預設為 5 秒 (#2935)。
- VobSub:使用
- 中繼資料:
- 將中繼資料轉譯器的預設數量增加到四個,涵蓋 HLS 變體和轉譯版本發布的所有潛在中繼資料軌 (#3043)。
- 效果:
- 將
LottieOverlay移至新的:media3-effect-lottie模組 (這也涉及將其從androidx.media3.effect.LottieOverlay重新命名為androidx.media3.effect.lottie.LottieOverlay)。
- 將
- Effect Lottie:
- 推出新的
:media3-effect-lottie模組,提供將 Lottie 效果套用至影片影格的功能。
- 推出新的
- IMA 擴充功能:
- 將 IMA SDK 版本更新至 3.39.0,才能使用最新的廣告媒體資訊 API。
- 修正錯誤:廣告 MIME 類型與 IMA LOADED 事件中提供的 MIME 類型不符。修正後,系統會使用 IMA 提供的廣告媒體資訊,對應廣告 MIME 類型。
- 在
ImaAdsLoader和ImaServerSideAdInsertionMediaSource中新增setEnableCustomTabs,讓使用者控制是否要使用自訂分頁啟動廣告點擊到達網址。 - 新增
ImaAdTagUriBuilder,這個類別提供建構adTagUri的替代方式。其中包含setPreferredLinearOrientationAPI。這個 API 處於 Alpha 版測試階段,可讓您設定線性廣告偏好的方向。如要加入 Alpha 版測試群組,請與帳戶合作夥伴聯絡。
- 工作階段:
- 修正
MediaMetadata.artworkData中大型陣列可能導致應用程式當機的錯誤。 - 在
ActionFactory介面中,對@Player.Command引數使用 int 類型 (#2933)。 - 將
MediaSessionService和MediaLibraryService設為LifecycleService,以便將生命週期感知作業附加至服務的生命週期 (#187)。 - 停止支援
MediaController和MediaBrowser的裝置音量變更指令,用於本機播放。應用程式不應變更本機裝置音量,如有需要,可使用AudioManagerAPI 達到此目的。 - 偵測將服務做為前景服務啟動的過時
Intent執行個體。這可避免系統擲回ForegroundServiceDidNotStartInTimeException。這項破壞性變更會影響不穩定 API,因為實作自訂MediaNotification.Provider的應用程式需要新的必要方法。 - 新增
PendingIntent執行個體的建構工具,以便與主畫面小工具搭配使用 (#2933)。 - 新增靜態方法,為以 Compose 為基礎的主畫面小工具建立
Intent執行個體 (#2933)。 - 修正以下錯誤:當播放作業從特定媒體項目索引轉換至另一個具有相同媒體項目的索引,且不連續原因為「AUTO」和「SEEK」時,系統不會向控制器回報媒體項目轉換 (#2997)。
- 修正系統 UI 按鈕位置解決方法對其他 UI 介面 (例如 Android Auto) 或不需要解決方法的製造商造成負面影響的問題 (#3041)。
- 修正訂閱項目存取權未同步的問題 (#3056)。
- 解決 API 29 的 SysUI 錯誤,避免特定大小的媒體工作階段圖片導致 SysUI 停止運作,並強制裝置重新啟動 (#3118)。
- 修正 Android Q 上的通知圖片圖示縮放問題 (#3084)。
- 修正
- UI:
- 將
PlaybackSpeedControl可組合函式新增至media3-ui-compose,用於顯示及修改播放速度。 - 將
PlaybackSpeedToggleButton可組合函式新增至media3-ui-compose-material3,用於控制播放速度。 - 將
ProgressSlider可組合函式新增至media3-ui-compose-material3,用於顯示播放器進度,以及透過拖曳和輕觸執行跳轉 (#2288)。 - 避免在 PlayerControlView 動畫中,使用大型螢幕外緩衝區。
- 將
Player可組合項新增至media3-ui-compose-material3,其中結合了ContentFrame與可自訂的控制項,並對齊頂端、中央和底部。 - 在無障礙服務中隱藏播放位置,避免在
PlayerControlView顯示時持續更新通知。
- 將
- HLS 擴充功能:
- DASH 擴充功能:
- RTSP 擴充功能:
- 修正 H.264 和 H.265 串流中的迴歸問題,避免錯誤剖析跨多個 RTP 封包的相同存取單元樣本。這會導致影片中出現視覺不自然感和損毀 (#3121)。
- 解碼器擴充功能 (FFmpeg、VP9、AV1 等):
- 在 MPEG-H 解碼器擴充功能中,新增 MPEG-H UI 管理工具支援 (#3066)。
- Cast 擴充功能:
- 新增
RemoteCastPlayer.Builder#setTrackSelector方法,以便為投放播放作業實作音軌選取功能。
- 新增
- 移除已淘汰的符號:
- 移除
ExperimentalFrameExtractor。改用androidx.media3.inspector.frame.FrameExtractor。 - 移除
ChannelMixingMatrix.create()。改用ChannelMixingMatrix.createForConstantGain()。 - 移除
androidx.media3.extractor.metadata.flac.VorbisComment。改用androidx.media3.extractor.metadata.vorbis.VorbisComment。 - 移除
MediaSource.prepareSource(MediaSourceCaller, TransferListener)。 改用MediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId)。
- 移除
1.10.0-rc03
2026 年 3 月 25 日
請使用 1.10.0 穩定版。
1.10.0-rc02
2026 年 3 月 16 日
請使用 1.10.0 穩定版。
1.10.0-rc01
2026 年 3 月 10 日
請使用 1.10.0 穩定版。
1.10.0-beta01
2026 年 2 月 25 日
請使用 1.10.0 穩定版。
1.10.0-alpha01
2026 年 2 月 6 日
請使用 1.10.0 穩定版。
1.9.0 版
1.9.4
2026 年 5 月 16 日
- 效果:
- 從無介面情境轉換時,請明確設定
GL_DRAW_BUFFER和GL_READ_BUFFER。
- 從無介面情境轉換時,請明確設定
1.9.3
2026 年 3 月 16 日
1.9.3 版包含以下修訂項目。
- 音訊:
- 修正錯誤:在壓縮卸載模式下播放無間隙音訊播放清單時,播放會卡住。
1.9.2
2026 年 2 月 6 日
- ExoPlayer:
- 修正
ProgressiveMediaSource將過時的時間軸資訊傳播至播放器,導致佇列中的時段意外遭到移除的錯誤 (#3016)。
- 修正
- 工作階段:
- 修正系統 UI 按鈕位置解決方法對其他 UI 介面 (例如 Android Auto) 或不需要解決方法的製造商造成負面影響的問題 (#3041)。
- Cast 擴充功能:
- 修正從 Cast 轉移至本機播放時發生的錯誤。
1.9.1
2026 年 1 月 26 日
1.9.1 版包含這些修訂項目。
- 通用程式庫:
- 支援時區偏移中僅包含小時的日期時間字串 (#2929)。
- ExoPlayer:
- 允許動態排程在音訊開始後才減慢
doSomeWork間隔,以便在播放開始時更流暢地同步影音。 - 修正
DefaultLoadErrorHandlingPolicy中的錯誤,避免FileNotFoundException和類似的例外狀況類型多次重試。 - 修正動態排程的錯誤,其中下一個
doSomeWork的計算時間會因目前doSomeWork疊代的經過時間而錯誤減少。解決這個問題有望延長 CPU 閒置時間並節省電力。 - 修正問題:嘗試使用備用 AVC 或 HEVC 轉碼器時,部分 Dolby Vision 檔案無法播放。
- 修正從播放清單中移除目前播放的項目時,播放結束後仍會繼續載入的錯誤 (#2873)。
- 避免在同一項目上重複使用
ExoPlayer.replaceMediaItem時,洩漏MediaItem執行個體 (#2993)。 - 避免因緊急 Wake Lock 釋放而導致潛在的 ANR (#2979)。
- 允許動態排程在音訊開始後才減慢
- 擷取工具:
- MP3:剖析 LAME ReplayGain 資料 (#2840)。
- 音訊:
- 在 Automotive 情境中評估 AC-4 解碼器支援時,正確移除對
AC4Profile22和其他舊版設定檔的支援 (#2609)。
- 在 Automotive 情境中評估 AC-4 解碼器支援時,正確移除對
- 影片:
- 內容影格率變更時,在 API 30 以下的裝置上捨棄影片轉碼器,避免播放時發生卡頓 (#2941)。
- 文字:
- VobSub:正確處理僅含單一控制序列,或重要資訊分散在多個控制序列的 SPU,修正部分字幕遺漏的問題 (#2935)。
- IMA 擴充功能:
- 修正錯誤:修正廣告 MIME 類型與 IMA LOADED 事件中提供的 MIME 類型不符的問題。修正後,系統會使用廣告連播索引和廣告排序,對應廣告 MIME 類型。
- 在存取
getAdsManager()和AdEvent.getAd()的結果之前,請先新增空值檢查。
- 工作階段:
- 修正以下錯誤:如果停止播放廣告時,停止與平台工作階段連結的
MediaController,會導致應用程式停止運作 (#2948)。 - 在各種類別的
extrasBundle執行個體上新增額外驗證,防範其他程序傳送格式錯誤的Bundle執行個體。 - 修正缺少
COMMAND_SEEK_NEXT或COMMAND_SEEK_BACK指令,導致系統媒體通知出現空白的問題 (#2976)。 - 將通知圖示的點陣圖縮放作業移出主執行緒 (#2829)。
- 修正從舊版
MediaMetadataCompat和MediaDescriptionCompat轉換時,未將作者、作詞者和作曲者做為備用項目的錯誤 (#3018)。
- 修正以下錯誤:如果停止播放廣告時,停止與平台工作階段連結的
- 下載內容:
- 修正
SegmentDownloader處理PriorityTooLowException時可能發生的無限迴圈 (適用於 DASH、HLS 和 SmoothStreaming)。使用受保護的execute方法自訂覆寫SegmentDownloader時,必須提供包裝在Supplier中的工作,以便重新建立 (#2931)。
- 修正
- HLS 擴充功能:
- 將原始資產清單 JSON 文件傳遞至
Listener.onAssetListLoadCompleted回呼。這是不穩定 API 的破壞性變更,實作這個回呼的應用程式必須新增JSONObject類型的引數 (#2950)。
- 將原始資產清單 JSON 文件傳遞至
- RTSP 擴充功能:
- 正確處理時間戳記會循環的 RTP 封包 (#2930)。
- 解碼器擴充功能 (FFmpeg、VP9、AV1 等):
- 修正處理第一個影片影格前,跳轉時可能發生的
NullPointerException(#2965)。
- 修正處理第一個影片影格前,跳轉時可能發生的
- Cast 擴充功能:
- 修正錯誤:更換播放清單時,
RemoteCastPlayer時間軸無法正確更新。
- 修正錯誤:更換播放清單時,
1.9.0
2025 年 12 月 17 日
- 通用程式庫:
- 將
minSdk更新為23,與其他 AndroidX 程式庫保持一致。 - 新增
PlayerTransferState,有助於在Player執行個體之間轉移播放狀態。 - 在 Player 中新增
void mute()和void unmute()方法,以便在將音量設為零之前和之後,保留並還原 Player 的音量。 - 發布公用程式類別
WakeLockManager、WifiLockManager、AudioFocusManager、AudioBecomingNoisyManager和StuckPlayerDetector,這些類別先前由ExoPlayer內部使用,可供其他播放器重複使用 (#1893)。 - 修正基礎委派播放器使用參照相等性比較事件監聽器例項時,
ForwardingPlayer事件監聽器的處理方式 (#2675)。 - 在
media3-common-ktx程式庫中新增Player.listenTo暫停擴充功能函式,指定應執行的特定Player.Events。 - 修正
BasePlayer.getBufferedPercentage中的當機問題,該問題是由於回報的緩衝位置遠大於回報的時間長度,導致整數溢位所造成 (#2750)。 - 修正
TrackGroup軌道類型的自動偵測功能,不忽略自訂樣本 MIME 類型,並改用容器 MIME 類型中可能錯誤的軌道類型 (#2860)。
- 將
- ExoPlayer:
- 新增偵測功能,在播放器似乎卡住時,觸發
StuckPlayerException播放器錯誤。這種情況會在下列情況發生,如有需要,可在ExoPlayer.Builder中設定每個預設逾時:- 嘗試播放 10 分鐘後,
STATE_BUFFERING仍未開始緩衝處理。 - 嘗試播放
STATE_READY10 秒後,仍未開始播放。 STATE_READY超過宣告時間長度 1 分鐘,但未達到項目結尾。- 嘗試播放時,因播放抑制原因而經過 10 分鐘。
- 嘗試播放 10 分鐘後,
- 根據預設,啟用 Wake Lock 處理功能,修正背景播放期間的緩衝問題。這相當於將
ExoPlayer.Builder.setWakeMode設為C.WAKE_MODE_LOCAL。 - 新增監聽邏輯,在系統向原本傳遞至
ExoPlayer.Builder的Context回報變更時,自動更新虛擬裝置 ID。 - 新增
ExoPlayer.setVirtualDeviceId,手動更新從傳遞至ExoPlayer.Builder的Context取得的虛擬裝置 ID。 - 確保轉譯器不會在目前項目結束前 10 秒以上,就開始消耗下一個播放清單項目的資料。
- 將
setSeekBackIncrementMs、setSeekForwardIncrementMs和setMaxSeekToPreviousPositionMs新增至ExoPlayer,以便在建構後更新這些設定 (#2736)。 - 在
DefaultPreloadManager中新增預先快取功能。應用程式現在可以透過TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)傳回DefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)或DefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs),表示需要預先快取媒體項目。 - 在短片試用應用程式中,使用
DefaultPreloadManager的預先快取功能。 - 新增本機播放的
DefaultLoadControl.Builder設定器,並調整DefaultLoadControl的預設值,以便與各種本機檔案搭配使用。 - 修正錯誤:設定空白播放清單可能會使播放器處於
STATE_READY或STATE_BUFFERING狀態。 - 強化預先載入管理工具 API:
- 新增
addMediaItems(List<MediaItem>, List<T>)和addMediaSources(List<MediaSource>, List<T>),以批次方式新增媒體項目或媒體來源,並在之後自動呼叫invalidate()。 - 新增
removeMediaItems((List<MediaItem>)和removeMediaSources(List<MediaSource>),以批次移除媒體項目或媒體來源,並確保預先載入管理工具不會在移除後開始預先載入或繼續預先載入任何項目。 - 允許
DefaultPreloadManager.setCurrentPlayingIndex(int)自動失效。更新目前播放索引後,應用程式就不必再明確呼叫invalidate()。
- 新增
- 新增功能,可在拖曳模式下略過同一組圖片中向前跳轉的關鍵影格重設。
- 新增
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int),讓應用程式為具有指定playerName的播放器設定目標緩衝區位元組值。DefaultLoadControl現在可以根據分配的位元組和目標緩衝區位元組,分別為每個播放器做出決策。 - 在
AdPlaybackState.AdGroup中加入SkipInfo,以傳送廣告群組中每個廣告的可略過資訊。 - 修正錯誤:在播放片尾廣告時呼叫
removeMediaItems(List)會導致當機 (#2746)。 - 修正播放清單播放時出現的部分卡頓問題,即影格一律誤設為最後一個樣本並算繪。
- 如果播放器無法產生音訊工作階段 ID,則啟用重試路徑 (#2382、#2678)。
- 新增支援功能,可控制
DefaultPreloadManager中來源的緩衝區總位元組數,避免預先載入的緩衝區總位元組數任意增加。如要使用預設控制邏輯,應用程式可以透過DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)為PlayerId.Preload.name(「預先載入」) 的playerName設定預先載入的目標緩衝區位元組,並透過DefaultPreloadManager.Builder.setLoadControl(LoadControl)插入建立的DefaultLoadControl。 - 使用預設實作,將
cloneAndSet(int, int)新增至ShuffleOrder(#2834)。 - 在跳轉調整或自動轉換後略過廣告播放時,附加內容繼續播放偏移量 (#2484)。
- 新增 API,用於設定及觀察音訊和影片軌的轉碼器參數。這項功能適用於以
MediaCodec為基礎的轉譯器,且需要 API 29 以上版本。- 使用
ExoPlayer.setAudioCodecParameters()和ExoPlayer.setVideoCodecParameters()套用參數。 - 使用
ExoPlayer.addAudioCodecParametersChangeListener()和ExoPlayer.addVideoCodecParametersChangeListener()監聽變更。如要觀測供應商專屬金鑰,必須使用 API 31 以上版本。
- 使用
- 修正
IllegalStateException問題:在跳轉至非零位置後,設定空白媒體來源,然後使用非空白媒體來源準備播放器,就會發生這個問題。 - 修正錯誤:在拖曳模式下跳轉至其他媒體項目時,可能會導致
IllegalStateException。 - 修正
DefaultPlaybackSessionManager中潛在的NullPointerException(#2885)。 - 為符合資格的影片啟用跳轉效能改善功能。
- 在 API 36 以上版本中,重新啟用 MediaCodec 的非同步解密功能,因為這個平台 API 的逾時問題已修正 (#1641)。
- 將
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUs的預設值變更為 15 毫秒,並在解碼符合條件的影片前,更有效率地捨棄影片影格。 - 在
DefaultLoadControl的自動記憶體計算中,新增記憶體上限。只有在選取過多音軌時,這項設定才會生效 (#2860)。 - 修正以下錯誤:在播放清單或重複播放模式下播放時,在拖曳模式下跳轉至接近結尾處,可能會導致跳轉至下一個媒體項目。
- 新增偵測功能,在播放器似乎卡住時,觸發
- CompositionPlayer:
- 在新的
@ExperimentalApi註解下發布CompositionPlayer,表示該功能可供實驗,但仍在開發中。部分 API 在日後版本中可能會有重大變更,且某些用途存在已知問題和限制 (部分未記錄)。 - 在
CompositionPlayer中新增COMMAND_SET_AUDIO_ATTRIBUTES和音訊焦點處理支援。 - 在
CompositionPlayer中新增次要序列的速度變更支援。 - 新增對
EditedMediaItem.removeVideo的支援。
- 在新的
- 轉換程式:
- 使用
InAppMp4Muxer做為預設多工器。 - 新增
EditedMediaItem.Builder#setSpeed()並淘汰Effects#createExperimentalSpeedChangingEffects()。 - 在
EditedMediaItemSequence中,將forceAudioTrack和forceVideoTrack替換為trackTypes。
- 使用
- 音軌選取:
- 新增
TrackSelectionParameters.selectTextByDefault,即可優先選取任何文字軌,而不必指定其他更具體的偏好設定。 - 在
TrackSelectionParameters中新增preferredVideoLabels、preferredAudioLabels和preferredTextLabels,指定偏好具有特定標籤的音軌,例如從 HLS NAME 標記讀取的音軌 (#1666)。
- 新增
- 擷取工具:
- FLAC:加強標頭偵測,降低在編碼 FLAC 資料中找到假標頭的機率,避免解碼錯誤 (#558)。
- MP3:允許 MP3 檔案開頭的 ID3 標記之間 (和之前) 有間隔 (#811、#5718)。
- MP3:將探測限制提高至 128 kB,以符合同步位元組的現有搜尋限制 (#2713)。
- MP3:變更
FLAG_ENABLE_INDEX_SEEKING,優先從中繼資料標頭 (例如 Xing 和 VBRI) 尋找資訊 (如有),如果沒有其他搜尋資訊,則改為以索引為基礎的搜尋。這可提升含有搜尋中繼資料的檔案效能 (#2839)。 - MP3:即使設定
FLAG_ENABLE_INDEX_SEEKING,當找不到搜尋中繼資料 (例如 Xing、VBRI) 時,將Mp3Extractor變更為預設為固定位元率 (CBR) 假設。這是根據 MP3 規格歷史,其中 CBR 是標準,而 VBR 需要明確的標頭。這項功能可提升沒有中繼資料的檔案的即時搜尋能力,但可能會降低沒有標頭的 VBR 檔案的準確度。如果 CBR 假設無法跳轉 (例如長度未知的串流),現在會改用索引跳轉 (#2848)。 - MP4:在從擷取器發出音軌格式之前,先查看第一個樣本的層值,區分
audio/mpeg(MP3)、audio/mpeg-L1和audio/mpeg-L2MIME 類型 (#2683)。 - MP4:假設
stbl方塊大於 1 MB,表示檔案必須未分段,藉此提升超大檔案的探測效率 (#2650)。 - MP4:新增
©mvn(樂章名稱) 和©mvi(樂章索引) 中繼資料的支援,現在會以Format.metadata中的TextInformationFrame物件形式發出,ID 分別為MVNM和MVIN(#2754)。 - MP4:忽略缺少
stsd方塊的音軌 (而非無法剖析整個檔案)。 - Matroska:新增 DTS-HD 偵測支援 (#6225)。
- 修正
MatroskaExtractor中的問題:針對有多個音軌的檔案,跳轉功能可能不準確。提示點現在會正確與各自的音軌建立關聯,讓跳轉更精確。 - MPEG-TS:修正因 PES 封包沒有時間戳記,導致
ReorderingBufferQueue發生IllegalArgumentException的問題 (#2764)。 - 新增擷取 HEIC 動態相片的支援。
HeifExtractor現在可以剖析含有嵌入影片和音軌的 HEIC 檔案。
- 檢查器:
- 推出新的
:media3-inspector模組,做為媒體檢查公用程式的專屬主畫面。這個模組現在包含新的androidx.media3.inspector.MetadataRetriever,可為中繼資料和影格擷取提供統一的 API。現有的androidx.media3.exoplayer.MetadataRetriever已淘汰,改用這個新版本。 - 推出
androidx.media3.inspector.FrameExtractor,這是用於擷取影格的新公開 API。這個AutoCloseable類別提供一種方法,可擷取支援 HDR 影片、影片效果和自訂解碼器選取的影格。應透過特定MediaItem的Builder建立。 - FrameExtractor:新增
getThumbnail(),從媒體檔案中擷取代表性的縮圖影格,不需指定時間戳記。 - 新增
androidx.media3.inspector.MediaExtractorCompat,這是平台android.media.MediaExtractor的替代方案,可從媒體檔案中擷取原始、編碼的媒體樣本。現有的androidx.media3.exoplayer.MediaExtractorCompat已淘汰,改用這個新類別。
- 推出新的
- 音訊:
- 讓
AudioProcessor執行個體知道跳轉動作。 - 允許將新的
AudioOutputProvider介面插入DefaultAudioSink.Builder,以支援自訂音訊輸出路徑。預設值為AudioTrackAudioOutputProvider。 - 在
GainProcessor中處理跳轉。 - 在音軌格式支援評估中,使用 AC-4 解碼器設定檔和等級功能 (#2580)。
- 避免在播放開始時處理轉送變更回呼,以免造成延遲 (#2646)。
- 允許重複使用 EAC3、EAC3-JOC 和 AC-4 格式的轉碼器 (#1346)。
- 在
Sonic中新增浮點 PCM 樣本支援。 - 在
ToFloatPcmAudioProcessor中新增 16 位元 PCM 樣本支援。
- 讓
- 影片:
- 針對具有不同設定檔的 Dolby-Vision 內容,停用轉碼器重複使用功能。
- 重新啟用安全轉碼器效能點數錯誤回報的解決方法 (#2856)。
- 文字:
- 修正 Dolby Vision 內容中 CEA-6/708 字幕的剖析問題 (#2775)。
- 圖片:
- 修正 ScrubbingMode 問題:播放器在拖曳 DASH 縮圖軌時卡住 (#2815)。
- DRM:
- 將
MediaDrmCallback方法的傳回類型從byte[]變更為新的MediaDrmCallback.Response類型,以便傳回額外的選用資訊。這項來源破壞性變更,只要在傳回前使用new Response包裝先前的byte[]傳回值,即可輕鬆解決。 - 在
AnalyticsListener.onDrmKeysLoaded中新增網址和延遲時間等重要要求資訊 (#1001)。 - 將佈建要求資料從網址參數移至 POST 主體。
- 將
- 效果:
- 使用單一邊長建立
Presentation時,請新增Presentation.copyWithUnsetSideRoundedTo,將未設定的輸出邊四捨五入。
- 使用單一邊長建立
- 多工器:
- 新增
MediaMuxerCompat,可直接取代架構MediaMuxer。 - 新增
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo(),允許建立動態相片。 - 新增
WebmMuxer,允許將OPUS、VORBIS、VP8和VP9媒體串流多工處理為webm檔案格式。
- 新增
- IMA 擴充功能:
- 移除自訂 ProGuard 規則,讓應用程式改用 IMA Android 封存檔中發布的規則。
- 新增
ImaServerSideAdInsertionUriBuilder.setNetworkCode,這個新 API 可為 IMA SDK 設定 Google Ad Manager 聯播網代碼,以便按照 Google Ad Manager 設定處理廣告 ID。網路代碼為選用,但建議用於完整服務串流請求。如要找出聯播網代碼,請參閱這篇文章。 - 將 IMA 依附元件升級至 3.37.0,這需要啟用核心程式庫脫糖功能。相依應用程式也必須啟用這項功能。請參閱 IMA 的設定附註。* 在 SSAI URI 建構工具中,支援 IMA DAI 自訂 UI 選項。伺服器端廣告插播的自訂 UI 選項包括「可略過」和「關於這則廣告」算繪支援。這項功能目前僅供許可清單中的特定發布商使用。這項異動也會將 IMA SDK 升級至 3.38.0 版 (版本資訊),以便存取自訂 UI 選項 API。
- 修正廣告後內容的內容準備錯誤,會誤報為廣告播放錯誤的問題 (#2656)。
- 工作階段:
- 在
MediaSession.Callback.onPlaybackResumption中新增參數,指出呼叫是否僅用於收集資訊或開始播放 (#1764)。 - 更新
MediaSession.ControllerInfo.isTrusted,將自身應用程式的控制器也宣告為受信任 (#2542)。 - 新增
MediaSessionService.triggerNotificationUpdate,手動觸發通知更新 (#1833)。 - 將
ProgressListener新增至自訂指令方法。 - 將
MediaLibrarySession.Builder.setLibraryErrorReplicationMode的預設值變更為非致命。 - 在
MediaButtonReceiver.onForegroundServiceStartNotAllowedException中新增Context參數 (#2625)。 - 從平台
PlaybackInfo讀取音量控制 ID,而不是透過繫結器擷取。這可確保播放類型和音量控制 ID 是以不可分割的方式讀取,且彼此相符。 - 修正錯誤:
ACTION_UP按鍵事件在傳遞至回呼進行自訂處理前,會先遭到篩除。這與 media1 和平台的功能一致 (#2637)。 - 修正即使指令無法使用,
getCurrentTimeline()仍會呼叫PlayerWrapper的錯誤 (#2665)。 - 修正以下錯誤:訊息留在主要迴圈器的訊息佇列中,導致服務終止後記憶體流失 (#2692)。
- 使用
MediaBrowser連線至舊版工作階段應用程式時,只有在自訂動作在舊版工作階段的PlaybackStateCompat中宣傳 為自訂動作時,系統才會將自訂 指令傳送至工作階段。所有其他自訂動作都會傳送至服務。 - 實作
onAudioSessionIdChanged,在工作階段設定音訊工作階段 ID 時通知媒體控制器 (#244)。 - 修正錯誤:
KEYCODE_HEADSETHOOK未在媒體按鍵事件Intent抵達onStartCommand()時啟動播放器。我們已修正這個問題,現在系統會像處理KEYCODE_MEDIA_PLAY_PAUSE一樣處理「KEYCODE_HEADSETHOOK」(#2816)。 - 修正工作階段和控制器之間未傳達 Surface 大小的錯誤,導致無法在示範工作階段中套用影片效果。如果您使用控制器,當播放器無法處理
setVideoSurfaceHolder呼叫時,這可能會是破壞性變更。 - 修正非
StringCharSequence中繼資料值 (例如 span 樣式字串) 的傳播問題 (#2853)。 - 新增
CommandButton.executeAction,讓控制器能更輕鬆地觸發預期動作。此外,您也可以為部分播放器和工作階段指令指定參數,定義要觸發的動作。 - 使用
Player.Command或非自訂SessionCommand定義動作,為CommandButton執行個體新增回溯相容性。現在,這些狀態會在平台媒體工作階段中正確顯示,例如系統 UI 或 Android Auto。 - 修正問題:將
MediaController連線至平台媒體工作階段時,系統會多次壓縮同一個Bitmap。
- 在
- UI:
- 將
ProgressStateWithTickInterval類別和對應的rememberProgressStateWithTickInterval可組合項新增至media3-ui-compose模組。這個狀態容器用於demo-compose,以文字形式顯示目前的位置和時間長度。 - 將
MuteButtonState新增至ui-compose,用於處理Player音量的靜音。這個狀態容器用於demo-compose,顯示靜音/取消靜音切換鈕。 - 將
ProgressStateWithTickCount類別和對應的rememberProgressStateWithTickCount可組合項新增至media3-ui-compose模組。這個狀態容器用於demo-compose,以水平唯讀進度列的形式顯示進度。 - 將
ContentFrame可組合函式新增至media3-ui-compose,結合PlayerSurface管理、顯示比例調整大小,以及使用快門遮蓋。 - 解決已知的 API 34 平台錯誤:在 Compose
AndroidView中使用SurfaceView時,影片會遭到拉伸/裁剪,進而影響ContentFrame和PlayerSurface可組合項與SURFACE_TYPE_SURFACE_VIEW(#1237、#2811)。 - 建立新的
media3-ui-compose-material3模組,並在其中加入 Material3 主題的可組合項 (PlayPauseButton、NextButton、PreviousButton、SeekBackButton、SeekForwardButton、RepeatButton、ShuffleButton、MuteButton)。 - 將
TimeText可組合函式新增至media3-ui-compose-material3,以文字形式顯示玩家進度。可設定為顯示目前位置、持續時間或剩餘時間。 - 新增支援在
PlayerView中放置媒體路徑按鈕。 - 使用
BidiFormatter正確顯示 RTL 文字字幕中的標點符號 (#11214)。
- 將
- HLS 擴充功能:
- 剖析 HLS 插播廣告略過屬性。
- 將 HLS 播放清單和資產清單文件中的略過控制項屬性,對應至
AdPlaybackState,以便公開存取。 - 修正以下錯誤:從播放清單中移除定義開始時間的 EXT-X-PROGRAM-START-DATE 標記時,播放清單的開始時間會遭到捨棄 (#2760)。
- 使用二進位搜尋,找出播放清單中指定位置的區隔索引 (#2826)。
- 新增
HlsInterstitialsAdsLoader.skipCurrentAd()和skipCurrentAdGroup()以及對應的方法,依索引略過廣告和廣告群組。 - 新增
HlsInterstitialsAdsLoader.Listener.onAdStarted,回報廣告時段的開始時間 (#2859)。 - 接受空格做為 ISO 8601 日期時間字串中的日期/時間分隔符。
- 妥善處理擷取不含區隔的
HlsMediaPlaylist下一個區塊 (#2821)。 - 直播片頭廣告使用預設開始位置。
- DASH 擴充功能:
- RTSP 擴充功能:
- 處理 H264 和 H265 的片段 NAL 單元時,處理缺少 RTP 封包的錯誤 (#2613)。
- 解碼器擴充功能 (FFmpeg、VP9、AV1 等):
- AV1 擴充功能:AV1 軟體解碼器現在使用高效能
dav1d程式庫,取代先前的libgav1實作,提升解碼速度。 - FFmpeg 擴充功能:確保
STREAMINFO區塊正確剖析並傳遞至解碼器,修正部分 FLAC 檔案無法播放的問題 (#2887)。
- AV1 擴充功能:AV1 軟體解碼器現在使用高效能
- Cast 擴充功能:
- 新增
CastPlayer.Builder,讓CastPlayer同時執行本機和 Cast 播放。如要保留舊的CastPlayer行為 (僅支援投放播放),可以使用RemoteCastPlayer。現有的CastPlayer建構函式會保留舊行為,但已淘汰,建議改用CastPlayer或RemoteCastPlayer建構工具。 - 停止在
DefaultMediaItemConverter中強制執行非空值 MIME 類型。 - 使用
MediaItem.mediaMetadata.mediaType推論要在DefaultCastOptionsProvider#toMediaQueueItem中使用的 Cast MEDIA_TYPE (如有)。 - 在
DefaultCastOptionsProvider中啟用遠端到本機轉移功能。 - 在工作階段示範中新增 Cast 支援。
- 新增在可組合 UI 上顯示媒體路徑按鈕的支援。
- 新增支援,在動作列選單中顯示媒體路徑按鈕。
- 新增支援,可將媒體路徑按鈕顯示為 View UI。
- 新增
- 測試公用程式:
- 新增
FakeClock自動跳轉行為的時間差上限。預設為 1 秒,但可透過FakeClock.Builder設定。 - 新增
RobolectricUtil.runMainLooperUntil(和runLooperUntil) 訊息之間的時間差上限。預設值為 1 秒,但可透過這些方法的新超載進行設定。 - 將
CapturingRenderersFactory從test-utils移至test-utils-robolectric。
- 新增
- 移除已淘汰的符號:
- 移除已淘汰的
DefaultPreloadManager建構函式。改用DefaultPreloadManager.Builder。 - 移除已淘汰的
EditedMediaItemSequence建構函式。改用EditedMediaItemSequence.Builder。 - 移除
BitmapFactoryImageDecoder.BitmapDecoder。改用ExternallyLoadedImageDecoder。 - 移除已淘汰的
ShadowMediaCodecConfig.forAllSupportedMimeTypes()。改用ShadowMediaCodecConfig.withAllDefaultSupportedCodecs()。 - 移除已淘汰的
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()。改用ShadowMediaCodecConfig.withNoDefaultSupportedCodecs()。
- 移除已淘汰的
1.9.0-rc01
2025 年 12 月 1 日
請使用 1.9.0 穩定版。
1.9.0-beta01
2025 年 11 月 20 日
請使用 1.9.0 穩定版。
1.9.0-alpha01
October 22, 2025
請使用 1.9.0 穩定版。
1.8.0 版
1.8.1
2026 年 5 月 21 日
1.8.1 版包含以下修訂項目。
- 效果:
- 從無介面情境轉換時,請明確設定
GL_DRAW_BUFFER和GL_READ_BUFFER。
- 從無介面情境轉換時,請明確設定
1.8.0 版
2025 年 7 月 30 日
1.8.0 版包含這些修訂版本。
- 通用程式庫:
- 新增在
ForwardingSimpleBasePlayer中替換播放器的支援。
- 新增在
- ExoPlayer:
- 在
ExoPlayer介面中新增隨機播放模式的 getter (#2522)。 - 如果從多個執行緒存取
DefaultAudioSink,則會更明確地擲回例外狀況。如果這是因為在播放器外部呼叫RendererCapabilities.getFormatSupport所致,請務必在與 ExoPlayer 播放執行緒相同的執行緒上呼叫這個方法,或使用與播放所用執行緒不同的例項 (#1191)。 - 修正以下錯誤:電視上的非立體聲音訊格式可能會標示為
DefaultTrackSelector不支援。 - 使用 MediaCodec 的
DECODE_ONLY旗標 (在拖曳模式中預設為啟用) 時,請確保最後一個影格正確算繪。 - 新增支援功能,可使用從
Context傳遞至ExoPlayer.Builder的虛擬裝置 ID。 - 在拖曳模式下,預設啟用動態排程。
- 跳轉至項目結尾時,避免不必要地重新載入來源。
- 在拖曳模式中,預設使用
MediaCodec.BUFFER_FLAG_DECODE_ONLY。 - 當
PreloadMediaSource由ExoPlayer播放,且播放執行緒與預先載入執行緒不同時,擲回IllegalStateException(#2495)。 - 使用預設實作項目將
cloneAndMove新增至ShuffleMode(#2226)。 - 如果不需要呼叫
render,請變更Renderer.getMinDurationToProgressUs的預設行為,傳回較大的值。 - 修正錯誤:在暫停狀態下跳轉至結尾時,內部排程會延遲最後一個影格。目前,只有在啟用
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled時,錯誤修正才會生效。 - 新增
ExoPlayer.setScrubbingModeEnabled(boolean)方法。這項設定可最佳化播放器,因應頻繁的跳轉操作 (例如使用者拖曳拖曳列)。您可以使用ExoPlayer和ExoPlayer.Builder上的setScrubbingModeParameters(..)自訂拖曳模式的行為。 - 允許在拖曳模式下自訂部分跳轉容許值。
- 提高拖曳模式下的轉碼器運作速率。
- 修正
AdsMediaSource內容中的準備錯誤可能不會回報的錯誤 (#2337)。 - 修正
MergingMediaSource中的記憶體流失問題,例如側載字幕時使用的記憶體 (#2338)。 - 允許
CmcdConfiguration.Factory傳回null,停用特定媒體項目的 CMCD 記錄 (#2386)。 - 將預設圖片緩衝區空間從 128 kB (文字軌複製貼上錯誤) 增加到 26 MB,足以容納 50 MP Ultra HDR 圖片 (#2417)。
- 新增
PreCacheHelper,允許應用程式預先快取單一媒體,並指定開始位置和時間長度。 - 新增從
DefaultPreloadManager中指定位置預先載入的支援。
- 在
- 轉換程式:
- 新增
CodecDbLite,以便針對晶片組進行影片編碼設定的最佳化。 - 在
DefaultEncoderFactory中加入setEnableCodecDbLite旗標,啟用 CodecDB Lite 設定最佳化功能。根據預設,這個旗標會設為 false。 - 現在,如要使用無聲音訊填補初始間隔 (透過
addGap()新增),必須在EditedMediaItemSequence.Builder中明確設定experimentalSetForceAudioTrack(true)。如果間隔位於序列中間,則不需要這個標記。 - 將
Muxer介面從media3-transformer移至media3-muxer。 - 將
MediaItem.Builder().setImageDuration(long)設為必要設定,才能將媒體項目匯入為圖片。 - 新增
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean),其中包含修剪時的 MP4 編輯清單,指示播放器忽略修剪起點前關鍵影格與修剪起點之間的樣本。 - 更新 Composition Demo 應用程式,改用 Kotlin 和 Jetpack Compose,並新增自訂
VideoCompositorSettings,將序列排列成 2x2 或子母畫面版面配置。
- 新增
- 擷取工具:
- 從片段化 MP4 檔案剖析中繼資料 (#2084)。
- JPEG:支援開頭沒有 Exif 區隔的動態相片 (#2552)。
- 新增支援,可在含有多個
sidx原子的分段 MP4 中跳轉。您可以在FragmentedMp4Extractor上使用FLAG_MERGE_FRAGMENTED_SIDX旗標啟用這項行為 (#9373)。 - 忽略 FLAC 檔案中的空白搜尋表格 (包括僅包含預留位置搜尋點的表格),並在檔案持續時間已知時,改用二進位搜尋 (#2327)。
- 修正 H.265 SEI 單元的剖析問題,完全略過無法辨識的 SEI 類型 (#2456)。
- 更新
WavExtractor,在剖析WAVE_FORMAT_EXTENSIBLE類型檔案時,使用標頭擴充功能的 SubFormat 資料做為音訊格式。 - MP4:新增對
ipcm和fpcm方塊的支援,用於定義原始 PCM 音軌 (不支援 64 位元浮點 PCM)。 - MP4:處理
tkhd轉換矩陣的旋轉部分,同時旋轉和反映影片。這可確保 iPhone 前置鏡頭拍攝的反射影片能正確顯示,但 y 軸反射不正確 (#2012)。 - MP3:因
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)而改用固定位元率搜尋時,使用不可搜尋的 Xing、VBRI 和類似可變位元率中繼資料的持續時間和資料大小 (#2194)。
- 音訊:
- 修正音訊播放開始時間非常接近媒體結尾時,不會呼叫
AnalyticsListener.onAudioPositionAdvancing的錯誤。 - 在
ChannelMappingAudioProcessor和TrimmingAudioProcessor中新增對所有線性 PCM 取樣格式的支援。 - 新增
CompositionPlayer音訊間隔支援。 - 從
BaseAudioProcessor#reset()移除對BaseAudioProcessor#flush()的虛假呼叫。 - 允許在 DefaultAudioMixer 中進行恆定功率上混/下混。
- 將
ChannelMappingAudioProcessor、TrimmingAudioProcessor和ToFloatPcmAudioProcessor設為公開 (#2339)。 - 在
AudioTrackPositionTracker中使用AudioTrack#getUnderrunCount()偵測DefaultAudioSink中的緩衝區不足,而非盡力估算。 - 改善音訊時間戳記平滑處理,避免音訊輸出裝置發生非預期的位置偏移。
- 修正錯誤:連上藍牙裝置後,從暫停狀態恢復播放時,前 10 秒的影音同步會中斷。
- 修正
AnalyticsListener.onAudioPositionAdvancing未回報音訊開始前進的時間,而是回報第一次測量的時間。 - 修正部分裝置在備用立體聲音訊後,無法復原至多聲道音訊的問題 (#2258)。
- 修正音訊播放開始時間非常接近媒體結尾時,不會呼叫
- 影片:
- 將分離介面解決方法擴充至「lenovo」和「motorola」裝置 (#2059)。
- 如果音訊樣本未在要求的確切位置開始播放,則改善啟動時影片影格的流暢度。
- 將分離介面解決方法擴充至「realme」裝置 (#2059)。
- 新增實驗性
ExoPlayerAPI,在將僅解碼輸入緩衝區排入佇列時,加入MediaCodec.BUFFER_FLAG_DECODE_ONLY旗標。這個標記會指示解碼器略過僅解碼緩衝區,進而加快跳轉速度。請使用DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag啟用。* 改善軟體視訊轉碼器的轉碼器效能檢查。這可能會導致部分額外音軌標示為EXCEEDS_CAPABILITIES。 - 修正部分裝置上的 VP9 Widevine 播放錯誤 (#2408)。
- 文字:
- 新增 MP4 檔案中 VobSub 音軌的支援 (#2510)。
- 修正字幕片段一開始無法載入,但之後成功載入,接著出現多個空白字幕片段時,播放作業會停滯的問題 (#2517)。
- 修正 SSA 和 SubRip,在啟用字幕時顯示進行中的提示 (#2309)。
- 修正從有字幕錯誤的串流切換至字幕軌空白的直播時,播放作業會卡住的問題 (#2328)。
- 修正播放含有 B 影格的 H.262 串流時,CEA-608 字幕亂碼的問題 (#2372)。
- 在 Matroska 檔案中新增對 SSA 字幕和
CodecId = S_TEXT/SSA的支援。先前MatroskaExtractor僅支援CodecId = S_TEXT/ASS,代表 SubStation Alpha 字幕的「進階」(v4+) 變化版本 (但 ExoPlayer 的剖析邏輯對這兩種變化版本都相同) (#2384)。 - 在 SubStation Alpha (SSA) 字幕檔案中新增
layer屬性支援,用於定義畫面上同時顯示多個提示時的 z 順序 (#2124)。
- 中繼資料:
- 新增對
MetadataRetriever擷取媒體時間長度和Timeline的支援,並將其遷移至以執行個體為基礎的AutoCloseableAPI。使用新的Builder為MediaItem建立例項,然後呼叫retrieveTrackGroups()、retrieveTimeline()和retrieveDurationUs(),取得中繼資料的ListenableFuture。先前的靜態方法現已淘汰 (#2462)。
- 新增對
- 圖片:
- 將解碼點陣圖限制為
BitmapFactoryImageDecoder中的顯示大小,避免應用程式在嘗試顯示超大圖片 (例如 5000 萬像素) 時,因PlayerView的Canvas: trying to draw too large bitmap.而異常終止。 - 變更
DefaultRenderersFactory.getImageDecoderFactory()的簽章,以採用Context參數。 - 將
CompositionPlayer使用的最大點陣圖輸出大小,與Transformer已使用的大小對齊 (也就是說,CompositionPlayer在解碼點陣圖時不會考慮顯示大小,這與ExoPlayer不同)。
- 將解碼點陣圖限制為
- DRM:
- 新增接受
MediaItem.DrmConfiguration的OfflineLicenseHelper.newWidevineInstance新超載,以便正確套用 HTTP 要求標頭 (#2169)。
- 新增接受
- 效果:
- 新增
Presentation.createForShortSide(int),建立Presentation,確保最短邊一律符合指定值,無論輸入方向為何。
- 新增
- 多工器:
- 修正錯誤:未針對分段 MP4 中的音訊樣本設定正確的樣本標記。
writeSampleData()API 現在使用多工器專屬的BufferInfo類別,而非MediaCodec.BufferInfo。- 新增
Muxer.Factory#supportsWritingNegativeTimestampsInEditList,預設值為 false。
- IMA 擴充功能:
- 修正錯誤:某個廣告載入錯誤,可能導致另一個廣告群組意外失效。
- 修正隨選影片視窗結束後,廣告群組導致播放停滯的錯誤。開始時間晚於時間範圍的廣告群組不會再排入
MediaPeriodQueue(#2215)。
- 工作階段:
- 修正錯誤:系統會忽略來自第三方非特殊權限 Media3 控制器的連線。
- 傳送自訂指令至舊版
MediaBrowserServiceCompat時,移除可用指令檢查。這與舊版控制器/瀏覽器連線至舊版應用程式時的行為相同。 - 修正錯誤:播放器首次播放錯誤時,會誤視為永久自訂例外狀況。這會導致應用程式無法復原。
- 修正錯誤:工作階段未處理的部分控制器變更可能會導致
IllegalStateExceptions。 - 修正錯誤:工作階段未處理的控制器動作可能會導致控制器處於無效狀態。
- 修正 StrictMode 不安全啟動違規警告 (#2330)。
- 修正以下錯誤:從與主執行緒不同的應用程式執行緒執行播放器時,從主執行緒呼叫
setSessionExtras會導致IllegalStateException(#2265)。 - 如果播放器已設定媒體項目,但未準備或播放,請勿自動顯示通知 (#2423https://github.com/androidx/media/issues/2423)。這項行為可透過
MediaSessionService.setShowNotificationForIdlePlayer設定。 - 為所有或所選控制器新增自訂
PlaybackException。 - 修正錯誤:在
MediaController上跳轉直播內容時,可能會導致IllegalArgumentException。 - 如果是直播,請停止發布播放位置,以及在目前項目中搜尋平台媒體控制器的功能,避免 Android Auto UI (以及使用平台媒體工作階段中這項資訊的其他控制器) 出現位置不自然的情況 (#1758)。
- 修正以下錯誤:將空值傳入與舊版
MediaBrowserServiceCompat連結的MediaBrowser的getLibraryRoot時,會產生NullPointerException。 - 修正傳送自訂動作、搜尋結果或 getItem 要求時,舊版工作階段應用程式會因
ClassNotFoundException異常終止的錯誤。 - 修正
MediaItem.LocalConfiguration.uri會與平台工作階段的MediaMetadata共用的錯誤。如要刻意分享 URI,讓控制器重新要求媒體,請改為設定MediaItem.RequestMetadata.mediaUri。
- UI:
- 修正錯誤:
PlayerSurface在LazyColumn等可重複使用的元件中無法正常運作 (#2493)。 - 修正 Compose 錯誤,該錯誤會導致設定初始按鈕狀態與觀察狀態變更 (例如圖示形狀或啟用狀態) 之間出現落差。現在,系統會擷取在觀察期外對 Player 所做的任何變更 (#2313)。
- 在
media3-ui-compose模組中,為SeekBackButtonState和SeekForwardButtonState新增狀態容器和可組合函式。 - 在
PlayerControlView中新增 ExoPlayer 拖曳模式的支援。啟用後,當使用者開始拖曳拖曳列時,播放器會進入拖曳模式,並在每次移動時發出player.seekTo呼叫,然後在觸控離開螢幕時退出拖曳模式。您可以透過 XML 中的time_bar_scrubbing_enabled = true或 Java/Kotlin 的setTimeBarScrubbingEnabled(boolean)方法啟用這項整合功能。 - 讓
PlayerSurface接受可為空值的Player引數。
- 修正錯誤:
- 下載內容:
- 新增漸進式串流的部分下載支援。應用程式可以使用
DownloadHelper準備漸進式串流,並向輔助程式要求DownloadRequest,同時指定下載內容應涵蓋的時間型媒體開始和結束位置。傳回的DownloadRequest會攜帶解析的位元組範圍,可用於建立ProgressiveDownloader並下載相應內容。 - 新增
DownloadHelper.Factory,取代靜態DownloadHelper.forMediaItem()方法。 - 新增
SegmentDownloader實作項目的Factory。 - 新增自動調整串流的部分下載支援。應用程式可以使用
DownloadHelper準備自動調整串流,並向輔助程式要求DownloadRequest,同時指定下載內容應涵蓋的時間型媒體開始和結束位置。傳回的DownloadRequest包含解析的日期範圍,可用於建立具體的SegmentDownloader並下載相應內容。
- 新增漸進式串流的部分下載支援。應用程式可以使用
- Cronet 擴充功能:
- 新增自動 Cookie 處理功能 (#5975)。
- HLS 擴充功能:
- 修正錯誤:當緩衝區中沒有可用的區塊時,
HlsSampleStreamWrapper會嘗試在緩衝區內搜尋 #2598。 - 修正以下錯誤:載入低延遲部分和預先載入提示後,音軌選取項目變更可能會導致播放卡住或凍結 (#2299)。
- 當伺服器不接受
CAN-BLOCK-RELOAD=YES時,請等待目標時間長度的一半,避免過度重新載入 (#2317)。 - 修正以下錯誤:在片中廣告前開始插播串流,以及嘗試解析錯誤廣告的素材資源清單時,播放作業會停滯 (#2558)。
- 修正播放清單剖析功能,接受引號字串屬性值中的
\f(換頁) (#2420)。 - 支援更新 ID 相同的插頁式廣告 (#2427)。
- 修正錯誤:直播沒有可載入的片段時,有時不會傳播播放清單載入錯誤 (#2401https://github.com/androidx/media/issues/2401)。
- 依 NAME 標記將字幕轉譯版本分組,類似於音訊轉譯版本的分組方式 (#1666)。
- 支援 X-ASSET-LIST 和
HlsInterstitialsAdsLoader直播。
- 修正錯誤:當緩衝區中沒有可用的區塊時,
- DASH 擴充功能:
- RTSP 擴充功能:
- 解碼器擴充功能 (FFmpeg、VP9、AV1 等):
- 修正
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange對音訊解碼器擴充功能無效的錯誤 (#2258)。
- 修正
- Cast 擴充功能:
- 測試公用程式:
- 將
advance(player).untilPositionAtLeast和untilMediaItemIndex新增至TestPlayerRunHelper,以便將播放器推進至指定位置。在大多數情況下,這些方法比現有的untilPosition和untilStartOfMediaItem方法更可靠。 - 將
FakeDownloader移至test-utils-robolectric模組,以便在其他測試中重複使用。 - 已移除
transformer.TestUtil.addAudioDecoders(String...)、transformer.TestUtil.addAudioEncoders(String...)和transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)。請改用ShadowMediaCodecConfig設定陰影編碼器和解碼器。 - 在
ShadowMediaCodecConfig回報的轉碼器名稱中,將「exotest」前置字元替換為「media3」。
- 將
- 移除已淘汰的符號:
- 移除已淘汰的
SegmentDownloader建構函式SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor),以及其子類別DashDownloader、HlsDownloader和SsDownloader中的對應建構函式。 - 移除已淘汰的
Player.hasNext()、Player.hasNextWindow()。請改用Player.hasNextMediaItem()。 - 移除已淘汰的
Player.next()。改用Player.seekToNextMediaItem()。 - 移除已淘汰的
Player.seekToPreviousWindow()。改用Player.seekToPreviousMediaItem()。 - 移除已淘汰的
Player.seekToNextWindow()。改用Player.seekToNextMediaItem()。 - 已從
exoplayer模組中移除已淘汰的BaseAudioProcessor。請使用common模組下的BaseAudioProcessor。 - 移除已淘汰的
MediaCodecVideoRenderer建構函式MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider)。
- 移除已淘汰的
1.8.0-rc02 版
2025 年 7 月 24 日
請使用 1.8.0 穩定版。
1.8.0-rc01 版
2025 年 7 月 16 日
請使用 1.8.0 穩定版。
1.8.0-beta01 版
2025 年 7 月 2 日
請使用 1.8.0 穩定版。
1.8.0-alpha01 版
2025 年 5 月 19 日
請使用 1.8.0 穩定版。
1.7.0 版
1.7.1 版
2025 年 5 月 16 日
這個版本的程式碼與 1.6.1 相同,發布目的是確保其顯示為比 1.7.0「更新」的版本,因為 1.7.0 是 Alpha 版,但意外標記為穩定版 (請見下方)。
1.7.0 版
2025 年 5 月 16 日
這個版本應為 1.7.0-alpha01,但在 maven.google.com 上誤標為 1.7.0 (即穩定版)。請勿使用。請繼續使用 1.6.1,或升級至 1.7.1 (程式碼與 1.6.1 相同)。
1.6.0 版
1.6.1
2025 年 4 月 14 日
發布 androidx.media3:media3-*:1.6.1。1.6.1 版包含這些修訂項目。
- 通用程式庫:
- 新增
PlaybackParameters.withPitch(float)方法,可輕鬆複製具有新pitch值的PlaybackParameters(#2257)。
- 新增
- ExoPlayer:
- 修正問題:在初始化下一個媒體項目時,可復原的轉譯器錯誤導致媒體項目轉換失敗 (#2229)。
- 修正以下問題:
PreloadMediaSource嘗試在ProgressiveMediaPeriod準備就緒前呼叫其getBufferedDurationUs(),導致ProgressiveMediaPeriod擲回IllegalStateException(#2315)。 - 修正 DASH、HLS 和 SmoothStreaming 的資訊清單要求中傳送
CmcdData的問題 (#2253)。 - 確保移除廣告群組後,仍可使用
AdPlaybackState.withAdDurationsUs(long[][])。使用者仍須傳入已移除廣告群組的時間長度陣列,該陣列可為空白或空值 (#2267)。
- 擷取工具:
- MP4:從
tkhd方塊剖析alternate_group,並在每個軌道的Format.metadata中,將其公開為Mp4AlternateGroupData項目 (#2242)。
- MP4:從
- 音訊:
- 修正卸載問題:播放短內容的播放清單時,位置可能會卡住 (#1920)。
- 工作階段:
- 將平台
MediaSession回呼的匯總逾時時間從 500 毫秒縮短為 100 毫秒,並新增實驗性 setter,允許應用程式設定這個值。 - 修正使用者關閉通知後,通知再次出現的問題 (#2302)。
- 修正以下錯誤:當包裝的播放器實際為空白時,工作階段會傳回單一項目時間軸。當包裝的播放器沒有
COMMAND_GET_TIMELINE,但有COMMAND_GET_CURRENT_MEDIA_ITEM,且包裝的播放器為空白時,就會發生這種情況 (#2320)。 - 修正以下錯誤:與服務進行其他互動 (例如
setForegroundServiceTimeoutMs) 後,呼叫MediaSessionService.setMediaNotificationProvider會遭到忽略,且不會顯示任何訊息 (#2305)。
- 將平台
- UI:
- 啟用
PlayerSurface,以便與ExoPlayer.setVideoEffects和CompositionPlayer搭配使用。 - 修正
PlayerSurface無法使用新Player重新組合的錯誤。
- 啟用
- HLS 擴充功能:
- 修正 HLS 媒體的
CmcdData未設定區塊時間長度,導致處理加密媒體區隔時發生斷言失敗的問題 (#2312)。
- 修正 HLS 媒體的
- RTSP 擴充功能:
- 新增 RTSPT 配置的 URI 支援,以便設定 RTSP 工作階段使用 TCP (#1484)。
- Cast 擴充功能:
- 新增播放清單中繼資料支援 (#2235)。
1.6.0
2025 年 3 月 26 日
發布 androidx.media3:media3-*:1.6.0。1.6.0 版包含這些修訂項目。
- 通用程式庫:
- 新增
AudioManagerCompat和AudioFocusRequestCompat,取代androidx.media中的對等類別。 - 將 Kotlin 從 1.9.20 升級至 2.0.20,並使用 Compose Compiler Gradle 外掛程式。將 KotlinX Coroutines 程式庫從 1.8.1 升級至 1.9.0。
- 移除
Format.toBundle(boolean excludeMetadata)方法,改用Format.toBundle()。 - 修正
SimpleBasePlayer中的錯誤:在setPlaylist之後,使用nullMediaMetadata在State中設定新的currentMediaItemIndex時,不會重新評估中繼資料 (#1940)。 - 將
SimpleBasePlayer.State存取權從受保護變更為公開,以便更輕鬆地處理其他類別的更新 (#2128)。
- 新增
- ExoPlayer:
- 新增
MediaExtractorCompat,這個新類別提供與平台MediaExtractor相同的功能。 - 新增實驗性「ExoPlayer」預熱支援,可使用
MediaCodecVideoRenderer播放。您可以透過experimentalSetEnableMediaCodecVideoRendererPrewarming設定DefaultRenderersFactory,為ExoPlayer提供次要MediaCodecVideoRenderer。啟用後,ExoPlayer會在播放期間預先處理連續媒體項目的影片,減少媒體項目轉換延遲時間。 - 將
DefaultLoadControl中bufferForPlaybackMs和bufferForPlaybackAfterRebufferMs的預設值分別減少至 1000 和 2000 毫秒。 - 非同步初始化
DeviceInfo和裝置音量 (如果使用setDeviceVolumeControlEnabled啟用)。這些值在ExoPlayer.Builder.build()之後不會立即提供,且Player.Listener會透過onDeviceInfoChanged和onDeviceVolumeChanged通知變更。 - 建立播放器後,初始音訊工作階段 ID 不會立即提供。如有需要,您可以使用
AnalyticsListener.onAudioSessionIdChanged監聽初始更新。 - 選取影片音軌時,請考量語言。根據預設,系統會選取與所選音軌語言相符的「主要」影片軌 (如有)。您可以使用
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)明確指定影片語言偏好設定。 - 將
selectedAudioLanguage參數新增至DefaultTrackSelector.selectVideoTrack()方法。 - 在
MediaSourceEventListener.onLoadStarted和對應的MediaSourceEventListener.EventDispatcher方法中新增retryCount參數。 - 修正以下錯誤:在多時段 DASH 串流中,如果播放清單項目或時段的持續時間與實際內容不符,可能會導致項目結尾處畫面凍結 (#1698)。
- 將
BasePreloadManager.Listener移至頂層PreloadManagerListener。 - 您可以實作
RenderersFactory.createSecondaryRenderer,提供預熱的次要轉譯器。預熱功能可讓媒體項目在播放期間更快轉換。 - 在自動調整串流格式 DASH、HLS 和 SmoothStreaming 中,啟用傳送
CmcdData資訊清單要求的功能 (#1951)。 - 提供在
MediaCodecRenderer.onReadyToInitializeCodec中初始化的轉碼器MediaCodecInfo(#1963)。 - 請變更
AdsMediaSource,允許AdPlaybackStates透過附加廣告群組來擴充。系統會偵測到無效的修改,並擲回例外狀況。 - 修正問題:片中廣告結束後,在轉換至內容媒體時,可能會快速連續顯示額外的僅解碼影格。
- 讓
DefaultRenderersFactory新增兩個MetadataRenderer例項,讓應用程式預設接收兩種不同的中繼資料配置。 - 重新評估是否要在播放暫停時,取消載入中的區塊 (#1785)。
- 在
ClippingMediaSource中新增選項,允許剪輯無法跳轉的媒體。 - 修正錯誤:使用預熱功能跳轉時,可能會阻擋後續的媒體項目轉換。
- 修正
ExoPlayer.isLoading()已轉換為STATE_IDLE或STATE_ENDED,但仍維持true的錯誤 (#2133)。 - 將
lastRebufferRealtimeMs新增至LoadControl.Parameter(#2113)。
- 新增
- 轉換程式:
- 新增支援,可轉多工為其他回溯相容格式。
- 新增 Dolby Vision (設定檔 8) 格式的轉碼和轉多工支援。
- 更新
VideoFrameProcessor.registerInputStream和VideoFrameProcessor.Listener.onInputStreamRegistered的參數,以使用Format。 - 使用
DefaultEncoderFactory時,生成 HDR 靜態中繼資料。 - 使用
MediaMetricsManager啟用 Android 平台診斷支援功能。Transformer 會向平台傳送編輯事件和成效資料,有助於在裝置提供系統效能與偵錯資訊。如果裝置使用者已啟用分享使用狀況與診斷資料功能,則 Google 也可能會收集以上資料。您可以透過Transformer.Builder.setUsePlatformDiagnostics(false),讓應用程式選擇不採用 Transformer 的平台診斷貢獻功能。 - 將
InAppMuxer分割為InAppMp4Muxer和InAppFragmentedMp4Muxer。您可以使用InAppMp4Muxer產生非分段 MP4 檔案,而InAppFragmentedMp4Muxer則用於產生分段 MP4 檔案。 - 將
Muxer介面從media3-muxer移至media3-transformer。 - 新增
MediaProjectionAssetLoader,提供來自MediaProjection的媒體,用於螢幕錄製,並在 Transformer 試用版應用程式中新增螢幕錄製支援。 - 將
#getInputFormat()新增至Codec介面。 - 盡可能將釋出
GlObjectsProvider的責任轉移給DefaultVideoFrameProcessor和DefaultVideoCompositor中的呼叫端。
- 擷取工具:
- AVI:修正處理固定位元率壓縮音訊檔案時,串流標頭儲存位元組數而非區塊數的問題。
- 修正 NAL 單元的處理方式,長度以 1 或 2 個位元組表示 (而非 4 個)。
- 修正 MP4 編輯清單中的
ArrayIndexOutOfBoundsException,當編輯清單從非同步影格開始,且前面沒有同步影格時 (#2062)。 - 修正 TS 串流在某些裝置上可能卡住的問題 (#2069)。
- FLAC:新增 32 位元 FLAC 檔案支援。先前這類內容無法透過
IllegalStateException: Playback stuck buffering and not loading播放 (#2197)。
- 音訊:
- 修正
onAudioPositionAdvancing,以便在播放繼續時呼叫 (先前是在播放暫停時呼叫)。 - 如果
SpeedChangingAudioProcessor是以預設參數設定,請勿略過SonicAudioProcessor。 - 修正
Sonic#getOutputSize()中的下溢問題,避免DefaultAudioSink停滯。 - 修正
MediaCodecAudioRenderer.getDurationToProgressUs()和DecoderAudioRenderer.getDurationToProgressUs(),讓跳轉功能正確重設提供的時間長度。 - 將
androidx.media3.common.audio.SonicAudioProcessor設為最終版本。 - 在
ChannelMappingAudioProcessor和TrimmingAudioProcessor中新增浮點 PCM 支援。
- 修正
- 影片:
- 將
MediaCodecVideoRenderer.shouldUsePlaceholderSurface變更為受保護,讓應用程式可以覆寫,以封鎖預留位置介面的使用 (#1905)。 - 新增實驗性
ExoPlayerAV1 樣本依附元件剖析,加快跳轉速度。請使用新的DefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI 啟用。 - 新增實驗性
ExoPlayerAPI,可捨棄不依賴的延遲MediaCodecVideoRenderer解碼器輸入緩衝區。請使用DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs啟用。* 修正以下問題:沒有途徑的播放器會立即準備就緒,且解碼任何待處理影格的速度非常慢 (#1973)。 - 將 Xiaomi 和 OPPO 裝置排除在分離介面模式之外,避免螢幕閃爍 (#2059)。
- 將
- 文字:
- 新增 VobSub 字幕支援 (#8260)。
- 停止積極載入所有以
MediaItem.Builder.setSubtitleConfigurations設定的字幕檔案,改為只載入透過曲目選取功能選取的字幕檔案 (#1721)。 - TTML:新增使用
style參照tts:origin和tts:extent的支援 (#2953)。 - WebVTT 和 SubRip 時間戳記必須精確到小數點後 3 位。 先前我們錯誤剖析了任意數量的小數位數,但一律假設值是以毫秒為單位,導致時間戳記不正確 (#1997)。
- 修正播放清單含有 CEA-608 或 CEA-708 字幕的剪輯項目時,播放作業停止的問題。
- 修正 SSA 檔案含有時間長度為零 (開始和結束時間相同) 的提示時,
IllegalStateException的問題 (#2052)。 - 當字幕與音訊和影片多工處理至同一個容器時,抑制 (並記錄) 字幕剖析錯誤 (#2052)。
- 修正使用 CR 行結尾的 WebVTT 檔案中,多位元組 UTF-8 字元的處理方式 (#2167)。
- DRM:
- 修正 API 低於 27 的裝置上播放 ClearKey 內容時,會發生
MediaCodec$CryptoException: Operation not supported in this configuration錯誤的問題 (#1732)。
- 修正 API 低於 27 的裝置上播放 ClearKey 內容時,會發生
- 效果:
- 將
OverlaySettings的功能移至StaticOverlaySettings。OverlaySettings可設為子類別,以便動態調整疊加層設定。
- 將
- 多工器:
- 將
MuxerException移出Muxer介面,避免完整限定名稱過長。 - 在
Mp4Muxer.Builder和FragmentedMp4Muxer.Builder中,將setSampleCopyEnabled()方法重新命名為setSampleCopyingEnabled()。 Mp4Muxer.addTrack()和FragmentedMp4Muxer.addTrack()現在會傳回int軌道 ID,而非TrackToken。Mp4Muxer和FragmentedMp4Muxer不再實作Muxer介面。- 預設停用
Mp4Muxer樣本批次處理和複製功能。 - 修正
FragmentedMp4Muxer中的錯誤,避免在只寫入音軌時建立大量片段。
- 將
- 工作階段:
- 播放暫停、停止或失敗時,前景服務狀態會再保留 10 分鐘。這樣一來,使用者就能在這段逾時期間內繼續播放,不必擔心各種裝置的前景服務限制。請注意,覆寫
onTaskRemoved時,只呼叫player.pause()已無法在stopSelf()之前停止前景服務,請改用MediaSessionService.pauseAllPlayersAndStopSelf()。 - 播放進入錯誤或停止狀態時,請保持通知顯示。只有在播放清單清除或播放器釋出時,通知才會移除。
- 改善 Android 平台 MediaSession 動作 ACTION_PLAY 和 ACTION_PAUSE 的處理方式,根據可用指令只設定其中一個,並在只設定其中一個時接受。
- 將
Context新增為MediaButtonReceiver.shouldStartForegroundService的參數 (#1887)。 - 修正以下錯誤:在連線至舊版工作階段的
MediaController上呼叫Player方法時,會捨棄待處理更新的變更。 - 讓
MediaSession.setSessionActivity(PendingIntent)接受空值 (#2109)。 - 修正清除播放清單時,過時通知仍會顯示的錯誤 (#2211)。
- 播放暫停、停止或失敗時,前景服務狀態會再保留 10 分鐘。這樣一來,使用者就能在這段逾時期間內繼續播放,不必擔心各種裝置的前景服務限制。請注意,覆寫
- UI:
- 將
PlayerSurface、PresentationState、PlayPauseButtonState、NextButtonState、PreviousButtonState、RepeatButtonState、ShuffleButtonState和PlaybackSpeedState的狀態容器和可組合項新增至media3-ui-compose模組。
- 將
- 下載內容:
- 修正
CacheWriter中的錯誤:如果資料來源擲回IOException以外的Exception,資料來源會保持開啟,快取區域則會鎖定 (#9760)。
- 修正
- HLS 擴充功能:
- 新增
HlsInterstitialsAdsLoader的第一個版本。廣告載入器會讀取 HLS 媒體播放清單的 HLS 插頁式廣告,並對應至傳遞給AdsMediaSource的AdPlaybackState。這個初始版本僅支援具有X-ASSET-URI屬性的 HLS 隨選影片串流。 - 新增
HlsInterstitialsAdsLoader.AdsMediaSourceFactory。應用程式可以使用這個類別,以便利且安全的方式建立使用HlsInterstitialsAdsLoader的AdsMediaSource執行個體。 - 剖析 HLS 播放清單中的
SUPPLEMENTAL-CODECS標記,偵測 Dolby Vision 格式 (#1785)。 - 放寬在 HLS 串流中跳轉至同步位置的條件 (#2209)。
- 新增
- DASH 擴充功能:
- 解碼器擴充功能 (FFmpeg、VP9、AV1 等):
- 新增 MPEG-H 解碼器模組,使用內建的 MPEG-H 解碼器解碼 MPEG-H 音訊 (#1826)。
- MIDI 擴充功能:
- 將自訂
AudioSink和AudioRendererEventListener執行個體插入MidiRenderer。
- 將自訂
- Cast 擴充功能:
- 將
play-services-cast-framework依附元件升級至 21.5.0,修正以下問題:在已安裝但停用 Google Play 服務的裝置上,指定 API 34 以上版本的應用程式發生FLAG_MUTABLE異常終止 (#2178)。
- 將
- 試用版應用程式:
- 使用額外按鈕擴充
demo-compose,並透過縮放和快門支援功能強化PlayerSurface整合。
- 使用額外按鈕擴充
- 移除已淘汰的符號:
- 移除已淘汰的
AudioMixer.create()方法。改用DefaultAudioMixer.Factory().create()。 - 移除下列已淘汰的
Transformer.Builder方法:setTransformationRequest(),請改用setAudioMimeType()、setVideoMimeType()和setHdrMode()。setAudioProcessors(),請在EditedMediaItem.Builder.setEffects()中設定音訊處理器,並改為傳遞至Transformer.start()。setVideoEffects(),請在EditedMediaItem.Builder.setEffects()中設定影片效果,然後改為傳遞至Transformer.start()。setRemoveAudio(),請改用EditedMediaItem.Builder.setRemoveAudio()從傳遞至Transformer.start()的EditedMediaItem中移除音訊。setRemoveVideo(),請改用EditedMediaItem.Builder.setRemoveVideo()從傳遞至Transformer.start()的EditedMediaItem中移除影片。setFlattenForSlowMotion(),請改用EditedMediaItem.Builder.setFlattenForSlowMotion()壓平傳遞至Transformer.start()的EditedMediaItem。setListener(),請改用addListener()、removeListener()或removeAllListeners()。
- 移除下列已淘汰的
Transformer.Listener方法:onTransformationCompleted(MediaItem),請改用onCompleted(Composition, ExportResult)。onTransformationCompleted(MediaItem, TransformationResult),請改用onCompleted(Composition, ExportResult)。onTransformationError(MediaItem, Exception),請改用onError(Composition, ExportResult, ExportException)。onTransformationError(MediaItem, TransformationException),請改用onError(Composition, ExportResult, ExportException)。onTransformationError(MediaItem, TransformationResult, TransformationException),請改用onError(Composition, ExportResult, ExportException)。onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest),請改用onFallbackApplied(Composition, TransformationRequest, TransformationRequest)。
- 移除已淘汰的
TransformationResult類別。改用ExportResult。 - 移除已淘汰的
TransformationException類別。改用ExportException。 - 移除已淘汰的
Transformer.PROGRESS_STATE_NO_TRANSFORMATION。改用Transformer.PROGRESS_STATE_NOT_STARTED。 - 移除已淘汰的
Transformer.setListener()。請改用Transformer.addListener()、Transformer.removeListener()或Transformer.removeAllListeners()。 - 移除已淘汰的
Transformer.startTransformation()。改用Transformer.start(MediaItem, String)。 - 移除已淘汰的
SingleFrameGlShaderProgram。改用BaseGlShaderProgram。 - 移除
Transformer.flattenForSlowMotion。改用EditedMediaItem.flattenForSlowMotion。 - 已移除
ExoPlayer.VideoComponent、ExoPlayer.AudioComponent、ExoPlayer.TextComponent和ExoPlayer.DeviceComponent。 - 已移除
androidx.media3.exoplayer.audio.SonicAudioProcessor。 - 移除下列已淘汰的
DownloadHelper方法:- 建構函式
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]),請改用DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)。 getRendererCapabilities(RenderersFactory),只要建立含有RenderersFactory的DefaultRendererCapabilitiesList,並呼叫DefaultRendererCapabilitiesList.getRendererCapabilities(),即可達到相同功能。- 已移除
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)方法。請改用PlayerNotificationManager.setMediaSessionToken(MediaSession.Token)並傳入(MediaSession.Token) compatToken.getToken()。
- 建構函式
- 移除已淘汰的
1.6.0-rc02
2025 年 3 月 19 日
請使用 1.6.0 穩定版。
1.6.0-rc01
2025 年 3 月 12 日
請使用 1.6.0 穩定版。
1.6.0-beta01
2025 年 2 月 26 日
請使用 1.6.0 穩定版。
1.6.0-alpha03 版本
2025 年 2 月 6 日
請使用 1.6.0 穩定版。
1.6.0-alpha02 版本
2025 年 1 月 30 日
請使用 1.6.0 穩定版。
1.6.0-alpha01 版本
2024 年 12 月 20 日
請使用 1.6.0 穩定版。
1.5 版本
1.5.1 版本
2024 年 12 月 19 日
發布 androidx.media3:media3-*:1.5.1。1.5.1 版包含這些修訂項目。
- ExoPlayer:
- 停用 MediaCodec 中的非同步解密功能,避免這個平台 API 發生回報的轉碼器逾時問題 (#1641)。
- 擷取工具:
- MP3:當
VBRI影格的目錄未涵蓋檔案中的所有 MP3 資料時,請勿提早停止播放 (#1904)。
- MP3:當
- 影片:
- 復原處理
onOutputFormatChanged時,使用MediaCodecAdapter提供的像素顯示比例值 (#1371)。
- 復原處理
- 文字:
- 修正
ReplacingCuesResolver.discardCuesBeforeTimeUs中的錯誤:在timeUs處有效的提示 (已開始但尚未結束) 遭到錯誤捨棄 (#1939)。
- 修正
- 中繼資料:
- 從 Vorbis 評論中擷取光碟/曲目編號和類型,並放入
MediaMetadata(#1958)。
- 從 Vorbis 評論中擷取光碟/曲目編號和類型,並放入
1.5.0 版本
2024 年 11 月 27 日
發布 androidx.media3:media3-*:1.5.0。1.5.0 版包含這些修訂項目。
- 通用程式庫:
- 新增
ForwardingSimpleBasePlayer,允許在進行小幅調整時轉送至其他播放器,同時確保完全一致性和事件監聽器處理 (#1183)。 - 將
SimpleBasePlayer.State.playlist替換為getPlaylist()方法。 - 新增
SimpleBasePlayer.State.Builder.setPlaylist()的覆寫,直接指定Timeline和目前的Tracks和Metadata,而不是建構播放清單結構。 - 將
minSdk提高至 21 (Android Lollipop)。這與所有其他 AndroidX 程式庫一致。 - 新增
androidx.media3:media3-common-ktx構件,提供以 Common 程式庫為基礎建構的 Kotlin 專屬功能 - 新增
Player.listen暫停擴充功能函式,以啟動協同程式,監聽media3-common-ktx程式庫的Player.Events。 - 從手動外嵌的內部類別中移除
@DoNotInline註解,以避免執行階段類別驗證失敗。R8 的最新版本現在會自動將這類呼叫移至外部,避免執行階段失敗 (因此不再需要手動移至外部)。由於compileSdk = 35,程式庫的所有 Gradle 使用者都必須使用 Android Gradle 外掛程式版本,該版本使用的 R8 版本會執行這項操作。如果程式庫使用者採用非 Gradle 建構系統,則須確保其 R8 等效縮減/模糊處理步驟會執行類似的自動外嵌程序,以免執行階段類別驗證失敗。這項異動已在其他 AndroidX 程式庫中完成。
- 新增
- ExoPlayer:
- 現在可以為每個媒體項目呼叫
MediaCodecRenderer.onProcessedStreamChange()。先前,系統不會為第一個項目呼叫這個方法。請使用MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()啟用這項功能。 - 新增
PreloadMediaSource.PreloadControl.onPreloadError,允許PreloadMediaSource.PreloadControl實作在發生錯誤時採取動作。 - 新增
BasePreloadManager.Listener,將預先載入期間的事件傳播至應用程式。 - 允許變更 SNTP 用戶端逾時,並在逾時時重試替代位址 (#1540)。
- 移除
MediaCodecAdapter.Configuration.flags,因為該欄位一律為零。 - 允許使用者在 Wear OS API 35 以上版本 (裝置宣告支援此功能) 選擇內建喇叭播放。
- 請延遲對
Context.getSystemService(Context.AUDIO_SERVICE)的封鎖呼叫,直到啟用音訊焦點處理功能為止。這可確保在未啟用音訊焦點處理功能時,不會執行封鎖呼叫 (#1616)。 - 載入失敗時,無論緩衝時間長度為何,都允許播放 (#1571)。
- 新增
AnalyticsListener.onRendererReadyChanged(),在個別轉譯器允許播放就緒時發出信號。 - 修正
MediaCodec.CryptoException在非同步模式下運作時 (API 31 以上版本的預設行為),有時會回報為「未預期的執行階段錯誤」的問題。MediaCodec - 使用
PreloadMediaSource.PreloadControl.onContinueLoadingRequested()傳遞bufferedDurationUs,而非bufferedPositionUs。此外,DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS也會變更為DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS,應用程式必須傳遞代表特定時間長度的值,從預設起始位置開始,對應的媒體來源必須預先載入這個 IntDef,而不是位置。 - 新增
ForwardingRenderer實作,將所有方法呼叫轉送至其他轉譯器 (1703)。 - 為播放清單中的下一個項目新增播放清單預先載入功能。應用程式可以呼叫
ExoPlayer.setPreloadConfiguration(PreloadConfiguration),啟用預先載入功能。預先載入功能預設為停用。啟用後,為避免干擾播放,DefaultLoadControl會限制預先載入作業,只有在播放器未載入播放內容時,才會開始並繼續預先載入。應用程式可以實作LoadControl.shouldContinuePreloading()(例如在DefaultLoadControl中覆寫這個方法),藉此變更這項行為。LoadControl的預設實作會停用預先載入功能,以免應用程式使用LoadControl的自訂實作。 - 新增
MediaSourceEventListener.EventDispatcher.dispatchEvent()方法,允許叫用子類別監聽器的事件 (1736)。 - 新增
DefaultPreloadManager.Builder,以一致的共用設定建構DefaultPreloadManager和ExoPlayer執行個體。 - 從
LoadControl.onTracksSelected()移除Renderer[]參數,因為DefaultLoadControl實作可以從ExoTrackSelection[]擷取串流類型。 - 已淘汰
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]),並將方法標示為 final,防止覆寫。請改用新的DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])。 - 在
MergingMediaSource中回報次要來源的MediaSourceEventListener事件。這會導致側載字幕 (使用MediaItem.LocalConfiguration.subtitleConfigurations新增的字幕) 回報載入開始/錯誤/取消/完成事件,這些事件可能會顯示為AnalyticsListener發出的重複載入事件。 - 避免字幕和中繼資料錯誤導致播放完全停止。而是停用有問題的音軌,並繼續播放其餘音軌 (#1722)。
- 在新的字幕處理 (擷取期間) 中,相關剖析 (例如無效字幕資料) 和載入錯誤 (例如 HTTP 404) 會透過
onLoadError回呼發出。 - 在舊版字幕處理 (算繪期間) 中,系統只會透過
onLoadError回呼發出相關聯的載入錯誤,而剖析錯誤則會自動忽略 (這是預先存在的行為)。
- 在新的字幕處理 (擷取期間) 中,相關剖析 (例如無效字幕資料) 和載入錯誤 (例如 HTTP 404) 會透過
- 修正以下錯誤:在多時段 DASH 串流中,如果播放清單項目或時段的持續時間與實際內容不符,可能會導致項目結尾處畫面凍結 (#1698)。
- 在
SntpClient中新增 setter,設定自上次更新後經過的時間上限,超過這個時間後,用戶端會重新初始化 (#1794)。
- 現在可以為每個媒體項目呼叫
- 轉換程式:
- 新增
SurfaceAssetLoader,支援透過Surface將影片資料排入 Transformer 佇列。 ImageAssetLoader會透過AssetLoader.onError回報不支援的輸入內容,而不是擲回IllegalStateException。- 匯出圖片時,必須使用
MediaItem.Builder.setImageDurationMs設定圖片持續時間。 - 新增匯出支援,可處理音訊 EditedMediaItem 序列中的間隔。
- 新增
- 音軌選取:
DefaultTrackSelector:在其他因素相同的情況下,優先選擇物件式音訊,而非聲道式音訊。
- 擷取工具:
- 允許
Mp4Extractor和FragmentedMp4Extractor識別後續樣本未用作參考的 H264 樣本。 - 新增選項,可在
AmrExtractor中啟用以索引為基礎的跳轉功能。 - 將有效影格之間超過 128kB 的 MP3 檔案視為截斷 (而非無效)。這表示如果檔案結尾有非 MP3 資料,且沒有其他中繼資料指出 MP3 位元組的長度,現在會在 MP3 資料結尾停止播放,而不會失敗並顯示
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563)。 - 修正處理 MP4 檔案中的編輯清單時,非主要畫面格媒體起始位置的片頭廣告範例處理方式 (#1659)。
- 使用
Mp4Extractor和FragmentedMp4Extractor中mdhd方塊的媒體時間長度,改善影格率計算方式 (#1531)。 - 修正 MP4 編輯清單中
media_time縮放比例不正確的問題。雖然segment_duration已使用影片時間尺度正確縮放,但media_time現在會按照 MP4 格式標準指定,使用音軌時間尺度正確縮放 (#1792)。 - 處理 MP4
endIndices計算中順序不正確的影格,並提供編輯清單 (#1797)。 - 修正 MP4 檔案
mdhd方塊中的媒體時間長度剖析,以處理-1值 (#1819)。 - 新增支援,可識別 MP4 檔案中 H.263 影片的
h263方塊 (#1821)。 - 新增 AC-4 Level-4 ISO 基本媒體檔案格式支援 (#1265)。
- 允許
- DataSource:
- 更新
HttpEngineDataSource,允許從 S 擴充功能第 7 版開始使用,而非 API 級別 34 (#1262)。 DataSourceContractTest:斷言DataSource.getUri()傳回解析後的 URI (如說明文件所述)。如果這與要求的 URI 不同,測試可以使用新的DataSourceContractTest.TestResource.Builder.setResolvedUri()方法指出這一點。DataSourceContractTest:在呼叫open()失敗 (因找不到資源) 後,以及後續呼叫close()之前,判斷DataSource.getUri()和getResponseHeaders()是否傳回「open」值。- 覆寫
DataSourceContractTest.getNotFoundResources()可讓測試子類別提供多個「找不到」資源,以及任何預期的標頭。這可區分 HTTP 404 (含標頭) 和「找不到伺服器」(不含標頭)。
- 覆寫
- 更新
- 音訊:
- 如果媒體中存在 CTA-2075 響度中繼資料,則自動在轉碼器上設定該中繼資料。
- 確保跳轉時音量平順降低。
- 修正跳轉時可能出現的爆音。
- 修正 Sonic 時間延展/音高移位演算法的截斷錯誤累積問題。
- 修正
SpeedChangingAudioProcessor中導致輸出影格遭到捨棄的錯誤。
- 影片:
MediaCodecVideoRenderer會避免解碼未算繪或未做為其他樣本參考的樣本。- 在 API 35 以上版本中,
MediaCodecAdapter現在可能會在configure中收到nullSurface,並呼叫新方法detachOutputSurface,在轉碼器支援時移除先前設定的Surface(MediaCodecInfo.detachedSurfaceSupported)。 - 處理
onOutputFormatChanged時,使用MediaCodecAdapter提供的像素顯示比例值 (如有) (#1371)。 - 新增 Galaxy Tab S7 FE 裝置問題的解決方法,該問題會導致 60fps 安全 H264 串流標示為不支援 (#1619)。
- 針對在最後一個樣本後卡住,且未傳回串流結束信號的轉碼器,新增解決方法。
- 文字:
- 新增自訂
VoiceSpan並填入 WebVTT 語音範圍 (#1632)。 - 確保 HLS 中的 WebVTT 顯示字幕時間戳記非常大 (以微秒表示並乘以
90,000MPEG 時基時,會溢位 64 位元long) (#1763)。 - 支援 Dolby Vision 內容中的 CEA-608 字幕 (#1820)。
- 修正啟用 CEA-608 字幕時,DASH 多時段串流播放停滯的問題 (#1863)。
- 新增自訂
- 中繼資料:
- 將
C.TRACK_TYPE_METADATA類型指派給含有 icy 或 vnd.dvb.ait 內容的軌道。
- 將
- 圖片:
- 新增
ExternallyLoadedImageDecoder,簡化與 Glide 或 Coil 等外部圖片載入程式庫的整合。
- 新增
- DataSource:
- 新增
FileDescriptorDataSource,這是一種新的DataSource,可用於讀取FileDescriptor(#3757)。
- 新增
- 效果:
- 新增
DefaultVideoFrameProcessor解決方法,用於微幅調整SurfaceTexture比例。SurfaceTexture可能會包含小幅縮放,切除裁剪緩衝區邊緣周圍的 1 紋素邊框。現在,系統會處理這類情況,讓輸出內容更符合預期。 - 加速
DefaultVideoFrameProcessor.queueInputBitmap()。因此,使用Transformer將圖片匯出為影片的速度會更快。
- 新增
- IMA 擴充功能:
- 修正清除播放清單可能會導致
ImaServerSideAdInsertionMediaSource中出現ArrayIndexOutOfBoundsException的錯誤。 - 修正以下錯誤:伺服器端插入的 DAI 串流若沒有片頭廣告,在播放最後一個片中廣告後,可能會導致
ArrayIndexOutOfBoundsException(#1741)。
- 修正清除播放清單可能會導致
- 工作階段:
- 新增
MediaButtonReceiver.shouldStartForegroundService(Intent),允許應用程式覆寫這個方法,抑制傳入的播放指令,以便繼續播放。根據預設,服務一律會啟動,且系統會以ForegroundServiceDidNotStartInTimeException造成服務停止運作,因此無法抑制播放 (#1528)。 - 修正錯誤:連線至舊版服務時,從
MediaBrowser傳送的自訂指令會分派至MediaSessionCompat.Callback,而非方法的MediaBrowserServiceCompat變體。這會導致MediaBrowser無法接收舊版服務傳回的實際傳回值 (#1474)。 - 為媒體按鈕意圖設定廣播接收器時,處理特定製造商裝置擲回的
IllegalArgumentException(#1730)。 - 為媒體項目新增指令按鈕。這會新增 Media3 API,用於舊版程式庫中稱為
Custom browse actions的項目,並使用MediaBrowserCompat。請注意,在 Media3 中,MediaBrowser和MediaController都支援媒體項目的指令按鈕。請參閱「實作自訂瀏覽動作」。* 修正錯誤:Media3 控制器有時無法在要求play()後,讓工作階段應用程式啟動前景服務。 - 限制
CommandButton.Builder.setIconUri僅接受內容 URI。 - 連線至舊版
MediaBrowserCompat時,將 Media3 瀏覽器的連線提示傳遞至初始MediaBrowserCompat。服務首次呼叫onGetRoot()時,可以接收以根提示形式傳入的連線提示。 - 修正以下錯誤:
MediaBrowser連線至舊版瀏覽器服務時,在瀏覽器訂閱parentid後,未收到服務傳送的錯誤。 - 改善互通性行為,讓連線至舊版
MediaBrowserService的 Media3 瀏覽器在訂閱父項時,不會要求parentId的子項兩次。
- 新增
- UI:
- 由於 XML 型共用轉場效果發生問題,因此在
PlayerView-in-Compose-AndroidView解決方法中,將延展/裁剪影片設為選擇加入。在AndroidView內使用PlayerView的應用程式需要呼叫PlayerView.setEnableComposeSurfaceSyncWorkaround才能選擇加入 (#1237、#1594)。 - 將
setFullscreenButtonState新增至PlayerView,允許視需要更新全螢幕按鈕的圖示,也就是頻外更新,而非回應點擊互動 (#1590、#184)。 - 修正以下錯誤:如果存在應用程式定義的文字音軌選取偏好設定,文字選取中的「None」選項無法運作。
- 由於 XML 型共用轉場效果發生問題,因此在
- DASH 擴充功能:
- 新增支援從區段中間開始的時段 (#1440)。
- Smooth Streaming 擴充功能:
- 修正播放含有文字軌的 SmoothStreaming 串流時,會發生
Bad magic number for Bundle錯誤的問題 (#1779)。
- 修正播放含有文字軌的 SmoothStreaming 串流時,會發生
- RTSP 擴充功能:
- 解碼器擴充功能 (FFmpeg、VP9、AV1 等):
- 新增 IAMF 解碼器模組,支援使用 libiamf 原生程式庫合成音訊,播放含有 IAMF 音軌的 MP4 檔案。
- 播放功能支援立體聲版面配置,以及 5.1 聲道和空間化功能,並可選擇啟用頭部追蹤功能,但目前不支援雙耳播放。
- 在 Android 15 上,為解碼器擴充功能新增 16 KB 分頁支援 (#1685)。
- 新增 IAMF 解碼器模組,支援使用 libiamf 原生程式庫合成音訊,播放含有 IAMF 音軌的 MP4 檔案。
- Cast 擴充功能:
- CastSession 中斷連線後,停止清除時間軸,讓傳送端應用程式在中斷連線後,在本機恢復播放。
- 提供
Context時,填入 CastPlayer 的DeviceInfo。這樣就能將MediaSession連結至RoutingSession,這是整合輸出切換器的必要步驟 (#1056)。
- 測試公用程式:
DataSourceContractTest現在包含測試,可驗證:- 輸入串流
read position已更新。 - 已正確套用輸出緩衝區
offset。
- 輸入串流
- 試用版應用程式
- 解決試用版短篇應用程式中的記憶體流失問題 (#1839)。
- 移除已淘汰的符號:
- 移除已淘汰的
Player.hasPrevious、Player.hasPreviousWindow()。請改用Player.hasPreviousMediaItem()。 - 移除已淘汰的
Player.previous()方法。改用Player.seekToPreviousMediaItem()。 - 移除已淘汰的
DrmSessionEventListener.onDrmSessionAcquired方法。 - 移除已淘汰的
DefaultEncoderFactory建構函式。改用DefaultEncoderFactory.Builder。
- 移除已淘汰的
1.5.0-rc02 版
2024 年 11 月 19 日
請使用 1.5.0 穩定版。
1.5.0-rc01 版
2024 年 11 月 13 日
請使用 1.5.0 穩定版。
1.5.0-beta01 版
2024 年 10 月 30 日
請使用 1.5.0 穩定版。
1.5.0-alpha01 版本
2024 年 9 月 10 日
請使用 1.5.0 穩定版。
1.4.0 版本
1.4.1 版本
2024 年 8 月 27 日
發布 androidx.media3:media3-*:1.4.1。1.4.1 版包含這些修訂項目。
- ExoPlayer:
- 擷取工具:
- MP3:根據
Info影格中的長度欄位,正確忽略結尾的非 MP3 資料,藉此修正Searched too many bytes錯誤 (#1480)。
- MP3:根據
- 文字:
- TTML:修正百分比
tts:fontSize值的處理方式,確保這些值能正確沿用自具有百分比tts:fontSize值的父項節點。 - 修正
LegacySubtitleUtil中的IndexOutOfBoundsException,因為系統不正確處理要求輸出開始時間大於或等於Subtitle中最終事件時間的情況 (#1516)。
- TTML:修正百分比
- DRM:
- 修正 API 31 以上版本裝置播放 L1 Widevine 內容時發生的
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE錯誤。這項錯誤是由於架構MediaDrm.requiresSecureDecoder方法 (#1603) 實作不完整所致。
- 修正 API 31 以上版本裝置播放 L1 Widevine 內容時發生的
- 效果:
- 在
GlObjectsProvider中新增release()方法。
- 在
- 工作階段:
- RTSP 擴充功能:
- 在 SDP 剖析中略過無效的媒體說明 (#1087)。
1.4.0 版本
2024 年 7 月 25 日
發布 androidx.media3:media3-*:1.4.0。1.4.0 版包含這些修訂項目。
- 通用程式庫:
- 將推測為無作業的跳轉呼叫轉送至受保護的
BasePlayer.seekTo()和SimpleBasePlayer.handleSeek()方法,而不是忽略這些呼叫。如果您在自訂播放器中實作這些方法,可能需要使用mediaItemIndex == C.INDEX_UNSET處理這些額外呼叫。 - 移除對強化 Java 8 脫糖的編譯依附元件 (#1312)。
- 請確認系統會忽略傳遞至
MediaItem.Builder.setImageDurationMs()的時間長度,因為MediaItem不是圖片 (如說明文件所述)。 - 新增
Format.customData,儲存應用程式提供的Format執行個體自訂資訊。
- 將推測為無作業的跳轉呼叫轉送至受保護的
- ExoPlayer:
- 新增
BasePreloadManager,根據rankingData定義的優先順序,協調多個來源的預先載入作業。您可以擴充這個類別,自訂相關設定。新增DefaultPreloadManager,使用PreloadMediaSource將來源的媒體樣本預先載入記憶體,並使用整數rankingData表示 UI 上的項目索引。 - 在
LoadControl的大部分方法中加入PlayerId,讓LoadControl實作支援多個播放器。 - 移除
Buffer.isDecodeOnly()和C.BUFFER_FLAG_DECODE_ONLY。轉譯器和解碼器會根據時間戳記決定是否略過緩衝區,因此不需要設定這個標記。自訂Renderer實作項目應檢查緩衝時間是否至少為BaseRenderer.getLastResetPositionUs(),以決定是否要顯示樣本。自訂SimpleDecoder實作項目可視需要檢查isAtLeastOutputStartTimeUs(),或使用DecoderOutputBuffer.shouldBeSkipped標記其他緩衝區,以便略過這些緩衝區。 - 允許
TargetPreloadStatusControl.getTargetPreloadStatus(T)傳回空值,表示不使用指定的rankingData預先載入MediaSource。 - 將
remove(MediaSource)新增到BasePreloadManager中。 - 將
reset()新增至BasePreloadManager,釋出所有保留來源,同時保留預先載入管理工具執行個體。 - 新增
ExoPlayer.setPriority()(和Builder.setPriority()),定義PriorityTaskManager中使用的優先順序值,以及 API 35 的 MediaCodec 重要性。 - 修正更新上次重新緩衝時間的問題,該問題會導致 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中的 IntDef。 - 新增動態排程的實驗性支援,以便根據 CPU 喚醒週期調整工作,並延遲喚醒,直到轉譯器可以繼續進行。設定 ExoPlayer 例項時,可以使用
experimentalSetDynamicSchedulingEnabled()啟用這項功能。 - 新增
Renderer.getDurationToProgressUs()。Renderer可以實作這個方法,將播放必須推進的時間長度傳回 ExoPlayer,以便轉譯器繼續播放。如果ExoPlayer是使用experimentalSetDynamicSchedulingEnabled()設定,則ExoPlayer會在計算排定工作任務的時間時呼叫這個方法。 - 新增
MediaCodecAdapter#OnBufferAvailableListener,在輸入和輸出緩衝區可供MediaCodecRenderer使用時發出快訊。MediaCodecRenderer會在收到這些回呼時向ExoPlayer發出信號,如果ExoPlayer是使用experimentalSetDynamicSchedulingEnabled()設定,則ExoPlayer會排定其工作迴圈,因為轉譯器可以進行。 - 針對
LoadControl方法使用資料類別,而非個別參數。 - 新增
ExoPlayer.isReleased(),檢查是否已呼叫Exoplayer.release()。 - 新增
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs(),設定seekToPrevious()跳轉至前一個項目的最大位置 (#1425)。 - 修正部分音訊焦點不一致的問題,例如播放器暫停時,未回報完全或暫時失去焦點 (#1436)。
- 修正擷取器在初始準備步驟後回報額外曲目,可能導致
IndexOutOfBoundsException的問題 (#1476)。 ExoPlayer.setVideoEffect()中的Effects會收到已移除轉譯器偏移的時間戳記 (#1098)。- 修正處理播放器錯誤時可能發生的
IllegalArgumentException,該錯誤發生在預先讀取其他播放清單項目時 (#1483)。
- 新增
- 轉換程式:
- 將
audioConversionProcess和videoConversionProcess新增至ExportResult,指出輸出檔案中各個音軌的製作方式。 - 放寬剪輯最佳化 H.264 級別檢查。
- 新增支援功能,可在序列中切換 SDR 和 HDR 輸入媒體。
- 新增對組合層級音訊效果的支援。
- 新增將 Ultra HDR 圖片轉碼為 HDR 影片的支援功能。
- 修正
DefaultAudioMixer在重設及重複使用後,無法輸出正確位元組數量的問題。 - 解決解碼器錯誤,即處理 PCM 輸入時,音訊聲道數量上限為立體聲。
- 在
ExoPlayerAssetLoader中選取音軌時,請忽略音訊聲道數量限制,因為這項限制僅適用於播放。 - 將
androidx.media3.transformer.Muxer介面替換為androidx.media3.muxer.Muxer,並移除androidx.media3.transformer.Muxer。 - 修正從內容 URI 配置載入 HEIC 圖片的問題。 (#1373)。
- 在
AudioGraphInput中調整音軌長度,改善影音同步效果。 - 移除「
ExportResult.processedInputs」欄位。如要使用這個欄位提供轉碼器詳細資料,請改用DefaultDecoderFactory.listener。如果發生轉碼器例外狀況,ExportException.codecInfo會提供轉碼器詳細資料。
- 將
- 擷取工具:
- MPEG-TS:向前復原變更,確保將串流的最後一個存取單元傳遞至樣本佇列,藉此算繪最後一個影格 (#7909)。納入修正,解決僅限 I 影格 HLS 串流(#1150) 和 H.262 HLS 串流 (#1126) 中出現的問題。
- MP3:建議使用
Info影格的資料大小,而非基礎串流回報的大小 (例如檔案大小或 HTTPContent-Length標頭)。這有助於從固定位元率跳轉計算中排除無法播放的預告片資料 (例如專輯封面),讓跳轉更準確 (#1376)。 - MP3:使用
Info影格 (如有) 中的影格數量和其他資料,計算固定位元率搜尋的平均位元率,而非從Info影格後的影格位元率推斷,因為該位元率可能人為偏小,例如PCUT影格 (#1376)。 - 修正 AVI 容器中的 PCM 音訊格式擷取功能。
- 音訊:
- 修正直通播放的 DTS:X Profile 2 編碼屬性 (#1299)。
- 如果是卸載播放,請在呼叫
AudioTrack.stop()之前,重設DefaultAudioSink中的串流完成追蹤欄位,讓AudioTrack.StreamEventCallback#onPresentationEnded正確識別所有待處理資料何時播放完畢。 - 修正
SilenceSkippingAudioProcessor中的錯誤:在不同音訊格式之間轉換 (例如立體聲轉換為單聲道) 可能會導致處理器擲回例外狀況 (#1352)。 - 實作
MediaCodecAudioRenderer.getDurationToProgressUs(),讓 ExoPlayer 動態排定主要工作迴圈,以便 MediaCodecAudioRenderer 順利執行。
- 影片:
- 修正播放期間切換介面時,
Listener.onRenderedFirstFrame()提早抵達的問題。 - 修正 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 簡單處理「set pen location」指令時,加入重複的新行 (#1315)。
- 修正 WebVTT 字幕樣本不含任何提示時 (例如在 DASH 串流中),
LegacySubtitleUtil會發生IllegalArgumentException的問題 (#1516)。
- 中繼資料:
- 圖片:
- 新增非正方形 DASH 縮圖格線的支援 (#1300)。
- 新增對 AVIF 的支援 (API 34 以上版本)。
- 允許
null做為ExoPlayer.setImageOutput()的參數,以清除先前設定的ImageOutput。
- DataSource:
- 導入
android.resource://package/id原始資源 URI 的支援,其中package與目前應用程式的套件不同。先前並未記錄這項功能,但與依名稱存取相比,這種方式能更有效率地存取其他套件中的資源。 - 在
DataSpec建構函式中,積極檢查url是否為非空值。這個參數已加上非空值註解。 - 允許
ByteArrayDataSource在open()期間將 URI 解析為位元組陣列,而不是在建構時硬式編碼 (#1405)。
- 導入
- DRM:
- 允許在
DefaultDrmSessionManagerProvider上設定LoadErrorHandlingPolicy(#1271)。
- 允許在
- 效果:
- 支援在
SpeedChangeEffect的同一個EditedMediaItem或Composition中多次變更速度。 - 支援從 Ultra HDR 點陣圖輸入輸出 HLG 和 PQ。
- 新增 EGL_GL_COLORSPACE_BT2020_HLG_EXT 支援,改善 ExoPlayer.setVideoEffect 和 Transformer 偵錯 SurfaceView 中的 HLG 介面輸出。
- 更新疊加層矩陣實作,翻轉
setOverlayFrameAnchor()中套用的 x 和 y 值,使其與說明文件一致。如果使用OverlaySettings.Builder.setOverlayFrameAnchor(),請將 x 和 y 值乘以-1,翻轉這些值。 - 修正
TimestampWrapper與ExoPlayer#setVideoEffects搭配使用時會異常終止的錯誤 (#821)。 - 將預設 SDR 色彩工作空間從線性色彩變更為電子 BT 709 SDR 影片。此外,也提供第三個選項,可保留原始色彩空間。
- 允許定義 EditedMediaItemSequences 的不確定 Z 軸順序 (#1055)。
- 在不同的 HDR 內容中維持一致的亮度範圍 (使用 HLG 範圍)。
- 新增在 HDR 內容上疊加 Ultra HDR (點陣圖) 的支援。
- 允許在 API 26 之前使用
SeparableConvolution效果。 - 移除未使用的
OverlaySettings.useHdr,因為疊加層和影格的動態範圍必須相符。 - 新增
TextOverlay的 HDR 支援。文字疊加層的亮度可透過OverlaySettings.Builder.setHdrLuminanceMultiplier()調整。
- 支援在
- IMA 擴充功能:
- 將應用程式播放 DAI 廣告串流所需的 API 升級為穩定版。
- 將
replaceAdTagParameters(Map <String, String>)新增至ImaServerSideAdInsertionMediaSource.AdLoader,以便在執行階段取代廣告代碼參數。 - 修正廣告播放期間發生播放器錯誤時,系統未呼叫
VideoAdPlayer.VideoAdPlayerCallback.onError()的錯誤 (#1334)。 - 將 IMA SDK 版本升級至 3.33.0,修正使用
data://廣告代碼 URI 時的NullPointerException問題 (#700)。
- 工作階段:
- 將
CommandButton.enabled的預設值變更為true,並確保即使相關指令可用,控制器的值仍可保持 false。 - 為
CommandButton新增圖示常數,應使用這些常數,而非自訂圖示資源。 - 新增
MediaSessionService.isPlaybackOngoing(),讓應用程式查詢是否需要在onTaskRemoved()中停止服務 (#1219)。 - 新增
MediaSessionService.pauseAllPlayersAndStopSelf(),方便暫停所有工作階段的播放,並呼叫stopSelf()終止MediaSessionService的生命週期。 - 覆寫
MediaSessionService.onTaskRemoved(Intent),提供安全的預設實作,在播放期間讓服務在前景執行,否則停止服務。 - 不將時間長度設定到平台工作階段中繼資料,隱藏直播媒體通知中的跳轉列 (#1256)。
- 調整
MediaMetadata的轉換,使其與MediaDescriptionCompat一致,以便在選取中繼資料屬性時,使用與 media1 相同的偏好順序和邏輯。 - 新增
MediaSession.sendError(),可將非致命錯誤傳送至 Media3 控制器。使用通知控制器 (請參閱MediaSession.getMediaNotificationControllerInfo()) 時,自訂錯誤會用於將平台工作階段的PlaybackState更新為錯誤狀態,並提供指定的錯誤資訊 (#543)。 - 新增
MediaSession.Callback.onPlayerInteractionFinished(),在特定控制器的玩家互動系列結束時通知工作階段。 - 新增
SessionError,並在SessionResult和LibraryResult中使用,而不是錯誤代碼,以提供更多關於錯誤的資訊,以及如何解決錯誤 (如果可能的話)。 - 發布 media3 控制器測試應用程式的程式碼,可用於測試與發布媒體工作階段的應用程式互動。
- 將傳遞至 media3
MediaSession[Builder].setSessionExtras()的額外項目傳播至 media1 控制器的PlaybackStateCompat.getExtras()。 - 將嚴重和非嚴重錯誤對應至平台工作階段,以及從平台工作階段對應。
PlaybackException會對應至PlaybackStateCompat的致命錯誤狀態。傳送至媒體通知控制器的SessionError(包含MediaSession.sendError(ControllerInfo, SessionError)) 會對應至PlaybackStateCompat中的非重大錯誤,這表示錯誤代碼和訊息已設定,但平台工作階段的狀態仍與STATE_ERROR不同。 - 允許為每個控制器設定工作階段活動,覆寫全域工作階段活動。您可以使用
AcceptedResultBuilder.setSessionActivivty(PendingIntent)建立ConnectionResult,在連線時為控制器定義工作階段活動。連線後,即可使用MediaSession.setSessionActivity(ControllerInfo, PendingIntent)更新工作階段活動。 - 改善對
MediaLibrarySession.Callback呼叫的錯誤複製。現在可以使用MediaLibrarySession.Builder.setLibraryErrorReplicationMode()設定錯誤複製功能,選擇錯誤類型或停用預設啟用的錯誤複製功能。
- 將
- UI:
- 下載內容:
- 確認
DownloadHelper不會洩漏未發布的Renderer執行個體,否則最終可能會導致應用程式因IllegalStateException: Too many receivers, total of 1000, registered for pid異常終止 (#1224)。
- 確認
- Cronet 擴充功能:
- 修正
CronetDataSource中的SocketTimeoutException。在某些 Cronet 版本中,回呼提供的要求不一定相同。這會導致回呼無法完成,且要求逾時 (https://issuetracker.google.com/328442628)。
- 修正
- HLS 擴充功能:
- 修正以下錯誤:等待不連續的待處理 EMSG 樣本在
HlsSampleStreamWrapper中委派時,偏移值不正確,導致IndexOutOfBoundsException或IllegalArgumentException(#1002)。 - 修正 LL-HLS 串流會持續重新載入非主要播放清單的錯誤 (#1240)。
- 修正錯誤:為 HLS 啟用 CMCD 並使用初始化片段時,會導致
Source Error和IllegalArgumentException。 - 修正直播播放期間,非主要播放清單不會重新整理的錯誤 (#1240)。
- 修正錯誤:為 HTTP 即時串流直播啟用 CMCD 會導致
ArrayIndexOutOfBoundsException(#1395)。
- 修正以下錯誤:等待不連續的待處理 EMSG 樣本在
- DASH 擴充功能:
- Cast 擴充功能:
- 修正將
MediaQueueItem的專輯名稱轉換為 Media3 媒體項目中演出者的錯誤 (#1255)。
- 修正將
- 測試公用程式:
- 在
FakeRenderer中實作onInit()和onRelease()。 - 變更
TestPlayerRunHelper.runUntil()/playUntil()方法,在發生非致命錯誤 (例如回報給AnalyticsListener.onVideoCodecError()的錯誤) 時失敗。使用新的TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()方法鏈結停用這項行為。
- 在
- 試用版應用程式:
- 在短篇示範應用程式中使用
DefaultPreloadManager。 - 允許透過指令列使用
Intent引數設定重複播放模式 (#1266)。 - 如果裝置支援,請使用
HttpEngineDataSource做為HttpDataSource。
- 在短篇示範應用程式中使用
- 移除已淘汰的符號:
- 移除
CronetDataSourceFactory。改用CronetDataSource.Factory。 - 移除部分
DataSpec建構函式。改用DataSpec.Builder。 - 從
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.FormatSupportIntDef 和FORMAT_HANDLED、FORMAT_EXCEEDS_CAPABILITIES、FORMAT_UNSUPPORTED_DRM、FORMAT_UNSUPPORTED_SUBTYPE、FORMAT_UNSUPPORTED_TYPE常數。請改用androidx.media3.common.C中對等的 IntDef 和常數 (例如C.FORMAT_HANDLED)。 - 移除
Bundleable介面。包括移除所有Bundleable.Creator<Foo> CREATOR常數欄位。呼叫端應改用各類型的Bundle toBundle()和static Foo fromBundle(Bundle)方法。
- 移除
1.4.0-rc01 版本
2024 年 7 月 10 日
請使用 1.4.0 穩定版。
1.4.0-beta01 版本
2024 年 6 月 26 日
請使用 1.4.0 穩定版。
1.4.0-alpha02 版
2024 年 6 月 7 日
請使用 1.4.0 穩定版。
1.4.0-alpha01 版
2024 年 4 月 17 日
請使用 1.4.0 穩定版。
1.3.0 版本
1.3.1 版本
2024 年 4 月 11 日
發布 androidx.media3:media3-*:1.3.1。1.3.1 版包含這些修訂項目。
- 通用程式庫:
- 新增
Format.labels,允許本地化或其他替代標籤。
- 新增
- ExoPlayer:
- 轉換程式:
- 針對 API 30 之前
MediaMuxer不支援負值顯示時間戳記而擲回的例外狀況,新增解決方法。
- 針對 API 30 之前
- 音軌選取:
DefaultTrackSelector:優先選擇影格率「合理」(>=10 fps) 的影片軌,而非影格率較低或未設定的影片軌。這可確保播放器從動態相片擷取的 MP4 中選取「實際」影片軌,其中可能包含兩個 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 剖析中略過空白工作階段資訊值 (i 標記) (#1087)。
- 解碼器擴充功能 (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 類型正規化,一律使用小寫。
- 在
AdPlaybackState中,使用完整的MediaItem定義廣告,而非單一Uri。 - 將
minSdk提高至 19 (Android KitKat)。這與所有其他 AndroidX 程式庫一致,且我們必須升級至最新版本的 AndroidX 依附元件。 - 當
artworkUri和artworkData至少有一個非空值時,在MediaMetadata.Builder.populate(MediaMetadata)中填入這兩個值 (#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,表示優先選取影片軌。
- 新增
- 擷取工具:
- 在 MP4 擷取器中新增 AV1C 剖析功能,以擷取
ColorInfo.colorSpace、ColorInfo.colorTransfer和ColorInfo.colorRange值 (#692)。 - MP3:針對含有
Info標頭 (Xing標頭的 CBR 對等項目) 的檔案,使用固定位元率 (CBR) 搜尋。先前我們使用Info標頭中的跳轉表格,但如果忽略該表格並假設檔案為 CBR,跳轉精確度會降低。 - MPEG2-TS:新增 DTS、DTS-LBR 和 DTS:X Profile2 支援 (#275)。
- 從 TS 描述元擷取音訊類型,並對應至角色旗標,讓使用者能更準確地選取音軌 (#973)。
- 在 MP4 擷取器中新增 AV1C 剖析功能,以擷取
- 音訊:
- 影片:
- 將採用
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支援,因此實際上假設一律為 false)。
- 修正點陣圖提示的序列化問題,解決使用
- 圖片:
- 新增 DASH 縮圖支援。系統會裁剪格狀圖片,並在接近顯示時間時,向
ImageOutput提供個別縮圖。
- 新增 DASH 縮圖支援。系統會裁剪格狀圖片,並在接近顯示時間時,向
- DRM:
- 根據預設,即使後續加密樣本的金鑰尚未準備就緒,也會立即播放 DRM 內容中的「clear lead」未加密樣本。如果播放位置到達加密樣本時,金鑰仍未準備就緒,可能會導致播放中途停滯 (但先前播放作業根本不會在此時開始)。您可以使用
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey或DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys停用這項行為。- IMA 擴充功能:
- 修正問題:DASH 和 HLS 廣告若沒有適當的副檔名,就無法播放。
- 根據預設,即使後續加密樣本的金鑰尚未準備就緒,也會立即播放 DRM 內容中的「clear lead」未加密樣本。如果播放位置到達加密樣本時,金鑰仍未準備就緒,可能會導致播放中途停滯 (但先前播放作業根本不會在此時開始)。您可以使用
- 工作階段:
- 停用 TV 應用程式的按兩下偵測功能 (#962)。
- 修正問題:只有非空值額外項目的
MediaItem.RequestMetadata不會在媒體控制器和工作階段之間傳輸。 - 在
MediaLibrarySession.Builder中新增建構函式,只接受Context,不接受MediaLibraryService。
- 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)。
- 中繼資料:
- 修正錯誤:
MediaMetadata只能從含有大寫鍵的 Vorbis 註解填入 (#876)。 - 剖析超大型 ID3 影格時,系統會擷取
OutOfMemoryError,這表示播放作業可以繼續進行,但不會顯示標記資訊,而不是完全無法播放。
- 修正錯誤:
- DRM:
- 將虛假 ClearKey
https://default.url授權網址的解決方法擴充至 API 33 以上版本 (先前該解決方法僅適用於 API 33) (#837)。 - 修正從加密內容切換至明文內容時,如果沒有任何介面附加至播放器,會發生
ERROR_DRM_SESSION_NOT_OPENED的問題。這項錯誤是由於不正確地使用安全解碼器播放明文內容所致。
- 將虛假 ClearKey
- 工作階段:
- UI:
- DASH 擴充功能:
- 在 DASH 資訊清單中,將「f800」剖析為 Dolby 的聲道數量 5 (#688)。
- 解碼器擴充功能 (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)。 - 新增功能,可使用查詢參數傳輸通用媒體用戶端資料 (CMCD) 資料 (#553)。
- 修正
ExperimentalBandwidthMeter中的ConcurrentModificationException(#612)。 - 將
MediaPeriodId參數新增至CompositeMediaSource.getMediaTimeForChildMediaTime。 - 在
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)。 - 移除
Extractor執行個體可直接透過instanceof檢查的假設。如要在執行階段存取Extractor的實作詳細資料,您必須先呼叫Extractor.getUnderlyingInstance。 - 新增
BmpExtractor。 - 新增
WebpExtractor。 - 新增
HeifExtractor。 - 在
Mp4Extractor中新增 QuickTime 傳統支援。
- 音訊:
- 在 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 之前,由於曲目轉換後會發生播放位置問題,因此停用卸載的無縫支援。
- 從
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。現在,TextRenderer會直接處理含有sampleMimeType = application/x-media3-cues的文字軌,不需要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 UI 中的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) 和物件類型 (ot) (#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建立VolumeProviderCompat的方式,方法是透過舊版指令 (COMMAND_ADJUST_DEVICE_VOLUME和COMMAND_SET_DEVICE_VOLUME) 和新指令 (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS和COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) 判斷volumeControlType(#554)。
- 在控制器的狀態中新增自訂版面配置,並提供 getter 進行存取。自訂版面配置變更時,系統會呼叫
1.1.0 版本
2023 年 7 月 5 日
- 通用程式庫:
- 新增不適合音訊路徑的抑制原因,並在準備就緒時播放 變更抑制時間過長的原因。 (#15)。
- 在 Player 中新增指令:
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- 在 Player 中新增多載方法,讓使用者指定音量標記:
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)。 - 在影片播放期間使用
Effect,可獲得ExoPlayer.setVideoEffects()。 - 更新
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)。 - 在直接播放 (卸載) 中,將 Opus 影格封裝在 Ogg 封包中。
- 在睡眠期間使用卸載排程推斷目前位置。
- 新增
Renderer.release()和AudioSink.release(),以便在播放器生命週期結束時釋出資源。 - 監聽
DefaultAudioSink中的音訊功能異動。在DefaultAudioSink的建構函式中新增必要參數context,DefaultAudioSink會使用該參數註冊為AudioCapabilitiesReceiver的事件監聽器,並在收到功能變更通知時更新其audioCapabilities屬性。 - 透過
AudioSink.Listener介面中的新事件onAudioCapabilitiesChanged傳播音訊功能變更,以及觸發onRendererCapabilitiesChanged事件的新介面RendererCapabilities.Listener。 - 新增
ChannelMixingAudioProcessor,用於對音訊頻道套用縮放/混音。 - 在
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE中新增 int 值DecoderDiscardReasons,以便在音訊功能變更後,可使用略過模式時捨棄音訊解碼器。 - 新增 DTS Express 和 DTS:X 的直接播放支援 (#335)。
- 修正以下錯誤:啟用通道功能且
- 影片:
- 停用轉譯器時,讓
MediaCodecVideoRenderer回報寬度和高度為 0 的VideoSize。Player.getVideoSize()變更時,系統會相應呼叫Player.Listener.onVideoSizeChanged。這項異動後,如果Player.getCurrentTracks不支援影片,或支援的影片軌大小尚未確定,ExoPlayer 搭配MediaCodecVideoRenderer的影片大小寬度和高度會是 0。
- 停用轉譯器時,讓
- DRM:
- 降低
DefaultDrmSession上多個僅限內部使用方法的瀏覽權限,這些方法不應從 DRM 套件外部呼叫:void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- 降低
- Muxer:
- 新增多工器程式庫,可用於建立 MP4 容器檔案。
- IMA 擴充功能:
- 為 DAI 啟用多週期直播 DASH 串流。請注意,目前的實作方式尚不支援在直播中跳轉 (#10912)。
- 修正錯誤:由於連續時間軸中計算出的內容位置略有不同,因此會在直播中插入新的廣告群組。
- 工作階段:
- 新增輔助方法
MediaSession.getControllerForCurrentRequest,取得目前呼叫Player方法的控制器相關資訊。 - 新增
androidx.media3.session.MediaButtonReceiver,讓應用程式能透過藍牙頭戴式耳機等裝置傳送的媒體按鈕事件,實作繼續播放功能 (#167)。 - 在
MediaSession.Callback.onAddMediaItems中新增預設實作,允許將要求的MediaItems傳遞至Player(如果具有LocalConfiguration,例如 URI) (#282)。 - 根據預設,在 Android 12 以下版本的精簡媒體通知檢視畫面上,新增「跳轉至上一首」和「跳轉至下一首」指令按鈕 (#410)。
- 在
MediaSession.Callback.onAddMediaItems中新增預設實作,允許將要求的MediaItems傳遞至Player(如果具有LocalConfiguration,例如 URI) (#282)。 - 根據預設,在 Android 12 以下版本的精簡媒體通知檢視畫面上,新增「跳轉至上一首」和「跳轉至下一首」指令按鈕 (#410)。
- 新增輔助方法
- UI:
- 新增 Util 方法
shouldShowPlayButton和handlePlayPauseButtonAction,編寫含有播放/暫停按鈕的自訂 UI 元素。
- 新增 Util 方法
- 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)。請改用Player.stop()和Player.clearMediaItems()(如果reset為true)。 - 移除兩個已淘汰的
SimpleCache建構函式,改用採用DatabaseProvider的非淘汰建構函式,以提升效能。 - 移除
DefaultBandwidthMeter建構函式,改用DefaultBandwidthMeter.Builder。 - 移除
DefaultDrmSessionManager建構函式,改用DefaultDrmSessionManager.Builder。 - 移除兩個已淘汰的
HttpDataSource.InvalidResponseCodeException建構函式,改用可接受額外欄位(cause、responseBody) 的非淘汰建構函式,強化錯誤記錄功能。 - 移除
DownloadHelper.forProgressive、DownloadHelper.forHls、DownloadHelper.forDash和DownloadHelper.forSmoothStreaming,改用DownloadHelper.forMediaItem。 - 移除已淘汰的
DownloadService建構函式,改用未淘汰的建構函式,其中包含提供channelDescriptionResourceId參數的選項。 - 移除 Charsets 的已淘汰字串常數 (
ASCII_NAME、UTF8_NAME、ISO88591_NAME、UTF16_NAME和UTF16LE_NAME),改用kotlin.text套件、java.nio.charset.StandardCharsets或com.google.common.base.Charsets的 Kotlin Charsets。 - 移除已淘汰的
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)。
- 工作階段:
- 修正以下問題:當
MediaController連線至更新動作的舊版MediaSessionCompat時,不會更新可用的指令。 - 修正以下錯誤:在 API 30 上,系統 UI 呼叫
Callback.onGetLibraryRoot時,MediaLibraryService無法針對params.isRecent == true呼叫傳回空值 (#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 Describe 回應訊息時擲回的 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。 - 在所有 Android 版本中,將 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 月 21 日
發布 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會監控空間音訊化屬性的變更情況,並在變更時觸發選取新的音軌。設有televisionUI 模式的裝置不受這些限制,系統會偏好使用最多頻道數量的格式。如要啟用這項功能,必須使用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 工作階段一律可以正常更新 (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,不過這些方法仍會視為已淘汰。 - 移除
DownloadHelperDEFAULT_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 模組取代)。如此一來,不需使用轉接器/連接器類別,就能直接整合播放器及媒體工作階段。