Media3

适用于媒体用例的支持库。
最近更新时间 稳定版 候选版本 Beta 版 Alpha 版
2022 年 7 月 21 日 - - 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")
}

如需详细了解依赖项,请参阅添加 build 依赖项

反馈

您的反馈将帮助我们改进 Jetpack。您可以使用 Media3 问题跟踪器来查找问题的答案、已知问题和功能请求,以及提交新问题。

版本 1.0.0

版本 1.0.0-beta02

2022 年 7 月 21 日

发布了 androidx.media3:media3-*:1.0.0-beta02版本 1.0.0-beta02 中包含这些提交内容

此版本与 ExoPlayer 2.18.1 版本相对应。

  • 核心库:
    • 确保使用 ExoPlayer.setShuffleOrder 更改 ShuffleOrder 后会导致使用 reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGEDPlayer.Listener#onTimelineChanged 进行调用 (#9889)。
    • 对于渐进式媒体,仅在缓冲位置添加所选轨道 (#10361)。
    • 允许将自定义日志记录器用于所有 ExoPlayer 日志输出 (#9752)。
    • 修复了在 DefaultMediaSourceFactory 中实现 setDataSourceFactory 的问题,后者以前在某些情况下无法正常运行 (#116)。
  • 提取器:
    • 修复了解析 H265 短期引用图片集的问题 (#10316)。
    • 修复了解析 esds 框中比特率的问题 (#10381)。
  • DASH:
    • 从清单中解析 ClearKey 许可网址 (#10246)。
  • 界面:
    • 确保 TalkBack 在播放控件菜单中公布当前有效的速度选项 (#10298)。
  • RTSP:
    • 添加了 VP8 碎片化数据包处理机制 (#110)。
  • Leanback 扩展:
    • 监听 LeanbackAdapter 中的 playWhenReady 更改 (10420)。
  • Cast:
    • 把已传递到播放列表方法的 MediaItem 用作 CastTimeline 中的 Window.mediaItem#25#8212)。
    • 使用 CastPlayer 来支持 Player.getMetadata()Listener.onMediaMetadataChanged() (#25)。

版本 1.0.0-beta01

2022 年 6 月 16 日

发布了 androidx.media3:media3-*:1.0.0-beta01版本 1.0.0-beta01 中包含这些提交内容

这与 ExoPlayer 2.18.0 版本相对应。

  • 核心库:
    • 通过 MediaMetricsManager 启用了对 Android 平台诊断信息的支持。ExoPlayer 会将播放事件和性能数据转发到平台,这有助于在设备上提供系统性能和调试信息。如果设备用户启用了使用情况和诊断信息数据分享功能,Google 可能也会收集上述数据。应用可以选择不通过 ExoPlayer.Builder.setUsePlatformDiagnostics(false) 为 ExoPlayer 提供平台诊断信息。
    • 修复了使用 MergingMediaSource 时轨道重置太频繁的 bug,例如侧载 (side-loading) 字幕和播放过程中更改所选字幕时 (#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。这包括“取消废弃” (un-deprecating) Player.Listener.onTracksChanged 方法名称,但使用的是不同的参数类型。
    • 更改了 DefaultTrackSelector.buildUponParametersDefaultTrackSelector.Parameters.buildUpon 以返回 DefaultTrackSelector.Parameters.Builder,而不是已废弃的 DefaultTrackSelector.ParametersBuilder
    • 添加了 DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities(默认处于启用状态)。启用后,DefaultTrackSelector 会优先选用声道数不超过设备输出功能的音轨。在手持设备上,DefaultTrackSelector 会优先选用立体声/单声道,而非多声道音频格式,除非该多声道格式可以空间化(Android 12L 及更高版本)或属于杜比环绕声格式。此外,在支持音频空间化的设备上,DefaultTrackSelector 将监控空间化程序属性的变化,并在出现这些变化时触发新的音轨选择。具有 television 界面模式的设备不受这些限制的约束,系统会优先选用声道数最多的格式。如需启用此功能,必须使用 Context 构建 DefaultTrackSelector 实例。
  • 视频:
    • 已将 DummySurface 重命名为 PlaceholderSurface
    • MediaCodecVideoRenderer.getCodecMaxInputSize 添加了 AV1 支持。
  • 音频:
    • 使用宣传非标准 MIME 类型的 LG AC3 音频解码器。
    • AudioAttributes.getAudioAttributesV21() 的返回值类型从 android.media.AudioAttributes 更改为新的 AudioAttributesV21 封装容器类,以防止 ART 验证速度在级别低于 21 的 API 上变慢。
    • 对平台(级别为 29 及以上的 API)进行查询,或在未设置格式声道数的情况(在启用 HLS 无块准备时会发生)下对音频透传的音频编码声道数进行假设 (10204)。
    • 解码器输出为 12 声道 PCM 音频时使用声道掩码 AudioFormat.CHANNEL_OUT_7POINT1POINT4 来配置 AudioTrack (#10322)。
  • DRM
    • 确保格式更改后始终能够立即正确更新 DRM 会话 (10274)。
  • 文本:
    • 更改了 Player.getCurrentCues() 以返回 CueGroup,而不是 List<Cue>
    • SSA:支持 BorderStyle == 3(即 OutlineColour 设置 cue 文件的背景)时的 OutlineColour 样式设置 (#8435)。
    • CEA-708:将数据解析为多个服务块,并忽略与当前所选服务号码无关的块。
    • 移除了过去仅用于处理 Google 内部字幕格式的 RawCcExtractor
  • 提取器:
    • 添加了对 AVI 的支持 (#2092)。
    • Matroska:解析了 Opus 轨道的 DiscardPadding
    • MP4:解析了 esds 框中的比特率。
    • Ogg:允许重复的 Opus ID 和注释标头 (#10038)。
  • 界面:
    • 修复了 useController=false 时将事件传递给 PlayerView 上设置的 OnClickListener 的问题 (#9605)。此外,还修复了针对所有视图配置将事件传递给 OnLongClickListener 的问题。
    • 修复了将 ACTION_UP 之前退出 PlayerView 边界的一系列触摸事件错误处理为点击的问题 (#9861)。
    • 修复了点按操作可能会切换播放,而不是隐藏控件的 PlayerView 无障碍功能问题 (#8627)。
    • 重写了 TrackSelectionViewTrackSelectionDialogBuilder,以使用 Player 接口(而不是 ExoPlayer)。这样做将允许视图与其他 Player 实现一起使用,并移除界面模块对 ExoPlayer 模块的依赖关系。这是一项重大变更。
    • 不在 PlayerView 轨道选择器中显示强制文字轨道;如果选择了“None”,则保留一个合适的强制文字轨道 (#9432)。
  • DASH:
    • 解析了 DTS AudioChannelConfiguration 元素中的声道数。这会为 DTS 流重新启用音频透传 (#10159)。
    • 禁止将 null 传递给 DashMediaSource.Factory.setCompositeSequenceableLoaderFactory。如果需要,可以显式传递 DefaultCompositeSequenceableLoaderFactory 的实例。
  • HLS:
    • 如果播放列表 CODECS 属性不包含音频编解码器,则回退到分块准备 (#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.Callback,并将 MediaLibrarySession.MediaLibrarySessionCallback 重命名为 MediaLibrarySession.Callback,将 MediaSession.Builder.setSessionCallback 重命名为 setCallback
    • 修复了 MediaControllerImplLegacy 中的 NPE (#59)。
    • 在时间轴发生更改时会更新会话位置 (#51)。
    • 修复了释放控制器后 MediaControllerImplBase 中的 NPE (#74)。
  • 广告播放/IMA:
    • 将广告轮询频率从每 100 毫秒减少到每 200 毫秒,以便与美国媒体评定委员会 (MRC) 建议保持一致。
  • FFmpeg 扩展程序:
    • 将 CMake 版本更新为 3.21.0+,以避免 CMake bug 导致 Android Studio 的 Gradle 同步失败 (#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.setContext。改为将 Context 传递给 Transformer.Builder 构造函数。

版本 1.0.0-alpha03

2022 年 3 月 14 日

发布了 androidx.media3:media3-*:1.0.0-alpha03版本 1.0.0-alpha03 中包含这些提交内容

这与 ExoPlayer 2.17.1 版本相对应。

  • 音频:
    • 修复了 HLS 中杜比全景声 (E-AC3-JOC) 音频检查功能的错误。
  • 提取器:
    • FMP4:修复了包含 v0 和 v1 emsg 全景声的数据流 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 中移除了 null 键。
    • 在创建 MediaCodec 实例失败时会休眠并重试。这可解决在将 Surface 从一个安全的编解码器切换到另一个编解码器时,某些设备上会出现的问题 (#8696)。
    • 添加了 MediaCodecAdapter.getMetrics() 以允许用户从 MediaCodec 获取指标数据。(#9766)。
    • 修复了 Maven 依赖项解析 (#8353)。
    • 如果直播既没有低延迟功能也没收到要设置速度的用户请求,则停用直播的自动速度调整功能 (#9329)。
    • 已将 DecoderCounters#inputBufferCount 重命名为 queuedInputBufferCount
    • SimpleExoPlayer.renderers 设为了不公开。可通过 ExoPlayer.getRenderer 访问渲染程序。
    • 更新了一些 AnalyticsListener.EventFlags 常量值,以与 Player.EventFlags 中的值匹配。
    • AnalyticsCollector 拆分为一个接口和默认实现,以允许它在不为应用所需时由 R8 去掉。
  • 轨道选择:
    • 支持在轨道选择中使用首选视频角色标记 (#9402)。
    • 将视频轨道选择逻辑更新为:在选择多个视频轨道用于自适应调整时,考虑首选的 MIME 类型和角色标记 (#9519)。
    • 将视频和音频轨道选择逻辑更新为:仅为解码器和硬件支持的级别相同的自适应选择项选择格式 (#9565)。
    • 将视频轨道选择逻辑更新为:如果主要的硬件加速解码器支持多个编解码器,则优先选用效率较高的编解码器 (#4835)。
    • 相较于技术轨道选择约束(例如,首选的 MIME 类型或频道数量上限),优先选用音频内容偏好设置(例如,“默认”音轨或某个与系统语言区域的语言相匹配的轨道)。
    • 修复了以下轨道选择问题:替换一个轨道组不会停用同一类型的其他轨道组 (#9675)。
    • 修复了以下轨道选择问题:同时存在非空和空轨道替换时无法正确应用 (#9649)。
    • 禁止 TrackGroupArray 中有重复的 TrackGroup。始终可通过在 TrackGroup 构造函数中设置 id 而使 TrackGroup 可区分开。这修复了以下问题:通过活跃轨道替换使应用转入后台再继续播放时会发生崩溃 (#9718)。
    • 修正了 AdaptiveTrackSelection 中的逻辑,在网络带宽足够的情况下允许提高质量,即使播放质量已非常接近当时的极限时也是如此 (#9784)。
  • 视频:
    • 修复了杜比视界的解码器回退逻辑,以在需要时使用兼容的 H264/H265 解码器。
  • 音频:
    • 修复了杜比全景声 (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)acquireSession 中移除了 playbackLooper。 当自定义的 MediaSource 中的应用使用 DrmSessionManager 时,需要改为将 playbackLooper 传递给 DrmSessionManager.setPlayer
  • 广告播放/IMA:
    • 添加了对 IMA 动态广告插播 (DAI) 的支持 (#8213)。
    • AdPlaybackState 中添加了一个允许重置广告组的方法,以便广告组可以再次播放 (#9615)。
    • 在广告播放期间强制保持 1.0 的播放速度 (#9018)。
    • 修复了以下问题:未能加载广告组导致播放立即重置 (#9929)。
  • 界面:
    • 修复了使用某些主题时 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)。
    • 如果基本和摘要式身份验证方式都有,优先选用摘要式身份验证方式 (#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)的 bin utils (#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)
    • DashMediaSourceHlsMediaSourceSsMediaSource 中移除了 setTag。改用 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 接口。
  • 用于构建媒体播放界面的界面组件。
  • 其他库中用于 ExoPlayer 的模块封装功能,例如通过 IMA SDK 插入广告。

如需了解详情,请参阅 Media3 GitHub 项目

之前,ExoPlayer 托管在单独的 ExoPlayer GitHub 项目中。在 Media3 中,其软件包名称为 androidx.media3.exoplayer。我们计划在一段时间内继续维护和发布 ExoPlayer GitHub 项目,以便让应用有时间迁移到 Media3。Media3 取代了所有 ExoPlayer 模块,但旧版 media2 和 mediasession 扩展程序除外,后者已被新的 media3-session 模块取代。这可以实现播放器和媒体会话之间的直接集成,而无需使用适配器/连接器类。