Media3
媒體用途的支援程式庫。
最近更新時間 穩定版 候選版 Beta 版 Alpha 版
2024 年 6 月 26 日 1.3.1 - 1.4.0-beta01 1.4.0-alpha02

宣告依附元件

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

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

Groovy

dependencies {
    def media3_version = "1.3.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
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

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

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

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

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

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

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

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

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

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

Kotlin

dependencies {
    val media3_version = "1.3.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
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

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

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

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

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

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

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

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

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

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

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

意見回饋:

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

1.4.0 版

1.4.0-beta01 版

2024 年 6 月 26 日

發布了 androidx.media3:media3-*:1.4.0-beta01。1.4.0-beta01 版包含這些修訂版本

  • ExoPlayer:
    • 新增 ExoPlayer.isReleased() 以檢查是否已呼叫 Exoplayer.release()
    • 新增 ExoPlayer.Builder.setMaxSeekToPreviousPositionMs 來設定 seekToPrevious() 跳轉至上一個項目的最高位置 (#1425)。
  • 轉換程式:
    • 移除ExportResult.processedInputs欄位。如果透過這個欄位取得轉碼器詳細資料,請改用 DefaultDecoderFactory.listener。如果是轉碼器例外狀況,您可以在 ExportException.codecInfo 中找到轉碼器詳細資料。
  • 擷取工具:
    • 修正 AVI 容器中的 PCM 音訊格式擷取問題。
  • 圖片:
    • 允許 null 做為 ExoPlayer.setImageOutput 的參數,清除先前設定的 ImageOutput
  • 效果:
    • 移除未使用的 OverlaySettings.useHdr,因為重疊的動態範圍和影格必須相符。
    • TextOverlay 新增 HDR 支援。文字重疊的亮度可使用 OverlaySettings.setHdrLuminanceMultiplier 調整。
  • 工作階段:
    • 新增 MediaSession.Callback.onPlayerInteractionFinished 以在特定控制器完成一系列玩家互動時通知工作階段。
    • 新增 SessionError 並用於 SessionResultLibraryResult (而非錯誤代碼) 中,以提供更多錯誤相關資訊和如何盡可能解決錯誤。
    • 為 media3 控制器測試應用程式發布程式碼,可用於測試與發布媒體工作階段的應用程式的互動。
    • 將傳遞至 media3 的 MediaSession[Builder].setSessionExtras() 的額外項目傳播至 media1 控制器的 PlaybackStateCompat.getExtras()
    • 將平台工作階段的嚴重和一般錯誤對應到平台工作階段。PlaybackException 會對應至 PlaybackStateCompat 的嚴重錯誤狀態。使用 MediaSession.sendError(ControllerInfo, SessionError) 傳送至媒體通知控制器的 SessionError 會對應至 PlaybackStateCompat 中的一般錯誤,這表示已設定錯誤代碼和訊息,但平台工作階段的狀態與 STATE_ERROR 不同。
  • UI:
    • 在連線至 ExoPlayer 時為 PlayerView 新增圖片顯示支援功能 (#1144)。
    • 透過 XML 屬性在 PlayerControlView 中新增各種圖示的自訂功能,允許每個 PlayerView 執行個體使用不同的可繪項目,而非全域覆寫 (#1200)。
  • HLS 擴充功能:
    • 修正在即時播放期間,非主要播放播放清單不會重新整理的錯誤 (#1240)。
  • 移除已淘汰的符號:
    • 移除 Bundleable 介面。包括移除所有 Bundleable.Creator<Foo> CREATOR 常數欄位。呼叫者應改為針對每種類型使用 Bundle toBundle()static Foo fromBundle(Bundle) 方法。

1.4.0-alpha02 版

2024 年 6 月 7 日

發布了 androidx.media3:media3-*:1.4.0-alpha02。1.4.0-alpha02 版包含這些修訂版本

  • 一般程式庫:
    • 將假設的免人工跳轉呼叫轉送至受保護的 BasePlayer.seekToSimpleBasePlayer.handleSeek 方法,而不是忽略這些呼叫。如要在自訂播放器中實作這些方法,可能需要使用 mediaItemIndex == C.INDEX_UNSET 處理這些額外呼叫。
    • 移除強化版 Java 8 脫糖的編譯依附元件。(#1312)。
    • 確保針對非圖片 MediaItem 忽略傳遞至 MediaItem.Builder.setImageDurationMs 的時間長度 (如說明文件所述)。
  • ExoPlayer:
    • reset 新增至 BasePreloadManager,藉此釋出所有保留來源,同時保留預先載入管理員例項。
    • 新增 ExoPlayer.setPriority (和 Builder.setPriority) 來定義用於 PriorityTaskManager 的優先順序值,以及用於 MediaCodec 重要性 (來自 API 35)。
    • 修正問題:更新最後一個重新緩衝時間,導致 CMCD 中的 bs (緩衝區飢餓) 金鑰不正確。(#1124)。
    • 新增 PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource),表示來源已載入至結尾。這可讓 DefaultPreloadManager 和自訂 PreloadMediaSource.PreloadControl 實作項目預先載入下一個來源或採取其他動作。
    • 修正在項目結尾無聲略過可觸發播放例外狀況的錯誤。
    • clear 新增至 PreloadMediaSource,捨棄預先載入期間。
    • 新增錯誤代碼 PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED,用於針對優先順序較高的工作回收轉碼器資源。
    • AdsMediaSource 在初始內容媒體內容準備完成前載入片頭廣告 (#1358)。
    • 修正在原始期間已從資訊清單中移除原始期間後,將多時段 DASH 直播重新準備時,播放作業移至 STATE_ENDED 的錯誤。
    • PreloadMediaSource.PreloadControl 中的 onTimelineRefreshed 重新命名為 onSourcePrepared,並將 onPrepared 重新命名為 onTracksSelected。請一併重新命名 DefaultPreloadManager.Stage 中的 IntDefs。
    • 新增動態排程的實驗性支援,讓工作與 CPU 喚醒週期更一致,並在轉譯器可進度時延遲喚醒。您可以在設定 ExoPlayer 執行個體時使用 experimentalSetDynamicSchedulingEnabled 啟用這項功能。
    • 新增 Renderer.getDurationToProgressMsRenderer 可實作此方法來返回 ExoPlayer,在轉譯器播放前必須提前播放該時間長度。如果透過 experimentalSetDynamicSchedulingEnabled 設定 ExoPlayer,則 ExoPlayer 在計算排定工作工作的時間時,會呼叫這個方法。
    • 新增 MediaCodecAdapter#OnBufferAvailableListener,在輸入和輸出緩衝區可供 MediaCodecRenderer 使用時發出快訊。在收到這些回呼時,MediaCodecRenderer 會發出 ExoPlayer 信號;如果 ExoPlayer 設為使用 experimentalSetDynamicSchedulingEnabled,則 ExoPlayer 會安排工作迴圈的時間,因為轉譯器可以繼續進行。
    • 針對 LoadControl 方法使用資料類別,而非個別參數。
  • 轉換程式:
    • 解決在處理 PCM 輸入時限制立體聲聲道數量的解碼器錯誤。
    • ExoPlayerAssetLoader 選取音軌時,請忽略音軌數量限制,因為這些音軌僅適用於播放。
    • androidx.media3.transformer.Muxer 介面替換為 androidx.media3.muxer.Muxer,並移除 androidx.media3.transformer.Muxer
    • 修正從內容 URI 配置載入 HEIC 圖片的問題。(#1373)。
    • 調整「AudioGraphInput」中的音軌時間長度,提升影音同步效果。
  • 擷取工具:
    • MPEG-TS:向前轉動變更,將串流的最後一個存取單位傳遞至範例佇列,確保最後一個影格轉譯完成 (#7909)。整合修正以解決僅限 IFrame 串流(#1150) 和 H.262 HLS 串流出現的問題 (#1126)。
    • MP3:優先使用 Info 影格的資料大小,而非基礎串流回報的大小 (例如檔案大小或 HTTP Content-Length 標頭)。這有助於從固定位元率尋求計算中排除無法播放的預告片資料 (例如專輯圖片),求得更準確 (#1376)。
    • MP3:使用 Info 影格中的影格數和其他資料 (如有) 計算固定位元率搜尋時的平均位元率,而不是從 Info 影格之後的影格位元率中外推。例如 PCUT 影格 (#1376)。
  • 音訊:
    • 修正直通播放的 DTS:X 設定檔 2 編碼屬性 (#1299)。
    • 如果是卸載播放,請在呼叫 AudioTrack.stop() 之前,在 DefaultAudioSink 中重設串流完成的追蹤欄位,讓 AudioTrack.StreamEventCallback#onPresentationEnded 正確識別已播放所有待處理資料。
    • 修正 SilenceSkippingAudioProcessor 中不同音訊格式轉換 (例如將立體聲轉換為單聲道) 的錯誤可能會導致處理器擲回例外狀況 (#1352)。
    • 實作 MediaCodecAudioRenderer.getDurationToProgressUs,讓 ExoPlayer 以動態方式排定 MediaCodecAudioRenderer 可啟動進度的主要工作迴圈。
  • 影片:
    • 修正 Dolby Vision 的解碼器備用邏輯,視需要使用相容的 AV1 解碼器 (#1389)。
  • 文字:
    • 修正在略過跳轉位置前開始字幕的問題。此問題僅在 Media3 1.4.0-alpha01 中推出。
    • 變更預設的子標題剖析行為,以在擷取期間而非轉譯期間發生 (請參閱 ExoPlayer 的架構圖來瞭解擷取和轉譯之間的差異)。
      • 您可以呼叫 MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)TextRenderer.experimentalSetLegacyDecodingEnabled(true) 來覆寫這項變更。請參閱自訂說明文件,瞭解如何將這些元件整合至 ExoPlayer 執行個體。日後推出的版本將移除這些方法 (以及所有對舊版字幕解碼的支援)。
      • 具有自訂 SubtitleDecoder 實作的應用程式需要更新,才能實作 SubtitleParser (以及 SubtitleParser.Factory 而非 SubtitleDecoderFactory)。
    • PGS:修正執行長度解碼,將 0 解析為顏色索引,而非常值顏色值 (#1367)。
    • CEA-708:忽略 rowLock 值。CEA-708-E S-2023 規格指出,無論串流中的值為何,系統應將 rowLockcolumnLock 都假設為 true (未實作 columnLock 支援,因此實際上會假設為一律為 false)。
      • 這項變更原本包含在 1.3.0-alpha01 版本資訊中,但這項變更在 1.3.0-rc01 發布前不小心還原。我們已修正此問題,讓變更再次顯示。
    • CEA-708:避免 ExoPlayer 對「設定畫筆位置」指令以無方式新增重複的換行符號 (#1315)。
  • 中繼資料:
    • 修正 MP4 與 ID3 排序標記的對應問題。先前的「專輯排序」(soal)、「演出者排序」(soar) 和「專輯演出者排序」(soaa) MP4 標記錯誤對應到 TSO2TSOATSOP ID3 標記 (#1302)。
    • 修正在值超過一個位元組時,讀取 MP4 (/iTunes) 數值 gnre (類型) 和 tmpo (tempo) 標記的問題。
    • 將 ID3 TCON 影格傳播至 MediaMetadata.genre (#1305)。
  • 圖片:
    • 新增非正方形 DASH 縮圖格線支援。(#1300)。
    • 針對 API 34 以上版本新增 AVIF 支援功能。
  • 資料來源:
    • 允許 ByteArrayDataSourceopen() 期間解析位元組陣列的 URI,而非在建構時進行硬式編碼 (#1405)。
  • DRM:
    • 允許在 DefaultDrmSessionManagerProvider 上設定 LoadErrorHandlingPolicy。(#1271)。
  • 效果:
    • 修正與 ExoPlayer#setVideoEffects 搭配使用時 TimestampWrapper 當機的錯誤。(#821)。
    • 將預設的 SDR 色彩工作空間從線性色彩變更為電氣 BT 709 SDR 影片。並提供第三個選項來保留原始色彩空間。
    • 允許定義 EditedMediaItemSequences 的不定 Z 順序 (#1055)。
    • 在 HDR 內容的不同片段之間維持一致的亮度範圍 (使用 HLG 範圍)。
    • 在 HDR 內容中新增 Ultra HDR (點陣圖) 疊加層支援功能。
    • 允許在 API 26 之前使用 SeparableConvolution 效果。
  • IMA 擴充功能:
    • 將播放 DAI 廣告串流所需的 API 升級為穩定版。
    • replaceAdTagParameters(Map <String, String>) 新增至 ImaServerSideAdInsertionMediaSource.AdLoader,以便在執行階段替換廣告代碼參數。
    • 修正在廣告播放期間發生播放器錯誤時,未呼叫 VideoAdPlayer.VideoAdPlayerCallback.onError 的錯誤。(#1334)。
    • 使用 data:// 廣告代碼 URI 時,將 IMA SDK 版本遞增升級至 3.33.0 以修正 NullPointerException (#700)。
  • 工作階段:
    • 不要將時間長度設為平台工作階段中繼資料,以在直播的媒體通知中隱藏跳轉列 (#1256)。
    • MediaMetadata 轉換對齊 MediaDescriptionCompat,以便在選擇中繼資料屬性與 media1 時使用相同的偏好順序和邏輯。
    • 新增 MediaSession.sendError(),允許將一般錯誤傳送至 Media3 控制器。使用通知控制器 (請參閱 MediaSession.getMediaNotificationControllerInfo()) 時,自訂錯誤是用來將平台工作階段的 PlaybackState 更新為包含指定錯誤資訊的錯誤狀態 (#543)。
  • Cronet 擴充功能:
    • 修正 CronetDataSource 中的 SocketTimeoutException。在部分 Cronet 版本中,回呼提供的要求不一定相同。這會導致回呼未完成,並要求逾時 (https://issuetracker.google.com/328442628)。
  • HLS 擴充功能:
    • 修正 HlsSampleStreamWrapper 中等待不連續性的待處理 EMSG 範例委派代表,而偏移值不正確,導致 IndexOutOfBoundsExceptionIllegalArgumentException (#1002)。
    • 修正 LL-HLS 串流持續重新載入非主要播放清單的錯誤。(#1240)。
    • 修正透過初始化區隔為 HTTP 即時串流啟用 CMCD 時,會導致 Source ErrorIllegalArgumentException 的錯誤。
  • DASH 擴充功能:
    • 修正重新準備多時段直播時可能會擲回 IndexOutOfBoundsException 的錯誤 (#1329)。
    • 新增對 dashif:Laurl 授權網址的支援。(#1345)。
  • Cast 擴充功能:
    • 修正將 MediaQueueItem 的專輯名稱轉換為 Media3 媒體項目中的藝人的錯誤。(#1255)。
  • 試用版應用程式..
    • 允許透過指令列使用 Intent 引數設定重複模式。(#1266)。
  • 移除已淘汰的符號:
    • 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)。

1.4.0-alpha01 版

2024 年 4 月 17 日

發布了 androidx.media3:media3-*:1.4.0-alpha01。1.4.0-alpha01 版包含這些修訂版本

  • ExoPlayer:
    • 新增 BasePreloadManager,根據 rankingData 定義的優先順序協調多個來源的預先載入作業。擴充此類別即可自訂。新增 DefaultPreloadManager,這會使用 PreloadMediaSource 將來源的媒體範例預先載入到記憶體,並且使用整數 rankingData 表示 UI 中的項目索引。
    • PlayerId 新增至 LoadControl 的大多數方法,啟用 LoadControl 實作來支援多個播放器。
    • 移除 Buffer.isDecodeOnly()C.BUFFER_FLAG_DECODE_ONLY。您不需要將此標記設為轉譯器,解碼器會依據時間戳記決定略過緩衝區。自訂 Renderer 實作應檢查緩衝時間是否至少為 BaseRenderer.getLastResetPositionUs(),以判斷是否應顯示範例。自訂 SimpleDecoder 實作項目可視需要檢查 isAtLeastOutputStartTimeUs,或使用 DecoderOutputBuffer.shouldBeSkipped 標示其他緩衝區來略過緩衝區。
    • 允許 TargetPreloadStatusControl.getTargetPreloadStatus(T) 傳回空值,表示不要使用指定的 rankingData 預先載入 MediaSource
    • BasePreloadManager 中新增 remove(MediaSource)
  • 轉換程式:
    • audioConversionProcessvideoConversionProcess 新增至 ExportResult,說明輸出檔案中個別音軌的建立方式。
    • 放鬆修剪最佳化 H.264 層級檢查。
    • 新增透過序列切換 SDR 和 HDR 輸入媒體的支援。
    • 新增樂曲層級音效支援功能。
    • 新增將 Ultra HDR 圖片轉碼為 HDR 影片的支援功能。
    • 修正 DefaultAudioMixer 在重設並重複使用後,無法輸出正確位元組數的問題。
  • 影片:
    • 修正在切換播放中途徑時,Listener.onRenderedFirstFrame() 太早送達的問題。
  • 資料來源:
    • android.resource://package/id 原始資源 URI 實作支援,其中 package 與目前應用程式的套件不同。先前未記為可正常運作,但在存取其他套件中的資源會比依名稱存取資源更有效率。
    • 立即檢查 DataSpec 建構函式中的 url 為非空值。這個參數已加註為非空值。
  • 效果:
    • 支援在 SpeedChangeEffect 中的相同 EditedMediaItemComposition 內多次變更速度。
    • 支援超 HDR 點陣圖輸入的 HLG 和 PQ 輸出。
    • 新增對 EGL_GL_COLORSPACE_BT2020_HLG_EXT 的支援,改善 ExoPlayer.setVideoEffect 和 Transformer DebugSurfaceView 中的 HLG 介面輸出內容。
    • 翻轉 setOverlayFrameAnchor() 中套用的 x 和 y 值,以更新重疊矩陣實作方式,使其與說明文件一致。如果使用 OverlaySettings.Builder.setOverlayFrameAnchor(),請將 x 和 y 值乘以 -1,即可翻轉其 x 和 y 值。
  • 工作階段:
    • CommandButton.enabled 的預設值變更為 true,並確保控制器的值即使有關聯指令可用,仍會保持 false。
    • CommandButton 新增圖示常數,應使用,而非自訂圖示資源。
    • 新增 MediaSessionService.isPlaybackOngoing(),讓應用程式查詢是否需要在 onTaskRemoved() 中停止服務。(#1219)。
    • 新增 MediaSessionService.pauseAllPlayersAndStopSelf(),方便暫停播放所有工作階段並呼叫 stopSelf 以終止 MediaSessionService 的生命週期。
    • 覆寫 MediaSessionService.onTaskRemoved(Intent) 以提供安全的預設實作項目,讓服務在播放期間持續在前景執行,或以其他方式停止服務。
  • 下載內容:
    • 確保 DownloadHelper 不會洩漏未發布的 Renderer 例項,否則最終可能會導致應用程式因 IllegalStateException: Too many receivers, total of 1000, registered for pid 而異常終止 (#1224)。
  • 測試公用程式:
    • FakeRenderer 中實作 onInit()onRelease()
    • 變更 TestPlayerRunHelper.runUntil/playUntil 方法,避免發生重大錯誤 (例如回報給 AnalyticsListener.onVideoCodecError 的錯誤)。請使用新的 TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() 方法鏈結停用這項行為。
  • 試用版應用程式..
    • 在短版試用版應用程式中使用 DefaultPreloadManager
  • 移除已淘汰的符號:
    • 移除 CronetDataSourceFactory。改用 CronetDataSource.Factory
    • 移除部分 DataSpec 建構函式。改用 DataSpec.Builder

1.3.0 版

1.3.1 版

2024 年 4 月 11 日

發布了 androidx.media3:media3-*:1.3.1。1.3.1 版包含這些修訂版本

  • 一般程式庫:
    • 新增 Format.labels 以允許本地化或其他替代標籤。
  • ExoPlayer:
    • 修正 PreloadMediaPeriod 在重新載入時無法保留串流的問題。
    • 將對應的 TrackSelectionResult 套用至曲目重新選取播放期間的播放期間。
    • 請等到媒體項目切換時,才能推進播放期,再啟動早期啟用的轉譯器。(#1017)。
    • DefaultVideoFrameProcessor.Factory.Builder.build() 的 Proguard -keepclasseswithmembers 規則新增缺少的傳回類型。(#1187)。
  • 轉換程式:
    • 新增解決因 MediaMuxer 不支援 API 30 之前的負面呈現時間戳記而擲回的例外狀況。
  • 音軌選取:
    • DefaultTrackSelector:偏好使用「合理」影格速率 (>=10fps) 的視訊軌,而不是低影格速率或不設定畫面的影片。這可確保玩家從動態相片中擷取「真實」視訊軌,其中包含兩組 HEVC 軌跡,其中兩個 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:
    • 解決在部分 Android 14 裝置上,可由 MediaDrm 架構擲回的 NoSuchMethodError,而非 ResourceBusyExceptionNotProvisionedException (#1145)。
  • 效果:
    • 透過轉換色域,從 PQ 改善到 SDR 色調對應。
  • 工作階段:
    • 修正當控制器取代目前項目時,目前位置跳回的問題 (#951)。
    • 修正僅含有非空值 extrasMediaMetadata 不會在媒體控制器和工作階段之間傳輸的問題 (#1176)。
  • UI:
    • 如果 Locale 無法辨識顯示名稱,就會加入音軌語言名稱的備用方案 (#988)。
  • DASH 擴充功能:
    • 將資訊清單中的所有 Label 元素填入 Format.labels (#1054)。
  • RTSP 擴充功能:
    • 略過 SDP 剖析 (#1087) 中的空白工作階段資訊值 (i-tag)。
  • 解碼器擴充功能 (FFmpeg、VP9、AV1、MIDI 等):
    • 預設停用 MIDI 擴充功能做為本機依附元件,因為必須設定額外的 Maven 存放區。如果使用者需要本機依附元件中的這個模組,可以重新啟用該模組

1.3.0 版

2024 年 3 月 6 日

發布了 androidx.media3:media3-*:1.3.0。1.3.0 版包含這些修訂版本

  • 一般程式庫:
    • 實作 android.resource://package/[type/]name 原始資源 URI 的支援功能,其中 package 與目前應用程式的套件不同。我們一直記錄這種方法可以正常運作,但到目前為止並未正確實作。
    • 請將應用程式程式碼設定的 MIME 類型正規化,或從媒體讀取到完全小寫。
    • 使用完整的 MediaItem (而非 AdPlaybackState 中的單一 Uri) 定義廣告。
    • minSdk 調高至 19 (Android KitKat)。與所有其他 AndroidX 程式庫一致,我們必須升級至最新版本的 AndroidX 依附元件。
    • 當至少一個非空值時,在 MediaMetadata.Builder.populate(MediaMetadata) 中填入 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 實作 HttpEngineDataSource (HttpDataSource)。
    • 禁止將 CompositeSequenceableLoader 設為子類別。這個元件先前設為可擴充,但從未在程式庫中建立子類別。自訂作業則可使用裝飾器模式包裝執行個體,並導入自訂的 CompositeSequenceableLoaderFactory
    • 修正重複時間會導致這個項目的中繼資料遭到清除的問題 (#1007)。
    • BundledChunkExtractor.FactoryDefaultHlsExtractorFactory 中的 experimentalSetSubtitleParserFactory 方法重新命名為 setSubtitleParserFactory,並禁止傳遞 null。您可以使用新的 experimentalParseSubtitlesDuringExtraction(boolean) 方法控管剖析行為。
    • 新增對自訂在擷取期間所用 SubtitleParser.Factory 的支援功能。這可以用 MediaSource.Factory.setSubtitleParserFactory() 達成。
    • 將來源前置字串新增至從 MergingMediaSource 產生的所有 Format.id 欄位。這有助於識別產生 Format 的來源。(#883)。
    • 修正用於驗證自訂共用媒體用戶端資料 (CMCD) 金鑰名稱的規則運算式,修改後只檢查連字號 (#1028)。
    • 停止雙重編碼 CMCD 查詢參數 (#1075)。
  • 轉換程式:
    • 支援壓平 H.265/HEVC SEF 慢動作影片。
    • 提高混合速度,特別是當「移除影片」編輯時。
    • 新增 API,確保輸出檔案會在影片影格上啟動。如此一來,剪輯作業的輸出內容就能更相容於在顯示時間戳記之前 (#829) 之前未顯示第一個影片影格的玩家實作項目。
    • 新增對單一資產 MP4 剪輯作業最佳化的支援。
    • 新增支援功能,確保影片影格在輸出檔案中具有第一個時間戳記。修正在 iOS 遊戲中,以黑色影格開頭的輸出檔案 (#829)。
  • 音軌選取:
    • 新增 DefaultTrackSelector.selectImageTrack 以啟用映像檔軌選取功能。
    • 新增 TrackSelectionParameters.isPrioritizeImageOverVideoEnabled 以決定是否同時選取圖片軌或影片軌。預設值為 false,表示優先選取影片音軌。
  • 擷取工具:
    • 將其他 AV1C 剖析新增至 MP4 擷取器,以擷取 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 支援,因此實際上會假設為一律為否)。
  • 圖片:
    • 新增 DASH 縮圖支援功能。格線圖片會經過裁剪,並使用接近呈現時間的 ImageOutput 提供的個別縮圖。
  • DRM:
  • IMA 擴充功能:
    • 修正無法在缺少適當副檔名的情況下播放 DASH 和 HLS 廣告的問題。
  • 工作階段:
    • 停用電視應用程式的按兩下偵測功能 (#962)。
    • 修正僅含有非空值額外項目的 MediaItem.RequestMetadata 無法在媒體控制器和工作階段之間傳輸的問題。
    • 將建構函式新增至僅接受 Context (而非 MediaLibraryService) 的 MediaLibrarySession.Builder 建構函式。
  • HLS 擴充功能:
    • HlsMediaPeriod 減少為私人套件的瀏覽權限。這個類型不應直接從 HLS 套件外部依附。
    • 解析功能可更有效率地跳轉至區段的開頭 (#1031)。
  • 解碼器擴充功能 (FFmpeg、VP9、AV1、MIDI 等):
    • MIDI 解碼器:忽略 SysEx 事件訊息 (#710)。
  • 測試公用程式:
    • 不要在TestPlayerRunHelper.playUntilPosition後暫停播放。這項測試會將播放保持在播放狀態,但會暫停進度,直到測試能夠新增斷言和進一步操作為止。
  • 試用版應用程式..
    • 新增簡短示範模組,示範將 PreloadMediaSource 與短篇內容應用實例搭配使用。

1.3.0-rc01 版

2024 年 2 月 22 日

使用 1.3.0 穩定版

1.3.0-beta01 版

2024 年 2 月 7 日

使用 1.3.0 穩定版

1.3.0-alpha01 版

2024 年 1 月 15 日

使用 1.3.0 穩定版

1.2.0 版

1.2.1 版

2024 年 1 月 9 日

  • ExoPlayer:
    • 修正問題:手動跳轉至 LiveConfiguration.min/maxOffset 範圍之外的位置,持續將偏移值調整回 min/maxOffset
    • 修正 3、5、6、7 和 8 個管道的 OPUS 和 VORBIS 管道版面配置錯誤的問題 (#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 的裝置問題新增解決方法,導致系統將 60fps 的 AVC 串流標示為不支援 (#693)。
  • 中繼資料:
    • 修正僅透過大寫金鑰 Vorbis 註解填入 MediaMetadata 的錯誤 (#876)。
    • 在剖析非常大型的 ID3 影格時擷取 OutOfMemoryError,這表示播放作業可以在沒有標記資訊的情況下繼續,而不會完全播放失敗。
  • DRM:
    • 將錯誤的 ClearKey https://default.url 授權網址的解決方法擴大至 API 33 以上版本 (先前僅適用於 API 33),(#837)。
    • 修正從加密模式切換為清除內容 (無連接介面時) 時發生的 ERROR_DRM_SESSION_NOT_OPENED 問題。這個錯誤是因為誤用安全解碼器播放清楚的內容。
  • 工作階段:
    • MediaMetadataCompat 中的自訂鍵和值放入 MediaMetadata.extras,並將 MediaMetadata.extras 放入 MediaMetadataCompat (#756#802)。
    • 修正為舊版控制器廣播 notifyChildrenChanged 的問題。(#644)。
    • 修正在通知中為已停用的 setWhen 計時器設定負值時,會導致某些裝置當機的錯誤 (#903)。
    • 修正在系統要求第一次通知更新時,媒體通知控制器沒有完成連線時的 IllegalStateException (#917)。
  • UI:
    • 修正在 BottomSheetDialogFragment 中與 Material Design 搭配使用時,無法顯示前進和倒轉按鈕的問題 (#511)。
    • 修正 PlayerControlView 中快速快轉按鈕的數字無法對齊的問題 (#547)。
  • DASH 擴充功能:
    • 在 DASH 資訊清單 (#688) 中,將「f800」剖析為 Dolby 的聲道數。
  • 解碼器擴充功能 (FFmpeg、VP9、AV1、MIDI 等):
    • MIDI:修正跳轉時略過程式變更事件的問題。(#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 包含其他參數,包括現有的 playbackPositionUs 以外的 playbackSpeedlastRebufferRealtimeMs
    • ChunkSource 介面中的 ChunkSource.getNextChunk(long, long, List, ChunkHolder) 方法強化為 ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
    • 在通用媒體用戶端資料 (CMCD) 記錄中加入其他欄位:緩衝區星號 (bs)、期限 (dl)、播放速率 (pr) 和啟動 (su) (#8699)。
    • 將亮度和色度位元新增至 ColorInfo (#491)。
    • 在通用媒體客戶資料 (CMCD) 記錄中新增其他欄位:下一個物件要求 (nor) 和下一個範圍要求 (nrr) (#8699)。
    • 新增使用查詢參數 (#553) 傳輸常用媒體客戶資料 (CMCD) 資料的功能。
    • 修正 ExperimentalBandwidthMeter 中的 ConcurrentModificationException (#612)。
    • CompositeMediaSource.getMediaTimeForChildMediaTime 中新增 MediaPeriodId 參數。
    • 支援 ConcatenatingMediaSource2 中的 ClippingMediaSource (以及具有週期/時間範圍偏移的其他來源) (#11226)。
    • 變更 BaseRenderer.onStreamChanged(),以便一併接收 MediaPeriodId 引數。
  • 轉換程式:
    • 剖析圖片輸入內容的 EXIF 旋轉資料。
    • 移除 TransformationRequest.HdrMode 註解類型及其相關聯的常數。請改用 Composition.HdrMode 及其相關聯的常數。
    • 簡化 OverlaySettings 來修正旋轉問題。
    • 已將 SampleConsumer.queueInputBitmapframeRatedurationUs 參數變更為 TimestampIterator
  • 音軌選取:
    • 新增 DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness 以明確允許或禁止非流暢的調整作業。預設會維持目前的 true 行為。
  • 擷取工具:
    • MPEG-TS:將串流的最後一個存取單位傳遞至範例佇列,確保最後一個影格轉譯完成 (#7909)。
    • 修正判斷 rotationDegrees 時的錯字。已將 projectionPosePitch 變更為 projectionPoseRoll (#461)。
    • 移除可以使用 instanceof 直接檢查 Extractor 例項的這項假設。如果要在執行階段存取 Extractor 的實作詳細資料,您必須先呼叫 Extractor.getUnderlyingInstance
    • 新增 BmpExtractor
    • 新增 WebpExtractor
    • 新增 HeifExtractor
    • QuickTime 傳統版支援新增至 Mp4Extractor
  • 音訊:
    • 在 MP4 和 Matroska 中新增對 24/32 位元大端序 PCM 的支援,以及在 MP4 中剖析 lpcm 的 PCM 編碼。
    • 新增擷取 MP4 中 Vorbis 音訊的功能。
    • 新增 AudioSink.getFormatOffloadSupport(Format),用於擷取接收器可透過 DefaultAudioOffloadSupportProvider 為格式提供的卸載支援層級。這個方法會傳回包含 isFormatSupportedisGaplessSupportedisSpeedChangeSupported 的新 AudioOffloadSupport
    • 新增 AudioSink.setOffloadMode(),並設定音訊接收器上的卸載設定。預設值為 AudioSink.OFFLOAD_MODE_DISABLED
    • 您可以透過 TrackSelectionParameters 中的 setAudioOffloadPreference 啟用卸載。如果啟用偏好設定,裝置支援該格式卸載,且音軌選取作業為單一音軌,系統就會啟用音訊卸載。
    • 如果將 audioOffloadModePreference 設為 AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED,則 DefaultTrackSelector 只會在卸載中支援該音軌格式時,才會選取音軌。如果卸載不支援任何音軌,就不會選取音軌。
    • 在追蹤轉換後,如果 API 級別 33 之前發生播放位置問題,停用在 API 級別 33 之前的卸載支援功能。
    • DefaultRenderersFactory.buildAudioSink 方法簽章中移除參數 enableOffload
    • 移除方法 DefaultAudioSink.Builder.setOffloadMode
    • 移除 intdef 值 DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
    • 新增對 Opus 在卸載播放期間無礙中繼資料的支援。
    • 如果在首次寫入失敗時停用卸載,允許轉譯器復原。(#627)。
    • 根據預設,啟用純音訊卸載播放功能時,啟用卸載排程功能。
    • 刪除 ExoPlayer.experimentalSetOffloadSchedulingEnabledAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
    • 已將 onExperimentalSleepingForOffloadChanged 重新命名為 onSleepingForOffloadChanged,並將 onExperimentalOffloadedPlayback 重新命名為 onOffloadedPlayback
    • 將音訊卸載模式相關的 TrackSelectionParameters 介面和定義移至內部 AudioOffloadPreferences 類別。
    • onAudioTrackInitializedonAudioTrackReleased 回呼新增至 AnalyticsListenerAudioRendererEventListenerAudioSink.Listener
    • 修正 DTS Express 音訊緩衝區反向溢位問題 (#650)。
    • 修正 E-AC3-JOC 功能檢查擲回 IllegalArgumentException 的錯誤。(#677)。
  • 影片:
    • 允許 MediaCodecVideoRenderer 使用自訂 VideoFrameProcessor.Factory
    • 修正如果音訊串流的開頭是負時間戳記,就無法轉譯第一個影格的錯誤 (#291)。
  • 文字:
    • 移除 ExoplayerCuesDecoder。包含 sampleMimeType = application/x-media3-cues 的文字軌現在由 TextRenderer 直接處理,不需 SubtitleDecoder 例項。
  • 中繼資料:
    • 系統不會再針對「僅限解碼」的範例呼叫 MetadataDecoder.decode,因為實作必須一律傳回空值。
  • 效果:
    • 新增 VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>),根據時間戳記將點陣圖輸入內容排入佇列。
    • VideoFrameProcessor.registerInputStream() 變更為非封鎖。應用程式必須實作 VideoFrameProcessor.Listener#onInputStreamRegistered()
    • 已將 VideoFrameProcessor.queueInputBitmapframeRatedurationUs 參數變更為 TimestampIterator
  • IMA 擴充功能:
    • 修正多時段 DASH 直播如果不是播放清單中第一個項目,可能會擲回例外狀況 (#571)。
    • 呼叫 AdsLoader.destroy() 前,請先發布 StreamManager
    • 將 IMA SDK 版本遞增升級至 3.31.0。
  • 工作階段:
    • DefaultMediaNotificationProvider 中的通知前景服務行為設為 FOREGROUND_SERVICE_IMMEDIATE (#167)。
    • 請只使用 API 31 以上的 android.media.session.MediaSession.setMediaButtonBroadcastReceiver(),以免在 Samsung 裝置上無法使用已淘汰的 API (#167)。
    • 使用媒體通知控制器做為 Proxy,即可設定用來填入通知和平台工作階段的可用指令和自訂版面配置。
    • 轉換 Media3 中 MediaSessionService.onStartCommand() 收到的媒體按鈕事件,而不是將其轉送至平台工作階段和返回 Media3。如此一來,呼叫端控制器一律是媒體通知控制器,應用程式便能在所有支援的 API 級別上,輕鬆辨識來自通知的呼叫。
    • 修正在連線至舊版 MediaSessionCompatMediaController.getCurrentPosition() 無法推動的錯誤。
    • 新增 MediaLibrarySession.getSubscribedControllers(mediaId) 來提升便利性。
    • 覆寫 MediaLibrarySession.Callback.onSubscribe(),斷言控制器訂閱的父項 ID 可供使用。如果成功,系統會接受訂閱項目,並立即呼叫 notifyChildrenChanged() 以通知瀏覽器 (#561)。
    • 新增 Automotive OS 工作階段示範模組,並啟用 Android Auto 的工作階段示範。
    • 如果媒體通知控制器無法使用 COMMAND_GET_TIMELINE,請勿設定架構工作階段的佇列。如果使用 Android Auto 做為從架構工作階段讀取的用戶端控制器,Android Auto 使用者介面中的 queue 按鈕就不會顯示 (#339)。
    • 根據預設,請使用 DataSourceBitmapLoader,而非 SimpleBitmapLoader。(#271#327)。
    • 新增 MediaSession.Callback.onMediaButtonEvent(Intent),允許應用程式覆寫預設媒體按鈕事件處理機制。
  • UI:
    • 為 Wear OS 裝置新增 Player.Listener 實作項目,以便處理 Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT 造成的播放抑製作業,方法是啟動系統對話方塊,讓使用者連結合適的音訊輸出裝置 (例如藍牙耳機)。如果在可設定的逾時時間內 (預設為 5 分鐘) 連結合適的裝置,事件監聽器就會自動繼續播放。
  • 下載內容:
    • 針對 DownloadService 宣告「資料同步處理」前景服務類型,以便與 Android 14 相容。使用這項服務時,應用程式也必須在資訊清單中將 dataSync 新增為 foregroundServiceType,並新增 FOREGROUND_SERVICE_DATA_SYNC 權限 (#11239)。
  • HLS 擴充功能:
    • 重新整理 HLS 即時播放清單,系統會以上次載入開始時間 (而非上次載入完成時間) 計算的間隔時間 (#663)。
  • DASH 擴充功能:
    • 允許在區隔範本網址中使用多個相同的 DASH ID。
    • 新增實驗性支援,可在擷取期間剖析字幕。這對合併重疊的字幕有更完善的支援,包括解決在字幕片段之間轉換時閃爍的閃爍問題。您可以使用 DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() 啟用這項功能 (#288)。
  • RTSP 擴充功能:
    • 修正可能導致回 TCP 或在某些情況下停止運作時,導致 IndexOutOfBoundsException 的競爭狀況。
    • 傳回 RtspMediaPeriod 的載入狀態時,檢查 RTSP 設定中的狀態 (#577)。
    • 忽略選項回應公開標頭中的自訂 Rtsp 要求方法 (#613)。
    • 在傳送保持運作 RTSP 選項要求的時間間隔內,使用 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 的問題。
    • 在通用媒體客戶資料 (CMCD) 記錄中加入其他欄位:串流格式 (sf)、串流類型 (st)、版本 (v)、最高位元率 (tb)、物件時間長度 (d)、測量總處理量 (mtp) 和物件類型 (#8699)。
  • 音訊:
    • 修正在播放極短檔案時,Player.getState() 從未轉換為 STATE_ENDED 的錯誤 (#538)。
  • 音訊卸載:
    • 依照 RFC 7845 將 Ogg ID 標頭和註解標頭頁面附加至位元流,以便卸載 Opus 播放。
  • 影片:
    • H.265/HEVC:修正剖析 SPS 短期和長期參考相片資訊的問題。
  • 文字:
    • CEA-608:變更提示截斷邏輯,只將顯示的文字納入考量。先前將提示長度限制為 32 個字元時 (在技術規範下,規格可正確正確),但先前含有縮排和定位位偏移 (#11019)。
  • IMA 擴充功能:
    • 將 IMA SDK 版本遞增升級至 3.30.3。
  • 工作階段:
    • 在控制器的狀態中新增自訂版面配置,並提供 getter 以存取該版面配置。自訂版面配置變更時,系統會呼叫 MediaController.Listener.onCustomLayoutChanged。如果應用程式想要將不同的自訂版面配置傳送至不同的 Media3 控制器,可以在 MediaSession.Callback.onConnect 中使用 AcceptedResultBuilder,確保控制器在連線完成後可以使用自訂版面配置。
    • 修正 MediaLibraryServiceLegacyStub 傳送錯誤至不支援 Result,但該錯誤會產生 UnsupportedOperationException 的問題 (#78)。
    • 修正 PlayerWrapper 透過舊版指令 (COMMAND_ADJUST_DEVICE_VOLUMECOMMAND_SET_DEVICE_VOLUME) 和新指令 (#554) 判斷 volumeControlType 建立 VolumeProviderCompat 的方式。COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS

1.1.0 版本

2023 年 7 月 5 日

  • 一般程式庫:
    • 針對不適用的音訊路徑新增抑制原因,並在準備就緒的變更原因太長時播放。(#15)。
    • 為玩家新增指令:
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • 為播放器新增超載方法,允許使用者指定音量標記:
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • DeviceInfo 新增 Builder,並淘汰現有的建構函式。
    • 新增 DeviceInfo.routingControllerId 即可指定遠端播放的轉送控制器 ID。
    • Player.replaceMediaItem(s) 新增為捷徑,用於在相同位置新增及移除項目。(#8046)。
  • ExoPlayer:
    • 只有在已明確選擇加入時,才能允許 ExoPlayer 控制裝置音量方法。您可以使用 ExoPlayer.Builder.setDeviceVolumeControlEnabled 存取下列項目:
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int)setDeviceVolume(int, int)
      • increaseDeviceVolume(int)increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int)decreaseDeviceVolume(int, int)
    • 新增 FilteringMediaSource,以便從 MediaSource 篩選可用的音軌類型。
    • 新增支援在自動調整串流格式 DASH、HLS 和 SmoothStreaming 的傳出要求中納入通用媒體用戶端資料 (CMCD)。已整合下列欄位:brblcidrtpsid (#8699)。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)。
    • 在直接播放 (卸載) 時封裝 Ogg 封包中的 Opus 影格。
    • 使用卸載排程在睡眠期間推估當前位置。
    • 新增 Renderer.release()AudioSink.release(),以在玩家生命週期結束時釋出資源。
    • 監聽 DefaultAudioSink 中的音訊功能變更。在 DefaultAudioSink 的建構函式中新增必要參數 context,其中 DefaultAudioSink 會註冊為 AudioCapabilitiesReceiver 的事件監聽器,並在功能變更時更新其 audioCapabilities 屬性。
    • 透過 AudioSink.Listener 介面中的新事件 onAudioCapabilitiesChanged 和觸發 onRendererCapabilitiesChanged 事件的新介面 RendererCapabilities.Listener 傳播音訊功能變更。
    • 新增 ChannelMixingAudioProcessor,以將縮放/混音套用至聲道。
    • 將新的 int 值 DISCARD_REASON_AUDIO_BYPASS_POSSIBLE 新增至 DecoderDiscardReasons,以在音訊功能變更之後,略過略過模式時捨棄音訊解碼器。
    • 新增 DTS Express 和 DTS:X 的直接播放支援 (#335)。
  • 影片:
    • 在轉譯器停用時,讓 MediaCodecVideoRenderer 回報寬度和高度為 0 的 VideoSize。當 Player.getVideoSize() 變更時,系統會據此呼叫 Player.Listener.onVideoSizeChanged。這項變更實施後,當 Player.getCurrentTracks 不支援影片,或尚未決定支援的視訊軌時,ExoPlayer 的影片寬度和高度為 0。MediaCodecVideoRenderer
  • DRM:
    • 針對 DefaultDrmSession 上不應從 DRM 套件外部呼叫的幾種僅限內部的方法,降低其瀏覽權限:
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • 新增 muxer 程式庫,可用來建立 MP4 容器檔案。
  • IMA 擴充功能:
    • 為 DAI 啟用多週期直播 DASH 串流。請注意,目前的實作方式尚未支援在直播中跳轉 (#10912)。
    • 修正在直播中插入新廣告群組的錯誤,因為連續時間軸的計算內容位置略有不同。
  • 工作階段:
    • 新增輔助方法 MediaSession.getControllerForCurrentRequest,取得目前呼叫 Player 方法的控制器相關資訊。
    • 新增 androidx.media3.session.MediaButtonReceiver,讓應用程式可以使用藍牙耳機等媒體按鈕事件 (#167) 實作繼續播放功能。
    • MediaSession.Callback.onAddMediaItems 中新增預設實作,允許要求的 MediaItems 在有 LocalConfiguration (例如 URI) 時傳遞至 Player (#282)。
    • Android 12 以下版本預設會在精簡媒體通知檢視畫面中新增「跳轉到上一個」和「瀏覽下一個」指令按鈕 (#410)。
    • MediaSession.Callback.onAddMediaItems 中新增預設實作,允許要求的 MediaItems 在有 LocalConfiguration (例如 URI) 時傳遞至 Player (#282)。
    • Android 12 以下版本預設會在精簡媒體通知檢視畫面中新增「跳轉到上一個」和「瀏覽下一個」指令按鈕 (#410)。
  • UI:
    • 新增公用程式方法 shouldShowPlayButtonhandlePlayPauseButtonAction,以編寫具有播放/暫停按鈕的自訂 UI 元素。
  • RTSP 擴充功能:
    • 針對 MPEG4-LATM,如果「描述回應 SDP」訊息中不存在,請使用預設的設定檔層級 ID 值 (#302)。
    • 如果出現在 DESCRIBE 回應標頭中,則使用基本 URI 做為 RTSP 工作階段的相對路徑解析。(#11160)。
  • DASH 擴充功能:
    • 移除多時段 DASH 串流的媒體時間偏移從 MediaLoadData.startTimeMsMediaLoadData.endTimeMs
    • 修正重新準備多時段即時 Dash 媒體來源會產生 IndexOutOfBoundsException 的錯誤 (#10838)。
  • HLS 擴充功能:
    • 新增 HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long),以便設定載入執行緒的逾時時間,等待 TimestampAdjuster 初始化完成。如果初始化作業未在逾時前完成,系統會擲回 PlaybackException,避免播放一直停滯。逾時預設為零 (#323)。
  • 測試公用程式:
    • 檢查 DataSourceContractTest 中的 URI 配置大小寫是否有大小寫之分。
  • 移除已淘汰的符號:
    • 移除 DefaultAudioSink 建構函式,請改用 DefaultAudioSink.Builder
    • 移除 HlsMasterPlaylist,請改用 HlsMultivariantPlaylist
    • 移除 Player.stop(boolean)。如果 resettrue,請改用 Player.stop()Player.clearMediaItems()
    • 移除兩個已淘汰的 SimpleCache 建構函式,改用採用 DatabaseProvider 的非已淘汰建構函式,以便提升效能。
    • 移除 DefaultBandwidthMeter 建構函式,請改用 DefaultBandwidthMeter.Builder
    • 移除 DefaultDrmSessionManager 建構函式,請改用 DefaultDrmSessionManager.Builder
    • 移除兩個已淘汰的 HttpDataSource.InvalidResponseCodeException 建構函式,並使用接受其他欄位(causeresponseBody) 且未淘汰的建構函式,改善錯誤記錄功能。
    • 移除 DownloadHelper.forProgressiveDownloadHelper.forHlsDownloadHelper.forDashDownloadHelper.forSmoothStreaming,改用 DownloadHelper.forMediaItem
    • 移除已淘汰的 DownloadService 建構函式,請使用含有 channelDescriptionResourceId 參數選項且未淘汰的建構函式。
    • 移除 Charset 的已淘汰 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() 和 setter 方法。
    • 移除已淘汰的 ExoPlayer.retry(),請改用 prepare()
    • 移除已淘汰的零引數 DefaultTrackSelector 建構函式,請改用 DefaultTrackSelector(Context)
    • 移除已淘汰的 OfflineLicenseHelper 建構函式,請改用 OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
    • 移除已淘汰的 DownloadManager 建構函式,請改用採用 Executor 的建構函式。
    • 移除已淘汰的 Cue 建構函式,請改用 Cue.Builder
    • 移除已淘汰的 OfflineLicenseHelper 建構函式,請改用 OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
    • 移除四種已淘汰的 AnalyticsListener 方法:
      • onDecoderEnabled,請改用 onAudioEnabled 和/或 onVideoEnabled
      • onDecoderInitialized,請改用 onAudioDecoderInitialized 和/或 onVideoDecoderInitialized
      • onDecoderInputFormatChanged,請改用 onAudioInputFormatChanged 和/或 onVideoInputFormatChanged
      • onDecoderDisabled,請改用 onAudioDisabled 和/或 onVideoDisabled
    • 移除已淘汰的 Player.Listener.onSeekProcessedAnalyticsListener.onSeekProcessed,請改用 onPositionDiscontinuity 搭配 DISCONTINUITY_REASON_SEEK
    • 移除 ExoPlayer.setHandleWakeLock(boolean),請改用 setWakeMode(int)
    • 移除已淘汰的 DefaultLoadControl.Builder.createDefaultLoadControl(),請改用 build()
    • 移除已淘汰的 MediaItem.PlaybackProperties,請改用 MediaItem.LocalConfiguration。已淘汰的欄位 MediaItem.playbackProperties 現在是 MediaItem.LocalConfiguration 類型。

1.1.0-rc01 版本

2023 年 6 月 21 日

使用 1.1.0 穩定版

1.1.0-beta01 版本

2023 年 6 月 7 日

使用 1.1.0 穩定版

1.1.0-alpha01 版

2023 年 5 月 10 日

使用 1.1.0 穩定版

1.0.0 版本

1.0.2 版

2023 年 5 月 18 日

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

此版本可對應至 ExoPlayer 2.18.7 版

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

  • 核心程式庫:
    • 新增 Buffer.isLastSample(),表示 Buffer 是否包含 C.BUFFER_FLAG_LAST_SAMPLE 旗標。
    • 修正在未讀取「串流結尾」樣本的情況下,將最後一個含有影格的範例從佇列中移除,可能無法轉譯最後一個影格的問題。(#11079)。
  • 擷取工具:
    • 透過重複使用 RTSP 和 MP4 擷取器已使用的剖析邏輯,修正 MPEG-TS 檔案中 H.265 SPS 的剖析問題 (#303)。
  • 文字:
    • SSA:針對開頭為位元組順序標記的 UTF-16 檔案新增支援 (#319)。
  • 工作階段:
    • 修正問題:當連線至舊版 MediaSessionCompat 並更新其動作時,MediaController 不會更新可用的指令。
    • 修正導致 MediaLibraryService 在 API 30 上使用 params.isRecent == true 從系統 UI 呼叫 Callback.onGetLibraryRoot 時,無法傳回空值的錯誤 (#355)。
    • 修正 MediaSessionServiceMediaLibraryService 的記憶體流失問題 (#346)。
    • 修正 MediaSession 中合併的 Timeline 和位置更新合併後,可能會導致 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 無法更新可用指令的錯誤。
    • 修正從 MediaController 傳送的 TrackSelectionOverride 執行個體在參照含有 Format.metadata 的群組時,會略過的問題。(#296)。
    • 修正需要 Player.COMMAND_GET_CURRENT_MEDIA_ITEM 才能透過舊版 MediaSessionCompat 存取中繼資料的問題。
    • 修正在 MediaSessionService 中使用時,背景執行緒上的 MediaSession 執行個體造成當機的問題 (#318)。
    • 修正程式庫宣告媒體按鈕接收器,沒有應用程式有此意圖的問題 (#314)。
  • DASH:
    • 修正空白區段時間軸的處理方式。(#11014)。
  • RTSP:
    • 如果使用 UDP 的 RTSP 設定失敗,並發生 RTSP 錯誤 461 UnsupportedTransport,請使用 TCP 重試 (#11069)。

1.0.0 版本

2023 年 3 月 22 日

發布了 androidx.media3:media3-*:1.0.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 的裝置問題,新增導致 60fps AVC 串流標示為不支援的 (#10898)。
    • 修正在播放畫面更新率遠高於螢幕刷新率的媒體時,影格版本效能問題。
  • 投放:
    • 修正在媒體項目之間轉換時的暫時性 STATE_IDLE (#245)。
  • RTSP:
    • 擷取剖析無效 RTSP 描述回應訊息時擲回的 IllegalArgumentException 。(#10971)。
  • 工作階段:
    • 修正通知播放/暫停按鈕未隨著玩家狀態更新的錯誤 (#192)。
  • IMA 擴充功能:
    • 修正因未收到第一個 LOADED 事件 (而在不含廣告的情況下) 而無法啟動 DAI 串流的錯誤。

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)。
    • 將媒體工作階段新增為 DefaultMediaNotificationProvidergetMediaButtons() 引數,並使用不可變動的清單以確保清晰度。(#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 聲道音訊對應到所有 Android 版本的 7.1 和 7.1.4 聲道遮罩 (#10701)。
  • 中繼資料:
    • 現在可以設定 MetadataRenderer,以在中繼資料可用時盡快轉譯。建立具有 MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) 的執行個體,以指定轉譯器要否要提早輸出中繼資料,或與播放器位置同步。
  • DRM:
    • 解決 Android 13 ClearKey 實作中的錯誤,該錯誤會傳回非空白但無效的授權網址。
    • 修正在播放清單中切換數位版權管理配置 (例如 Widevine 至 ClearKey) 時會發生 setMediaDrmSession failed: session not opened 錯誤。
  • 文字:
    • CEA-608:確保系統正確處理欄位 2 的服務切換指令。(#10666)。
  • DASH:
    • 從資訊清單中剖析 EventStream.presentationTimeOffset (#10460)。
  • UI:
    • 將播放器目前的覆寫設定做為 TrackSelectionDialogBuilder 中的預設值使用 (#10429)。
  • 工作階段:
    • 即使某些需要非同步解析,仍可確保指令以正確順序執行 (#85)。
    • 新增 DefaultMediaNotificationProvider.Builder 以建構 DefaultMediaNotificationProvider 執行個體。建構工具可以設定供應商使用的通知 ID、通知管道 ID 和通知管道名稱。此外,請新增方法 DefaultMediaNotificationProvider.setSmallIcon(int),以設定通知小圖示。(#104)。
    • 確保在不捨棄 MediaController.release() 前傳送指令。(#99)。
    • SimpleBitmapLoader 可以從 file:// URI 載入點陣圖 (#108)。
    • 修正防止 MediaController 在一段時間內搜尋廣告 (#122) 的斷言。
    • 播放結束後,MediaSessionService 就會停止在前景播放,並顯示可重新啟動播放上一次所播放媒體項目的通知。(#112)。
    • 請勿為了暫停而啟動具有待處理意圖的前景服務。(#167)。
    • 手動隱藏與 DefaultNotificationProvider 在 API 26 和 API 27 (API 28 以上版本會自動隱藏標記) 上建立通知相關聯的「標記」(#131)。
    • 修正從舊版 MediaSession 至 Media3 MediaController 的第二個繫結機制連線導致 IllegalStateException 的錯誤。(#49)。
  • RTSP:
    • 新增 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_CHANGED 呼叫 Player.Listener#onTimelineChanged (#9889)。
    • 如果是漸進式媒體,請只加入在緩衝位置選取的音軌。(#10361)。
    • 允許所有 ExoPlayer 記錄輸出使用自訂記錄器 (#9752)。
    • 修正 DefaultMediaSourceFactorysetDataSourceFactory 的實作方式,在某些情況下無法運作 (#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 模組取代)。如此一來,不需使用轉接器/連接器類別,就能直接整合播放器及媒體工作階段。