Media3

媒體用途的支援程式庫。
最近更新時間 穩定版 候選版 Beta 版 Alpha 版
2025 年 7 月 2 日 1.7.1 - 1.8.0-beta01 1.8.0-alpha01

宣告依附元件

如果要為 Media3 新增依附元件,您必須將 Google Maven 存放區新增至專案。詳情請參閱 Google 的 Maven 存放區

在應用程式或模組的 build.gradle 檔案中,新增您需要的構件依附元件:

Groovy

dependencies {
    def media3_version = "1.6.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 integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version"

    // For transforming media files
    implementation "androidx.media3:media3-transformer:$media3_version"

    // For applying effects on video frames
    implementation "androidx.media3:media3-effect:$media3_version"

    // For muxing media files
    implementation "androidx.media3:media3-muxer:$media3_version"

    // Utilities for testing media components (including ExoPlayer components)
    implementation "androidx.media3:media3-test-utils:$media3_version"
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation "androidx.media3:media3-test-utils-robolectric:$media3_version"

    // Common functionality for reading and writing media containers
    implementation "androidx.media3:media3-container:$media3_version"
    // Common functionality for media database components
    implementation "androidx.media3:media3-database:$media3_version"
    // Common functionality for media decoders
    implementation "androidx.media3:media3-decoder:$media3_version"
    // Common functionality for loading data
    implementation "androidx.media3:media3-datasource:$media3_version"
    // Common functionality used across multiple media libraries
    implementation "androidx.media3:media3-common:$media3_version"
    // Common Kotlin-specific functionality
    implementation "androidx.media3:media3-common-ktx:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.6.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 integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version")

    // For transforming media files
    implementation("androidx.media3:media3-transformer:$media3_version")

    // For applying effects on video frames
    implementation("androidx.media3:media3-effect:$media3_version")

    // For muxing media files
    implementation("androidx.media3:media3-muxer:$media3_version")

    // Utilities for testing media components (including ExoPlayer components)
    implementation("androidx.media3:media3-test-utils:$media3_version")
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation("androidx.media3:media3-test-utils-robolectric:$media3_version")

    // Common functionality for reading and writing media containers
    implementation("androidx.media3:media3-container:$media3_version")
    // Common functionality for media database components
    implementation("androidx.media3:media3-database:$media3_version")
    // Common functionality for media decoders
    implementation("androidx.media3:media3-decoder:$media3_version")
    // Common functionality for loading data
    implementation("androidx.media3:media3-datasource:$media3_version")
    // Common functionality used across multiple media libraries
    implementation("androidx.media3:media3-common:$media3_version")
    // Common Kotlin-specific functionality
    implementation("androidx.media3:media3-common-ktx:$media3_version")
}

如要進一步瞭解依附元件,請參閱「新增建構依附元件」一文。

意見回饋

您的意見可協助我們改善 Jetpack。您可以使用 Media3 Issue Tracker 尋找問題的答案、已知問題和功能要求,以及提出新問題。

1.8.0 版

1.8.0-beta01 版

2025 年 7 月 2 日

