Media3

媒體用途支援程式庫。
最近更新時間 穩定版 候選版 Beta 版 Alpha 版
2022 年 7 月 22 日 - - 1.0.0-beta02 -

宣告依附元件

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

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

Groovy

dependencies {
    val media3_version = "1.0.0-beta02"

    // For media playback using ExoPlayer
    implementation "androidx.media3:media3-exoplayer:$media3_version"

    // For DASH playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
    // For HLS playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
    // For RTSP playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-ima:$media3_version"

    // For loading data using the Cronet network stack
    implementation "androidx.media3:media3-datasource-cronet:$media3_version"
    // For loading data using the OkHttp network stack
    implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
    // For loading data using librtmp
    implementation "androidx.media3:media3-datasource-rtmp:$media3_version"

    // For building media playback UIs
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

    // For exposing and controlling media sessions
    implementation "androidx.media3:media3-session:$media3_version"

    // For extracting data from media containers
    implementation "androidx.media3:media3-extractor:$media3_version"

    // For integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

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

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

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

    // Common functionality for media database components
    implementation "androidx.media3:media3-database:$media3_version"
    // Common functionality for media decoders
    implementation "androidx.media3:media3-decoder:$media3_version"
    // Common functionality for loading data
    implementation "androidx.media3:media3-datasource:$media3_version"
    // Common functionality used across multiple media libraries
    implementation "androidx.media3:media3-common:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.0.0-beta02"

    // For media playback using ExoPlayer
    implementation("androidx.media3:media3-exoplayer:$media3_version")

    // For DASH playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-dash:$media3_version")
    // For HLS playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-hls:$media3_version")
    // For RTSP playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version")
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-ima:$media3_version")

    // For loading data using the Cronet network stack
    implementation("androidx.media3:media3-datasource-cronet:$media3_version")
    // For loading data using the OkHttp network stack
    implementation("androidx.media3:media3-datasource-okhttp:$media3_version")
    // For loading data using librtmp
    implementation("androidx.media3:media3-datasource-rtmp:$media3_version")

    // For building media playback UIs
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

    // For exposing and controlling media sessions
    implementation("androidx.media3:media3-session:$media3_version")

    // For extracting data from media containers
    implementation("androidx.media3:media3-extractor:$media3_version")

    // For integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

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

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

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

    // Common functionality for media database components
    implementation("androidx.media3:media3-database:$media3_version")
    // Common functionality for media decoders
    implementation("androidx.media3:media3-decoder:$media3_version")
    // Common functionality for loading data
    implementation("androidx.media3:media3-datasource:$media3_version")
    // Common functionality used across multiple media libraries
    implementation("androidx.media3:media3-common:$media3_version")
}

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

意見回饋

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

1.0.0 版本

1.0.0-beta02 版本

2022 年 7 月 22 日

發布 androidx.media3:media3-*:1.0.0-beta021.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:
    • 將廣告輪詢頻率從 100ms 降為 200ms,以符合美國媒體評議會 (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-alpha031.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-alpha02 發布。1.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-alpha01 發布。1.0.0-alpha01 版包含這些修訂版本。

新功能

Media3 是媒體支援程式庫 (包括 ExoPlayer) 的新園地。第一個 Alpha 版包含下列早期功能性程式庫實作,目的是用於實作媒體應用實例:

  • ExoPlayer,這是 Android 的應用程式等級媒體播放器,易於自訂及擴充。
  • 媒體工作階段功能,用於公開和控制播放。這個新的工作階段模組使用與 ExoPlayer 相同的 Player 介面。
  • 用於建立媒體播放使用者介面的 UI 元件。
  • 其他程式庫中可與 ExoPlayer 搭配使用的模組包裝功能,例如透過 IMA SDK 插入廣告。

詳情請參閱 Media3 GitHub 專案

ExoPlayer 先前是在另一個 ExoPlayer GitHub 專案中代管。在 Media3 中,其套件名稱為 androidx.media3.exoplayer。我們打算持續維護及發布 ExoPlayer GitHub 專案一段時間,讓應用程式有時間遷移至 Media3。Media3 將取代所有 ExoPlayer 模組 (舊版 Media2 和 mediasession 擴充功能除外,前述兩者會以新版 media3-session 模組取代)。如此一來,不需使用轉接器/連接器類別,就能直接整合播放器及媒體工作階段。