Media3

メディアのユースケースのサポート ライブラリ。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
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")
}

依存関係について詳しくは、ビルド依存関係の追加をご覧ください。

フィードバック

お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。Media3 Issue Tracker を使用すると、質問への回答、既知の問題、機能リクエストを見つけたり、新しい問題を報告したりできます。

バージョン 1.0.0

バージョン 1.0.0-beta02

2022 年 7 月 21 日

androidx.media3:media3-*:1.0.0-beta02 がリリースされました。バージョン 1.0.0-beta02 に含まれる commit については、こちらをご覧ください

このリリースは ExoPlayer 2.18.1 リリースに対応しています。

  • コアライブラリ:
    • ExoPlayer.setShuffleOrderShuffleOrder を変更すると、reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGEDPlayer.Listener#onTimelineChanged が呼び出されるようにしました(#9889)。
    • プログレッシブ メディアの場合、選択したトラックのみがバッファリングされた位置に含まれるようになりました(#10361)。
    • すべての ExoPlayer ログ出力に対してカスタムの logger を許可しました(#9752)。
    • 特定のケースで機能していなかった、DefaultMediaSourceFactorysetDataSourceFactory の実装を修正しました(#116)。
  • エクストラクタ:
    • H265 短期参照画像セットの解析を修正しました(#10316)。
    • esds ボックスからのビットレートの解析を修正しました(#10381)。
  • DASH:
    • マニフェストからの ClearKey ライセンス URL を解析しました(#10246)。
  • UI:
    • TalkBack が再生コントロール メニューの現在アクティブな速度オプションを通知するようにしました(#10298)。
  • RTSP:
    • VP8 の断片化されたパケットの処理を追加しました(#110)。
  • Leanback 拡張機能:
    • LeanbackAdapterplayWhenReady の変更をリッスンするようになりました(10420)。
  • Cast:
    • CastTimelineWindow.mediaItem としてプレイリスト メソッドに渡された MediaItem を使用するようになりました(#25#8212)。
    • CastPlayerPlayer.getMetadata()Listener.onMediaMetadataChanged() がサポートされるようになりました(#25)。

バージョン 1.0.0-beta01

2022 年 6 月 16 日

androidx.media3:media3-*:1.0.0-beta01 がリリースされました。バージョン 1.0.0-beta01 に含まれる commit については、こちらをご覧ください

これは ExoPlayer 2.18.0 リリースに対応しています。

  • コアライブラリ:
    • MediaMetricsManager による Android プラットフォーム診断のサポートを有効にしました。ExoPlayer では再生イベントとパフォーマンス データがプラットフォームに転送されるため、デバイスのシステム パフォーマンスとデバッグ情報の提供に役立てることができます。このデータは、デバイスのユーザーが使用状況と診断情報の共有を有効にしている場合に、Google によって収集されることもあります。アプリは、ExoPlayer.Builder.setUsePlatformDiagnostics(false) で ExoPlayer のプラットフォーム診断への貢献を無効にできます。
    • 字幕をサイドローディングしたり、再生中に選択した字幕を変更したりする場合など、MergingMediaSource の使用時にトラックが頻繁にリセットされるバグを修正しました(#10248)。
    • API 29 と 30 で 5G-NSA ネットワーク タイプの検出を停止しました。これらの再生は 4G ネットワークを前提としています。
    • nullMediaSource.Factory.setDrmSessionManagerProviderMediaSource.Factory.setLoadErrorHandlingPolicy に渡すことを禁止しました。DefaultDrmSessionManagerProviderDefaultLoadErrorHandlingPolicy のインスタンスは、必要に応じて明示的に渡すことができます。
    • 正確な LocalConfiguration が不明の場合に、メディアの再生に必要なメタデータを表す MediaItem.RequestMetadata を追加しました。また、MediaMetadata.mediaUrlRequestMetadata に含まれるようになったため削除しました。
    • プレーヤーが 1 つの項目を設定できるように Player.Command.COMMAND_SET_MEDIA_ITEM を追加しました。
  • トラック選択:
    • TrackSelectionOverrides クラスを TrackSelectionParameters にフラット化し、TrackSelectionOverride をトップレベル クラスに昇格しました。
    • TracksInfo の名前を Tracks に、TracksInfo.TrackGroupInfo の名前を Tracks.Group に変更しました。Player.getCurrentTracksInfoPlayer.Listener.onTracksInfoChanged の名前も Player.getCurrentTracksPlayer.Listener.onTracksChanged に変更されました。これには、Player.Listener.onTracksChanged メソッド名の「サポート終了解除」も含まれますが、パラメータのタイプが異なります。
    • サポートが終了した DefaultTrackSelector.ParametersBuilder ではなく DefaultTrackSelector.Parameters.Builder を返すように、DefaultTrackSelector.buildUponParametersDefaultTrackSelector.Parameters.buildUpon を変更しました。
    • デフォルトで有効化される DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities を追加しました。有効にすると、DefaultTrackSelector は、チャンネル数がデバイスの出力機能を超えないオーディオ トラックを優先します。ハンドヘルド デバイスでは、マルチチャンネル フォーマットを空間化できる(Android 12L 以降)場合か、ドルビー サラウンド音声形式である場合を除き、DefaultTrackSelector はマルチチャンネル オーディオ フォーマットよりもステレオ / モノラルを優先します。さらに、オーディオ空間化をサポートしているデバイスでは、DefaultTrackSelectorSpatializer プロパティの変更を監視し、これに応じて新しいトラック選択をトリガーします。television UI モードのデバイスは、これらの制約から除外され、チャンネル数が最も多い形式が優先されます。この機能を有効にするには、DefaultTrackSelector インスタンスを Context で作成する必要があります。
  • 動画:
    • DummySurface から PlaceholderSurface に名前を変更しました。
    • MediaCodecVideoRenderer.getCodecMaxInputSize に AV1 サポートを追加しました。
  • オーディオ:
    • 非標準の MIME タイプをアドバタイズする LG AC3 オーディオ デコーダーを使用しました。
    • API 21 未満の ART 検証の遅延を防ぐため、AudioAttributes.getAudioAttributesV21() の戻り値の型を android.media.AudioAttributes から新しい AudioAttributesV21 ラッパークラスに変更しました。
    • プラットフォーム(API 29 以上)にクエリするか、フォーマット オーディオ チャンネル数が設定されていない場合に、オーディオ パススルーの音声エンコード チャンネル数を想定しました。これは、HLS チャンクレス準備で発生します(10204)。
    • デコーダが 12 チャンネルの PCM オーディオを出力する場合に、AudioTrack にチャンネル マスク AudioFormat.CHANNEL_OUT_7POINT1POINT4 を設定しました(#10322)。
  • DRM
    • 形式変更の直後にシークする場合に、常に DRM セッションが正しく更新されるようにしました(10274)。
  • テキスト:
    • List<Cue> ではなく CueGroup を返すように Player.getCurrentCues() を変更しました。
    • SSA: BorderStyle == 3OutlineColour がキューの背景を設定する)の場合の OutlineColour スタイル設定がサポートされるようになりました(#8435)。
    • CEA-708: データを複数のサービス ブロックに解析し、現在選択されているサービス番号に関連付けられないブロックを無視しました。
    • Google 内部の字幕形式の処理にのみ使用されていた RawCcExtractor を削除しました。
  • エクストラクタ:
    • AVI のサポートを追加しました(#2092)。
    • Matroska: Opus トラックの DiscardPadding を解析しました。
    • MP4: esds ボックスのビットレートを解析しました。
    • Ogg: Opus ID とコメント ヘッダーの重複を許可しました(#10038)。
  • UI:
    • useController=false の場合に、PlayerView に設定された OnClickListener へのイベントの配信を修正しました(#9605)。また、すべてのビュー構成でイベントの OnLongClickListener への配信を修正しました。
    • ACTION_UP の前の PlayerView の境界を越えるタッチイベント シーケンスをクリックとして誤って扱う問題を修正しました(#9861)。
    • タップ操作でコントロールが非表示にならずに、再生が切り替えられる PlayerView のアクセシビリティの問題を修正しました(#8627)。
    • ExoPlayer ではなく Player インターフェースと連携するように TrackSelectionViewTrackSelectionDialogBuilder を書き換えました。これにより、ビューを他の Player 実装で使用できるようになり、UI モジュールから ExoPlayer モジュールへの依存関係が削除されます。これは互換性を破る変更です。
    • PlayerView トラック セレクタに強制テキスト トラックを表示せずに、「なし」が選択されている場合は、適切な強制テキスト トラックが選択されるようにしました(#9432)。
  • DASH:
    • DTS AudioChannelConfiguration 要素からチャンネル数を解析しました。これにより、DTS ストリームの音声パススルーが再度有効になります(#10159)。
    • nullDashMediaSource.Factory.setCompositeSequenceableLoaderFactory に渡すことを禁止しました。DefaultCompositeSequenceableLoaderFactory のインスタンスは、必要に応じて明示的に渡すことができます。
  • HLS:
    • プレイリストの CODECS 属性にオーディオ コーデックが含まれていない場合、チャンクフルの準備にフォールバックしました(#10065)。
    • nullHlsMediaSource.Factory.setCompositeSequenceableLoaderFactoryHlsMediaSource.Factory.setPlaylistParserFactoryHlsMediaSource.Factory.setPlaylistTrackerFactory に渡すことを禁止しました。DefaultCompositeSequenceableLoaderFactoryDefaultHlsPlaylistParserFactory のインスタンス、または DefaultHlsPlaylistTracker.FACTORY への参照は、必要に応じて明示的に渡すことができます。
  • スムーズなストリーミング:
    • nullSsMediaSource.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.MediaItemFillerMediaSession.Callback.onAddMediaItems に置き換えました。
    • MediaController が従来のメディア セッションに接続する場合の setMediaItems(s) メソッドをサポートしました。
    • MediaController.setMediaUriMediaSession.Callback.onSetMediaUri を削除しました。MediaController.setMediaItemMediaSession.Callback.onAddMediaItems を使用して同じ機能を実現できます。
    • メディアを再生するための従来の MediaController 呼び出しを onSetMediaUri ではなく MediaSession.Callback.onAddMediaItems に転送しました。
    • 通知のカスタマイズを行うための 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:
    • Media Rating Council(MRC)の推奨事項に合わせて、広告ポーリング レートを 100 ミリ秒ごとから 200 ミリ秒ごとに引き下げました。
  • FFmpeg 拡張機能:
    • CMake バージョンを 3.21.0+ に更新し、CMake のバグにより AndroidStudio の Gradle 同期が失敗するのを回避しました(#9933)。
  • サポートが終了したシンボルを削除しました。
    • Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray) を削除しました。代わりに Player.Listener.onTracksChanged(Tracks) を使用してください。
    • Player.getCurrentTrackGroupsPlayer.getCurrentTrackSelections を削除しました。代わりに Player.getCurrentTracks を使用してください。ExoPlayer.getCurrentTrackGroupsExoPlayer.getCurrentTrackSelections を引き続き使用することもできますが、これらのメソッドは非推奨のままです。
    • DownloadHelperDEFAULT_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 を削除しました。代わりに、ContextTransformer.Builder コンストラクタに渡す必要があります。

バージョン 1.0.0-alpha03

2022 年 3 月 14 日

androidx.media3:media3-*:1.0.0-alpha03 がリリースされました。バージョン 1.0.0-alpha03 に含まれる commit については、こちらをご覧ください

これは ExoPlayer 2.17.1 リリースに対応しています。

  • オーディオ:
    • HLS でのドルビー アトモス(E-AC3-JOC)の音声機能に関するエラーを修正しました。
  • エクストラクタ:
    • FMP4: v0 と v1 の両方の emsg アトムスを含むストリームに対して、emsg サンプル メタデータが誤った順序で出力される問題を修正しました(#9996)。
  • テキスト:
    • SubtitleConfiguration フィールドの優先順位を設定し、Factory 値が設定されていない場合はその値に戻すために、SingleSampleMediaSource.Factory.setTrackIdMediaItem.SubtitleConfiguration.Builder.setId のインタラクションを修正しました(#10016)。
  • 広告再生:
    • ライブ HLS SSAI ストリームの広告期間における音声アンダーランを修正しました。

バージョン 1.0.0-alpha02

2022 年 3 月 2 日

androidx.media3:media3-*:1.0.0-alpha02 がリリースされました。バージョン 1.0.0-alpha02 に含まれる commit については、こちらをご覧ください

これは ExoPlayer 2.17.0 リリースに対応しています。

  • コアライブラリ:
    • 保護されたメソッド DefaultRenderersFactory.getCodecAdapterFactory() を追加し、buildVideoRenderers() または buildAudioRenderers() をオーバーライドする DefaultRenderersFactory のサブクラスが、コーデック アダプター ファクトリにアクセスして MediaCodecRenderer インスタンスに渡せるようにしました。
    • ICY ヘッダー フィールド namegenre をそれぞれ MediaMetadata.stationMediaMetadata.genre に反映し、Player.Listener.onMediaMetadataChanged() を介してアプリに到達できるようにしました(#9677)。
    • DefaultHttpDataSource#getResponseHeaders から null のキーを削除しました。
    • MediaCodec インスタンスの作成に失敗した場合、スリープと再試行を行います。これにより、サーフェスを安全なコーデックから別のコーデックに切り替えたときに一部のデバイスで発生する問題を回避できます(#8696)。
    • MediaCodecAdapter.getMetrics() を追加して、ユーザーが MediaCodec から指標データを取得できるようにしました(#9766)。
    • Maven の依存関係の解決を修正しました(#8353)。
    • 低レイテンシ機能がないライブ ストリームや、速度設定のユーザー リクエストがないライブ ストリームについて、自動速度調整を無効にしました(#9329)。
    • DecoderCounters#inputBufferCount から queuedInputBufferCount に名前を変更しました。
    • SimpleExoPlayer.renderers を非公開にしました。レンダラには ExoPlayer.getRenderer を介してアクセスできます。
    • Player.EventFlags の値と一致するように、一部の AnalyticsListener.EventFlags 定数値を更新しました。
    • AnalyticsCollector をインターフェースとデフォルトの実装に分割し、アプリで必要ない場合は R8 によって削除されるようにしました。
  • トラック選択:
    • トラック選択での優先動画ロールフラグをサポートしました(#9402)。
    • 複数の動画トラックを選択する際に優先する MIME タイプとロールフラグが考慮されるように、動画トラック選択ロジックを更新しました(#9519)。
    • デコーダとハードウェアのサポートレベルが同じである自動選択形式のみを選択するように、動画と音声のトラック選択ロジックを更新しました(#9565)。
    • プライマリのハードウェア アクセラレーテッド デコーダで複数のコーデックがサポートされている場合は、より効率的なコーデックを優先するように、動画トラック選択ロジックを更新しました(#4835)。
    • 技術的なトラック選択の制約(優先 MIME タイプ、最大チャンネル数など)よりも、音声コンテンツの設定(「デフォルト」の音声トラック、システム ロケール言語に一致するトラックなど)を優先します。
    • あるトラック グループをオーバーライドしても同じタイプの他のトラック グループが無効にならないという、トラック選択の問題を修正しました(#9675)。
    • 空でないトラックと空のトラックのオーバーライドが混在していると正しく適用されないという、トラック選択の問題を修正しました(#9649)。
    • TrackGroupArray 内の TrackGroup の重複を禁止しました。TrackGroup コンストラクタで id を設定することで、TrackGroup が常に区別できるようになります。これにより、アクティブなトラックのオーバーライドでアプリをバックグラウンド化した後に再生を再開するとクラッシュする問題が修正されます(#9718)。
    • 再生がライブエッジに非常に近い場合でも、十分なネットワーク帯域幅があれば品質を向上させられるように、AdaptiveTrackSelection のロジックを修正しました(#9784)。
  • 動画:
    • 必要に応じて互換性のある H264/H265 デコーダを使用するように、ドルビー ビジョンのデコーダ フォールバック ロジックを修正しました。
  • オーディオ:
    • 必要に応じて互換性のある E-AC3 デコーダを使用するように、ドルビー アトモス(E-AC3-JOC)のデコーダ フォールバック ロジックを修正しました。
    • null ではなく AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES を明示的に渡すことが必須になるように、AudioCapabilities API を変更しました。
    • AudioTrackBufferSizeProviderDefaultAudioSink に挿入することで、AudioTrack バッファサイズの計算をカスタマイズできるようにしました(#8891)。
    • リクエストされたバッファサイズが 1 MB を超える場合は、AudioTrack の作成を再試行します(#9712)。
  • エクストラクタ:
    • WAV: RF64 ストリームのサポートを追加しました(#9543)。
    • H.265 SPS NAL ユニットの不適切な解析を修正しました(#9719)。
    • Ogg Opus ファイルと Ogg Vorbis ファイルの Vorbis コメント(METADATA_BLOCK_PICTURE を含む)を解析します。
  • テキスト:
    • 構成から作成された字幕トラックの Format.id フィールドに反映される MediaItem.SubtitleConfiguration.id フィールドを追加しました(#9673)。
    • Matroska コンテナでの WebVTT 字幕の基本的なサポートを追加しました(#9886)。
    • 宣言されたサイズを超えるサービス ブロックを Cea708Decoder が読み取らないようにしました。
  • DRM:
    • DrmSessionManager.(pre)acquireSession から playbackLooper を削除しました。カスタムの MediaSource でアプリが DrmSessionManager を使用している場合は、代わりに playbackLooperDrmSessionManager.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 名前空間を宣言していないマニフェストのベース URL 除外ロジックを修正しました(#9856)。
    • 相対 MPD.Location URL をサポートしました(#9939)。
  • HLS:
    • 音声のみの HLS ストリームの Format.label を正しく入力できるようになりました(#9608)。
    • 起動時間を改善するためにデフォルトでチャンクレス準備を使用します。マスター プレイリストで宣言されていないクローズド キャプション トラックが描出に含まれている場合は、マスター プレイリストに追加して再生できるようにするか、HlsMediaSource.Factory.setAllowChunklessPreparation(false) でチャンクレス準備をオフにする必要があります。
    • HLS でのキーフレームの正確なシークをサポートしました(#2882)。
  • RTSP:
    • 任意のサーバー接続に使用される SocketFactory をオーバーライドするクライアント API を提供しました(#9606)。
    • DIGEST と BASIC がどちらも存在する場合、DIGEST 認証方式を優先します(#9800)。
    • RTSP トラック タイミングを利用できない場合に対応しました(#9775)。
    • 無効な RTP-Info ヘッダー値を無視するようになりました(#9619)。
  • Transformer:
    • 必要な最小 API バージョンを 21 に増やしました。
    • TransformationException は、変換中に発生するエラーの記述に使用されるようになりました。
    • 変換オプションを指定するための TransformationRequest を追加しました。
    • 複数のリスナーを登録できるようになりました。
    • コーデック出力が部分的に読み取られたときに Transformer が停止する問題を修正しました。
    • muxer スローを解放するときに Transformer.getProgress で発生する可能性がある NPE を修正しました。
    • 変換を適用するためのデモアプリを追加しました。
  • MediaSession 拡張機能:
    • デフォルトで、停止時に MediaSessionConnector がプレイリストを消去するようになりました。プレイリストを保持する必要があるアプリは、コネクタで setClearMediaItemsOnStop(false) を呼び出すことができます。
  • Cast 拡張機能:
    • CastPlayeronIsPlayingChanged を正しく呼び出せないバグを修正しました(#9792)。
    • DefaultMediaItemConverter を使用したアートワークを含む音声メタデータをサポートしました(#9663)。
  • FFmpeg 拡張機能:
    • build_ffmpeg.sh が GNU ではなく LLVM の bin utils に依存するようになりました(#9933)。
  • Android 12 の互換性:
    • com.google.android.gms:play-services-cast-framework:20.1.0 に依存するように Cast 拡張機能をアップグレードしました。以前のバージョンの 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.Flagscom.google.android.exoplayer2.ext.flac パッケージ)
    • @FlacExtractor.Flagscom.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 に含まれる commit については、こちらをご覧ください

新機能

Media3 は、ExoPlayer を含むメディア サポート ライブラリの新しいホームです。最初のアルファ版には、メディアのユースケースを実装するためのライブラリの機能の初期実装が含まれています。

  • カスタマイズと拡張が簡単な Android 用のアプリレベルのメディア プレーヤーである ExoPlayer。
  • 再生を公開して制御するためのメディア セッション機能。この新しいセッション モジュールは、ExoPlayer と同じ Player インターフェースを使用します。
  • メディア再生のユーザー インターフェースを作成するための UI コンポーネント。
  • IMA SDK による広告の挿入など、ExoPlayer で使用する他のライブラリの機能をラップするモジュール。

詳しくは、Media3 GitHub プロジェクトをご覧ください。

ExoPlayer は、以前は別の ExoPlayer GitHub プロジェクトでホストされていました。Media3 のパッケージ名は androidx.media3.exoplayer です。しばらくの間、ExoPlayer GitHub プロジェクトの維持とリリースを続け、アプリが Media3 に移行できるようにする予定です。Media3 には、ExoPlayer のすべてのモジュールの置き換えが用意されています。ただし、以前の media2 と mediasession 拡張機能は新しい media3-session モジュールに置き換えられています。これにより、アダプターやコネクタのクラスを使用する必要なく、プレーヤーとメディア セッションを直接統合できます。