發布了 androidx.media3:media3-*:1.8.0-beta01。1.8.0-beta01 版包含這些修訂項目

  • 通用程式庫:
    • 新增在 ForwardingSimpleBasePlayer 中取代播放器的支援。
  • ExoPlayer:
    • 新增支援功能,可使用從 Context 傳遞至 ExoPlayer.Builder 的虛擬裝置 ID。
    • 在清除模式下,預設啟用動態排程。
    • 避免在搜尋項目結尾時,不必要地重新載入來源。
    • 在清除模式中,預設使用 MediaCodec.BUFFER_FLAG_DECODE_ONLY
    • PreloadMediaSourceExoPlayer 播放,且播放執行緒與預先載入執行緒不同時,擲回 IllegalStateException (#2495)。
    • cloneAndMove 新增至 ShuffleMode,並採用預設實作方式 (#2226)。
    • 如果不需要呼叫 render,請變更 Renderer.getMinDurationToProgressUs 的預設行為,傳回較大的值。
    • 修正錯誤:暫停時搜尋至結尾,內部排程會延遲最後一格畫面。目前,只有在啟用 ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled 時,錯誤修正才會生效。
  • 轉換程式:
    • 新增 CodecDbLite,可針對晶片組最佳化影片編碼設定。
    • DefaultEncoderFactory 中新增 setEnableCodecDbLite 標記,啟用 CodecDB Lite 設定最佳化功能。這項旗標預設為 false。
  • 擷取工具:
    • 新增支援:在具有多個 sidx 原子片段的 MP4 中搜尋。 您可以在 FragmentedMp4Extractor 上使用 FLAG_MERGE_FRAGMENTED_SIDX 旗標啟用這項行為 (#9373)。
    • 忽略 FLAC 檔案中的空白搜尋表 (包括只包含預留位置搜尋點的搜尋表),並在檔案長度已知時,改用二分搜尋法搜尋 (#2327)。
    • 修正 H.265 SEI 單元的剖析問題,完全略過無法辨識的 SEI 類型 (#2456)。
    • 更新 WavExtractor,在剖析 WAVE_FORMAT_EXTENSIBLE 類型檔案時,使用標頭擴充功能的 SubFormat 資料做為音訊格式。
    • MP4:新增對 ipcmfpcm 方塊的支援,定義原始 PCM 音訊軌 (不支援 64 位元浮點 PCM)。
    • MP4:處理tkhd轉換矩陣的旋轉部分,該矩陣會旋轉及反映影片。這樣可確保 iPhone 前置鏡頭拍攝的反射影片會正向顯示,但會沿著 Y 軸錯誤地反射 (#2012)。
  • 音訊:
    • ChannelMappingAudioProcessorTrimmingAudioProcessor 中新增對所有線性 PCM 樣本格式的支援。
    • CompositionPlayer 中新增音訊間隙支援。
    • BaseAudioProcessor#reset() 移除對 BaseAudioProcessor#flush() 的虛假呼叫。
  • 影片:
    • 改善啟動時的流暢影片影格發布,避免音訊樣本未在確切要求的位置啟動。
    • 將已卸除 Surface 的解決方法擴展至「realme」裝置 (#2059)。
  • 文字:
    • 修正字幕片段一開始載入失敗,但稍後載入成功,接著出現多個空白字幕片段時,播放會停滯的問題 (#2517)。
  • 中繼資料:
    • 新增支援擷取媒體時間長度和 TimelineMetadataRetriever,並將其遷移至以例項為基礎的 AutoCloseable API。使用新的 BuilderMediaItem 建立執行個體,然後呼叫 retrieveTrackGroups()retrieveTimeline()retrieveDurationUs(),取得中繼資料的 ListenableFuture。先前的靜態方法現已淘汰 (#2462)。
  • 圖片:
    • 將解碼點陣圖限制為 BitmapFactoryImageDecoder 中的螢幕大小,以免應用程式嘗試顯示非常大的圖片 (例如 5000 萬像素) 時,因 PlayerView 發生 Canvas: trying to draw too large bitmap. 而當機。
    • 變更 DefaultRenderersFactory.getImageDecoderFactory() 的簽章,以採用 Context 參數。
    • CompositionPlayer 中使用的點陣圖輸出大小上限,與 Transformer 中已使用的點陣圖輸出大小上限對齊 (也就是說,CompositionPlayer 不會像 ExoPlayer 一樣在解碼點陣圖時考量螢幕大小)。
  • Muxers:
    • 修正錯誤:在 MP4 碎片中,音訊樣本未設定正確的樣本標記。
  • 工作階段:
    • 修正錯誤:從主執行緒呼叫 setSessionExtras 時,如果從不同應用程式執行緒執行播放器,則主執行緒會導致 IllegalStateException (#2265)。
    • 如果玩家設定了媒體項目,但未準備或播放這些項目,請勿自動顯示通知 (#2423 https://github.com/androidx/media/issues/2423)。您可以透過 MediaSessionService.setShowNotificationForIdlePlayer 設定這項行為。
    • 為所有或選取的控制器新增自訂 PlaybackException
    • 修正錯誤:在 MediaController 上搜尋直播內容時,可能會導致 IllegalArgumentException
    • 如果是直播,請停止發布播放位置,並禁止平台媒體控制器在目前項目中搜尋,以免 Android Auto 使用者介面 (以及其他使用平台媒體工作階段資訊的控制器) 出現位置錯誤 (#1758)。
  • Cronet 擴充功能:
    • 新增自動 Cookie 處理功能 (#5975)。
  • HLS 擴充功能:
    • 修正播放清單剖析功能,接受引號字串屬性值中的 \f (表單動態饋給) (#2420)。
    • 支援更新具有相同 ID 的插頁式廣告 (#2427)。
    • 修正錯誤:直播活動沒有可載入的片段時,有時不會傳播播放清單載入錯誤 (#2401https://github.com/androidx/media/issues/2401)。
    • 依據 NAME 標記將字幕轉譯版本分組,與音訊轉譯版本的分組方式類似 (#1666)。
  • DASH 擴充功能:
    • 修正縮短 DASH 週期時,如果轉譯管道已讀取超出新週期的樣本,可能會擲回例外狀況的錯誤 (#2440)。
    • 修正使用 CMCD 查詢參數時,系統不會追蹤重新導向的錯誤 (#2475)。
  • RTSP 擴充功能:
    • 修正 RtspClient,在處理 HTTP 302 回應時,使用提供的 URI 位置 (#2398)。
  • 解碼器擴充功能 (FFmpeg、VP9、AV1 等):
    • 修正 DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange 對音訊解碼器擴充功能沒有影響的錯誤 (#2258)。
  • Cast 擴充功能:
    • 新增對 setVolume()getVolume() 的支援 (#2279)。
    • 防止 CastPlayer 在時間軸空白時進入 STATE_BUFFERING。
  • 測試公用程式:
    • TestPlayerRunHelper 中新增 advance(player).untilPositionAtLeastuntilMediaItemIndex,即可將播放器快轉至指定位置。在大多數情況下,這些方法比現有的 untilPositionuntilStartOfMediaItem 方法更可靠。
    • FakeDownloader 移至 test-utils-robolectric 模組,以便在其他測試中重複使用。

1.8.0-alpha01 版

2025 年 5 月 19 日

發布了 androidx.media3:media3-*:1.8.0-alpha01。1.8.0-alpha01 版包含這些修訂項目

  • ExoPlayer:
    • 新增 ExoPlayer.setScrubbingModeEnabled(boolean) 方法。這項設定可針對許多頻繁的搜尋動作 (例如使用者拖曳搜尋列) 最佳化播放器。您可以在 ExoPlayerExoPlayer.Builder 上使用 setScrubbingModeParameters(..) 自訂快轉模式的行為。
    • 允許在快轉模式中自訂部分搜尋容許值。
    • 在清除模式中提高轉碼器運作速率。
    • 修正錯誤:AdsMediaSource 內容中的準備錯誤可能永遠不會回報 (#2337)。
    • 修正 MergingMediaSource 中的記憶體流失問題,例如側載字幕時會使用 MergingMediaSource (#2338)。
    • 允許 CmcdConfiguration.Factory 傳回 null,針對特定媒體項目停用 CMCD 記錄 (#2386)。
    • 將預設圖片緩衝區大小從 128 KB (從文字軌複製貼上時發生錯誤) 增加至 26 MB,這足以容納 5000 萬像素的 Ultra HDR 圖片 (#2417)。
    • 新增 PreCacheHelper,讓應用程式預先快取單一媒體,並指定開始位置和時間長度。
  • 轉換程式:
    • 如要使用靜音音訊填補初始間隙 (透過 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 或子母畫面版面配置。
  • 擷取工具:
    • MP3:由於 FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS) (#2194),當系統改用固定位元率搜尋時,請使用無法搜尋的 Xing、VBRI 和類似的可變位元率中繼資料中的時間長度和資料大小。
  • 音訊:
    • 允許在 DefaultAudioMixer 中進行恆定功率升混/降混。
    • ChannelMappingAudioProcessorTrimmingAudioProcessorToFloatPcmAudioProcessor 設為公開 (#2339)。
    • AudioTrackPositionTracker 中使用 AudioTrack#getUnderrunCount(),在 DefaultAudioSink 中偵測欠載,而不是盡量估算。
    • 改善音訊時間戳記平滑度,避免音訊輸出裝置發生非預期的位置偏移。
    • 修正錯誤:連線至藍牙裝置時,從暫停狀態恢復播放後的前 10 秒,音訊/視訊會不同步。
    • 修正 AnalyticsListener.onAudioPositionAdvancing 未回報音訊開始前進的時間,但回報第一次測量時間的錯誤。
  • 影片:
    • 新增實驗性 ExoPlayer API,在將僅解碼的輸入緩衝區加入佇列時,加入 MediaCodec.BUFFER_FLAG_DECODE_ONLY 旗標。這個標記會通知解碼器略過僅解碼的緩衝區,進而加快搜尋速度。使用 DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag 啟用。
    • 改善軟體視訊轉碼器的轉碼器效能檢查。這可能會導致部分額外曲目標示為 EXCEEDS_CAPABILITIES
    • 修正部分裝置上的 VP9 Widevine 播放錯誤 (#2408)。
  • 文字:
    • 修正 SSA 和 SubRip,在啟用字幕時顯示進行中的提示 (#2309)。
    • 修正從有字幕錯誤的串流切換至有空白字幕軌的直播時,播放會卡住的問題 (#2328)。
    • 修正播放含有 B 畫面 (#2372) 的 H.262 串流時,CEA-608 字幕顯示亂碼的問題。
    • 在 Matroska 檔案中新增對 SSA 字幕的 CodecId = S_TEXT/SSA 支援。先前 MatroskaExtractor 只支援 CodecId = S_TEXT/ASS,這代表 SubStation Alpha 字幕的「進階」版本 (v4 以上),但 ExoPlayer 的剖析邏輯在這兩個版本中相同 (#2384)。
    • 在 SubStation Alpha (SSA) 字幕檔案中新增 layer 屬性的支援功能,用於定義提示的 Z 順序,以便在螢幕上同時顯示多個提示時使用 (#2124)。
  • 效果:
    • 新增 Presentation.createForShortSide(int),建立 Presentation,確保最短邊一律符合指定值,無論輸入方向為何。
  • Muxers:
    • writeSampleData() API 現在使用 Muxer 專屬的 BufferInfo 類別,而非 MediaCodec.BufferInfo
    • 新增 Muxer.Factory#supportsWritingNegativeTimestampsInEditList,預設為 false。
  • IMA 擴充功能:
    • 修正錯誤:一個廣告發生載入錯誤時,可能會意外導致另一個廣告群組失效。
    • 修正錯誤:VOD 視窗結束後,廣告群組會導致播放停止。 如果廣告群組的開始時間晚於時間範圍,系統就不會再將其加入佇列 (#2215)。MediaPeriodQueue
  • 工作階段:
    • 修正錯誤:將空值傳遞至連結至舊版 MediaBrowserServiceCompatMediaBrowsergetLibraryRoot 時,會產生 NullPointerException
    • 修正錯誤:傳送自訂動作、搜尋結果或 getItem 要求時,舊版工作階段應用程式會因 ClassNotFoundException 而當機。
    • 修正 MediaItem.LocalConfiguration.uri 分享至平台工作階段 MediaMetadata 的錯誤。如要刻意分享 URI,讓控制器重新要求媒體,請改為設定 MediaItem.RequestMetadata.mediaUri
  • UI:
    • 修正 Compose 錯誤,這個錯誤會導致設定初始按鈕狀態與觀察狀態變化 (例如圖示形狀或是否啟用) 之間出現間隙。現在系統會擷取觀察期外對 Player 所做的任何變更 (#2313)。
    • media3-ui-compose 模組中新增 SeekBackButtonStateSeekForwardButtonState 的狀態持有者和可組合函式。
    • 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,並下載相應內容。
  • HLS 擴充功能:
    • 支援 X-ASSET-LIST 和直播,並使用 HlsInterstitialsAdsLoader
  • RTSP 擴充功能:
    • 新增剖析支援功能,可剖析含有尾端空白字元的行 (#2357)。
  • Cast 擴充功能:
    • 新增對 getDeviceVolume()setDeviceVolume()getDeviceMuted()setDeviceMuted() 的支援 (#2089)。
  • 測試公用程式:
    • 已移除 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),以及子類別 DashDownloaderHlsDownloaderSsDownloader 中的對應建構函式。
    • 已移除已淘汰的 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.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 嘗試呼叫 getBufferedDurationUs() 前,ProgressiveMediaPeriod 會擲回 IllegalStateException (#2315)。
    • 修正傳送 CmcdData 至 DASH、HLS 和 SmoothStreaming 的資訊清單要求 (#2253)。
    • 確認移除廣告群組後,AdPlaybackState.withAdDurationsUs(long[][])仍可使用。使用者仍須傳遞已移除廣告群組的持續時間陣列,該陣列可以空白或為空值 (#2267)。
  • 擷取工具:
    • MP4:從 tkhd 方格中剖析 alternate_group,並在每個軌道的 Format.metadata 中將其公開為 Mp4AlternateGroupData 項目 (#2242)。
  • 音訊:
    • 修正卸載問題,播放短片播放清單時,位置可能會停滯 (#1920)。
  • 工作階段:
    • 將平台 MediaSession 回呼的匯總逾時時間從 500 毫秒縮短為 100 毫秒,並新增實驗性設定器,允許應用程式設定這個值。
    • 修正使用者關閉通知後,通知會再次顯示的問題 (#2302)。
    • 修正錯誤:當包裝播放器實際為空時,工作階段會傳回單一項目時間軸。如果封裝的播放器沒有可用的 COMMAND_GET_TIMELINE,但 COMMAND_GET_CURRENT_MEDIA_ITEM 可用,且封裝的播放器為空白,就會發生這種情況 (#2320)。
    • 修正錯誤:在與服務進行其他互動 (例如 setForegroundServiceTimeoutMs) 後,系統會無聲無息地忽略呼叫 MediaSessionService.setMediaNotificationProvider 的要求 (#2305)。
  • UI:
    • 啟用 PlayerSurface,以便與 ExoPlayer.setVideoEffectsCompositionPlayer 搭配使用。
    • 修正 PlayerSurface 無法使用新的 Player 重新組合的錯誤。
  • HLS 擴充功能:
    • 修正問題:CmcdData 未針對 HLS 媒體設定區塊時間長度,導致處理加密媒體區段時發生斷言失敗 (#2312)。
  • RTSP 擴充功能:
    • 新增對採用 RTSPT 配置欄位的 URI 的支援,以便將 RTSP 工作階段設定為使用 TCP (#1484)。
  • Cast 擴充功能:
    • 新增播放清單中繼資料支援 (#2235)。

1.6.0

2025 年 3 月 26 日

發布了 androidx.media3:media3-*:1.6.0。1.6.0 版包含這些修訂項目

  • 通用程式庫:
    • 新增 AudioManagerCompatAudioFocusRequestCompat,取代 androidx.media 中的對等類別。
    • 將 Kotlin 從 1.9.20 升級至 2.0.20,並使用 Compose 編譯器 Gradle 外掛程式。將 KotlinX Coroutines 程式庫從 1.8.1 升級至 1.9.0。
    • 移除 Format.toBundle(boolean excludeMetadata) 方法,改用 Format.toBundle()
    • 修正 SimpleBasePlayer 中的錯誤:在 setPlaylist 之後,於 State 中設定新的 currentMediaItemIndex (使用 null MediaMetadata) 時,不會重新評估中繼資料 (#1940)。
    • SimpleBasePlayer.State 存取權從受保護變更為公開,方便在其他類別中處理更新 (#2128)。
  • ExoPlayer:
    • 新增 MediaExtractorCompat,這個新類別提供的功能與平台 MediaExtractor 相同。
    • 為使用 MediaCodecVideoRenderer 播放新增實驗性「ExoPlayer」預先暖機支援。您可以透過 experimentalSetEnableMediaCodecVideoRendererPrewarming 設定 DefaultRenderersFactory,提供次要 MediaCodecVideoRendererExoPlayer。如果啟用這項功能,系統會在播放連續媒體項目時ExoPlayer預先處理影片,以縮短媒體項目轉場延遲時間。
    • DefaultLoadControlbufferForPlaybackMsbufferForPlaybackAfterRebufferMs 的預設值分別調降為 1000 和 2000 毫秒。
    • 非同步初始化 DeviceInfo 和裝置音量 (如果使用 setDeviceVolumeControlEnabled 啟用)。這些值在 ExoPlayer.Builder.build() 後不會立即提供,Player.Listener 會透過 onDeviceInfoChangedonDeviceVolumeChanged 通知變更。
    • 建立播放器後,初始音訊工作階段 ID 不再立即提供。如有需要,可以使用 AnalyticsListener.onAudioSessionIdChanged 聆聽初始更新內容。
    • 選取影片軌時,請考慮語言。根據預設,系統會選取與所選音軌語言相符的「主要」影片軌 (如有)。如要明確指定影片語言偏好設定,請使用 TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)
    • DefaultTrackSelector.selectVideoTrack() 方法中新增 selectedAudioLanguage 參數。
    • MediaSourceEventListener.onLoadStarted 中新增 retryCount 參數和對應的 MediaSourceEventListener.EventDispatcher 方法。
    • 修正錯誤:如果多個週期的 DASH 串流中的播放清單項目或週期長度與實際內容不符,可能會導致項目結尾發生畫面凍結情形 (#1698)。
    • BasePreloadManager.Listener 移至頂層 PreloadManagerListener
    • RenderersFactory.createSecondaryRenderer 可實作來提供預先暖機的次要算繪器。預先暖機可加快媒體項目在播放期間的轉換速度。
    • 啟用傳送 CmcdData,以用於自動調整串流格式 (DASH、HLS 和 SmoothStreaming) 的資訊清單要求 (#1951)。
    • 提供要在 MediaCodecRenderer.onReadyToInitializeCodec 中初始化的轉碼器 MediaCodecInfo (#1963)。
    • AdsMediaSource 改為允許 AdPlaybackStates 透過附加廣告群組來擴增。系統偵測到無效的修改,並擲回例外狀況。
    • 修正問題:在片中廣告後轉換至內容媒體時,可能會快速連續顯示額外的僅解碼影格。
    • 請讓 DefaultRenderersFactory 新增兩個 MetadataRenderer 例項,以便應用程式預設接收兩種不同的中繼資料架構。
    • 重新評估是否應在暫停播放時取消載入區塊 (#1785)。
    • 新增 ClippingMediaSource 選項,允許在無法搜尋的媒體中裁剪。
    • 修正錯誤:使用預先暖機功能搜尋時,可能會封鎖後續媒體項目轉場效果。
    • 修正 ExoPlayer.isLoading() 轉換為 STATE_IDLESTATE_ENDED 時,仍維持 true 的錯誤 (#2133)。
    • lastRebufferRealtimeMs 新增至 LoadControl.Parameter (#2113)。
  • 轉換程式:
    • 新增支援轉封裝為可回溯相容的替代格式。
    • 新增支援轉碼和轉封裝 Dolby Vision (設定檔 8) 格式。
    • 更新 VideoFrameProcessor.registerInputStreamVideoFrameProcessor.Listener.onInputStreamRegistered 的參數,以使用 Format
    • 使用 DefaultEncoderFactory 時,請產生 HDR 靜態中繼資料。
    • 使用 MediaMetricsManager 啟用 Android 平台診斷支援功能。Transformer 會向平台轉送編輯事件和效能資料,有助於在裝置提供系統效能與偵錯資訊。如果裝置使用者已啟用分享使用狀況與診斷資料功能,則 Google 也可能會收集以上資料。您可以透過 Transformer.Builder.setUsePlatformDiagnostics(false),讓應用程式選擇不採用 Transformer 的平台診斷貢獻功能。
    • InAppMuxer 分割為 InAppMp4MuxerInAppFragmentedMp4Muxer。 您可以使用 InAppMp4Muxer 產生非片段化 MP4 檔案,而 InAppFragmentedMp4Muxer 則用於產生片段化 MP4 檔案。
    • Muxer 介面從 media3-muxer 移至 media3-transformer
    • 新增 MediaProjectionAssetLoader,從 MediaProjection 提供媒體,用於螢幕錄影,並在 Transformer 試用版應用程式中新增螢幕錄影支援功能。
    • #getInputFormat() 新增至 Codec 介面。
    • 盡可能將釋出 GlObjectsProvider 的責任轉移至 DefaultVideoFrameProcessorDefaultVideoCompositor 中的呼叫端。
  • 擷取工具:
    • AVI:修正處理含有固定位元率壓縮音訊的檔案時,串流標頭儲存位元組數而非區塊數的問題。
    • 修正以 1 或 2 個位元組 (而非 4 個) 表示長度的 NAL 單元處理方式。
    • 修正 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 設為最終版本。
    • ChannelMappingAudioProcessorTrimmingAudioProcessor 中新增對浮點 PCM 的支援。
  • 影片:
    • MediaCodecVideoRenderer.shouldUsePlaceholderSurface 變更為 受保護,以便應用程式覆寫,封鎖預留位置介面的使用情形 (#1905)。
    • 新增實驗性 ExoPlayer AV1 樣本依附元件剖析,加快搜尋速度。使用新的 DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies API 啟用這項功能。
    • 新增實驗性 ExoPlayer API,可捨棄不依附的延遲 MediaCodecVideoRenderer 解碼器輸入緩衝區。使用 DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs 啟用。
    • 修正沒有介面的播放器會立即就緒,並以極慢的速度解碼任何待處理影格的問題 (#1973)。
    • 從卸除式介面模式排除 Xiaomi 和 OPPO 裝置,避免螢幕閃爍 (#2059)。
  • 文字:
    • 新增 VobSub 字幕支援 (#8260)。
    • 停止使用 MediaItem.Builder.setSubtitleConfigurations 預先載入所有設定的字幕檔,改為只載入所選音軌的字幕檔 (#1721)。
    • TTML:新增使用 style 參照 tts:origintts: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)。
  • 效果:
    • 已將 OverlaySettings 的功能移至 StaticOverlaySettingsOverlaySettings 可以設為子類別,以允許動態疊加設定。
  • Muxers:
    • MuxerException 移出 Muxer 介面,避免出現過長的完整名稱。
    • Mp4Muxer.BuilderFragmentedMp4Muxer.Builder 中,已將 setSampleCopyEnabled() 方法重新命名為 setSampleCopyingEnabled()
    • Mp4Muxer.addTrack()FragmentedMp4Muxer.addTrack() 現在會傳回 int 軌道 ID,而不是 TrackToken
    • Mp4MuxerFragmentedMp4Muxer 不再實作 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)。
  • UI:
    • 將狀態持有者和可組合函式新增至 media3-ui-compose 模組,適用於 PlayerSurfacePresentationStatePlayPauseButtonStateNextButtonStatePreviousButtonStateRepeatButtonStateShuffleButtonStatePlaybackSpeedState
  • 下載內容:
    • 修正 CacheWriter 中的錯誤,避免資料來源擲回 IOException 以外的 Exception 時,資料來源保持開啟,且快取區域處於鎖定狀態 (#9760)。
  • HLS 擴充功能:
    • 新增 HlsInterstitialsAdsLoader 的第一個版本。廣告載入器會讀取 HLS 媒體播放清單的 HLS 插頁式廣告,並將這些廣告對應至傳遞至 AdsMediaSourceAdPlaybackState。這個初始版本僅支援具有 X-ASSET-URI 屬性的 HLS VOD 串流。
    • 新增 HlsInterstitialsAdsLoader.AdsMediaSourceFactory。應用程式可以使用這項功能建立 AdsMediaSource 例項,以便利安全的方式使用 HlsInterstitialsAdsLoader
    • 從 HLS 播放清單剖析 SUPPLEMENTAL-CODECS 標記,偵測 Dolby Vision 格式 (#1785)。
    • 放寬在 HLS 串流中搜尋同步位置的條件 (#2209)。
  • DASH 擴充功能:
    • 為 DASH 新增 AC-4 Level-4 格式支援 (#1898)。
    • 修正計算多週期直播中廣告插入更新間隔時的問題 (#1698)。
    • 從 DASH 資訊清單剖析 scte214:supplementalCodecs 屬性,偵測 Dolby Vision 格式 (#1785)。
    • 改善直播中的時間段轉換處理方式,其中時間段包含超出宣告時間段長度的媒體樣本 (#1698)。
    • 修正標示 adaptation-set-switching 但語言或角色標記不同的調整集會合併的問題 (#2222)。
  • 解碼器擴充功能 (FFmpeg、VP9、AV1 等):
    • 新增 MPEG-H 解碼器模組,使用內建的 MPEG-H 解碼器解碼 MPEG-H 音訊 (#1826)。
  • MIDI 擴充功能:
    • 將自訂 AudioSinkAudioRendererEventListener 執行個體導入 MidiRenderer
  • Cast 擴充功能:
    • play-services-cast-framework 依附元件升級至 21.5.0,修正應用程式在 API 34 以上版本中發生的 FLAG_MUTABLE 錯誤。這些應用程式會安裝在已安裝 Google Play 服務但已停用的裝置上 (#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() 從傳遞至 EditedMediaItemTransformer.start() 中移除音訊。
      • setRemoveVideo(),請改用 EditedMediaItem.Builder.setRemoveVideo() 從傳遞至 Transformer.start()EditedMediaItem 中移除影片。
      • 請改用 EditedMediaItem.Builder.setFlattenForSlowMotion(),將傳遞至 Transformer.start()EditedMediaItem 扁平化。setFlattenForSlowMotion()
      • 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.VideoComponentExoPlayer.AudioComponentExoPlayer.TextComponentExoPlayer.DeviceComponent
    • 已移除androidx.media3.exoplayer.audio.SonicAudioProcessor
    • 移除了下列已淘汰的 DownloadHelper 方法:
      • 建構函式 DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]),請改用 DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)
      • 不過,您可以建立含有 RenderersFactoryDefaultRendererCapabilitiesList,並呼叫 DefaultRendererCapabilitiesList.getRendererCapabilities(),達到相同的功能。getRendererCapabilities(RenderersFactory)
    • 已移除 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)。
  • 影片:
    • 回溯使用處理 onOutputFormatChanged 時提供的 MediaCodecAdapter 像素顯示比例值 (#1371)。
  • 文字:
    • 修正 ReplacingCuesResolver.discardCuesBeforeTimeUs 中的錯誤,該錯誤會導致系統錯誤捨棄在 timeUs 處處於啟用狀態的提示 (開始時間早於 timeUs,但尚未結束) (#1939)。
  • 中繼資料:
    • 從 Vorbis 註解將光碟/曲目編號和類型擷取至 MediaMetadata (#1958)。

1.5.0 版本

2024 年 11 月 27 日

發布了 androidx.media3:media3-*:1.5.0。1.5.0 版包含這些修訂項目

  • 通用程式庫:
  • 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 有時會在 MediaCodec 以非同步模式運作時 (API 31 以上的預設行為) 回報為「執行階段發生未預期的錯誤」的問題。
    • 使用 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,以建構 DefaultPreloadManagerExoPlayer 執行個體,並保持共用設定一致。
    • LoadControl.onTracksSelected() 移除 Renderer[] 參數,因為 DefaultLoadControl 實作可以從 ExoTrackSelection[] 擷取串流類型。
    • 已淘汰 DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]),並將方法標記為最終方法,避免遭到覆寫。請改用新的 DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
    • MergingMediaSource 中回報次要來源的 MediaSourceEventListener 事件。這會導致系統回報側載字幕 (使用 MediaItem.LocalConfiguration.subtitleConfigurations 新增的字幕) 的載入開始/錯誤/取消/完成事件,這些事件可能會顯示為 AnalyticsListener 發出的重複載入事件。
    • 避免字幕和中繼資料錯誤完全停止播放。 系統會改為停用有問題的音軌,並繼續播放其餘音軌 (#1722)。
      • 在新的字幕處理程序 (擷取期間),相關聯的剖析 (例如無效的字幕資料) 和載入錯誤 (例如 HTTP 404) 會透過 onLoadError 回呼發出。
      • 在舊版字幕處理作業 (轉譯期間),只有相關聯的載入錯誤會透過 onLoadError 回呼發出,而剖析錯誤則會遭到忽略 (這是先前就有的行為)。
    • 修正錯誤:如果多個週期的 DASH 串流中的播放清單項目或週期長度與實際內容不符,可能會導致項目結尾發生畫面凍結情形 (#1698)。
    • SntpClient 中新增 setter,設定自上次更新後經過的最長時間,超過這個時間後,用戶端會重新初始化 (#1794)。
  • 轉換程式:
    • 新增 SurfaceAssetLoader,支援透過 Surface 將影片資料加入 Transformer 的佇列。
    • ImageAssetLoader 會透過 AssetLoader.onError 回報不支援的輸入內容,而不是擲回 IllegalStateException
    • 強制規定匯出圖片時,必須使用 MediaItem.Builder.setImageDurationMs 設定圖片顯示時間。
    • 新增對音訊 EditedMediaItem 序列中間隔的匯出支援。
  • 音軌選取:
    • DefaultTrackSelector:在其他因素相同的情況下,請優先使用物件式音訊,而非聲道式音訊。
  • 擷取工具:
    • 允許 Mp4ExtractorFragmentedMp4Extractor 識別後續樣本未做為參照的 H264 樣本。
    • AmrExtractor 中新增選項,啟用以索引為準的搜尋功能。
    • 將有效影格之間超過 128 KB 的 MP3 檔案視為截斷 (而非無效)。也就是說,如果檔案結尾有非 MP3 資料,且沒有其他中繼資料指出 MP3 位元組的長度,現在系統會在 MP3 資料結尾停止播放,而不是因 ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1} (#1563) 而失敗。
    • 修正處理 MP4 檔案中的編輯清單時,非關鍵影格媒體開始位置的預先捲動範例處理方式 (#1659)。
    • 使用 Mp4ExtractorFragmentedMp4Extractor 中的 mdhd 媒體時間長度,改善影格速率計算方式 (#1531)。
    • 修正 MP4 編輯清單中 media_time 的縮放比例有誤問題。雖然 segment_duration 已使用影片時間碼正確縮放,但現在 media_time 會使用軌道時間碼正確縮放,如 MP4 格式標準所指定 (#1792)。
    • 在 MP4 編輯清單的 endIndices 計算中處理順序錯誤的影格 (#1797)。
    • 修正 MP4 檔案 mdhd 方塊中的媒體時間長度剖析作業,以處理 -1 值 (#1819)。
    • 新增支援功能,可識別 MP4 檔案中的 h263 方塊,以用於 H.263 影片 (#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() 是否會傳回「開啟」值。
      • 覆寫 DataSourceContractTest.getNotFoundResources() 可讓測試子類別提供多個「找不到」資源,以及任何預期標頭。這樣就能區分 HTTP 404 (含標頭) 和「找不到伺服器」(不含標頭)。
  • 音訊:
    • 如果媒體中含有 CTA-2075 音量中繼資料,系統會自動在轉碼器上設定這項資料。
    • 確保搜尋時音量能平順調降。
    • 修正搜尋時可能發生的爆音。
    • 修正 Sonic 時間延展/音高轉移演算法的截斷錯誤累積問題。
    • 修正 SpeedChangingAudioProcessor 中的錯誤,避免輸出畫面格數減少。
  • 影片:
    • MediaCodecVideoRenderer 避免解碼既未算繪,也未做為其他樣本參考的樣本。
    • 在 API 35 以上版本中,MediaCodecAdapter 現在可能會在 configure 中收到 null Surface,並呼叫新方法 detachOutputSurface,以便在轉碼器支援時 (MediaCodecInfo.detachedSurfaceSupported) 移除先前設定的 Surface
    • 如果處理 onOutputFormatChanged 時提供像素顯示比例值,請使用 MediaCodecAdapter (#1371)。
    • 針對 Galaxy Tab S7 FE 裝置問題新增權變措施,該問題會導致 60 fps 安全 H264 串流標示為不支援 (#1619)。
    • 新增解決方法,避免編解碼器在最後一個樣本後停滯,且未傳回串流結尾信號。
  • 文字:
    • 新增自訂 VoiceSpan,並填入 WebVTT 語音跨度 (#1632)。
    • 確保 HLS 中的 WebVTT 顯示字幕時間戳記過大的情況 (以微秒表示並乘以 90,000 MPEG 時基時,會溢位 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 擴充功能:
    • 修正錯誤:清除播放清單時,可能會導致 ArrayIndexOutOfBoundsException 發生 ImaServerSideAdInsertionMediaSource
    • 修正錯誤:如果伺服器端插入的 DAI 串流沒有前置廣告,在播放最後一個片中廣告後可能會導致 ArrayIndexOutOfBoundsException (#1741)。
  • 工作階段:
    • 新增 MediaButtonReceiver.shouldStartForegroundService(Intent),允許應用程式覆寫這個方法,藉此禁止系統在恢復播放時發出播放指令。根據預設,服務一律會啟動,且系統會透過 ForegroundServiceDidNotStartInTimeException (#1528) 讓服務當機,因此無法抑制播放。
    • 修正錯誤:連線至舊版服務時,從 MediaBrowser 傳送的自訂指令會分派至 MediaSessionCompat.Callback,而非 MediaBrowserServiceCompat 方法變數。這會導致 MediaBrowser 無法接收舊版服務傳回的實際回傳值 (#1474)。
    • 處理特定製造商的裝置在為媒體按鈕意圖設定廣播接收器時擲回的 IllegalArgumentException (#1730)。
    • 為媒體項目新增指令按鈕。這會新增 Media3 API,適用於先前稱為 Custom browse actions 的項目,以及具有 MediaBrowserCompat 的舊版程式庫。請注意,媒體項目的 Media3 指令按鈕適用於 MediaBrowserMediaController。請參閱「AAOS 的自訂瀏覽動作」。
    • 修正錯誤:有時 Media3 控制器無法在要求 play() 後,讓工作階段應用程式啟動前景服務。
    • 限制 CommandButton.Builder.setIconUri 只能接受內容 URI。
    • 將 Media3 瀏覽器的連線提示傳遞至初始 MediaBrowserCompat,以便連線至舊版 MediaBrowserCompat。服務可以接收以根提示形式傳入的連線提示,並首次呼叫 onGetRoot()
    • 修正錯誤:MediaBrowser 連線至舊版瀏覽器服務後,瀏覽器訂閱 parentid 時,MediaBrowser 未收到服務傳送的錯誤。
    • 改善互通性行為,讓連線至舊版 MediaBrowserService 的 Media3 瀏覽器在訂閱父項時,不會要求 parentId 的子項兩次。
  • UI:
    • 由於 XML 基礎共用轉場效果有問題,請選擇使用 PlayerView-in-Compose-AndroidView 中的延展/裁剪影片解決方法。在 AndroidView 內使用 PlayerView 的應用程式需要呼叫 PlayerView.setEnableComposeSurfaceSyncWorkaround,才能選擇加入 (#1237#1594)。
    • setFullscreenButtonState 新增至 PlayerView,允許視需要更新全螢幕按鈕的圖示,也就是頻外更新,而非對點擊互動做出反應 (#1590#184)。
    • 修正錯誤:如有應用程式定義的文字音軌選取偏好設定,文字選取畫面中的「無」選項就無法運作。
  • DASH 擴充功能:
    • 支援從區隔中間開始的週期 (#1440)。
  • 流暢串流擴充功能:
    • 修正播放含有文字軌的 SmoothStreaming 串流時發生的 Bad magic number for Bundle 錯誤 (#1779)。
  • RTSP 擴充功能:
    • 修正含有經過編碼的 @ 字元網址的使用者資訊移除作業 (#1138)。
    • 修正剖析含有標頭擴充功能的 RTP 封包時當機的問題 (#1225)。
  • 解碼器擴充功能 (FFmpeg、VP9、AV1 等):
    • 新增 IAMF 解碼器模組,支援使用 libiamf 原生程式庫合成音訊,播放含有 IAMF 音軌的 MP4 檔案。
      • 啟用立體聲配置和 5.1 空間化功能,並視需要啟用頭部追蹤功能,即可播放音訊,但目前不支援雙耳播放。
    • 在 Android 15 上為解碼器擴充功能新增 16 KB 頁面支援 (#1685)。
  • Cast 擴充功能:
    • 在 CastSession 中斷連線後停止清除時間軸,讓傳送端應用程式在連線中斷後繼續在本機播放。
    • 提供 Context 時,填入 CastPlayer 的 DeviceInfo。這樣就能將 MediaSession 連結至 RoutingSession,這是整合輸出切換器時的必要步驟 (#1056)。
  • 測試公用程式:
    • DataSourceContractTest 現在包含驗證下列項目的測試:
      • 輸入串流 read position 已更新。
      • 輸出緩衝區 offset 已正確套用。
  • 試用版應用程式
    • 解決試用版短片應用程式中的記憶體流失問題 (#1839)。
  • 移除已淘汰的符號:
    • 移除已淘汰的 Player.hasPreviousPlayer.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:
    • PreloadMediaSource 中非同步處理預先載入回呼 (#1568)。
    • 載入失敗時,允許播放,不論緩衝時間長度為何 (#1571)。
  • 擷取工具:
    • MP3:根據 Info 影格中的長度欄位,正確忽略尾端非 MP3 資料,修正 Searched too many bytes 錯誤 (#1480)。
  • 文字:
    • TTML:修正百分比 tts:fontSize 值的處理方式,確保系統能從含有百分比 tts:fontSize 值的父項節點正確沿用這些值。
    • 修正 IndexOutOfBoundsException 中的 LegacySubtitleUtil,因為系統錯誤處理要求輸出開始時間大於或等於 Subtitle 中最終事件時間的情況 (#1516)。
  • DRM:
    • 修正 API 31 以上版本裝置播放 L1 Widevine 內容時發生的 android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE 錯誤。這個錯誤是因為架構 MediaDrm.requiresSecureDecoder 方法 (#1603) 的實作不完整所致。
  • 效果:
    • release() 方法新增至 GlObjectsProvider
  • 工作階段:
    • 將輕觸兩下 KEYCODE_HEADSETHOOK 的動作轉換為「跳到下一個」動作,如文件所述 (#1493)。
    • MediaButtonReceiver 中將 KEYCODE_HEADSETHOOK 視為「播放」指令,決定是否忽略該指令,避免發生 ForegroundServiceDidNotStartInTimeException (#1581)。
  • 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 強化版 desugaring 的編譯依附元件 (#1312)。
    • 請確認系統會忽略傳遞至非圖片 MediaItemMediaItem.Builder.setImageDurationMs() 持續時間 (如文件所述)。
    • 新增 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
    • BasePreloadManager 中新增 reset(),即可釋放所有保留來源,同時保留預先載入管理工具執行個體。
    • 新增 ExoPlayer.setPriority() (和 Builder.setPriority()) 以定義 PriorityTaskManager 中使用的優先順序值,以及 API 35 以上版本的 MediaCodec 重要性。
    • 修正更新上次重新緩衝時間的問題,導致 CMCD 中出現不正確的 bs (緩衝區資源不足) 鍵 (#1124)。
    • 新增 PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource),表示來源已載入至結尾。這可讓 DefaultPreloadManager和自訂 PreloadMediaSource.PreloadControl實作預先載入下一個來源或執行其他動作。
    • 修正在項目結尾略過靜音時,可能會觸發播放例外狀況的錯誤。
    • PreloadMediaSource 中加入 clear,即可捨棄預先載入期。
    • 新增錯誤碼 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)。
    • Effects 中的 ExoPlayer.setVideoEffect() 會收到已移除轉譯器偏移的時間戳記 (#1098)。
    • 修正處理播放器錯誤時可能發生的 IllegalArgumentException,該錯誤是在預先讀取其他播放清單項目時發生 (#1483)。
  • 轉換程式:
    • ExportResult 中加入 audioConversionProcessvideoConversionProcess,指出輸出檔案中各個音軌的製作方式。
    • 放寬修剪最佳化 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 框架的資料大小,而非基礎串流回報的大小 (例如檔案大小或 HTTP Content-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 規格指出,無論串流中出現的值為何,rowLockcolumnLock 都應視為 true (系統未實作 columnLock 支援功能,因此實際上會一律視為 false)。
      • 這項變更原本包含在 1.3.0-alpha01 版本資訊中,但我們在 1.3.0-rc01 版本發布前不慎還原了這項變更。我們已修正這個問題,因此變更內容會再次顯示。
    • CEA-708:避免 ExoPlayer 處理「設定筆尖位置」指令時,以簡單方式新增重複的換行符 (#1315)。
    • 修正 IllegalArgumentException,當 WebVTT 字幕樣本不含任何提示時 (例如在 DASH 串流中),會從 LegacySubtitleUtil 傳送 IllegalArgumentException 的問題 (#1516)。
  • 中繼資料:
    • 修正 MP4 對應至 ID3 排序標記的問題。先前「專輯排序」(soal)、「藝人排序」(soar) 和「專輯藝人排序」(soaa) MP4 標記錯誤對應至 TSO2TSOATSOP ID3 標記 (#1302)。
    • 修正 MP4 (/iTunes) 數值 gnre (類型) 和 tmpo (速度) 標記的讀取作業,避免值超過一個位元組時發生問題。
    • 將 ID3 TCON 影格傳播至 MediaMetadata.genre (#1305)。
  • 圖片:
    • 新增對非正方形 DASH 縮圖格線的支援 (#1300)。
    • 針對 API 34 以上版本新增 AVIF 支援。
    • 允許 null 做為 ExoPlayer.setImageOutput() 的參數,以清除先前設定的 ImageOutput
  • DataSource:
    • 實作對 android.resource://package/id 原始資源 URI 的支援,其中 package 與目前應用程式的套件不同。先前未記載此做法,但相較於依名稱存取其他套件中的資源,這種做法更有效率。
    • DataSpec 建構函式中,急切檢查 url 是否為非空值。這個參數已註解為非空值。
    • 允許 ByteArrayDataSourceopen() 期間將 URI 解析為位元組陣列,而不是在建構時進行硬式編碼 (#1405)。
  • DRM:
    • 允許在 DefaultDrmSessionManagerProvider 上設定 LoadErrorHandlingPolicy (#1271)。
  • 效果:
    • 支援在同一個 EditedMediaItemComposition 中進行多次速度變更 SpeedChangeEffect
    • 支援從 Ultra HDR 點陣圖輸入輸出 HLG 和 PQ。
    • 新增 EGL_GL_COLORSPACE_BT2020_HLG_EXT 支援,可改善 ExoPlayer.setVideoEffect 和 Transformer 的 Debug SurfaceView 中的 HLG 表面輸出。
    • 更新疊加矩陣實作,將 setOverlayFrameAnchor() 中套用的 x 和 y 值對調,使其與文件一致。如果使用 OverlaySettings.Builder.setOverlayFrameAnchor(),請將 x 和 y 值乘以 -1,即可翻轉這些值。
    • 修正搭配 ExoPlayer#setVideoEffects 使用 TimestampWrapper 會當機的問題 (#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 廣告串流所需的 Promote API 升級為穩定版。
    • ImaServerSideAdInsertionMediaSource.AdLoader 中新增 replaceAdTagParameters(Map <String, String>),以便在執行階段取代廣告代碼參數。
    • 修正錯誤:廣告播放期間發生播放器錯誤時,系統不會呼叫 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,並在 SessionResultLibraryResult 中使用,取代錯誤代碼,盡可能提供錯誤的詳細資訊和解決方法。
    • 發布媒體遙控器測試應用程式的程式碼,可用於測試與發布媒體工作階段的應用程式互動。
    • 將傳遞至 media3 的額外項目 MediaSession[Builder].setSessionExtras() 傳播至 media1 控制器的 PlaybackStateCompat.getExtras()
    • 將嚴重和一般錯誤對應至平台工作階段,以及從平台工作階段對應。PlaybackException 會對應至 PlaybackStateCompat 的嚴重錯誤狀態。傳送至媒體通知控制器 (含 MediaSession.sendError(ControllerInfo, SessionError)) 的 SessionError 會對應至 PlaybackStateCompat 中的非重大錯誤,也就是說,系統會設定錯誤代碼和訊息,但平台工作階段的狀態仍與 STATE_ERROR 不同。
    • 允許為每個控制器設定工作階段活動,以覆寫全域工作階段活動。您可以在連線時為控制器定義工作階段活動,方法是使用 AcceptedResultBuilder.setSessionActivivty(PendingIntent) 建立 ConnectionResult。連線後,工作階段活動可透過 MediaSession.setSessionActivity(ControllerInfo, PendingIntent) 更新。
    • 改善對 MediaLibrarySession.Callback 的呼叫錯誤複製作業。 現在可以透過 MediaLibrarySession.Builder.setLibraryErrorReplicationMode() 選擇錯誤類型,或停用預設開啟的錯誤複製功能,設定錯誤複製作業。
  • UI:
    • 在連線至 ExoPlayer 時,為 PlayerView 新增圖片顯示支援 (#1144)。
    • 透過 XML 屬性在 PlayerControlView 中自訂各種圖示,允許每個 PlayerView 執行個體使用不同的可繪項目,而非全域覆寫 (#1200)。
    • 解決平台錯誤,避免在 API 34 的 Compose AndroidView 中使用 SurfaceView 時,影片遭到延展/裁剪 (#1237)。
  • 下載內容:
    • 確認 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 中委派時,偏移值不正確,導致 IndexOutOfBoundsExceptionIllegalArgumentException (#1002)。
    • 修正錯誤:非主要播放清單會持續重新載入 LL-HLS 串流 (#1240)。
    • 修正啟用 HLS 的 CMCD 時,初始化區隔會導致 Source ErrorIllegalArgumentException 的錯誤。
    • 修正錯誤:在直播期間,系統不會重新整理非主要播放的播放清單 (#1240)。
    • 修正啟用 HTTP 即時串流直播的 CMCD 時,導致 ArrayIndexOutOfBoundsException 的錯誤 (#1395)。
  • DASH 擴充功能:
    • 修正錯誤:重新準備多個時間段的直播串流時,可能會擲回 IndexOutOfBoundsException (#1329)。
    • 新增對 dashif:Laurl 授權網址的支援 (#1345)。
  • 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
    • DefaultHttpDataSourceOkHttpDataSourceCronetDataSource 移除 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.DUMMYgetDummyDrmSessionManager() 方法。請改用 DrmSessionManager.DRM_UNSUPPORTED
    • 移除 AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)AudioRendererEventListener.onAudioInputFormatChanged(Format)VideoRendererEventListener.onVideoInputFormatChanged(Format)。請改用採用 DecoderReuseEvaluation 的多載。
    • 移除 RendererSupport.FormatSupport IntDef 和 FORMAT_HANDLEDFORMAT_EXCEEDS_CAPABILITIESFORMAT_UNSUPPORTED_DRMFORMAT_UNSUPPORTED_SUBTYPEFORMAT_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:
    • 修正問題:PreloadMediaPeriod 再次預先載入時,無法保留串流。
    • 在重新選取賽道時,將正確的對應 TrackSelectionResult 套用至比賽期間。
    • 在媒體項目之間轉換時,只有在播放時間提前後,才啟動提早啟用的算繪器 (#1017)。
    • DefaultVideoFrameProcessor.Factory.Builder.build() 的 Proguard -keepclasseswithmembers 規則新增缺少的傳回型別 (#1187)。
  • 轉換程式:
    • 新增解決方法,避免因 MediaMuxer 不支援 API 30 之前的負數呈現時間戳記而擲回例外狀況。
  • 音軌選取:
    • DefaultTrackSelector:優先選擇畫面更新率「合理」(>=10fps) 的視訊軌,而非畫面更新率較低或未設定的視訊軌。這樣可確保播放器在從動態相片擷取的 MP4 中選取「實際」影片軌,因為這類 MP4 可能包含兩個 HEVC 軌,其中一個的解析度較高,但影格數量非常少 (#1051)。
  • 擷取工具:
    • 修正問題:從 WAV 檔案讀取大小不一的區塊時,系統不會略過填補 (#1117)。
    • MP3:從 XINGVBRI 等中繼資料影格填入 Format.averageBitrate
    • MPEG-TS:還原一項變更,這項變更的目的是將串流的最後存取單元傳遞至樣本佇列 (#7909),確保系統會算繪最後一個影格。這是因為這項變更導致僅含 I 影格的 HLS 串流 (#1150) 和 H.262 HLS 串流 (#1126) 發生新問題。
  • 音訊:
    • 如果音軌無法在卸載模式中初始化,請停用卸載功能,允許轉譯器復原。
  • 影片:
    • 針對 Galaxy Tab S7 FE、Chromecast (支援 Google TV) 和 Lenovo M10 FHD Plus 的裝置問題新增解決方法,避免 60fps H265 串流遭標示為不支援
    • 新增權變措施,確保在通道化時一律會算繪第一個影格,即使裝置未自動執行 API 要求的動作也一樣 (#1169)。(#966)。
    • 修正 HDR 顏色資訊處理導致轉碼器異常運作的問題,並防止 SDR 影片音軌的自適應格式切換 (#1158)。
  • 文字:
    • WebVTT:避免直接連續的提示從 WebvttParser.parse 建立額外的 CuesWithTiming 執行個體 (#1177)。
  • DRM:
    • 解決 NoSuchMethodError 問題,在某些 Android 14 裝置上,MediaDrm 架構可能會擲回這個問題,而不是 ResourceBusyExceptionNotProvisionedException (#1145)。
  • 效果:
    • 透過轉換色域,改善 PQ 至 SDR 的色調對應。
  • 工作階段:
    • 修正控制器取代目前項目時,目前位置會跳回的問題 (#951)。
    • 修正問題:只有非空值的 extrasMediaMetadata 不會在媒體控制器和工作階段之間傳輸 (#1176)。
  • UI:
    • 如果 Locale 無法識別顯示名稱,則改為加入音軌語言名稱 (#988)。
  • DASH 擴充功能:
    • 將資訊清單中的所有 Label 元素填入 Format.labels (#1054)。
  • RTSP 擴充功能:
    • 在 SDP 剖析中略過空白的工作階段資訊值 (i-tag) (#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 依附元件的必要條件。
    • 當至少一個為非空值時,在 MediaMetadata.Builder.populate(MediaMetadata) 中填入 artworkUriartworkData (#964)。
  • ExoPlayer:
    • 新增 PreloadMediaSourcePreloadMediaPeriod,讓應用程式能在播放前,預先載入特定開始位置的內容媒體來源。PreloadMediaSource 會負責準備內容媒體來源,以接收 Timeline、準備及快取指定開始位置的期間、選取軌道,以及載入該期間的媒體資料。應用程式會實作 PreloadMediaSource.PreloadControl 來控制預先載入進度,並將預先載入的來源設為播放器,以供播放。
    • 新增 ExoPlayer.setImageOutput,允許應用程式設定 ImageRenderer.ImageOutput
    • DefaultRenderersFactory 現在會預設為播放器提供 ImageRenderer,並將 ImageOutputImageDecoder.Factory.DEFAULT 設為空值。
    • 略過靜音時發出 Player.Listener.onPositionDiscontinuity 事件 (#765)。
    • 新增實驗性支援,可在擷取期間剖析字幕。您可以使用 MediaSource.Factory.experimentalParseSubtitlesDuringExtraction() 啟用這項功能。
    • 使用 PreloadMediaSource 支援自適應媒體來源。
    • 使用 HttpEngine API 實作 HttpEngineDataSourceHttpDataSource
    • 防止子類別化 CompositeSequenceableLoader。這個元件先前可擴充,但從未在程式庫中建立子類別。如要進行自訂,請使用裝飾器模式包裝執行個體,並實作自訂 CompositeSequenceableLoaderFactory
    • 修正重複相同時間會導致清除這個項目中繼資料的問題 (#1007)。
    • BundledChunkExtractor.FactoryDefaultHlsExtractorFactory 中的 experimentalSetSubtitleParserFactory 方法重新命名為 setSubtitleParserFactory,並禁止傳遞 null。使用新的 experimentalParseSubtitlesDuringExtraction(boolean) 方法控制剖析行為。
    • 新增支援在擷取期間自訂使用的 SubtitleParser.Factory。這時就會用到 MediaSource.Factory.setSubtitleParserFactory()
    • 將來源前置字串新增至從 MergingMediaSource 產生的所有 Format.id 欄位。這有助於找出產生 Format (#883) 的來源。
    • 修正用於驗證自訂通用媒體用戶端資料 (CMCD) 金鑰名稱的 regex,將其修改為僅檢查連字號 (#1028)。
    • 停止對 CMCD 查詢參數進行雙重編碼 (#1075)。
  • 轉換程式:
    • 新增對 H.265/HEVC SEF 慢動作影片平坦化的支援。
    • 提高轉封包速度,特別是「移除影片」編輯作業。
    • 新增 API,確保輸出檔案從影片影格開始。這樣一來,修剪作業的輸出內容會更符合播放器實作項目,這些項目不會顯示第一個影片影格,直到其呈現時間戳記 (#829)。
    • 新增支援功能,可最佳化單一素材資源的 MP4 剪輯作業。
    • 新增支援功能,確保影片影格在輸出檔案中具有第一個時間戳記。修正 iOS 裝置上以黑畫面開頭的輸出檔案 (#829)。
  • 音軌選取:
    • 新增 DefaultTrackSelector.selectImageTrack,啟用圖片軌選取功能。
    • 新增 TrackSelectionParameters.isPrioritizeImageOverVideoEnabled,判斷是否要選取圖片軌 (如果圖片軌和影片軌都可用)。預設值為 false,表示系統會優先選取視訊軌。
  • 擷取工具:
    • 在 MP4 擷取器中新增額外的 AV1C 剖析作業,以擷取 ColorInfo.colorSpaceColorInfo.colorTransferColorInfo.colorRange 值 (#692)。
    • MP3:使用固定位元率 (CBR) 搜尋含有 Info 標頭的檔案 (相當於 Xing 標頭的 CBR)。先前我們使用 Info 標頭中的搜尋表,但如果忽略該表並假設檔案為 CBR,搜尋結果會更精確。
    • MPEG2-TS:新增 DTS、DTS-LBR 和 DTS:X Profile2 支援 (#275)。
    • 從 TS 描述元擷取音訊類型,並對應至角色旗標,讓使用者做出更明智的音軌選擇 (#973)。
  • 音訊:
    • 改善靜音跳過演算法,音量升降更平順;保留最少的靜音時間,並讓靜音時間更自然 (#7423)。
    • 更確定地回報略過的靜音 (#1035)。
  • 影片:
    • 變更採用 VideoFrameProcessor.Factory 引數的 MediaCodecVideoRenderer 建構函式,並替換為採用 VideoSinkProvider 引數的建構函式。如要插入自訂 VideoFrameProcessor.Factory,應用程式可以例項化使用自訂 VideoFrameProcessor.FactoryCompositingVideoSinkProvider,並將影片接收器供應器傳遞至 MediaCodecVideoRenderer
  • 文字:
    • 修正點陣圖提示的序列化,解決使用 DefaultExtractorsFactory.setTextTrackTranscodingEnabled 時發生的 Tried to marshall a Parcel that contained Binder objects 錯誤 (#836)。
    • CEA-708:忽略 rowLock 值。CEA-708-E S-2023 規格指出,無論串流中出現的值為何,rowLockcolumnLock 都應視為 true (系統未實作 columnLock 支援功能,因此實際上會一律視為 false)。
  • 圖片:
    • 新增 DASH 縮圖支援。系統會裁剪格狀圖片,並在圖片顯示時間附近提供個別縮圖。ImageOutput
  • DRM:
  • IMA 擴充功能:
    • 修正問題:如果 DASH 和 HLS 廣告沒有適當的副檔名,就無法播放。
  • 工作階段:
    • 為 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:
    • 修正問題:手動搜尋 LiveConfiguration.min/maxOffset 範圍外的內容時,系統會不斷將位移量調回 min/maxOffset
    • 修正 OPUS 和 VORBIS 聲道配置在 3、5、6、7 和 8 個聲道中錯誤的問題 (#8396)。
    • 修正問題:在直播中搜尋至零後,音軌選取項目會錯誤地讓串流從預設位置開始播放 (#9347)。
    • 修正新 CmcdData.Factory 執行個體從區塊來源收到 bufferedDurationUs 負值,導致 IllegalArgumentException 的問題 (#888)。
  • 轉換程式:
    • 解決因設定高運作速率,導致編碼器在設定時擲回的問題。
  • 擷取工具:
    • 將 JPEG 動作相片中的次要 (無法播放) HEVC 軌標示為 ROLE_FLAG_ALTERNATE,避免系統因解析度較高而自動選取播放。
    • 修正 TS H264 串流的錯誤關鍵影格偵測問題 (#864)。
    • 修正長度超過 47721 秒的 TS 串流時間預估問題 (#855)。
  • 音訊:
    • 修正多次呼叫 SilenceSkippingAudioProcessor 時的 EOS 處理方式 (#712)。
  • 影片:
    • 針對 Galaxy Tab S7 FE、Chromecast (支援 Google TV) 和 Lenovo M10 FHD Plus 裝置的問題新增解決方法,這些裝置會將 60 fps AVC 串流標示為不支援 (#693)。
  • 中繼資料:
    • 修正錯誤:MediaMetadata 僅從含有大寫鍵的 Vorbis 註解填入資料 (#876)。
    • 在剖析非常大的 ID3 影格時,會發生 OutOfMemoryError,也就是說,播放作業可以繼續進行,但不會顯示標記資訊,而不是完全無法播放。
  • DRM:
    • 將適用於偽造 ClearKey https://default.url 授權網址的解決方法擴展至 API 33 以上版本 (先前僅適用於 API 33) (#837)。
    • 修正從加密內容切換至未加密內容時,ERROR_DRM_SESSION_NOT_OPENED 未附加至播放器的問題。錯誤原因是使用安全解碼器播放未加密內容時發生錯誤。
  • 工作階段:
    • 將自訂鍵和值放在 MediaMetadataCompat 中,然後將 MediaMetadataCompat 放在 MediaMetadata.extras 中,並將 MediaMetadata.extras 放在 MediaMetadataCompat 中。(#756#802)。
    • 修正舊版控制器的 notifyChildrenChanged 廣播問題 (#644)。
    • 修正錯誤:在部分裝置上,為已停用的通知 setWhen 計時器設定負時間,會導致裝置異常終止 (#903)。
    • 修正媒體通知控制器尚未完成連線,但系統要求第一次更新通知時發生的 IllegalStateException (#917)。
  • UI:
    • 修正問題:在 BottomSheetDialogFragment 中使用 Material Design 時,無法顯示快轉和倒轉按鈕 (#511)。
    • 修正 PlayerControlView 快轉按鈕中的數字未對齊問題 (#547)。
  • DASH 擴充功能:
    • 在 DASH 資訊清單中,將「f800」剖析為 Dolby 的 5 個聲道 (#688)。
  • 解碼器擴充功能 (FFmpeg、VP9、AV1、MIDI 等):
    • MIDI:修正向前搜尋時會略過 Program Change 事件的問題 (#704)。
    • 遷移至 FFmpeg 6.0,並將支援的 NDK 更新至 r26b (#707#867)。
  • 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 相容性問題,避免系統未將可為空值的泛型型別參數和可為空值的陣列元素型別偵測為可為空值。例如 TrackSelectorResultSimpleDecoder 方法參數 (#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.canUpdateMediaItemMediaSource.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 包含其他參數,包括 playbackSpeedlastRebufferRealtimeMs,以及現有的 playbackPositionUs
    • ChunkSource 介面中,將 ChunkSource.getNextChunk(long, long, List, ChunkHolder) 方法強化為 ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
    • 在通用媒體用戶端資料 (CMCD) 記錄中新增其他欄位:緩衝區資源不足 (bs)、截止時間 (dl)、播放速率 (pr) 和啟動 (su) (#8699)。
    • ColorInfo 中新增亮度和色度位元深度 (#491)。
    • 在通用媒體用戶端資料 (CMCD) 記錄中新增其他欄位:下一個物件要求 (nor) 和下一個範圍要求 (nrr) (#8699)。
    • 新增功能,使用查詢參數 (#553) 傳輸通用媒體用戶端資料 (CMCD) 資料。
    • 修正 ExperimentalBandwidthMeter 中的 ConcurrentModificationException (#612)。
    • CompositeMediaSource.getMediaTimeForChildMediaTime 中新增 MediaPeriodId 參數。
    • 支援 ClippingMediaSource (以及其他具有週期/視窗時間偏移的來源) 中的 ConcatenatingMediaSource2 (#11226)。
    • 變更 BaseRenderer.onStreamChanged(),讓其也接收 MediaPeriodId 引數。
  • 轉換程式:
    • 剖析圖片輸入內容的 EXIF 旋轉資料。
    • 移除 TransformationRequest.HdrMode 註解型別及其相關常數。請改用 Composition.HdrMode 和相關聯的常數。
    • 簡化 OverlaySettings 即可修正旋轉問題。
    • 已將 SampleConsumer.queueInputBitmapframeRatedurationUs 參數變更為 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 擷取接收器可為格式提供的卸載支援層級。傳回包含 isFormatSupportedisGaplessSupportedisSpeedChangeSupported 的新 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.experimentalSetOffloadSchedulingEnabledAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
    • 已將 onExperimentalSleepingForOffloadChanged 重新命名為 onSleepingForOffloadChanged,並將 onExperimentalOffloadedPlayback 重新命名為 onOffloadedPlayback
    • 將音訊卸載模式相關的 TrackSelectionParameters 介面和定義移至內部 AudioOffloadPreferences 類別。
    • onAudioTrackInitializedonAudioTrackReleased 回呼新增至 AnalyticsListenerAudioRendererEventListenerAudioSink.Listener
    • 修正 DTS Express 音訊緩衝區溢位問題 (#650)。
    • 修正錯誤:檢查 E-AC3-JOC 功能時會擲回 IllegalArgumentException (#677)。
  • 影片:
    • 允許 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.queueInputBitmapframeRatedurationUs 參數變更為 TimestampIterator
  • IMA 擴充功能:
    • 修正錯誤:如果播放清單中的第一個項目不是多週期 DASH 直播,可能會擲回例外狀況 (#571)。
    • 請先釋放 StreamManager,再呼叫 AdsLoader.destroy()
    • 將 IMA SDK 版本遞增升級至 3.31.0。
  • 工作階段:
    • 將通知前景服務行為設為 DefaultMediaNotificationProvider 中的 FOREGROUND_SERVICE_IMMEDIATE (#167)。
    • 請僅使用 API 31 以上版本,以免 Samsung 裝置發生已淘汰 API 的問題 (#167)。android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
    • 使用媒體通知控制器做為 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 分鐘) 連接合適的裝置,系統會自動繼續播放。
  • 下載內容:
    • 為確保與 Android 14 相容,請為 DownloadService 聲明「資料同步」前景服務類型。使用這項服務時,應用程式也需要在資訊清單中將 dataSync 新增為 foregroundServiceType,並新增 FOREGROUND_SERVICE_DATA_SYNC 權限 (#11239)。
  • HLS 擴充功能:
    • 使用從上次載入開始時間計算出的間隔,而非上次載入完成時間,重新整理 HLS 直播播放清單 (#663)。
  • DASH 擴充功能:
    • 允許在區隔範本網址中出現多個相同的 DASH ID。
    • 新增實驗性支援,可在擷取期間剖析字幕。這個版本可更妥善地合併重疊的字幕,包括解決字幕片段間轉換時的閃爍問題。您可以使用 DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() 啟用這項功能 (#288)。
  • RTSP 擴充功能:
    • 修正競爭狀況,避免在回溯至 TCP 時導致 IndexOutOfBoundsException,或在某些情況下導致播放作業停止。
    • 在傳回 RtspMediaPeriod 的載入狀態時,檢查 RTSP 設定中的狀態 (#577)。
    • 忽略 Options 回應公用標頭中的自訂 Rtsp 要求方法 (#613)。
    • 在傳送 RTSP Keep-Alive 選項要求的時間間隔中,使用 RTSP 設定回應逾時值 (#662)。
  • 解碼器擴充功能 (FFmpeg、VP9、AV1、MIDI 等):
    • 發布 MIDI 解碼器模組,支援使用 Jsyn 程式庫合成音訊,播放標準 MIDI 檔案。
    • 新增 DecoderOutputBuffer.shouldBeSkipped,直接標示不需要呈現的輸出緩衝區。建議您使用這個方法,而不要使用即將淘汰的 C.BUFFER_FLAG_DECODE_ONLY
    • 新增 Decoder.setOutputStartTimeUsSimpleDecoder.isAtLeastOutputStartTimeUs,讓解碼器在開始時間前捨棄僅供解碼的樣本。建議您優先使用這項功能,而非即將淘汰的 Buffer.isDecodeOnly
    • 修正將 MIDI 解碼器構件發布至 Maven 存放區的錯誤。構件已重新命名為 media3-exoplayer-midi (#734)。
  • Leanback 擴充功能:
    • 修正停用介面可能導致 Leanback 程式碼中出現 ArithmeticException 的錯誤 (#617)。
  • 測試公用程式:
    • TestExoPlayerBuilderFakeClock 與 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
    • 在 Common Media Client Data (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_VOLUMECOMMAND_SET_DEVICE_VOLUME) 和新指令 (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) 判斷 volumeControlType (#554)。

1.1.0 版本

2023 年 7 月 5 日

  • 通用程式庫:
    • Add suppression reason for unsuitable audio route and play when ready change reason for suppressed too long. (#15)。
    • 在 Player 中新增指令:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • 在 Player 中新增過載方法,讓使用者指定音量標記:
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • 新增 Builder,並淘汰現有建構函式。DeviceInfo
    • 新增 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)。以下欄位已納入 (#8699):brblcidrtpsid。API 結構和 API 方法:
      • CMCD 記錄功能預設為停用,請使用 MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) 啟用。
      • 所有鍵預設為啟用,請覆寫 CmcdConfiguration.RequestConfig.isKeyAllowed(String key) 來篩除要記錄的鍵。
      • 覆寫 CmcdConfiguration.RequestConfig.getCustomData() 即可啟用自訂鍵記錄功能。
    • 在主要試用版的資訊清單中新增其他動作,方便使用自訂 *.exolist.json 檔案啟動試用版應用程式 (#439)。
    • 新增 ExoPlayer.setVideoEffects(),以便在播放影片時使用 Effect
    • 更新 SampleQueue,將 sourceId 儲存為 long,而非 int。這會變更公用方法 SampleQueue.sourceIdSampleQueue.peekSourceId 的簽章。
    • LoadControl 方法 shouldStartPlaybackonTracksSelected 中新增參數,以便將這些方法與相關的 MediaPeriod 建立關聯。
    • 變更 ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) 的簽章,加入時間軸參數,其中包含以 UID 做為對應鍵的週期。為避免多週期直播發生並行問題,請務必提供這項資訊。
    • 淘汰 EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)。您可以改為呼叫不含 mediaTimeOffsetUs 的方法變體。請注意,即使是已淘汰的變體,系統也不會再將偏移量新增至分派器分派的 MediaLoadData 物件的 startTimeUsendTimeUs
    • ExoTrackSelection.blacklist 重新命名為 excludeTrack,並將 isBlacklisted 重新命名為 isTrackExcluded
    • 修正在空白播放清單上呼叫 ExoPlayer.setMediaItem(s)addMediaItem(s) 時,兩者行為不一致的問題。
  • 轉換程式:
    • 移除 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會觸發新的軌道選取作業。
  • 擷取工具:
    • Ogg:修正在時間較長的檔案中搜尋時發生的錯誤 (#391)。
    • FMP4:修正 TimestampAdjuster 會使用 emsg Atom 中的中繼資料範例時間,初始化錯誤時間戳記偏移的問題 (#356)。
  • 音訊:
    • 修正錯誤:啟用通道和 AudioProcessors 時,部分播放作業會失敗,例如無間隙修剪 (#10847)。
    • 在直接播放 (卸載) 中,將 Opus 影格封裝在 Ogg 封包中。
    • 在睡眠期間,透過卸載排程推斷目前位置。
    • 在播放器生命週期結束時,新增 Renderer.release()AudioSink.release() 來釋放資源。
    • DefaultAudioSink 中監聽音訊功能變更。在 DefaultAudioSink 的建構函式中新增必要參數 contextDefaultAudioSink 會使用這項參數向 AudioCapabilitiesReceiver 註冊為監聽器,並在收到功能變更通知時更新 audioCapabilities 屬性。
    • 透過 AudioSink.Listener 介面中的新事件 onAudioCapabilitiesChanged 和新介面 RendererCapabilities.Listener 傳播音訊功能變更,觸發 onRendererCapabilitiesChanged 事件。
    • 新增 ChannelMixingAudioProcessor,將縮放/混音套用至音訊聲道。
    • DecoderDiscardReasons 中新增 int 值 DISCARD_REASON_AUDIO_BYPASS_POSSIBLE,以便在音訊功能變更後,略過模式可能適用時捨棄音訊解碼器。
    • 新增 DTS Express 和 DTS:X 的直接播放支援 (#335)。
  • 影片:
    • 當轉譯器停用時,請讓 MediaCodecVideoRenderer 回報寬度和高度為 0 的 VideoSizePlayer.getVideoSize() 變更時,系統會相應呼叫 Player.Listener.onVideoSizeChanged。這項變更生效後,如果 Player.getCurrentTracks 不支援影片,或系統尚未判斷支援的影片軌大小,ExoPlayer 的影片大小 (含 MediaCodecVideoRenderer) 寬度和高度都會是 0。
  • DRM:
    • 降低 DefaultDrmSession 上多種僅供內部使用的方法的瀏覽權限,這些方法不應從 DRM 套件外部呼叫:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • 新增可用於建立 MP4 容器檔案的 Muxer 程式庫。
  • IMA 擴充功能:
    • 為動態廣告插播啟用多週期 DASH 直播串流。請注意,目前的實作方式尚未支援在直播中搜尋 (#10912)。
    • 修正錯誤:連續時間軸中計算出的內容位置略有差異,導致系統在直播中插入新的廣告群組。
  • 工作階段:
    • 新增輔助方法 MediaSession.getControllerForCurrentRequest,取得目前呼叫 Player 方法的控制器相關資訊。
    • 新增 androidx.media3.session.MediaButtonReceiver,讓應用程式能夠透過藍牙耳機等裝置傳送的媒體按鈕事件,實作播放續播功能 (#167)。
    • MediaSession.Callback.onAddMediaItems 中新增預設實作項目,允許將要求的 MediaItems 傳遞至 Player (如果 LocalConfiguration 存在,例如 URI) (#282)。
    • 在 Android 12 以下版本的小型媒體通知檢視畫面中,預設新增「seek to previous」和「seek to next」指令按鈕 (#410)。
    • MediaSession.Callback.onAddMediaItems 中新增預設實作項目,允許將要求的 MediaItems 傳遞至 Player (如果 LocalConfiguration 存在,例如 URI) (#282)。
    • 在 Android 12 以下版本的小型媒體通知檢視畫面中,預設新增「seek to previous」和「seek to next」指令按鈕 (#410)。
  • UI:
    • 新增 shouldShowPlayButtonhandlePlayPauseButtonAction Util 方法,使用播放/暫停按鈕編寫自訂 UI 元素。
  • RTSP 擴充功能:
    • 如果 Describe 回應 SDP 訊息中沒有 MPEG4-LATM,請使用預設的設定檔層級 ID 值 (#302)。
    • 如果 DESCRIBE 回應標頭中存在,請使用 RTSP 工作階段的基準 URI 解析相對路徑 (#11160)。
  • DASH 擴充功能:
    • 從多時段 DASH 串流的 MediaLoadData.startTimeMsMediaLoadData.endTimeMs 中移除媒體時間偏移。
    • 修正重新準備多週期 Live Dash 媒體來源時,會產生 IndexOutOfBoundsException 的錯誤 (#10838)。
  • HLS 擴充功能:
    • 新增 HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long),為載入執行緒設定逾時,等待 TimestampAdjuster 初始化。如果初始化作業未在逾時前完成,系統會擲回 PlaybackException,避免播放作業無止盡地停滯。預設情況下,逾時時間會設為零 (#323)。
  • 測試公用程式:
    • 檢查 DataSourceContractTest 中的 URI 配置是否不區分大小寫。
  • 移除已淘汰的符號:
    • 移除 DefaultAudioSink 建構函式,改用 DefaultAudioSink.Builder
    • 移除 HlsMasterPlaylist,改用 HlsMultivariantPlaylist
    • 移除 Player.stop(boolean)。請改用 Player.stop()Player.clearMediaItems() (如果 resettrue)。
    • 移除兩個已淘汰的 SimpleCache 建構函式,改用採用 DatabaseProvider 的非淘汰建構函式,以提升效能。
    • 移除 DefaultBandwidthMeter 建構函式,改用 DefaultBandwidthMeter.Builder
    • 移除 DefaultDrmSessionManager 建構函式,改用 DefaultDrmSessionManager.Builder
    • 移除兩個已淘汰的 HttpDataSource.InvalidResponseCodeException 建構函式,並使用可接受額外欄位(causeresponseBody) 的非淘汰建構函式,加強錯誤記錄功能。
    • 移除 DownloadHelper.forProgressiveDownloadHelper.forHlsDownloadHelper.forDashDownloadHelper.forSmoothStreaming,改用 DownloadHelper.forMediaItem
    • 移除已淘汰的 DownloadService 建構函式,改用未淘汰的建構函式,其中包含提供 channelDescriptionResourceId 參數的選項。
    • 移除已淘汰的字元集 String 常數 (ASCII_NAMEUTF8_NAMEISO88591_NAMEUTF16_NAMEUTF16LE_NAME),改用 kotlin.text 套件、java.nio.charset.StandardCharsetscom.google.common.base.Charsets 中的 Kotlin 字元集。
    • 移除已淘汰的 WorkManagerScheduler 建構函式,改用非已淘汰的建構函式,其中包含提供 Context 參數的選項。
    • 移除已淘汰的 createVideoSampleFormatcreateAudioSampleFormatcreateContainerFormatcreateSampleFormat 方法,這些方法用於例項化 Format 類別。請改用 Format.Builder 建立 Format 的例項。
    • 移除已淘汰的方法 copyWithMaxInputSizecopyWithSubsampleOffsetUscopyWithLabelcopyWithManifestFormatInfocopyWithGaplessInfocopyWithFrameRatecopyWithDrmInitDatacopyWithMetadatacopyWithBitratecopyWithVideoSize,改用 Format.buildUpon() 和設定器方法。
    • 移除已淘汰的 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
      • 請改用 onAudioDecoderInitialized 和/或 onVideoDecoderInitializedonDecoderInitialized
      • 請改用 onAudioInputFormatChanged 和/或 onVideoInputFormatChangedonDecoderInputFormatChanged
      • onDecoderDisabled,請改用 onAudioDisabled 和/或 onVideoDisabled
    • 移除已淘汰的 Player.Listener.onSeekProcessedAnalyticsListener.onSeekProcessed,改用 onPositionDiscontinuityDISCONTINUITY_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.21.0.2 版包含此連結所列的修訂項目。

此版本可對應至 ExoPlayer 2.18.7 版

這個版本包含自 1.0.1 版以來的下列變更:

  • 核心程式庫:
    • 新增 Buffer.isLastSample(),表示 Buffer 是否包含旗標 C.BUFFER_FLAG_LAST_SAMPLE
    • 修正問題:如果最後一個含有影格的樣本在未讀取「串流結尾」樣本的情況下出列,可能不會轉譯最後一個影格。(#11079)。
  • 擷取工具:
    • 修正 MPEG-TS 檔案中 H.265 SPS 的剖析問題,方法是重新使用 RTSP 和 MP4 擷取器已使用的剖析邏輯 (#303)。
  • 文字:
    • SSA:針對開頭為位元組順序標記的 UTF-16 檔案新增支援 (#319)。
  • 工作階段:
    • 修正問題:連線至會更新動作的舊版 MediaSessionCompat 時,MediaController 不會更新可用指令。
    • 修正錯誤,避免 MediaLibraryService 無法針對從 System UI 呼叫 Callback.onGetLibraryRoot 的情況傳回空值 (API 30 適用) (#355)。params.isRecent == true
    • 修正 MediaSessionServiceMediaLibraryService 的記憶體流失問題 (#346)。
    • 修正錯誤:合併的 Timeline 和位置更新 (位於 MediaSession 中) 可能會導致 MediaController 擲回 IllegalStateException

1.0.1 版

2023 年 4 月 18 日

發布了 androidx.media3:media3-*:1.0.11.0.1 版包含以下修訂項目。

此版本可對應至 ExoPlayer 2.18.6 版

  • 核心程式庫:
    • 搜尋預設位置時,重設目標直播覆寫 (#11051)。
    • 修正媒體中空白樣本串流可能導致播放卡住的錯誤。
  • 工作階段:
    • 修正錯誤:舊版 MediaSessionCompat 發布的多個相同佇列項目會在 MediaController 中導致例外狀況 (#290)。
    • 新增遺失的 MediaSession.broadcastCustomCommand 轉送至舊版 MediaControllerCompat.Callback.onSessionEvent (#293)。
    • 修正錯誤:呼叫 MediaSession.setPlayer 時,可用指令不會更新。
    • 修正問題:如果 TrackSelectionOverride 執行個體參照的群組具有 Format.metadata,系統會忽略從 MediaController 傳送的 TrackSelectionOverride 執行個體 (#296)。
    • 修正問題:Player.COMMAND_GET_CURRENT_MEDIA_ITEM 必須可供存取,才能透過舊版 MediaSessionCompat 存取中繼資料。
    • 修正問題:在背景執行緒上的 MediaSession 例項於 MediaSessionService 中使用時,會導致當機 (#318)。
    • 修正問題:程式庫宣告媒體按鈕接收器,但應用程式並未打算這麼做 (#314)。
  • DASH:
    • 修正空白區隔時間軸的處理方式 (#11014)。
  • RTSP:
    • 如果使用 UDP 的 RTSP 設定失敗,並出現 RTSP 錯誤 461 UnsupportedTransport,請使用 TCP 重試 (#11069)。

1.0.0 版本

2023 年 3 月 22 日

發布了 androidx.media3:media3-*:1.0.01.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 版

  • 核心程式庫:
    • 修正 API 33 的網路類型偵測問題 (#10970)。
    • 修正呼叫 ExoPlayer.isTunnelingEnabled 時的 NullPointerException (#10977)。
  • 下載內容:
    • SegmentDownloader 和子類別 (#248) 中,將要合併的兩個區隔的開始時間最大差異設為可設定。
  • 音訊:
    • 修正 Samsung 裝置上無法順暢播放 MP3 的問題 (#8594)。
    • 修正錯誤:停用音訊後立即設定的播放速度可能會遭到先前的速度變更覆寫 (#10882)。
  • 影片:
    • 將 HEVC HDR10 格式對應至 HEVCProfileMain10HDR10,而非 HEVCProfileMain10
    • 針對 Chromecast (支援 Google TV) 和 Lenovo M10 FHD Plus 裝置問題新增解決方法,此問題會導致 60 fps AVC 串流標示為不支援 (#10898)。
    • 修正影格發布效能問題,這類問題會在播放影格速率遠高於螢幕刷新率的媒體時發生。
  • 投放:
    • 修正在媒體項目之間轉場時發生的暫時性 STATE_IDLE 問題 (#245)。
  • RTSP:
    • 在剖析無效的 RTSP Describe 回應訊息時,擷取擲回的 IllegalArgumentException (#10971)。
  • 工作階段:
    • 修正通知的播放/暫停按鈕不會隨著播放器狀態更新的錯誤 (#192)。
  • IMA 擴充功能:
    • 修正錯誤:如果 DAI 串流沒有任何廣告,系統不會收到第一個 (也是唯一一個) LOADED 事件,導致串流無法啟動。

1.0.0-rc01 版

2023 年 2 月 16 日

發布了 androidx.media3:media3-*:1.0.0-rc011.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)。
  • 音訊:
    • 使用壓縮的音訊格式位元率來計算直接播放 (直通) 中 AudioTrack 的緩衝區大小下限。
  • 文字:
    • 如果字幕檔案不含任何提示,請修正 TextRenderer 將無效 (負面) 索引傳遞至 Subtitle.getEventTime 的問題。
    • SubRip:針對開頭為位元組順序標記的 UTF-16 檔案新增支援。
  • 中繼資料:
    • 依據 ID3 v2.4 的許可,從 ID3 影格剖析多個以空值分隔的值。
    • 新增 MediaMetadata.mediaType,來表示內容類型或中繼資料說明的資料夾類型。
    • 新增 MediaMetadata.isBrowsable 以取代 MediaMetadata.folderType。資料夾類型會在下一個版本中淘汰。
  • DASH:
    • 為圖片調整集新增完整剖析功能,包括圖塊數量。(#3752)。
  • UI:
    • 修正已淘汰的 PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener),以確保瀏覽權限變更會傳遞至已註冊的監聽器。(#229)。
    • 修正使用從右到左 (RTL) 版面配置時,PlayerView 內中央播放器控制項的排序方式。(#227)。
  • 工作階段:
    • 新增抽象 SimpleBasePlayer,以協助實作自訂播放器的 Player 介面。
    • 新增輔助方法,將平台工作階段符記轉換為 Media3 SessionToken (#171)。
    • 使用 onMediaMetadataChanged 觸發平台媒體工作階段的更新作業 (#219)。
    • 將媒體工作階段新增為 getMediaButtons()DefaultMediaNotificationProvider 引數,並使用不可變動的清單以確保清晰度。(#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-beta031.0.0-beta03 版包含此連結所列的修訂項目。

此版本可對應至 ExoPlayer 2.18.2 版

  • 核心程式庫:
    • 新增 ExoPlayer.isTunnelingEnabled 來檢查目前所選的音軌是否已啟用穿隧。(#2518)。
    • 新增 WrappingMediaSource 來將換行簡化為 MediaSource。(#7279)。
    • 在播放因可用記憶體不足而卡住時捨棄背景緩衝區。
    • 啟用卸載時關閉追蹤「doSomeWork」區塊。
    • 修正 PlaybackStatsListener 中快速跳轉的工作階段追蹤問題。(#180)。
    • 在單一項目播放清單中呼叫 seekToNextseekToPrevious 時,傳送缺少的 onMediaItemTransition 回呼 (#10667)。
    • 新增 Player.getSurfaceSize,傳回影片算繪所在途徑的大小。
    • 修正在播放器釋出期間移除事件監聽器會導致 IllegalStateException 的錯誤。(#10758)。
  • 版本:
    • 強制執行最低 compileSdkVersion,以避免編譯錯誤。(#10684)。
    • 避免包含在其他 Gradle 版本時,發布模塊。
  • 音軌選取:
    • 如果螢幕不支援 Dolby Vision,則使用其他音軌。 (#8944)。
  • 下載內容:
    • 修正由同一個 PriorityTaskManager 同時下載和播放而在 ProgressiveDownloader 中可能導致的無限迴圈 (#10570)。
    • 立即顯示下載通知。(#183)。
    • 將平行下載移除限制限制在 1 次,以免建立過多執行緒。(#10458)。
  • 影片:
    • 如果螢幕不支援 Dolby Vision,不妨試試替代解碼器。 (#9794)。
  • 音訊:
    • SingleThreadExecutor 用於發布 AudioTrack 執行個體,以免同時發布多個播放器時發生 OutOfMemory 錯誤。(#10057)。
    • 已針對 AudioTrack 卸載狀態新增 AudioOffloadListener.onExperimentalOffloadedPlayback。(#134)。
    • AudioTrackBufferSizeProvider 成為公用介面。
    • 新增 ExoPlayer.setPreferredAudioDevice 以設定偏好的音訊輸出裝置 (#135)。
    • androidx.media3.exoplayer.audio.AudioProcessor 重新命名為 androidx.media3.common.audio.AudioProcessor
    • 將 8 聲道和 12 聲道音訊對應到所有 7.1 和 7.1.4 聲道遮罩 (#10701)。
  • 中繼資料:
    • 現在可以設定 MetadataRenderer,以在中繼資料可用時盡快轉譯。建立具有 MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) 的執行個體,以指定轉譯器要否要提早輸出中繼資料,或與播放器位置同步。
  • DRM:
    • 解決 Android 13 ClearKey 實作中的錯誤,該錯誤會傳回非空白但無效的授權網址。
    • 修正在播放清單中切換數位版權管理配置 (例如 Widevine 至 ClearKey) 時會發生 setMediaDrmSession failed: session not opened 錯誤。
  • 文字:
    • CEA-608:確保系統正確處理欄位 2 的服務切換指令。(#10666)。
  • DASH:
    • 從資訊清單中剖析 EventStream.presentationTimeOffset (#10460)。
  • UI:
    • 將播放器目前的覆寫設定做為 TrackSelectionDialogBuilder 中的預設值使用 (#10429)。
  • 工作階段:
    • 即使某些需要非同步解析,仍可確保指令以正確順序執行 (#85)。
    • 新增 DefaultMediaNotificationProvider.Builder 以建構 DefaultMediaNotificationProvider 執行個體。建構工具可以設定供應商使用的通知 ID、通知管道 ID 和通知管道名稱。此外,請新增方法 DefaultMediaNotificationProvider.setSmallIcon(int),以設定通知小圖示。(#104)。
    • 確保在不捨棄 MediaController.release() 前傳送指令。(#99)。
    • SimpleBitmapLoader 可以從 file:// URI 載入點陣圖 (#108)。
    • 修正防止 MediaController 在一段時間內搜尋廣告 (#122) 的斷言。
    • 播放結束後,MediaSessionService 就會停止在前景播放,並顯示可重新啟動播放上一次所播放媒體項目的通知。(#112)。
    • 請勿為了暫停而啟動具有待處理意圖的前景服務。(#167)。
    • 手動隱藏與 DefaultNotificationProvider 在 API 26 和 API 27 (API 28 以上版本會自動隱藏標記) 上建立通知相關聯的「標記」(#131)。
    • 修正從舊版 MediaSession 至 Media3 MediaController 的第二個繫結機制連線導致 IllegalStateException 的錯誤。(#49)。
  • RTSP:
    • 新增 H263 片段化封包處理 (#119)。
    • 新增對 MP4A-LATM 的支援。(#162)。
  • 我是:
    • 新增載入廣告資訊的逾時事件,以處理 IMA SDK 載入廣告時卡住的情況。(#10510)。
    • 避免在跳轉至內容結尾時略過片中廣告 (#10685)。
    • 針對包含伺服器端插入廣告的直播,正確計算視窗持續時間,例如 IMA DAI (#10764)。
  • 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_CHANGEDPlayer.Listener#onTimelineChanged 呼叫 (#9889)。
    • 如果是漸進式媒體,請只加入在緩衝處理位置選取的曲目 (#10361)。
    • 允許所有 ExoPlayer 記錄輸出使用自訂記錄器 (#9752)。
    • 修正 DefaultMediaSourceFactory 中的 setDataSourceFactory 實作,在某些情況下無法正常運作的問題 (#116)。
  • 擷取工具:
    • 修正 H265 短期參考相片集的剖析問題 (#10316)。
    • 修正從 esds 方塊剖析位元率的問題 (#10381)。
  • DASH:
    • 從資訊清單中剖析 ClearKey 授權網址 (#10246)。
  • UI:
    • 確保 TalkBack 會在播放控制項選單中公告目前使用中的速度選項 (#10298)。
  • RTSP:
    • 新增 VP8 片段化封包處理 (#110)。
  • Leanback 擴充功能:
    • 監聽 LeanbackAdapter 中的 playWhenReady 變更 (10420)。
  • 投放:
    • 請使用已在 CastTimeline 中以 Window.mediaItem 傳遞至播放清單方法的 MediaItem (#25#8212)。
    • 支援使用 CastPlayerPlayer.getMetadata()Listener.onMediaMetadataChanged() (#25)。

1.0.0-beta01 版

2022 年 6 月 16 日

發布了 androidx.media3:media3-*:1.0.0-beta011.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.setDrmSessionManagerProviderMediaSource.Factory.setLoadErrorHandlingPolicy。如有必要,可以明確傳遞 DefaultDrmSessionManagerProviderDefaultLoadErrorHandlingPolicy 的執行個體。
    • 新增 MediaItem.RequestMetadata,方便在 LocalConfiguration 還不明確時,代表播放媒體所需的中繼資料。另外也移除 MediaMetadata.mediaUrl,因為現在這個中繼資料已內含在 RequestMetadata
    • 新增 Player.Command.COMMAND_SET_MEDIA_ITEM,以便讓播放器設定單翼項目。
  • 音軌選取:
    • TrackSelectionOverrides 類別壓平合併至 TrackSelectionParameters,並將 TrackSelectionOverride 升級至頂層類別。
    • TracksInfo 重新命名為 Tracks,並將 TracksInfo.TrackGroupInfo 重新命名為 Tracks.GroupPlayer.getCurrentTracksInfoPlayer.Listener.onTracksInfoChanged 也已經重新命名為 Player.getCurrentTracksPlayer.Listener.onTracksChanged。這包括「取消淘汰」Player.Listener.onTracksChanged 方法名稱,不過參數類型不同。
    • DefaultTrackSelector.buildUponParametersDefaultTrackSelector.Parameters.buildUpon 變更為回傳 DefaultTrackSelector.Parameters.Builder,而不是已淘汰的 DefaultTrackSelector.ParametersBuilder
    • 新增系統預設啟用的 DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities。啟用後,DefaultTrackSelector 會偏好使用頻道數量並未超出裝置輸出能力範圍的音軌。在手持裝置上,DefaultTrackSelector 比起多頻道音訊格式更偏好使用立體聲/單聲道,除非多頻道格式可以設定空間音訊 (Android 12L 以上) 或是 Dolby 環場音效格式。另外,若在可以支援空間音訊的裝置上,則 DefaultTrackSelector 會監控空間音訊化屬性的變更情況,並在變更時觸發選取新的音軌。設有 television UI 模式的裝置不受這些限制,系統會偏好使用最多頻道數量的格式。如要啟用這項功能,必須用 Context 建構 DefaultTrackSelector 執行個體。
  • 影片:
    • DummySurface 重新命名為 PlaceholderSurface
    • 新增 MediaCodecVideoRenderer.getCodecMaxInputSize 的 AV1 支援功能。
  • 音訊:
    • 使用 LG AC3 音訊解碼器通告非標準的 MIME 類型。
    • AudioAttributes.getAudioAttributesV21() 的傳回類型從 android.media.AudioAttributes 變更為新的 AudioAttributesV21 包裝函式類別,防止 API 21 以下會發生 ART 驗證過慢的情況。
    • 在 HTTP 即時串流不分區塊準備時,會發生未設定格式音訊頻道數量的情況,此時請查詢平台 (API 29 以上) 或為音訊直通假設音訊編碼頻道數量 (10204)。
    • 如果解碼器輸出 12 頻道 PCM 音訊,請用頻道遮罩 AudioFormat.CHANNEL_OUT_7POINT1POINT4 設定 AudioTrack (#10322)。
  • DRM
    • 如果在變更格式後需要立即尋求 DRM 工作階段,請確定 DRM 工作階段一律可以正常更新 (10274)。
  • 文字:
    • Player.getCurrentCues() 變更為回傳 CueGroup,而不是 List<Cue>
    • SSA:在 BorderStyle == 3 的情況下支援 OutlineColour 樣式設定 (也就是說 OutlineColour 會設定提示的背景) (#8435)。
    • CEA-708:將資料剖析為多個服務區塊,並忽略並未和目前選取的服務編號相關的區塊。
    • 移除 RawCcExtractor,這個項目只有 Google 內部字幕格式使用。
  • 擷取工具:
    • 新增 AVI 的支援 (#2092)。
    • Matroska:為 Opus 音軌剖析 DiscardPadding
    • MP4:從 esds 方格中剖析位元率。
    • Ogg:允許重複的 Opus ID 及留言標頭 (10038)。
  • UI:
    • 修正 useController=false 時,在 PlayerView 上遞送事件到 OnClickListener 組合的問題 (#9605)。同時,修正所有檢視畫面設定的遞送事件到 OnLongClickListener 的問題。
    • 修正在 ACTION_UP 之前,誤將退出 PlayerView 邊界的觸控事件序列視為點擊的問題 (#9861)。
    • 修正 PlayerView 輕觸時可能會觸發播放而不是隱藏控制項的無障礙功能問題 (#8627)。
    • 重新編寫 TrackSelectionViewTrackSelectionDialogBuilder,以便正確搭配 Player 介面使用,而不是 ExoPlayer。這樣做可讓檢視畫面和其他 Player 實作內容一同使用,並可移除 UI 模組對於 ExoPlayer 模組的依附性。這是一項破壞性變更。
    • 不在 PlayerView 音軌選取器內顯示強制文字音軌,當選擇「None」(無) 時,保留合適的強制文字音軌 (#9432)。
  • DASH:
    • 從 DTS AudioChannelConfiguration 元素剖析頻道數量,這樣便能重新啟用 DTS 串流的音訊直通 (#10159)。
    • 禁止將 null 傳遞至 DashMediaSource.Factory.setCompositeSequenceableLoaderFactory。如果有必要的話,可以明確傳遞 DefaultCompositeSequenceableLoaderFactory 的執行個體。
  • HLS:
    • 如果播放清單的轉碼器屬性並未含有該音訊轉碼器,則使用備用的分區塊準備 (#10065)。
    • 禁止將 null 傳遞至 HlsMediaSource.Factory.setCompositeSequenceableLoaderFactoryHlsMediaSource.Factory.setPlaylistParserFactoryHlsMediaSource.Factory.setPlaylistTrackerFactory。如有需要,可以明確傳遞 DefaultCompositeSequenceableLoaderFactoryDefaultHlsPlaylistParserFactory 的執行個體或 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.setMediaUriMediaSession.Callback.onSetMediaUri。您可以用 MediaController.setMediaItemMediaSession.Callback.onAddMediaItems 達到相同功能。
    • 將舊版的 MediaController 播放媒體呼叫傳遞給 MediaSession.Callback.onAddMediaItems,而不是 onSetMediaUri
    • 新增 MediaNotification.ProviderDefaultMediaNotificationProvider,以便自訂通知內容。
    • 新增 BitmapLoaderSimpleBitmapLoader,以便下載作品圖片。
    • 新增 MediaSession.setCustomLayout(),以便為舊版工作階段提供回溯相容性。
    • 新增 MediaSession.setSessionExtras(),以便提供和舊版工作階段同等的功能。
    • MediaSession.MediaSessionCallback 重新命名為 MediaSession.CallbackMediaLibrarySession.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)。
  • 移除已淘汰的符號:
    • 移除 Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)。改用 Player.Listener.onTracksChanged(Tracks)
    • 移除 Player.getCurrentTrackGroupsPlayer.getCurrentTrackSelections。請改用 Player.getCurrentTracks。您也可以繼續使用 ExoPlayer.getCurrentTrackGroupsExoPlayer.getCurrentTrackSelections,不過這些項目會繼續視為已淘汰的方法。
    • 移除 DownloadHelper DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTDEFAULT_TRACK_SELECTOR_PARAMETERS 等常數。請盡量改為使用 getDefaultTrackSelectorParameters(Context)DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
    • 移除建構函式 DefaultTrackSelector(ExoTrackSelection.Factory)。請改用 DefaultTrackSelector(Context, ExoTrackSelection.Factory)
    • 移除 Transformer.Builder.setContextContext 應改為傳遞至 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.setTrackIdMediaItem.SubtitleConfiguration.Builder.setId 的互動方式,以便優先處理 SubtitleConfiguration 欄位;如果未設定,改回使用 Factory 值 (#10016)。
  • 廣告播放:
    • 修正即時 HLS SSAI 串流中,廣告時段之間的音訊欠載問題。

1.0.0-alpha02 版

2022 年 3 月 2 日

發布了 androidx.media3:media3-*:1.0.0-alpha021.0.0-alpha02 版包含此連結所列的修訂項目。

這與 ExoPlayer 2.17.0 版相對應。

  • 核心程式庫:
    • 新增受保護的方法 DefaultRenderersFactory.getCodecAdapterFactory(),讓覆寫 buildVideoRenderers()buildAudioRenderers()DefaultRenderersFactory 子類別可以存取轉碼器轉接器工廠,並將其傳遞至所建立的 MediaCodecRenderer 執行個體。
    • 將 ICY 標頭欄位 namegenre 分別傳播至 MediaMetadata.stationMediaMetadata.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)。
    • TrackGroupArrayTrackGroup 禁止重複。您隨時可以在 TrackGroup 建構函式中設定 id,藉此區分 TrackGroup。此做法修正使用主動音軌覆寫後,在應用程式背景作業後恢復播放時發生的異常終止問題 (#9718)。
    • 修正 AdaptiveTrackSelection 中的邏輯,允許在網路頻寬足夠時提高品質,即使播放品質已非常接近目前最佳串流品質 (#9784)。
  • 影片:
    • 修正 Dolby Vision 中的解碼器備用邏輯,視需要使用相容的 H264/H265 解碼器。
  • 音訊:
    • 修正 Dolby Atmos (E-AC3-JOC) 的解碼器備用邏輯,視需要使用相容的 E-AC3 解碼器。
    • 變更 AudioCapabilities API,要求明確傳遞 AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES (而非 null)。
    • AudioTrackBufferSizeProvider 插入 DefaultAudioSink,允許自訂 AudioTrack 緩衝區空間的計算方式。(#8891)。
    • 如果要求的緩衝區空間 > 1 MB,請重新嘗試建立 AudioTrack。(#9712)。
  • 擷取工具:
    • WAV:新增 RF64 串流支援 (#9543)。
    • 修正 H.265 SPS NAL 單元的剖析錯誤 (#9719)。
    • 在 Ogg Opus 和 Ogg Vorbis 檔案中剖析 Vorbis 評論 (包括 METADATA_BLOCK_PICTURE)。
  • 文字:
    • 新增 MediaItem.SubtitleConfiguration.id 欄位,系統會將該欄位套用到透過設定建立的字幕軌的 Format.id 欄位 (#9673)。
    • 在 Matroska 容器中新增 WebVTT 字幕的基本支援 (#9886)。
    • 禁止 Cea708Decoder 讀取超過服務區塊宣告的大小。
  • DRM:
    • DrmSessionManager.(pre)acquireSessionplaybackLooper 移除。當自訂 MediaSource 中的應用程式使用 DrmSessionManager 時,必須改將 playbackLooper 傳遞至 DrmSessionManager.setPlayer
  • 廣告播放 / IMA:
    • 新增 IMA 動態廣告插播 (DAI) 支援 (#8213)。
    • 將方法新增至 AdPlaybackState 以允許重設廣告群組,以便系統再次播放廣告群組 (#9615)。
    • 在廣告播放期間強制執行 1.0 的播放速度 (#9018)。
    • 修正廣告群組載入失敗,並導致播放立即重設的問題 (#9929)。
  • UI:
    • 修正使用特定主題時,StyledPlayerView 倒轉和快轉按鈕中數字的顏色 (#9765)。
    • 正確平移播放速度字串 (#9811)。
  • DASH:
    • Representation 中新增剖析的必要和補充屬性 (#9579)。
    • 支援 forced-subtitle 音軌角色 (#9727)。
    • 停止將 main 音軌角色解讀為 C.SELECTION_FLAG_DEFAULT
    • 針對未宣告 DVB 命名空間的資訊清單,修正基本網址排除邏輯 (#9856)。
    • 支援相對 MPD.Location 網址 (#9939)。
  • HLS:
    • 正確填入純音訊 HLS 串流的 Format.label (#9608)。
    • 預設使用不分區塊準備,以縮短啟動時間。如果轉譯內容包含並未在主要播放清單中宣告的互斥隱藏式輔助字幕軌,您應該將該轉譯內容加入主要播放清單以供播放,或是使用 HlsMediaSource.Factory.setAllowChunklessPreparation(false) 關閉不分區塊準備。
    • 支援在 HLS 中準確搜尋主要畫面格 (#2882)。
  • RTSP:
    • 提供用戶端 API 以覆寫任何伺服器連線所用的 SocketFactory (#9606)。
    • 如果兩者同時存在,請優先採用 DIGEST 驗證方法,而非 BASIC 方法 (#9800)。
    • 在 RTSP 音軌時間碼無法使用時處理 (#9775)。
    • 忽略無效的 RTP-Info 標頭值 (#9619)。
  • 轉換程式:
    • 將最低 API 版本提升至 21。
    • TransformationException 現已用於描述轉換期間發生的錯誤。
    • 新增 TransformationRequest 來指定轉換選項。
    • 允許註冊多個事件監聽器。
    • 修正轉換程式在部分轉碼器輸出讀取後卡住的問題。
    • 修正釋出多工器時,Transformer.getProgress 中可能擲回的 NPE。
    • 新增用於套用轉換的試用版應用程式。
  • MediaSession 擴充功能:
    • 根據預設,MediaSessionConnector 現在會在停止時清除播放清單。 如果希望應用程式保留播放清單,可在連接器上呼叫 setClearMediaItemsOnStop(false)
  • Cast 擴充功能:
    • 修正導致 CastPlayer 無法正確呼叫 onIsPlayingChanged 的錯誤 (#9792)。
    • 支援音訊中繼資料,包括有 DefaultMediaItemConverter 的圖片 (#9663)。
  • 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)。
  • 移除已淘汰的符號:
    • 移除 Player.EventListener。改用 Player.Listener
    • 移除 MediaSourceFactory#setDrmSessionManagerMediaSourceFactory#setDrmHttpDataSourceFactoryMediaSourceFactory#setDrmUserAgent。改用 MediaSourceFactory#setDrmSessionManagerProvider
    • 移除 MediaSourceFactory#setStreamKeys。改用 MediaItem.Builder#setStreamKeys
    • 移除 MediaSourceFactory#createMediaSource(Uri)。改用 MediaSourceFactory#createMediaSource(MediaItem)
    • setTagDashMediaSourceHlsMediaSourceSsMediaSource 中移除。改用 MediaItem.Builder#setTag
    • 移除 DashMediaSource#setLivePresentationDelayMs(long, boolean)。使用 MediaItem.Builder#setLiveConfigurationMediaItem.LiveConfiguration.Builder#setTargetOffsetMs 覆寫資訊清單,或使用 DashMediaSource#setFallbackTargetLiveOffsetMs 提供備用值。
    • 移除 (Simple)ExoPlayer.setThrowsWhenUsingWrongThread。無法再選擇不採用執行緒強制執行功能。
    • 移除 ActionFileActionFileUpgradeUtil。使用 ExoPlayer 2.16.1 以下版,以使用 ActionFileUpgradeUtil 將舊版操作檔案合併到 DefaultDownloadIndex
    • 移除 ProgressiveMediaSource#setExtractorsFactory。改用 ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory) 建構函式。
    • 移除 ProgressiveMediaSource.Factory#setTagProgressiveMediaSource.Factory#setCustomCacheKey。改用 MediaItem.Builder#setTagMediaItem.Builder#setCustomCacheKey
    • 移除 DefaultRenderersFactory(Context, @ExtensionRendererMode int)DefaultRenderersFactory(Context, @ExtensionRendererMode int, long) 建構函式。改用 DefaultRenderersFactory(Context) 建構函式、DefaultRenderersFactory#setExtensionRendererModeDefaultRenderersFactory#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-alpha011.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 模組取代)。如此一來,不需使用轉接器/連接器類別,就能直接整合播放器及媒體工作階段。