Media3

メディアのユースケースのサポート ライブラリ。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2026 年 10 月 21 日 1.11.1 - - 1.12.0-alpha01

依存関係の宣言

Media3 への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。

アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。

Groovy

dependencies {
    def media3_version = "1.11.1"

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

    // For DASH playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
    // For HLS playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
    // For SmoothStreaming playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version"
    // For RTSP playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation "androidx.media3:media3-exoplayer-midi:$media3_version"
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-ima:$media3_version"

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

    // For building media playback UIs using Jetpack Compose
    implementation "androidx.media3:media3-ui-compose:$media3_version"
    // For building media playback UIs using Jetpack Compose with Material Design 3
    implementation "androidx.media3:media3-ui-compose-material3:$media3_version"
    // For building media playback UIs using Views
    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 inspecting media files
    implementation "androidx.media3:media3-inspector:$media3_version"
    // For extracting and processing video frames
    implementation "androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames
    implementation "androidx.media3:media3-effect-lottie:$media3_version"

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

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

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

Kotlin

dependencies {
    val media3_version = "1.11.1"

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

    // For DASH playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-dash:$media3_version")
    // For HLS playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-hls:$media3_version")
    // For SmoothStreaming playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version")
    // For RTSP playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version")
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation("androidx.media3:media3-exoplayer-midi:$media3_version")
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-ima:$media3_version")

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

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

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

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

    // For inspecting media files
    implementation("androidx.media3:media3-inspector:$media3_version")
    // For extracting and processing video frames
    implementation("androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames
    implementation("androidx.media3:media3-effect-lottie:$media3_version")

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

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

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

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

フィードバック

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

バージョン 1.12.0

バージョン 1.12.0-alpha01

2026 年 10 月 21 日

バージョン 1.12.0-alpha01 に含まれる commit については、こちらをご覧ください。

  • 共通ライブラリ:
    • C.COLOR_SPACE_DISPLAY_P3 を追加し、MediaFormatUtil と ColorInfo の ISO カラー マッピングで Display P3 色空間をサポート。
    • 試験運用版のフィーチャー トグルと段階的な公開(Flags.setCanaryModeEnabled)を管理するため、一元的な Flags レジストリを追加しました。既存の @ExperimentalApi メソッドの多くを、新しいフラグ API を使用するように移行しました。
    • MediaMetadata.playlistId、MediaMetadata.Builder.setPlaylistId(String)、MediaMetadata.categories、MediaMetadata.Builder.setCategories(List<String>) を追加します。
    • androidx.media3.common.util.NonNullApi を JSpecify org.jspecify.annotations.NullMarked に置き換えます。
  • ExoPlayer:
    • 次の期間の最初のチャンクの読み込みに失敗すると、DASH マルチピリオド再生が停止する問題を修正しました(#3396)。
    • 読み込みの再試行がすべて失敗した場合に、AnalyticsListener.onLoadError と MediaSourceEventListener.onLoadError で wasCanceled = true を報告します。
    • ExoPlayer.addVideoFrameMetadataListener と ExoPlayer.removeVideoFrameMetadataListener を使用した複数の VideoFrameMetadataListener インスタンスの登録をサポート。ExoPlayer.setVideoFrameMetadataListener と ExoPlayer.clearVideoFrameMetadataListener は非推奨になりました。
    • 各期間の AdPlaybackState を分割してオフセットすることで、複数期間のコンテンツ(DASH など)での広告のサポートを追加しました。
    • PreCacheHelper の競合状態を修正しました。進行中の準備リクエストをキャンセルしても、バックグラウンド ダウンロードが開始される可能性がありました。
    • ProgressiveMediaSource と DefaultMediaSourceFactory の setLoadOnlySelectedTracks(true) を、選択されていない動画トラックと画像トラックのみを除外するように制限します。音声トラックとテキスト トラックは常に読み込まれ、再バッファリングなしでシームレスなトラック切り替えが可能です。
    • ProgressiveMediaSource と DefaultMediaSourceFactory で setLoadOnlySelectedTracks(true) をデフォルトで有効にします。これにより、メモリが節約され、すべてのトラックが選択されていない場合に DefaultLoadControl バッファ割り当ての計算がより正確に機能するようになります。なお、選択されていない動画トラックまたは画像トラックが再生中に新たに有効になると、追加のバッファリングが発生する可能性があります。
    • 動的スケジューリングが有効になっている場合に、Player.getCurrentPosition() が古い値を返す(1 秒間に数回しか更新されない)問題を修正しました(#3286)。
    • AudioTrack 再生ヘッドの位置が予期せず減少またはリセットされた場合に、整数オーバーフローとして誤って処理され、バッファリング中に再生が停止する問題を修正しました(#3407)。
    • 試験運用版の DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean) を削除します。
    • インタースティシャルまたは広告から、最後にクリップされたコンテンツに戻る際に、不要なレンダラの再有効化や不具合が発生しないようにしました(#3371)。
    • Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION が有効になっている場合に、今後の再生リスト アイテムのレンダラ エラーが原因で現在の再生が途中で中断される問題を修正しました。
    • Flags.FLAG_PER_STREAM_MEDIA_PROGRESSION が有効になっているときに、ExoPlayer がレンダラを準備されていないメディア期間に移行した場合に発生する可能性がある NullPointerException を修正しました。
    • Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESS が有効になっている場合に、動的スケジューリング中に動画フレームが予期せずスキップまたはドロップされる問題を修正しました。
    • ライブ配信の広告中に再生を停止すると、アナリティクス リスナーで ArrayIndexOutOfBoundsException が発生する問題を修正しました(#3423)。
    • preload() が呼び出されない場合に、PreloadMediaSource が予期せずプリロード イベントをポストする問題を修正しました(#3408)。
    • メタデータ トラックで Format.subsampleOffsetUs が無視され、デコードされた SCTE-35 スプライス コマンドで再生タイムスタンプが不正確になる問題を修正しました(#3413)。
    • 同じソースで preload() が複数回呼び出された場合に PreloadMediaSource と DefaultPreloadManager で発生するメモリリークを修正しました(#3445)。
    • コンテンツ タイムラインの更新が保留されている間に AdsMediaSource をリリースすると NullPointerException が発生する問題を修正しました(#3442)。
    • シーク後の読み込み(またはゼロ以外の位置での再生開始)が失敗して再試行されたときに、プログレッシブ メディアの再生が誤った位置にジャンプする問題を修正しました(#3440)。
    • Xiaomi TV Stick 4K(MiTV-AYFR0)の H.264 デコーダがシームレスな解像度変更時にフリーズする問題の回避策を追加しました(#3457)。
    • 投稿された読み込み完了またはエラー コールバックが実行される前にトラッカーが停止された場合に、SteeringManifestTracker で NullPointerException が発生する問題を修正しました(#3443)。
    • MP4 ファイルの mebx ボックス化されたメタデータ トラックからの HAGC(ST 2094-50)時間指定メタデータの再生をサポートします。
    • 再生リストで準備に時間がかかるメディア期間がスキップされる問題を修正しました。
  • CompositionPlayer:
    • 再生ワークフローで Composition.Builder.setVideoFrameAggregationParameters を使用して動画フレーム集約のフレームレートを構成できるようにしました。
    • フレーム集約中にタイムスタンプが最も近いフレームを選択することで、タイムスタンプの量子化または丸めの不一致によって発生するマルチシーケンス コンポジションのフレームドロップを修正しました。これは、動画シーケンスごとに 1 つの追加フレームを処理中に保持する必要があるため、API 29 以降でのみ有効になります。
  • Transformer:
    • エクスポート ワークフローで Composition.Builder.setVideoFrameAggregationParameters を使用して、動画フレーム集計のフレームレートを構成できるようにしました。
    • フレーム集約中にタイムスタンプが最も近いフレームを選択することで、タイムスタンプの量子化または丸めの不一致によって発生するマルチシーケンス コンポジションのフレームドロップを修正しました。これは、動画シーケンスごとに 1 つの追加フレームを処理中に保持する必要があるため、API 29 以降でのみ有効になります。
    • AudioProcessors が使用されている場合は Transformer#setAudioMimeType(AUDIO_RAW) を優先します。この修正前は、MimeTypes.AUDIO_RAW をリクエストして AudioProcessor を適用すると、出力が圧縮されていました。
  • トラック選択:
    • 一部のデバイスで、サポートされている Dolby Vision トラックよりも SDR トラックが誤って優先される問題を修正しました(#3135)。
  • エクストラクタ:
    • Mp4Extractor: MP4 の Opus の dOps ボックスの解析を修正しました。PreSkip、InputSampleRate、OutputGain がビッグ エンディアンからリトル エンディアンに変換されず、編集リストが存在しない場合に音声の最初の約 299 ミリ秒がドロップされる問題を修正しました(#3431)。
    • H.264 と H.265 の GOP 内サンプル依存関係の解析がデフォルトで有効になっているため、Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES、Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265、FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES、FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265 を削除します。
    • Mp4Extractor: Mp4LocationData に入力する高度座標を含む xyz ボックスからの位置情報メタデータの解析を修正しました。
    • エンコードされたオーディオ形式のサンプルあたりのオーディオ フレーム数を計算するために ExtractorUtil.getFramesPerEncodedSample を追加しました(#3367)。
    • FLAG_READ_XMP_METADATA を Mp4Extractor に追加して、最上位の UUID ボックスから XMP メタデータを抽出します。
    • DVD 形式の MPEG-PS コンテンツを再生する際に、ペイロードがオーディオ リーダーに渡される前に PsExtractor の各 PES パケットから private_stream_1 サブストリーム ヘッダーを削除することで、破損した AC-3、DTS、LPCM オーディオを修正しました(#3327)。
    • バージョン 1 の tfdt ボックスが負の baseMediaDecodeTime をエンコードするときに FragmentedMp4Extractor で発生するエラーを修正しました(#3412)。
    • MPEG-TS: H.264 および H.265 フレーム パッキング配置 SEI メッセージの解析をサポートし、Format.stereoMode を入力できるようにしました(#3419)。
    • ドルビー ビジョン プロファイル 20 の構成データを解析し、サポートされていないドルビー ビジョン プロファイルを拒否します。標準の HEVC として再生して色が不正確になることはありません(#3427)。
    • MP3: 多くの MediaCodec MP3 デコーダと互換性がないため、LAME/Xing エンコーダの遅延とパディング メタデータの調整を元に戻しました(#3425)。
    • Matroska: ネストされた ChapterAtom 要素を解析する際の NullPointerException を修正しました(#3438)。
    • Ogg: サイズが 255 バイトの倍数で、ページ境界で終了するパケットが、次のパケットとマージされるバグを修正しました。
    • MP4: Mp4Extractor と FragmentedMp4Extractor の mebx ボックス化された時間指定メタデータ トラックを解析しました。it35 キーを持つトラックは MimeTypes.APPLICATION_ITUT_T35 として公開されます(HAGC 再生を有効にします)。 が設定されていない限り、他の mebx トラックは無視されます。 が設定されている場合は、すべての mebx トラックが未加工の MimeTypes.APPLICATION_MEBX として出力されます。FLAG_EMIT_RAW_MEBX_DATA
    • Ogg: ギャップレス再生のための Opus エンドパディングの抽出をサポートし(#2576)、継続パケットで始まるページにシークした後のサンプル タイムスタンプを修正しました。
    • Ogg: ストリーム中の Opus ID とコメント ヘッダー パケットを無視することで、チェーンされた Ogg Opus ストリームでのデコードエラーと約 1 秒のタイムスタンプ ジャンプを修正しました。
  • 検査員:
    • MetadataRetriever を使用した MP4 ファイルからの XMP メタデータの取得をサポート。
    • MediaExtractorCompat の mebx ボックス化された時間指定メタデータ トラックを MimeTypes.APPLICATION_MEBX として抽出する機能をサポート。
  • インスペクタ フレーム:
    • FrameExtractor を使用してウルトラ HDR フレームを抽出する際に、SDR ベース画像で広色域 BT.2020 の色がクリッピングされる問題を修正しました。色域外の色は、クランプされるのではなく、sRGB 色域にソフトに圧縮されるようになりました。
  • オーディオ:
    • 間違ったスレッドで android.media.AudioDeviceCallback を呼び出すデバイスの回避策を追加しました(#3386)。
    • 圧縮オフロードを使用したトラックの移行後に再生が停止する可能性がある問題を修正しました。
    • Amazon Fire TV Stick で、期間の移行中に AC-3 音声がフリーズする問題を回避しました(#3448)。
    • Ogg と WebM/Matroska Opus のギャップレス再生で、ストリーム終了時のエンコーダ パディングのトリミングをサポートしました(#2576)。
    • トラックの切り替え時に、動的オフロードのギャップレス遅延とパディングの更新が、再生中のトラックではなく、次のトラックに適用されるように修正しました。
    • プレイリスト内のギャップレスな移行に加えて、単一ストリームとプレイリスト内の最終ストリームのエンコーダのエンドパディングをトリミングします(#2576)。
    • ストリーム開始時のエンコーダ遅延のトリミングが完了し、ストリーム終了時のパディングをトリミングする必要がない場合は、TrimmingAudioProcessor で不要なオーディオ バッファのコピーを回避します。
  • 動画:
    • リリース タイムスタンプが同じ遅延動画フレームのレポートを修正し、スキップではなくドロップとしてレポートされるようにしました。
  • テキスト:
    • MediaItem.SubtitleConfiguration.timeOffsetUs を追加して、サイドローディングされた字幕のタイムスタンプをメディアに対してシフトします。オフセットは、再生を中断することなく Player.replaceMediaItem(int, MediaItem) を使用して再生中に変更できます(#1976)。
    • SubRip: バイトオーダー マークのないスタンドアロンの SubRip 字幕の文字エンコードを検出するために、CharsetDetector を DefaultSubtitleParserFactory に挿入するサポートを追加しました(#2247)。
  • 効果:
    • StudioSound GMSCore モジュールを使用して、音源分離用の SoundSeparationAudioProcessor を実装します。
  • マルチプレクサ:
    • Mp4Muxer と FragmentedMp4Muxer の Opus の dOps ボックス書き込みを修正しました。PreSkip、InputSampleRate、OutputGain がビッグエンディアンではなくリトルエンディアンで書き込まれていました(#3431)。
    • Mp4Muxer を使用した Mp4LocationData での GPS 高度の書き込みをサポートします。
    • Muxer.Factory.create(ParcelFileDescriptor) を追加して、ParcelFileDescriptor への直接多重化を可能にしました。
    • メディア デコード タイムスタンプを提供するために、デフォルトで、フラグメント化された MP4 ファイルの traf ボックスに tfdt(トラック フラグメント ベース メディア デコード時間)ボックスを書き込みます。
    • Mp4Muxer での E-AC-3 および E-AC-3 JOC(ドルビー アトモス)dec3 コンテナ ボックスの書き込みをサポート。
    • MediaMuxerCompat に WebM 形式のサポートを追加しました。
    • フラグメント化された MP4 ファイルの末尾に mfra(Movie Fragment Random Access)ボックスを書き込み、FLAG_READ_MFRA_FOR_SEEK_MAP を使用して FragmentedMp4Extractor でシークできるようにします。
    • 他のサンプルが書き込まれる前に EOS サンプルを書き込むと Mp4Writer と FragmentedMp4Writer でクラッシュする問題を修正しました。
    • コンテナ ヘッダーで dby1 互換ブランドをアドバタイズすることで、ドルビー コンテンツを MP4 またはフラグメント化された MP4 ファイルに多重化する際のコンテナ コンプライアンスを修正しました(#3369)。
    • Mp4Muxer と FragmentedMp4Muxer で 32 ビット浮動小数点 PCM 音声トラックをサポートしました(#3389)。
    • トラックを追加する際に、Mp4Muxer と FragmentedMp4Muxer でサポートされていないドルビー ビジョン プロファイルを拒否します。
    • Mp4Muxer と FragmentedMp4Muxer で 24 ビットと 32 ビットの整数 PCM 音声トラックをサポート。
  • IMA 拡張機能:
    • プレーヤーの一時停止イベントと再開イベントを ImaServerSideAdInsertionMediaSource の IMA SDK に転送します。
  • セッション:
    • MediaConstants.EXTRAS_KEY_PLAYLIST_ID、MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE、MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URI、MediaConstants.EXTRAS_KEY_CATEGORIES を追加して、以前のメタデータと説明から再生リストとアイテムのメタデータを入力します。また、MediaConstants.EXTRAS_KEY_SUGGESTED_TYPE と MediaConstants.EXTRAS_KEY_TTL_SECONDS を追加して、提案 LibraryParams.extras を入力します。
    • PendingIntent の上限が厳格に適用されるデバイスで MediaSession を作成またはリリースする際に SecurityException がクラッシュする問題を修正しました。
    • MediaSessionService がまだフォアグラウンドにないときに、Android 12(API 31 および 32)での再生リクエスト中に MediaSession.getControllerForCurrentRequest() が null を返す問題を修正しました。
    • MediaController が、負の最大音量を報告する従来のセッションに接続したときに IllegalArgumentException がクラッシュする問題を修正しました。
    • 一時停止中の以前の MediaSessionCompat で MediaController.setMediaItem または setMediaItems を呼び出した後に play() を呼び出すと、onPlayFrom* ではなく、サポートされていない onPrepareFrom* コールバックがディスパッチされる、またはリクエストされたメディア アイテムを再初期化せずに onPlay() がディスパッチされる問題を修正しました。
    • カスタム コマンド レスポンスの受信時に、以前の MediaBrowser で NullPointerException が発生する問題を修正しました(#3432)。
    • 基盤となる Bundle に重複するキーを含む以前のメタデータを受信したときに IllegalArgumentException がクラッシュする問題を修正しました。
    • 以前の MediaSessionCompat を制御するときに、同じ Looper イテレーション内で行われた発信 MediaControllerCompat.TransportControls 呼び出しを統合します(たとえば、setMediaItem、prepare、play を一緒に呼び出すと、1 つの onPlayFrom* コールバックがディスパッチされるようになりました)。
  • UI:
    • 双方向テキストの折り返しが有効になっている場合に、RTL 字幕の句読点の位置とスパン範囲の保持を修正しました(#3454、#3455)。
    • TrackSelectionState クラスと TrackSelectionParametersState クラス、およびそれらに対応するコンポーズ可能な状態の remember 関数を media3-ui-compose モジュールに追加します。
    • PresentationState.videoAspectRatio を導入し、Modifier.resizeWithContentScale が sourceSizeDp: Size? ではなく aspectRatio: Float? を受け取るようにします。
    • プレーヤーの現在のキューをリッスンするために、CuesState クラスと rememberCuesState コンポーザブルを media3-ui-compose モジュールに追加します。
    • ProgressSlider が ExoPlayer または CompositionPlayer に基づいている場合は、スクラブモードのサポートを追加します。
    • PresentationState に showArtwork のサポートを追加し、ContentFrame と Player で提供されるオプションの artwork コンポーザブルのレンダリング時間を測定するために使用します。artwork スロットのデフォルト値として使用される Artwork コンポーザブルを追加します。
    • PlayPauseButtonState に新しいフィールド(showBuffering、showRetry、showReplay)を追加し、PlayPauseButton で使用して、より多くのアイコンとバッファリング インジケーターをレンダリングします。
    • カスタム再生状態のモニタリングを可能にする PlaybackState クラスを追加し、ボタンに依存しないコンポーネントとして BufferingIndicator を導入しました。
    • PlayerView と PlayerControlView で、マルチピリオド ライブ配信のライブ ポストロール プレースホルダのピリオド境界に広告マーカーが表示される問題を修正しました。
    • Player、ContentFrame、PlayerDefaults、MiniController のコンポーズ可能なスロットが、プレーヤーまたはコントロールの可視性をパラメータとして受け取らなくなりました。代わりに、呼び出しスコープからキャプチャします(たとえば、topControls は @Composable BoxScope.() -> Unit になりました)。これは、不安定な API に対する互換性を破る変更です。
    • alignment パラメータを ContentFrame、Player、Modifier.resizeWithContentScale に追加して、スケーリングされたコンテンツをコンテナ内に配置し、ContentFrame のコンテンツをその境界にクリップして、ContentScale.Crop でスケーリングされた動画が境界外に描画されないようにします。
    • isLive と liveOffsetMs を公開することで、ProgressSlider、ProgressStateWithTickCount、ProgressStateWithTickInterval にライブ配信 UI のサポートを追加しました。media3-ui-compose-material3 に LiveButton コンポーザブルを追加しました(#2213)。
  • Ktor 拡張機能:
    • KtorDataSource が、HttpDataSourceException をスローするのではなく、ストリーム中の接続エラーを入力の終了として扱う問題を修正しました(#3460)。
  • HLS 拡張機能:
    • EXT-X-STREAM-INF と EXT-X-I-FRAME-STREAM-INF の VIDEO-RANGE(PQ と HLG)を Format.colorInfo に解析します(#3441)。
    • PES メディア サンプルを含む MPEG-TS EXT-X-MAP 初期化セグメントを解析する際の NullPointerException を修正しました(#3456)。
    • 公開された HLS トラックで Format.id と Format.metadata が null になる回帰を修正しました(#3402)。
    • アセットリスト広告を X-PLAYOUT-LIMIT にクリップし、制限を完全に超える広告をスキップします。また、インタースティシャルで X-RESUME-OFFSET が省略され、X-PLAYOUT-LIMIT が設定されていても再生時間が不明な場合は、コンテンツ再開オフセットをデフォルトで 0 に設定します。
    • X-ASSET-LIST インタースティシャルを解決すると、同じ広告グループ内の他のインタースティシャルのコンテンツ再開オフセットの貢献度が上書きされる問題を修正しました。
  • DASH 拡張機能:
    • DashManifestParser での代替 MPD 挿入(urn:mpeg:dash:event:alternativeMPD:insert:2025)イベントと置換(urn:mpeg:dash:event:alternativeMPD:replace:2025)イベントの解析をサポートし、Period.alternativeMpdEvents で AlternativeMpdEvent インスタンスとして公開します。これは、DashManifestParser のサブクラスであるアプリに対する互換性を破る変更です。DashManifestParser.buildPeriod は追加の List<AlternativeMpdEvent> パラメータを受け取るようになり、以前のオーバーロードは削除されました。DashManifestParser.parseEventStream(XmlPullParser) をオーバーライドするアプリは、代わりに DashManifestParser.parseEventStream(XmlPullParser, String) をオーバーライドする必要があります。前者は非推奨となり、今後のリリースで非公開になる予定です。
    • EssentialProperty 記述子と SupplementalProperty 記述子から CICP 色情報(ColourPrimaries、TransferCharacteristics、MatrixCoefficients、VideoFullRangeFlag)を解析して Format.colorInfo に格納します(#3426)。
    • トリックモード(http://dashif.org/guidelines/trickmode)記述子の @value 属性で、空白で区切られた @id 値のリストをサポートしました(#3315)。
    • DashManifestParser での <ProducerReferenceTime> の解析、AdaptationSet.producerReferenceTimes での公開、VOD ストリームの Timeline.Window.presentationStartTimeMs と Timeline.Window.windowStartTimeMs の入力への使用をサポート。
    • DASH コンテンツ ステアリングのサポートを追加しました(#1689)。
    • <UTCTiming> 要素に属性が欠落している DASH マニフェストを解析する際に発生する可能性がある NullPointerException を修正しました(#3436)。
  • RTSP 拡張機能:
    • RTSP クライアントが閉じられた後に遅延ネットワーク レスポンスを処理するときに発生する IllegalStateException のクラッシュを修正しました。
    • 高速スクラブによって TCP プロトコルのフォールバック メカニズムが誤ってトリガーされる問題を修正しました。
    • トラックの再選択、セッションの破棄、URI のリダイレクト中に RTSP クライアントが状態をリセットした後に、遅延したネットワーク レスポンスを処理するときに発生する可能性がある IllegalStateException のクラッシュを修正しました。
    • 再生の再開前に再度シークすると IllegalStateException がクラッシュする問題を修正しました。
    • シークがすでに保留中のときに後方にシークすると、音声が途切れたり、動画の再生がフリーズしたりする問題を修正しました。
    • 集約パケットまたは非 IDR パケットで終わる H.264 および H.265 キーフレーム アクセス ユニットがキーフレームとしてフラグ設定されず、再生がバッファリングで停止する問題を修正しました(#3434)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1 など):
    • Opus 拡張機能: 無効な Opus データをデコードする際の JNI クラッシュを修正しました。
    • Opus 拡張機能: pre-skip と discard padding が同じパケットに該当する場合に discard padding が無視される問題を修正しました(#2576)。
  • Cast 拡張機能:
    • セッションが利用できない理由を表す SessionAvailabilityListener.SessionUnavailableReason を導入し、それを公開する SessionAvailabilityListener.onCastSessionUnavailable のオーバーロード メソッドを提供します。
    • キャスト セッションの停止後に、ローカルで再生が予期せず再開される問題を修正しました。
    • RemoteCastPlayer で RemoteMediaClient オペレーション(再生、一時停止、速度変更、リピートモード、音量、ミュート、トラック選択など)が失敗した場合にエラーをログに記録します(#3373)。
    • シーク オペレーションが保留中に、キャスト レシーバー キューが変更または縮小された場合に、RemoteCastPlayer で ArrayIndexOutOfBoundsException が発生する問題を修正しました(#3372)。
    • デフォルトの Cast レシーバーで、タイムラインにプレイリスト全体ではなく、アクティブなアイテムのすぐ周囲のメディア アイテムのみが入力される問題を修正しました(#3129)。
    • プレイリスト(setMediaItems、addMediaItems、moveMediaItems、removeMediaItems)を変更するとき、または RemoteCastPlayer でシークするときに、タイムラインと再生位置をすぐに更新し、連続するプレイリスト オペレーションをキューに入れて、順番に確実に実行されるようにしました(#2639、#3272)。
    • RemoteCastPlayer の空のキューで addMediaItems を呼び出すと、キャスト レシーバーでメディア アイテムの読み込みに失敗する問題を修正しました(#2402)。
    • RemoteCastPlayer で、キャスト レシーバーのキューの最後に到達すると、再生リストが保持されずにタイムラインがクリアされる問題を修正しました。
    • メディア アイテムを読み込む前に RemoteCastPlayer に設定された playWhenReady、repeatMode、playbackParameters が転送または適用されない問題を修正しました(例: CastPlayer でのローカルからリモートへの再生転送中)(#889)。
  • デモアプリ:
    • DRM で保護されたメディア アイテムと追加の HLS サンプル ストリームのサポートをセッション デモアプリ カタログに追加しました。
    • セッション デモアプリで CastTrackSelector を使用して RemoteCastPlayer を構成し、キャスト中に字幕と音声トラックを選択できるようにします。
  • サポートが終了したシンボルを削除しました。
    • DashUtil.buildDataSpec(Representation, RangedUri, int) と DashUtil.buildDataSpec(Representation, String, RangedUri, int) を削除しました。代わりに DashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>) を使用してください。
  • ビルド:
    • Gradle の minSdk を 24 に引き上げます。

バージョン 1.11.0

1.11.1

2026 年 9 月 10 日

  • ExoPlayer:
    • プログレッシブ メディアの HAGC メタデータを有効または無効にするフラグを MediaSource.Factory から ExtractorsFactory に移動しました。以前の setExperimentalEnableHagcPlayback メソッドは削除され、ExtractorsFactory.setParseHagcMetadata に置き換えられました。これにより、Matroska/WebM コンテナで無効化が機能しない問題も解決されます。
    • 非遷移のセカンダリ レンダラーをプリウォーミングする際に発生する再生の停止を修正しました。
    • シークがリセットされ、両方のレンダラが無効になったときに、Surface がプライマリ レンダラに返されるべきであるという、プリウォーミングの問題を修正しました。
    • ライブ タイムラインの更新により、現在再生中のサーバーサイドで挿入された広告をデフォルトの位置が超えた場合の ArrayIndexOutOfBoundsException を修正しました(#3348)。
    • ScrubbingModeParameters.allowSkippingMediaCodecFlush を有効にしてシークすると、古い動画フレームが短時間表示されることがある、スクラブモードの問題を修正しました。
  • エクストラクタ:
    • Matroska: クラスタの後に配置されたトラックがシーク可能なタイムラインにならない問題を修正しました(#3377)。
  • オーディオ:
    • SilenceSkippingAudioProcessor のバッファサイズ計算を修正し、最小無音時間がフレームサイズによって誤ってスケールダウンされないようにしました(#3271)。
    • PcmAudioUtil での 8 ビット PCM の処理を修正し、Android で定義されているようにサンプルを符号なしとして扱うようにしました(#3271)。
    • ハードウェア バッファサイズが制限されているため、プレロールまたはギャップレス移行中に再生が停止する可能性があるオフロードの問題を修正しました。
    • 再生スレッドが有効でなくなったときにリリース数が減少しない DefaultAudioSink のバグを修正しました(#3338)。
  • セッション:
    • Player.Listener コールバックからインプロセス MediaController がリリースされたときの NullPointerException を修正しました(#3375)。
    • 以前の MediaBrowser が、onGetLibraryRoot() または onConnectAsync() から非同期の結果を返すサービスに接続するときに、メインスレッドでデッドロックが発生する問題を修正しました(#3393)。
  • HLS 拡張機能:
    • スナップのターゲット セグメントがまだ再生リストにない場合に、コンテンツ再開オフセットの計算を修正しました(#3322)。
    • 完全に消費された HlsMediaChunk が、エクストラクタから EOFException を受信したときに読み込みを再試行する問題を修正しました(#3350)。
  • DASH 拡張機能:
    • presentationTimeOffset を含む画像トラックのサンプル タイムスタンプの計算が正しくない問題を修正しました(#3334)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1 など):
    • Opus: 複数の OpusDecoder インスタンスが同時に初期化されるときに発生するメモリ破損を修正しました。
    • MPEG-H: MpeghUiManager にコマンドを送信する際のメモリリーク、ASCII 以外の文字の切り捨て、メモリ不足状態でのネイティブ コードでのクラッシュの可能性を修正しました(#3365)。

バージョン 1.11.0

2026 年 8 月 5 日

  • 共通ライブラリ:
    • オーディオ チャンネル マスクを明示的に表す Format.channelMask と、それを安全に解決する新しい Util.getAudioTrackChannelConfig(Format) オーバーロードを追加しました。
    • Kotlin を 2.0.20 から 2.2.0 にアップグレードします。
  • ExoPlayer:
    • ExoPlayer で IllegalStateException または IndexOutOfBoundsException が発生する可能性がある、タイミングに依存する同時実行のバグを修正しました。
    • AdsMediaSource の広告グループ数のチェックを緩和し、広告グループが完全に処理されたときに広告グループ数を減らせるようにしました(hasUnplayedAds() が false)。これにより、リセット ワークフロー中に広告グループのサイズを動的に変更できるようになりました。
    • getFlags() と FLAG_STRICT_DURATION を SampleStream に追加して、ストリームがレポートのフラグを報告できるようにし、レンダラを更新してこれらのフラグを動的に確認できるようにしました。
    • ストリーム形式が有効な値を指定しない場合に、MediaCodecVideoRenderer のフレームレート推定ツールと MediaCodecAudioRenderer のコーデック出力形式にフォールバックしてコーデックの動作レートを計算し、不要なコーデックのリセットを回避します。
    • コアプレーヤーでクライアントサイド挿入広告のコンテンツのクリッピングを削除しました。代わりに、AdsMediaSource がクリッピング ロジックを処理します。カスタムのクライアントサイド挿入広告ソースを更新して、コンテンツのクリッピングを内部で実装する必要があります。
    • 形式は正しいが認識されないコーデック プロファイルまたはレベルを持つトラックを、supported=YES ではなく supported=NO_EXCEEDS_CAPABILITIES としてマークします(プロファイルまたはレベルの情報が欠落しているか、形式が正しくないトラックは supported=YES としてマークされます)。これにより、より適切にサポートされている代替トラックがある場合に、これらのトラック(デバイスでサポートされる可能性が低いトラック)が選択されないようにします。
    • DefaultPreloadManager.SimpleRankingDataComparator を追加します。これは、現在再生中のメディア アイテムのインデックスまでの距離に基づいてメディア アイテムのランクを比較する RankingDataComparator です。よりきめ細かい比較ロジックが必要な場合は、アプリで compare(Integer, Integer) メソッドをオーバーライドできます。カスタム SimpleRankingDataComparator は、DefaultPreloadManager.Builder の新しいコンストラクタを介して挿入できます。
    • 使用可能なヒープメモリが不足している場合は、バッファのバイトサイズの上限にフォールバックして、DefaultLoadControl.prioritizeTimeOverSizeThresholds の OOM リスクを軽減します。
    • MediaItem.imageDurationUs が設定されていない場合の静止画像の処理を調整しました。JPEG と HEIC の静止画像は、デフォルトの非常に短い時間で「再生」されるようになりました(以前の PNG などの画像と同じ動作)。
    • MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter) を追加して、BandwidthMeter を MediaSource に接続します。カスタム実装の非推奨メソッドはデフォルトで引き続き呼び出されますが、新しいメソッドを実装し、BandwidthMeter.getTransferListener() を使用して古いメソッドと同等の機能を実現することをおすすめします。
    • DefaultBandwidthMeter で、カスタム InitialBitrateSupplier のサポートを追加しました。これにより、アプリは独自のロジックを提供して、DefaultBandwidthMeter の作成時とネットワーク タイプの変更時に使用される初期ビットレートの推定値を決定できます。サプライヤーは DefaultBandwidthMeter.Builder.setInitialBitrateSupplier() で設定できます。
    • 動的スケジューリングをデフォルトで有効にします。ExoPlayer 再生ワークループは、静的な間隔ではなく動的に実行されます。
    • プリロール サンプルを含むトラックをアクティブな再生に結合するときに発生する可能性がある不要なリセットを削除しました。
    • DefaultBandwidthMeter で、getInitialBitrateCountryGroupAssignment を最適化して、配列ではなく 32 ビット整数にパックされた国グループの割り当てを返すようにし、コードサイズを削減して割り当てを回避します。
    • 一部のデバイスで AudioTrack の初期化に失敗する問題を修正しました。他の再試行(バッファサイズを半分にする)が失敗した場合、再試行ロジックが常に 1 秒以上のバッファサイズを試行するようにしました(#3207)。
    • 入力バッファを受信する前にフラッシュされた場合に、コーデックがすべてのサンプルを飲み込んでしまう一部のデバイスのコーデックの問題を修正しました。
    • 試験運用版の ExoPlayer.Builder.enablePerStreamMediaProgression() を追加し、ストリーム単位でメディア処理を進められるようにしました。これにより、再生リストのアイテム間の起動レイテンシが短縮され、非常に短いコンテンツで再生が「停止」することがなくなります(#3122)。
    • オーディオ セッション ID の使用に関連する競合状態を修正しました。この競合状態では、setAudioSessionId によって設定された値ではなく、ExoPlayer によって自動生成された初期オーディオ セッション ID が使用されていました(#3241)。
    • プログレッシブ メディア(MP4、Matroska など)に、試験運用版の HAGC(ST 2094-50)時間指定メタデータ再生サポートを追加しました。プレーヤーは、HAGC メタデータ トラックを関連する動画トラックと自動的に統合し、API 37 以降のデバイスのデコーダにメタデータを帯域外で配信します。この動作は DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false) で無効にできます。
    • トラック選択における Format の相対的な優先度を表す Format.selectionPriority を追加しました(#3236)。
    • 「ストリームの終了」までシークするとスクラブが停止する可能性がある、スクラブモードの潜在的な問題を修正しました。
  • CompositionPlayer:
    • TrackSelector インスタンスが解放されない問題を修正しました。
  • Transformer:
    • ExportResult.fileSizeBytes が過剰に報告されることがある問題を修正しました。
  • トラック選択:
    • BaseTrackSelection.DEFAULT_FORMAT_COMPARATOR を公開し、AdaptiveTrackSelection.Factory.setTrackFormatComparator を追加して、ビットレートのみの順序付けを超えたカスタム フォーマットの順序付けと ABR 選択の優先度を可能にします。
    • トラック選択パラメータを連続してすばやく更新すると、一部の更新が失われたり、上書きされたりする可能性がある、タイミングに依存する同時実行の問題を修正しました。
  • エクストラクタ:
    • MP4、MP3、FLAC: FLAG_DISABLE_ARTWORK_METADATA を追加して、コンテナの解析中に添付画像とカバーアートのメタデータを破棄できるようにし、ランタイム メモリ消費量を削減しました(#2077)。これは、DefaultExtractorsFactory.setDisableArtworkMetadata を介して一元的に有効にすることもできます。
    • MP4: ITU-T T.35(it35)のタイムド メタデータ トラックの抽出のサポートを追加しました。
    • MP4: チャプター メタデータ(Nero 形式と QuickTime 形式の両方)の抽出のサポートを追加しました。両方が存在する場合は、QuickTime チャプターが優先されます。抽出されたチャプター情報は、トラックの Metadata 内の Chapter エントリとして公開され、MP4、M4A、M4B ファイル(オーディオブックやポッドキャストなど)でネイティブ チャプター ナビゲーションが可能になります(#2803)。
    • WAV、Matroska、MP4: 64 ビット浮動小数点 PCM オーディオのサポートを追加しました(#3090)。
    • Matroska: コーデック ビットストリーム メタデータを使用して、正確な ColorInfo を入力します。
    • MP4: sidx ボックスが存在しない場合に、mfra ボックスを使用して、断片化された MP4 ファイルのシークのサポートを追加しました。これを有効にするには、FLAG_READ_MFRA_FOR_SEEK_MAP を FragmentedMp4Extractor に指定します。これは DefaultExtractorsFactory でデフォルトで行われるようになりました(#3088)。
    • サポートされていないバージョンの av1C データを無視します。
    • MP4: fpcm ボックスにビッグエンディアン浮動小数点 PCM のサポートを追加しました。
    • Matroska: チャプター情報をトラックの Metadata の Chapter エントリに解析しました。
    • MPEG-TS: コア サブストリームと拡張サブストリームを 1 つのサンプルに結合することで、DTS-HD ストリームと DTS Express ストリームの抽出を改善しました。これにより、以前は 2 つが別々のサンプルとして出力されていた再生の問題が修正されました(#3147)。
    • MP4: 空の ilst メタデータタグ アイテムを解析する際の無限ループと境界外読み取りを防止(#3191)。
    • MPEG-TS: 最後の PES パケットの長さが既知であるストリームで、最後のフレームがレンダリングされるようにしました(#3206)。
    • MP3: Xing ヘッダーと VBRI ヘッダーを含むファイルのビットレート レポートを修正しました。
    • Matroska: 最後のクラスタで定義されたトラックを処理します(#3250)。
    • Matroska: ALAC のサポートを追加しました(#3268)。
    • MP4: フラグメント化された MP4 ファイルで可変長の sgpd ボックスを許可しました(#3243)。
    • AVI: 音声トラックにキーフレーム フラグがないファイルを再生すると、音声が失われ、OutOfMemoryError が発生する問題を修正しました。
    • MP3: Xing/Info ヘッダーからギャップレス対応の再生時間を使用します(#3183)。
    • MP3: デコードされた PCM のトリミングに合わせて、LAME/Xing エンコーダの遅延とパディングのメタデータを調整しました(#3200)。
  • オーディオ:
    • 準備完了状態から準備未完了状態に移行する際に、ExoPlayer の音声レンダラに 100 ミリ秒の猶予期間を追加しました。これにより、一時的なアンダーランをデバウンスし、アクティブな再生中に予期しないバッファリング状態が発生するのを回避します(#3210)。
    • DefaultAudioTrackBufferSizeProvider のデフォルトの PCM バッファサイズ ロジックを変更して、固定の 500 ミリ秒バッファを使用し、デバイスへの依存度を低減しました。
    • MediaCodecAudioRenderer を更新して、プラットフォーム デコーダから空間 channelMask を抽出します。これにより、DefaultAudioSink は、チャネル数から推測するのではなく、この明示的なマスクを使用できるようになります。
    • AudioSink.configure のパラメータをデータクラスに変換します。ForwardingAudioSink.configure のカスタム オーバーライドは、新しいメソッド シグネチャに移行する必要があります。
    • EditedMediaItem.Builder#setSpeed(SpeedParameters) で音声ストリームをタイム ストレッチする際にピッチを維持するためのサポートを追加しました。
    • 8 ビット PCM、16 ビット ビッグエンディアン PCM、64 ビット浮動小数点 PCM から 32 ビット浮動小数点 PCM への変換をサポートするように ToFloatPcmAudioProcessor を強化しました(#3090)。
    • DecoderAudioRenderer.getChannelMapping の戻り値を ImmutableIntArray に変更します。
    • 圧縮オフロード モードでギャップレス オーディオのプレイリストを再生すると、再生が停止するバグを修正しました。
    • Timeline と期間 UID を AudioSink.configure と AudioProcessor.StreamMetadata に転送して、オーディオ プロセッサにプレイリストのコンテキストを提供します(#418)。
    • 時間ベースの音声処理を可能にするために、正しい AudioProcessor.StreamMetadata.positionOffsetUs を設定します(#418)。
    • ビッグ エンディアンの 32 ビットおよび 64 ビット浮動小数点 PCM のサポートを追加しました。
    • Google Pixel デバイスの標準 EAC3 デコーダは EAC3-JOC ストリームをデコードできないため、Google Pixel デバイスでの再生用に EAC3-JOC から EAC3 へのフォールバック パスを削除しました(#3257)。
  • 動画:
    • 結合中にドロップされたバッファを、ドロップではなくスキップとしてカウントするように、動画結合ロジックを修正しました。
    • 新しいサーフェスを設定する際の即時レンダリングの決定を修正し、プレースホルダ サーフェスをサポートしていないデバイスでフレーム落ちが発生しないようにしました。
    • ドロップされたフレームやスキップされたフレームを考慮して、MediaCodecVideoRenderer のフレームレート推定をより正確に修正しました。
    • フレームを早期にスケジュールするために使用されるしきい値を構成できるようにします。デフォルトは 50 ミリ秒ですが、MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold() を使用して値をカスタマイズできます。
    • VideoFrameReleaseHelper のバグを修正しました。このバグにより、ディスプレイの変更によって、メインスレッドで冗長な Choreographer コールバックと過剰な CPU ウェイクアップがトリガーされる可能性がありました。
  • テキスト:
    • TTML: リージョンで style から displayAlign にフォールバックするようになりました(#2559)。
    • TTML: <p> 要素の親からキューの開始時間を継承します(#3246)。
  • メタデータ:
    • MediaMetadata.discSubtitle フィールドを追加し、ID3v2.4 TSST と Vorbis DISCSUBTITLE データから解析します。
    • ID3 TPOS フレームからディスク番号とディスク数を解析します。
  • 効果:
    • シーク時にプレーヤーがフリーズしないように、フラッシュ時に FinalShaderProgramWrapper の再描画状態をクリアします。
  • マルチプレクサ:
    • 新しい addTrackReference API を介して、Mp4Muxer でトラック参照(tref ボックス)のサポートを追加しました。これにより、メタデータ トラックを説明対象の動画トラックにリンクするなど、トラック間の関係を確立できます。
    • OggMuxer を追加して、OPUS または VORBIS メディア ストリームを ogg ファイル形式に多重化できるようにします。
    • WAV ファイル生成用の WavMuxer を追加しました(整数と浮動小数点の PCM をサポート)。
    • setAttemptStreamableOutputEnabled を InAppMp4Muxer.Factory に追加して、予約スペースなしでストリーミング不可の小さなファイルを書き込めるようにします。
    • Mp4Muxer と FragmentedMp4Muxer で IAMF オーディオのサポートを追加。
  • IMA 拡張機能:
    • ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlot を追加して、一時停止時の広告に使用する広告スロットを提供できるようにします。
    • スキップ可能な VAST 広告が連続して表示される場合に、2 つ目の広告ですぐにスキップボタンが表示されるバグを修正しました(#3165)。
  • セッション:
    • バックグラウンド スレッド プレーヤー ルーパーでセッションを使用している場合に、MediaNotificationManager 内で発生する可能性のあるデッドロックと IllegalStateException クラッシュを修正しました。
    • MediaSession メソッドに、より厳格なスレッド要件を適用します。void メソッドは、実行をアプリケーション ルーパー スレッドに自動的にポストするようになりました。状態アクセサ(ゲッター)は、アプリケーション ルーパー以外のスレッドから呼び出された場合に、IllegalStateException を明示的にスローするようになりました。
    • セッション側でコントローラごとに状態の一貫性を追跡することで、境界外のタイムライン マージのクラッシュ(MediaUtils.mergePlayerInfo の IllegalStateException)を修正しました。
    • アクティブなメディア セッションをクエリして Media3 SessionToken インスタンスを返すためのサポートを提供する androidx.media3.session.MediaSessionManager を追加しました。
    • メソッドがオーバーライドされていない場合に、信頼できないコントローラに読み取りアクセスのみを提供するように MediaSession.Callback.onConnect のデフォルトの動作を変更します。
    • 新しい API MediaSession.Builder#setPackageNameOverride を介して MediaSession を作成する際にパッケージ名をオーバーライドするサポートを追加しました。呼び出し元は、セッションのパッケージ名をオーバーライドするために android.permission.OVERRIDE_MEDIA_SESSION_OWNER 権限を持っている必要があります。
    • MediaSession.Callback.onConnectAsync() を追加しました。新しいメソッドでは、コントローラの接続試行を非同期で処理できます。アプリは、Futures.immediateFuture(ConnectionResult) を含む Future をすぐに返すことで、以前の動作を実現できます。Callback.onConnect は非推奨になる可能性があるため、新しいメソッドに移行することをおすすめします。
    • Bluetooth AVRCP ブラウジングが API 36 と 37 で MediaLibraryService を認識しない問題を修正しました。
    • 画像サイズがプラットフォームの上限に近い場合に MediaSession でアートワークが 2 回ダウンスケールされる問題を修正し、通知のぼやけを解消しました(#3134)。
    • 非同期のアートワーク ビットマップ読み込みコールバックが、アプリがバックグラウンドにあるときにフォアグラウンド サービスを開始しようとした場合に、MediaNotificationManager で ForegroundServiceStartNotAllowedException がクラッシュする問題を修正しました(#3270)。
    • MediaController が受信した PositionInfo オブジェクトに元の Timeline UID が含まれていない問題を修正しました。セッションは、状態の更新中にこれらの UID を確実に変換して伝播するようになりました。
    • MediaSessionService.stopSelfSafely() で ForegroundServiceStartNotAllowedException をキャッチしてクラッシュを修正しました(#3310)。
    • 同じメディア アイテム内でシークする際に、MediaController で予期しない onMediaItemTransition() コールバックが発生する問題を修正しました(#3248)。
  • UI:
    • 再生中に ContentFrame が再コンポーズされたときに、最初のフレームが誤ったサイズでレンダリングされる問題を修正しました(#3238)。
    • CurrentMediaItemState クラスと対応する rememberCurrentMediaItemState コンポーザブルを media3-ui-compose モジュールに追加しました。この状態ホルダーは、現在再生中の MediaItem に関するさまざまなメタデータ情報を表示するために demo-compose で使用されます。
    • PlaylistState クラスと対応する rememberPlaylistState コンポーザブルを media3-ui-compose モジュールに追加します。この状態ホルダーは、demo-compose で、プレーヤーに設定された MediaItems に関するさまざまなメタデータ情報を表示するために使用されます。
    • PlaybackSpeedState に早送り/スローモーション API を追加しました。demo-compose でこの機能を使用して、長押しによる早送りを表示します。
    • MiniController コンポーザブルを media3-ui-compose-material3 モジュールに追加します。現在のメディア アイテムのタイトル、アーティスト、アートワーク、進行状況を表示しながら、Player を制御するためのコンパクトなアフォーダンスを提供します。
    • ErrorState クラスと対応する rememberErrorState コンポーザブルを media3-ui-compose モジュールに追加します。ErrorText コンポーザブルを media3-ui-compose-material3 に追加し、Player のデフォルトのオーバーレイにします。
    • TopControls、CenterControls、BottomControls、ErrorOverlay のコンポーザブルを含む PlayerDefaults オブジェクトを公開します。
    • FocusRequester を Player コンポーザブルとそのコンテンツ スロットに追加します。
    • PlayerPool(common-ktx)と rememberPooledPlayer(ui-compose)を公開し、スライディング ウィンドウ UI 環境での MediaItems のプリロードをサポートしました。新しい ShortFormPlayerScreen を使用して、demo-compose でこの機能を紹介します。
    • PlayerView と Compose PresentationState のシャッター抑制バグを修正しました。このバグは、期間 UID ルックアップをサポートしていないタイムラインでクラッシュを引き起こしていました(#3264)。
  • ダウンロード:
    • ダウンロード用に取得されたメディア プレイリストの HLS 変数を解決するようにしました(#3258)。
  • Ktor 拡張機能:
    • Ktor HTTP スタックを基盤とする KtorDataSource を提供する新しい media3-datasource-ktor 拡張モジュールを追加しました。
    • 接続を開くときに KtorDataSource が HTTP レスポンス本文全体をメモリに読み込む問題を修正しました(#3305)。
  • HLS 拡張機能:
    • HLS コンテンツ ステアリングとパスウェイ クローンのサポートを追加しました(#1689)。
    • setWithAssetListReset を HlsInterstitialsAdsLoader に追加して、アプリが完全に処理されたアセットリスト インタースティシャルを、オンデマンドの再解決のために利用不可の状態にリセットできるようにしました。
    • EXT-X-STREAM-INF と EXT-X-I-FRAME-STREAM-INF の SCORE 属性を解析し、Format.selectionPriority に入力します(#3236)。
    • プレイリストがプライマリまたはアクティブでなくなっても、スケジュールされた HLS プレイリストの更新が継続されるバグを修正しました(#3254)。
    • インタースティシャル アセットリストを解決する際のコンテンツ再開オフセットの計算を修正しました(#3322)。
    • プレイリスト リクエストの失敗後に低レイテンシのライブ再生を再開すると、音声トラックのタイムスタンプが予期せず不連続になる問題を修正しました(#3311)。
    • HlsMediaPeriod.getStreamKeys() で、音声レンディションの ID3 トラックが字幕と見なされるバグを修正しました(#3333)。
  • DASH 拡張機能:
    • CEA クローズド キャプションを言語に基づいて異なる TrackGroup に分割します(#3113)。
    • マニフェスト(MPD)から複数の Location 要素を解析し、マニフェストの読み込みに失敗した場合に DashMediaSource でロケーション フォールバックを実行するサポートを追加しました。
    • 空の <SegmentTimeline/> 要素を含むマニフェストを開く際のクラッシュ(IndexOutOfBoundsException)を修正しました(#3326)。
  • RTSP 拡張機能:
    • UDP ポート バインディング エラーが原因で RTSP 再生の準備中に発生する一時的な再生の停止または失敗を修正しました。
  • Cast 拡張機能:
    • 新しい CastParams クラスを追加し、Cast.initialize(CastParams) を呼び出すことで Cast の構成を可能にしました。
    • 新しい CastParams.getShowSystemOutputSwitcherOnCastIconClick() オプションを追加しました。これにより、利用可能な場合は、アプリ内キャスト デバイス選択ツールの代わりに SystemUI 出力スイッチャーが使用されます。
    • MediaRouteButtonState と rememberMediaRouteButtonState を追加して、メディア ルート選択ツールの公開設定のモニタリングをサポートし、state パラメータを MediaRouteButton に追加しました(#3172)。
    • トラック選択後に RemoteCastPlayer がトラック マスキング状態から抜け出せなくなり、キャスト レシーバーからの後続のトラック更新が無視されるバグを修正しました(#3237)。
    • Media3 以外の送信者から開始されたキャスト セッションに参加しようとすると、DefaultMediaItemConverter が NullPointerException をスローするバグを修正しました。
    • アクティブなプレーヤーを変更する際に、CastPlayer が再生できない MediaItems を転送しないようにしました(#3199)。
    • 未構成のライブ ストリーム(liveConfiguration == UNSET)が STREAM_TYPE_BUFFERED としてキューに入れられるバグを修正しました(#3318)。
  • テスト ユーティリティ:
    • DataSourceContractTest を拡張して、ヘッダーと本文を含む POST リクエストのサポートを追加し、いくつかの POST リソースを HttpDataSourceTestEnv に追加して、WebServerDispatcher で想定される HTTP メソッド、ヘッダー、本文のアサーションを追加します。
    • DataSource.open() から返される長さについて、DataSourceContractTest のアサーションを厳格化しました。C.LENGTH_UNSET が発生する可能性のあるリソースは、TestResource.Builder.setMayResolveToUnknownLength(boolean) を使用してこれを示す必要があります。
    • TestExoPlayerBuilder に setPlaybackLooper を追加します。
  • サポートが終了したシンボルを削除しました。
    • androidx.media3.exoplayer.MetadataRetriever を削除しました。代わりに androidx.media3.inspector.MetadataRetriever を使用してください。
    • androidx.media3.exoplayer.MediaExtractorCompat を削除しました。代わりに androidx.media3.inspector.MediaExtractorCompat を使用してください。
    • Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA を削除しました。代わりに HeifExtractor を使用して、HEIC ファイルからモーション フォトのメタデータを抽出します。
    • androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata を削除しました。代わりに androidx.media3.extractor.metadata.MotionPhotoMetadata を使用してください。
    • androidx.media3.extractor.DummyTrackOutput を削除しました。代わりに androidx.media3.extractor.DiscardingTrackOutput を使用してください。
    • androidx.media3.extractor.DummyExtractorOutput を削除しました。代わりに androidx.media3.extractor.NoOpExtractorOutput を使用してください。
    • androidx.media3.common.C.generateAudioSessionIdV21 を削除しました。代わりに androidx.media3.common.util.Util.generateAudioSessionId を使用してください。
  • ビルド
    • Media3 にローカルで依存して Gradle 複合ビルド(includeBuild)を使用するための README.md の手順を更新しました。core_settings.gradle スクリプトが削除され、androidxMediaModulePrefix プロパティと androidxMediaEnableMidiModule プロパティが使用されなくなりました。

1.11.0-rc01

1.11.0 の安定版を使用します。

1.11.0-beta01

2026 年 7 月 7 日

1.11.0 の安定版を使用します。

1.11.0-alpha01

2026 年 6 月 24 日

1.11.0 の安定版を使用します。

バージョン 1.10.0

1.10.1

2026 年 5 月 12 日

  • 共通ライブラリ:
    • SimpleBasePlayer と ForwardingSimpleBasePlayer での onAudioSessionIdChanged の処理を修正しました。
  • ExoPlayer:
    • トンネル モードで IllegalStateException が発生する可能性がある、オーディオ セッション ID の生成に関連する競合状態を修正しました。(#3099)。
    • レンダラーの事前ウォームアップでデコーダエラーから復旧する際に、アプリがクラッシュする可能性がある問題を修正しました。
    • AV1 ベースの Dolby Vision コーデックを使用する際に初期化データを提供すると、動画アーティファクトが発生する問題を修正しました(#3153)。
  • トラック選択:
    • VideoTrackInfo のトラック選択ロジックを調整して、フォールバック MIME タイプを解決し、HDR とコーデック スコアの設定を品質設定に移動しました(#3135)。
  • エクストラクタ:
    • MP3: Xing データの長さが既知のストリームの長さより長い場合は、無視するようにしました(#3117)。
    • FLAG_OMIT_TRACK_SAMPLE_TABLE が設定され、トラックに同期サンプル(stss)ボックスがない場合に、Mp4Extractor の ArrayIndexOutOfBoundsException を修正。
  • オーディオ:
    • 複数のオーディオ レンダラがプレーヤーに追加されている場合に、オーディオ イベントが誤ってルーティングされることがあるバグを修正しました。
  • 動画:
    • API 30 未満でフレームレートが変更されたときにコーデックを再利用するロジックを調整し、メリットがない場合にコーデックがリセットされないようにしました(#3120)。
    • API 31 以降で、queueSecureInputBuffer の強制同期の回避策を無効にしました。この回避策は、復号を強制的に連続して実行する人工的なボトルネックであり、API 31 より前に存在していたフレームワークの問題による動画の文字化けを防ぐものでした。
  • 画像:
    • スクラブモードで、ユーザーが「スクラブを停止」したときにのみ画像の更新が有効になる問題を修正しました(#2815)。
  • セッション:
    • アプリケーション スレッドがメインスレッドでない場合に、ForegroundServiceStartNotAllowedException がスレッド境界を越えて伝播されないバグを修正しました(#2499)。
    • 他のアイテムへのシークをサポートしているが、プレイリストの変更はサポートしていないプラットフォーム専用セッションに接続するときに、COMMAND_SEEK_TO_MEDIA_ITEM が MediaController で使用できないバグを修正しました。
    • PREPARE_FROM アクションを許可しないプラットフォーム メディア セッションで MediaController がメディア アイテムを設定できない問題を修正しました。
    • プラットフォーム コントローラ経由で接続する際に、API 27 以前で独自のプロセスが Controller.isTrusted() でマークされないバグを修正しました。
  • HLS 拡張機能:
    • トラック選択が利用可能なトラックのサブセットである場合に、ストリーム フォールバック中に ArrayIndexOutOfBoundsException がスローされるバグを修正しました(#3161)。
    • 後続の更新で #EXT-X-MAP タグが繰り返されなかった場合に、メディア プレイリストの更新間で初期化セグメントが引き継がれない問題を修正しました(#3105)。
  • DASH 拡張機能:
    • 現在キャンセル中のチャンクにシークすると SampleQueue でクラッシュする問題を修正しました。

1.10.0

2026 年 3 月 26 日

  • 共通ライブラリ:
    • UnstableApi の Player.mute() と Player.unmute() を安定版に昇格しました。
    • UnstableApi の Format.pcmEncoding と C.PcmEncoding を安定版に昇格しました。
    • Format.primaryTrackGroupId を追加して、埋め込み Format インスタンスのプライマリ グループを識別できるようにしました(#294)。
  • ExoPlayer:
    • AdsMediaSource にクリッピング機能を追加しました。
    • MediaCodecVideoRenderer で動的スケジューリングのサポートを追加し、スケジューリング作業と CPU ウェイク サイクルを動画フレームの処理可能なタイミングに合わせられるようにしました。これを有効にするには、DefaultRenderersFactory で experimentalSetEnableMediaCodecVideoRendererDurationToProgressUs() を使用します。
    • DefaultPreloadManager.Builder でカスタム DataSource.Factory を設定できるようにします。
    • 一部のデフォルト定数を ExoPlayer.Builder に移動することで、Robolectric を使用せずに ExoPlayer をモックできるようにしました。この複雑なインターフェースをモックすることは、一般的には推奨されません。使用が最小限、シンプル、付随的な場合にのみ推奨されます(#2985)。
      • このため、DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MS を ExoPlayer から ExoPlayer.Builder に移動する必要がありました(非推奨にすることなく)。
    • ProgressiveMediaSource が古いタイムライン情報をプレーヤーに伝播し、キューに入れられた期間が予期せず削除されるバグを修正しました(#3016)。
    • 通話中に再生がリクエストされたときに、ExoPlayer が遅延オーディオ フォーカスをリクエストしない問題を修正しました。
    • オンデマンド コンテンツからライブ コンテンツに移行すると、オンデマンド コンテンツの終了時に再バッファリングが発生することがあるバグを修正しました(#3052)。
    • Dolby Vision Profile 10 のサポートを追加しました(#2830)。
    • 初期化されていないプレロール広告が ArrayIndexOutOfBoundsException を生成するバグを修正しました(#3125)。
  • CompositionPlayer:
    • EditedMediaItem.removeVideo のサポートを追加しました。
  • Transformer:
    • EditedMediaItem.Builder.setFrameRate() で動画の最大出力フレームレートを設定できるようになりました。これは、setSpeed() でメディア速度を上げる場合に特に役立ちます。
  • トラック選択:
    • DefaultTrackSelector.selectAllTracks のシグネチャを変更して、トラック オーバーライドが事前入力された出力配列をパラメータとして含めるようにしました。
    • 対応するプライマリ トラックが選択されているかどうかに関係なく、埋め込みメタデータ トラックが選択される問題を修正しました(#294)。
    • preferredVideoLanguages、preferredVideoLabels、preferredAudioLabels、preferredTextLabels、selectTextByDefault の TrackSelectionParameters オプションを安定化。
  • エクストラクタ:
    • MP4: moov などの他のボックスの前に大きな uuid ボックスがあるファイルをサポートしました(#3046)。
    • MP4: MP4 コンテナでの Versatile Video Coding(VVC)トラックのサポートを追加しました。
  • 検査員:
    • 互換性を破る変更: FrameExtractor を削除しました。ユーザーは、新しい :media3-inspector-frame モジュールに依存し、インポートを androidx.media3.inspector.frame.FrameExtractor に更新する必要があります。
    • デコードされた動画フレームを抽出して処理するための新しいモジュールを導入します。
  • オーディオ:
    • IAMF デコーダ拡張機能の基盤となるデコード ライブラリを libiamf から iamf_tools に変更しました。
    • IAMF デコードは、デコーダ(IAMF デコーダ拡張機能を使用する場合)または Android Spatializer を介してバイノーラル出力をサポートします。
    • Automotive のシナリオで AC-4 デコーダのサポートを評価する際に、AC4Profile22 などの以前のプロファイルのサポートを正しく削除するようにしました(#2609)。
    • DefaultAudioSink での AudioOutput 初期化の再試行ロジックを改善しました(#2905)。
    • IAMF をデコードするときに、IAMF 拡張機能とメディア コーデック デコーダの両方で、スピーカー(または該当する場合はスペイシャライザー)の出力レイアウトを一致させようとします。これは、AudioCapabilities と AudioCapabilitiesReceiver の新しいフィールドとロジックによってサポートされています。
    • 圧縮オフロード モードでギャップレス オーディオのプレイリストを再生すると、再生が停止するバグを修正しました。
  • テキスト:
    • VobSub: 常にデフォルトの 5 秒にするのではなく、START と STOP の SPU 制御コマンドを使用してキューの長さを導出します(#2935)。
  • メタデータ:
    • メタデータ レンダラのデフォルト数を 4 に増やし、HLS バリアントとレンディションによって公開される可能性のあるすべてのメタデータ トラックをカバーするようにしました(#3043)。
  • 効果:
    • LottieOverlay を新しい :media3-effect-lottie モジュールに移動しました(androidx.media3.effect.LottieOverlay から androidx.media3.effect.lottie.LottieOverlay への名前変更も行いました)。
  • エフェクト Lottie:
    • 動画フレームに Lottie エフェクトを適用する機能を提供する新しい :media3-effect-lottie モジュールを導入しました。
  • IMA 拡張機能:
    • 最新の Ad media info API にアクセスするには、IMA SDK のバージョンを 3.39.0 に更新してください。
    • 広告の MIME タイプが IMA LOADED イベントで提供された MIME タイプと一致しないバグを修正しました。この修正により、IMA から提供される広告メディア情報を使用して広告の MIME タイプがマッピングされるようになりました。
    • setEnableCustomTabs を ImaAdsLoader と ImaServerSideAdInsertionMediaSource に追加し、広告のクリックスルー URL をカスタムタブを使用して起動するかどうかをユーザーが制御できるようにしました。
    • ImaAdTagUriBuilder を追加します。これは、adTagUri を構築する別の方法を提供するクラスです。これには setPreferredLinearOrientation API が含まれています。これはアルファ版テスト中の API で、リニア広告の優先方向を設定できます。アルファ版テストグループへの参加をご希望の場合は、アカウント パートナーにお問い合わせください。
  • セッション:
    • MediaMetadata.artworkData の大きな配列がアプリをクラッシュさせるバグを修正しました。
    • ActionFactory インターフェースの @Player.Command 引数に int 型を使用します(#2933)。
    • MediaSessionService と MediaLibraryService を LifecycleService にして、ライフサイクル対応オペレーションをサービスのライフサイクルにアタッチできるようにしました(#187)。
    • ローカル再生での MediaController と MediaBrowser からのデバイス音量変更コマンドのサポートを停止します。アプリはローカル デバイスの音量を変更すべきではありません。必要に応じて、この目的のために AudioManager API を使用できます。
    • サービスをフォアグラウンド サービスとして開始した古い Intent インスタンスを検出します。これにより、システムによって ForegroundServiceDidNotStartInTimeException がスローされるのを防ぐことができます。これは、カスタム MediaNotification.Provider を実装するアプリの不安定な API に対する互換性を破る変更です。新しい必須メソッドが追加されたためです。
    • ホーム画面ウィジェットで使用する PendingIntent インスタンスのビルダーを追加しました(#2933)。
    • Compose ベースのホーム画面ウィジェット用の Intent インスタンスを作成する静的メソッドを追加しました(#2933)。
    • 不連続性の理由が「AUTO」と「SEEK」で、再生が特定のメディア アイテム インデックスから同じメディア アイテムの別のインデックスに移行したときに、メディア アイテムの移行がコントローラに報告されないバグを修正しました(#2997)。
    • システム UI ボタンの配置の回避策が、Android Auto や回避策を必要としないメーカーなど、他の UI サーフェスに悪影響を及ぼす問題を修正しました(#3041)。
    • サブスクリプションへのアクセスが同期されない問題を修正しました(#3056)。
    • 特定のサイズのメディア セッションのアートワークが SysUI をクラッシュさせ、デバイスを強制的に再起動する API 29 の SysUI のバグを回避しました(#3118)。
    • Android Q での通知アートワーク アイコンのスケーリングを修正しました(#3084)。
  • UI:
    • 再生速度を表示、変更するための PlaybackSpeedControl コンポーザブルを media3-ui-compose に追加します。
    • 再生速度を制御するために、media3-ui-compose-material3 に PlaybackSpeedToggleButton Composable を追加します。
    • media3-ui-compose-material3 に ProgressSlider コンポーザブルを追加し、プレーヤーの進行状況を表示して、ドラッグとタップを使用してシークを実行できるようにしました(#2288)。
    • PlayerControlView のアニメーション化で、大きなオフスクリーン バッファを回避します。
    • Player コンポーザブルを media3-ui-compose-material3 に追加。ContentFrame と、上、中央、下に配置されたカスタマイズ可能なコントロールを組み合わせます。
    • PlayerControlView が表示されているときにアナウンスが継続的に更新されないように、ユーザー補助サービスから再生位置を非表示にします。
  • HLS 拡張機能:
    • HLS インタースティシャルで X-PLAYOUT-LIMIT をサポートしました(#2484)。
    • #EXT-X-DEFINE で QUERYPARAM 属性をサポートしました(#1854)。
    • 正規表現マッチャーをキャッシュに保存することで、HLS プレイリストの解析を最適化しました(#3008)。
    • 音声レンディションで ID3(EMSG)メタデータ トラックを公開します(#3043)。
    • 異なるロケーションからの冗長ストリームが利用可能な場合、読み込みエラーが発生したときにロケーション フォールバックを許可します(#1988)。
    • HLS インタースティシャルの X-SNAP の動作を修正し、開始位置と再開位置を正しく計算するようにしました(#3013)。
  • DASH 拡張機能:
    • セグメントの開始時間が揃っていないトラックが、再生開始時に遅延やサンプルの欠落を引き起こす問題を修正しました(#3057)。
    • インバンド EMSG v0 メタデータのタイムスタンプが正しく設定されないバグを修正しました(#3024)。
  • RTSP 拡張機能:
    • H.264 および H.265 ストリーミングの回帰を修正しました。この回帰により、複数の RTP パケットにまたがる同じアクセス ユニットのサンプルが誤って解析されていました。これにより、動画に視覚的なアーティファクトや破損が生じていました(#3121)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1 など):
    • MPEG-H デコーダ拡張機能に MPEG-H UI マネージャーのサポートを追加しました(#3066)。
  • Cast 拡張機能:
    • Cast 再生のトラック選択を実装できるようにする RemoteCastPlayer.Builder#setTrackSelector メソッドを追加しました。
  • サポートが終了したシンボルを削除しました。
    • ExperimentalFrameExtractor を削除しました。代わりに androidx.media3.inspector.frame.FrameExtractor を使用してください。
    • ChannelMixingMatrix.create() を削除しました。代わりに ChannelMixingMatrix.createForConstantGain() を使用してください。
    • androidx.media3.extractor.metadata.flac.VorbisComment を削除しました。代わりに androidx.media3.extractor.metadata.vorbis.VorbisComment を使用してください。
    • MediaSource.prepareSource(MediaSourceCaller, TransferListener) を削除します。代わりに MediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId) を使用してください

1.10.0-rc03

2026 年 3 月 25 日

1.10.0 の安定版を使用します。

1.10.0-rc02

2026 年 3 月 16 日

1.10.0 の安定版を使用します。

1.10.0-rc01

2026 年 3 月 10 日

1.10.0 の安定版を使用します。

1.10.0-beta01

2026 年 2 月 25 日

1.10.0 の安定版を使用します。

1.10.0-alpha01

2026 年 2 月 6 日

1.10.0 の安定版を使用します。

バージョン 1.9.0

1.9.4

2026 年 5 月 16 日

バージョン 1.9.4 には、次のコミットが含まれています。

  • 効果:
    • サーフェスレス コンテキストから移行するときに、GL_DRAW_BUFFER と GL_READ_BUFFER を明示的に設定します。

1.9.3

2026 年 3 月 16 日

バージョン 1.9.3 には、次のコミットが含まれています。

  • オーディオ:
    • 圧縮オフロード モードでギャップレス オーディオのプレイリストを再生すると、再生が停止するバグを修正しました。

1.9.2

2026 年 2 月 6 日

バージョン 1.9.2 には、次のコミットが含まれています。

  • ExoPlayer:
    • ProgressiveMediaSource が古いタイムライン情報をプレーヤーに伝播し、キューに入れられた期間が予期せず削除されるバグを修正しました(#3016)。
  • セッション:
    • システム UI ボタンの配置の回避策が、Android Auto や回避策を必要としないメーカーなど、他の UI サーフェスに悪影響を及ぼす問題を修正しました(#3041)。
  • Cast 拡張機能:
    • キャストからローカル再生への転送が機能しないバグを修正しました。

1.9.1

2026 年 1 月 26 日

バージョン 1.9.1 に含まれる commit については、こちらをご覧ください。

  • 共通ライブラリ:
    • タイムゾーン オフセットに時間のみを含む日時文字列をサポート(#2929)。
  • ExoPlayer:
    • 再生開始時に A/V 同期をスムーズにするため、音声が開始した後にのみ動的スケジューリングで doSomeWork 間隔を遅くできるようにします。
    • FileNotFoundException などの例外タイプが複数回再試行される DefaultLoadErrorHandlingPolicy のバグを修正しました。
    • 動的スケジューリングのバグを修正しました。このバグにより、次の doSomeWork の計算時間が、現在の doSomeWork のイテレーションの経過時間によって誤って短縮されていました。これに対処することで、CPU のアイドル時間を延長し、電力を節約できます。
    • フォールバック AVC または HEVC コーデックを使用しようとしたときに、ドルビー ビジョン ファイルの一部の再生が失敗する問題を修正しました。
    • 再生中のアイテムをプレイリストから削除すると、再生終了後も読み込みが続くバグを修正しました(#2873)。
    • 同じアイテムで ExoPlayer.replaceMediaItem を繰り返し使用するときに、MediaItem インスタンスがリークしないようにしました(#2993)。
    • 緊急の wake lock 解除によって発生する可能性のある ANR を防止しました(#2979)。
  • エクストラクタ:
    • MP3: LAME ReplayGain データを解析します (#2840)。
  • オーディオ:
    • Automotive のシナリオで AC-4 デコーダのサポートを評価する際に、AC4Profile22 などの以前のプロファイルのサポートを正しく削除するようにしました(#2609)。
  • 動画:
    • 再生が途切れないように、コンテンツのフレームレートが変更されたときに API 30 未満のデバイスで動画コーデックを破棄します(#2941)。
  • テキスト:
    • VobSub: 1 つの制御シーケンスのみを含む SPU、または複数の制御シーケンスに分割された重要な情報を含む SPU を正しく処理することで、一部の字幕が表示されない問題を修正しました(#2935)。
  • IMA 拡張機能:
    • バグの修正: 広告の MIME タイプが IMA LOADED イベントで提供された MIME タイプと一致しない問題を修正しました。この修正により、連続配信広告のインデックスと広告の掲載順位を使用して広告の MIME タイプがマッピングされるようになりました。
    • getAdsManager() と AdEvent.getAd() の結果にアクセスする前に null チェックを追加しました。
  • セッション:
    • プラットフォーム セッションに接続された MediaController を停止すると、広告の再生中に停止が発生した場合にアプリがクラッシュするバグを修正しました(#2948)。
    • さまざまなクラスの extras Bundle インスタンスに検証を追加し、他のプロセスから送信される不正な形式の Bundle インスタンスから保護します。
    • COMMAND_SEEK_NEXT または COMMAND_SEEK_BACK のコマンドがないと、システム メディア通知にギャップが生じる問題を修正しました(#2976)。
    • 通知アイコンのビットマップ スケーリングをメインスレッドから移動しました(#2829)。
    • 従来の MediaMetadataCompat と MediaDescriptionCompat から変換する際に、作成者、ライター、作曲者がフォールバックとして使用されないバグを修正しました(#3018)。
  • ダウンロード:
    • PriorityTooLowException が SegmentDownloader によって処理されるときに発生する可能性がある無限ループを修正しました(DASH、HLS、SmoothStreaming の場合)。protected execute メソッドを使用して SegmentDownloader をカスタム オーバーライドする場合は、タスクを Supplier でラップして提供し、再作成できるようにする必要があります(#2931)。
  • HLS 拡張機能:
    • 未加工のアセットリストの JSON ドキュメントを Listener.onAssetListLoadCompleted コールバックに渡します。これは、不安定な API における互換性を破る変更です。このコールバックを実装するアプリは、JSONObject 型の引数を追加する必要があります(#2950)。
  • RTSP 拡張機能:
    • ラップアラウンドするタイムスタンプを含む RTP パケットを正しく処理するようになりました(#2930)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1 など):
    • 最初の動画フレームを処理する前にシークすると発生する可能性がある NullPointerException を修正しました(#2965)。
  • Cast 拡張機能:
    • プレイリストを置き換えるときに RemoteCastPlayer タイムラインが正しく更新されないバグを修正しました。

1.9.0

2025 年 12 月 17 日

  • 共通ライブラリ:
    • 他の AndroidX ライブラリに合わせて minSdk を 23 に更新しました。
    • PlayerTransferState を追加しました。これにより、Player インスタンス間で再生状態を簡単に転送できるようになります。
    • Player に void mute() メソッドと void unmute() メソッドを追加します。これらのメソッドは、Player の音量をゼロに設定する前と後に、Player の音量を保持し、結果として復元します。
    • 以前に ExoPlayer が内部で使用していたユーティリティ クラス WakeLockManager、WifiLockManager、AudioFocusManager、AudioBecomingNoisyManager、StuckPlayerDetector を公開し、他のプレーヤーで再利用できるようにしました(#1893)。
    • 基盤となるデリゲート プレーヤーがリスナー インスタンスの比較に参照の等価性を使用する場合の ForwardingPlayer リスナー処理を修正しました(#2675)。
    • media3-common-ktx ライブラリに、操作対象の特定の Player.Events を指定する Player.listenTo サスペンド拡張関数を追加します。
    • 報告されたバッファ位置が報告された再生時間よりも不自然に大きい場合に、整数オーバーフローに起因して BasePlayer.getBufferedPercentage でクラッシュする問題を修正しました(#2750)。
    • カスタム サンプル MIME タイプを無視せず、コンテナ MIME タイプから誤っている可能性のあるトラックタイプを使用するようにフォールバックすることで、TrackGroup トラックタイプの自動検出を修正しました(#2860)。
  • ExoPlayer:
    • プレーヤーが停止していると思われる場合に StuckPlayerException プレーヤー エラーをトリガーする、停止したプレーヤーの検出を追加します。これは、次の場合に発生します。必要に応じて、各デフォルト タイムアウトを ExoPlayer.Builder で構成できます。
      • 再生を試みているときに STATE_BUFFERING が 10 分間続き、バッファリングが進行しない。
      • 再生を試みてから 10 秒経過しても STATE_READY のままで、再生が進行しない。
      • アイテムの終了に達することなく、宣言された再生時間を 1 分超えた場合。STATE_READY
      • 再生を試みているときに、再生抑制の理由が 10 分間続いた後。
    • バックグラウンド再生中のバッファリングに関する問題を修正するため、デフォルトで wake lock の処理を有効にしました。これは、ExoPlayer.Builder.setWakeMode を C.WAKE_MODE_LOCAL に設定するのと同じです。
    • リスニング ロジックを追加して、ExoPlayer.Builder に最初に渡された Context に変更が報告されたときに、仮想デバイス ID を自動的に更新します。
    • ExoPlayer.setVirtualDeviceId を追加して、ExoPlayer.Builder に渡された Context から取得した仮想デバイス ID を手動で更新します。
    • レンダラが、現在のアイテムの終了 10 秒前より前に、次のプレイリスト アイテムのデータを消費しないようにします。
    • setSeekBackIncrementMs、setSeekForwardIncrementMs、setMaxSeekToPreviousPositionMs を ExoPlayer に追加して、構築後にこれらの設定を更新できるようにしました(#2736)。
    • DefaultPreloadManager にプリキャッシュ機能を追加します。アプリは、TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData) を介して DefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs) または DefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs) を返し、メディア アイテムをプリキャッシュする必要があることを示すことができるようになりました。
    • ショートフォーム デモアプリで DefaultPreloadManager のプリキャッシュ機能を使用します。
    • ローカル再生用の DefaultLoadControl.Builder セッターを追加し、幅広いローカル ファイルで適切に機能するように DefaultLoadControl のデフォルト値を調整しました。
    • 空のプレイリストを設定すると、プレーヤーが STATE_READY または STATE_BUFFERING のままになるバグを修正しました。
    • プリロード マネージャー API を強化しました。
      • メディア アイテムまたはメディアソースをバッチで追加し、その後 invalidate() を自動的に呼び出す addMediaItems(List<MediaItem>, List<T>) と addMediaSources(List<MediaSource>, List<T>) を追加します。
      • メディア アイテムまたはメディアソースを一括で削除する removeMediaItems((List<MediaItem>) と removeMediaSources(List<MediaSource>) を追加し、削除後にプリロード マネージャーがプリロードを開始したり、プリロードを続行したりしないようにします。
      • DefaultPreloadManager.setCurrentPlayingIndex(int) が自動的に無効になるようにします。現在再生中のインデックスを更新した後に、アプリで invalidate() を明示的に呼び出す必要がなくなりました。
    • スクラブモードで、同じ画像グループ内の前方シークでキーフレームのリセットをスキップする機能を追加しました。
    • DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int) を追加して、アプリが指定された playerName を持つプレーヤーのターゲット バッファバイトの値を設定できるようにしました。DefaultLoadControl は、割り当てられたバイト数とターゲット バッファのバイト数に基づいて、各プレーヤーの決定を個別に行えるようになりました。
    • AdPlaybackState.AdGroup に SkipInfo を追加して、広告グループ内の各広告のスキップ情報を渡します。
    • ポストロールの再生中に removeMediaItems(List) を呼び出すとクラッシュが発生するバグを修正しました(#2746)。
    • フレームが誤って常に最後のサンプルとして設定され、レンダリングされる、再生リストの再生時の途切れを修正しました。
    • プレーヤーが音声セッション ID の生成に失敗した場合に、再試行パスを有効にしました(#2382、#2678)。
    • DefaultPreloadManager のソースの合計バッファバイトを制御するサポートを追加し、プリロードの合計バッファバイトが任意に増加しないようにしました。デフォルトの制御ロジックを使用するには、アプリは PlayerId.Preload.name(「プリロード」)の playerName に対して DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int) を介してプリロードのターゲット バッファバイトを設定し、作成された DefaultLoadControl を DefaultPreloadManager.Builder.setLoadControl(LoadControl) を介して挿入します。
    • デフォルトの実装で cloneAndSet(int, int) を ShuffleOrder に追加しました(#2834)。
    • シーク調整または自動移行後に広告再生をスキップするときに、コンテンツ再開オフセットを追加します(#2484)。
    • 音声トラックと動画トラックのコーデック パラメータを設定して監視する API を追加しました。この機能は MediaCodec ベースのレンダラに実装されており、API 29 以降が必要です。
      • ExoPlayer.setAudioCodecParameters() と ExoPlayer.setVideoCodecParameters() を使用してパラメータを適用します。
      • ExoPlayer.addAudioCodecParametersChangeListener() と ExoPlayer.addVideoCodecParametersChangeListener() を使用して変更をリッスンします。ベンダー固有のキーを監視するには、API 31 以降が必要です。
    • ゼロ以外の位置にシークした後に空でないメディアソースでプレーヤーを準備し、空のメディアソースを設定すると発生する IllegalStateException を修正しました。
    • スクラブモードで他のメディア アイテムにシークすると IllegalStateException が発生するバグを修正しました。
    • DefaultPlaybackSessionManager の潜在的な NullPointerException を修正しました(#2885)。
    • 対象となる動画でシークのパフォーマンスを改善できるようにします。
    • このプラットフォーム API のタイムアウトの問題が修正された API 36 以降で、MediaCodec での非同期復号の使用を再度有効にしました(#1641)。
    • MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUs のデフォルト値を 15 ミリ秒に変更し、対象となる動画のデコード前に動画フレームをより効率的にドロップできるようにしました。
    • DefaultLoadControl の自動メモリ計算に最大メモリ上限を追加しました。これは、選択されたトラック数が多すぎる場合にのみ有効になります(#2860)。
    • プレイリストまたはリピートモードで再生しているときに、スクラブモードで終了付近をシークすると、次のメディア アイテムにシークされるバグを修正しました。
  • CompositionPlayer:
    • 新しい @ExperimentalApi アノテーションで CompositionPlayer を公開し、テストに使用できるものの、まだ開発中であることを示します。一部の API は、今後のリリースで大幅に変更される可能性があります。また、一部のユースケースには既知の問題と制限事項があります(一部はドキュメントに記載されていません)。
    • CompositionPlayer での COMMAND_SET_AUDIO_ATTRIBUTES と音声フォーカス処理のサポートを追加しました。
    • CompositionPlayer でのセカンダリ シーケンスの速度変更のサポートを追加。
    • EditedMediaItem.removeVideo のサポートを追加しました。
  • Transformer:
    • デフォルトのマルチプレクサとして InAppMp4Muxer を使用します。
    • EditedMediaItem.Builder#setSpeed() を追加し、Effects#createExperimentalSpeedChangingEffects() のサポートを終了しました。
    • EditedMediaItemSequence の forceAudioTrack と forceVideoTrack を trackTypes に置き換えます。
  • トラック選択:
    • TrackSelectionParameters.selectTextByDefault を追加すると、より具体的な設定を指定せずに、任意のテキスト トラックの選択を優先できます。
    • TrackSelectionParameters に preferredVideoLabels、preferredAudioLabels、preferredTextLabels を追加して、特定のラベルを持つトラック(HLS NAME タグから読み取られたトラックなど)の設定を指定します(#1666)。
  • エクストラクタ:
    • FLAC: ヘッダー検出を強化して、エンコードされた FLAC データで誤ったヘッダーが検出される可能性を減らし、デコードエラーを削減しました(#558)。
    • MP3: MP3 ファイルの先頭にある ID3 タグの間(および前)にギャップを許可しました(#811、#5718)。
    • MP3: 同期バイトの既存の検索上限に合わせて、スニッフィングの上限を 128 kB に引き上げました(#2713)。
    • MP3: FLAG_ENABLE_INDEX_SEEKING を変更し、メタデータ ヘッダー(Xing や VBRI など)からシーク情報を取得することを優先し、他のシーク情報がない場合はインデックス ベースのシークにフォールバックするようにしました。これにより、シーク メタデータを含むファイルのパフォーマンスが向上します(#2839)。
    • MP3: FLAG_ENABLE_INDEX_SEEKING が設定されている場合でも、シーク メタデータ(Xing、VBRI など)が見つからない場合に、デフォルトで固定ビットレート(CBR)を想定するように Mp3Extractor を変更しました。これは、CBR が標準で、VBR には明示的なヘッダーが必要だった MP3 仕様の履歴に基づいています。これにより、メタデータのないファイルの即時シーク可能性が向上しますが、ヘッダーのない VBR ファイルの精度が低下する可能性があります。CBR の前提がシーク可能でない場合(長さが不明なストリームなど)、インデックス シークがフォールバックとして使用されるようになりました(#2848)。
    • MP4: エクストラクタからトラック形式を出力する前に、最初のサンプルのレイヤ値をピークすることで、audio/mpeg(MP3)、audio/mpeg-L1、audio/mpeg-L2 の MIME タイプを明確に区別します(#2683)。
    • MP4: 1 MB を超える stbl ボックスは、ファイルが断片化されていないことを意味すると想定することで、非常に大きなファイルのスニッフィング効率を改善しました(#2650)。
    • MP4: ©mvn(楽章名)と ©mvi(楽章インデックス)のメタデータのサポートを追加しました。これらは、それぞれ MVNM と MVIN の ID を持つ Format.metadata の TextInformationFrame オブジェクトとして出力されるようになりました(#2754)。
    • MP4: stsd ボックスがないトラックを無視します(ファイル全体の解析に失敗するのではなく)。
    • Matroska: DTS-HD 検出のサポートを追加しました(#6225)。
    • MatroskaExtractor で、複数のトラックを含むファイルに対してシークが不正確になる問題を修正しました。キューポイントがそれぞれのトラックに正しく関連付けられるようになり、再生位置の細かい調整が可能になりました。
    • MPEG-TS: タイムスタンプのない PES パケットが原因で ReorderingBufferQueue から IllegalArgumentException が発生する問題を修正しました(#2764)。
    • HEIC モーション フォトを抽出するためのサポートを追加しました。HeifExtractor で、埋め込み動画トラックと音声トラックを含む HEIC ファイルを解析できるようになりました。
  • 検査員:
    • メディア検査ユーティリティの専用ホームとして機能する新しい :media3-inspector モジュールを導入しました。このモジュールには、メタデータとフレーム抽出の両方に統合 API を提供する新しい androidx.media3.inspector.MetadataRetriever が含まれるようになりました。既存の androidx.media3.exoplayer.MetadataRetriever は非推奨となり、この新しいバージョンに置き換えられました。
    • フレーム抽出用の新しい公開 API である androidx.media3.inspector.FrameExtractor を導入しました。この AutoCloseable クラスは、HDR 動画、動画エフェクト、カスタム デコーダの選択をサポートするフレームを抽出する方法を提供します。特定の MediaItem の Builder を介して作成する必要があります。
    • FrameExtractor: 特定のタイムスタンプを必要とせずに、メディア ファイルから代表的なサムネイル フレームを抽出する getThumbnail() を追加しました。
    • androidx.media3.inspector.MediaExtractorCompat を追加します。これは、プラットフォームの android.media.MediaExtractor のドロップイン代替品であり、メディア ファイルから未加工のエンコードされたメディア サンプルを抽出する方法を提供します。既存の androidx.media3.exoplayer.MediaExtractorCompat は非推奨となり、この新しいクラスに置き換えられました。
  • オーディオ:
    • AudioProcessor インスタンスにシークを認識させます。
    • カスタム オーディオ出力パスをサポートするために、新しい AudioOutputProvider インターフェースを DefaultAudioSink.Builder に挿入できるようにします。デフォルトは AudioTrackAudioOutputProvider です。
    • GainProcessor でシークを処理します。
    • トラック形式のサポート評価で AC-4 デコーダのプロファイルとレベルの機能を利用します(#2580)。
    • 再生の開始時にルーティング変更コールバックを処理することによって発生する可能性のある遅延を回避します(#2646)。
    • EAC3、EAC3-JOC、AC-4 形式のコーデックの再利用を許可(#1346)。
    • Sonic での float PCM サンプルのサポートを追加しました。
    • ToFloatPcmAudioProcessor での 16 ビット PCM サンプルのサポートを追加しました。
  • 動画:
    • プロファイルが異なる Dolby-Vision コンテンツのコーデックの再利用を無効にします。
    • セキュア コーデックのパフォーマンス ポイントが誤って報告される問題の回避策を再度有効にしました(#2856)。
  • テキスト:
    • ドルビー ビジョン コンテンツでの CEA-6/708 字幕の解析を修正しました(#2775)。
  • 画像:
    • DASH サムネイル トラックのスクラブ中にプレーヤーが停止する ScrubbingMode の問題を修正しました(#2815)。
  • DRM:
    • MediaDrmCallback メソッドの戻り値の型を byte[] から新しい MediaDrmCallback.Response 型に変更し、追加のオプション情報を返せるようにします。これはソースの互換性を破る変更ですが、以前の byte[] 戻り値を new Response でラップしてから返すことで、簡単に解決できます。
    • URL やレイテンシなどの主要なリクエスト情報を AnalyticsListener.onDrmKeysLoaded に追加しました(#1001)。
    • プロビジョニング リクエスト データを URL パラメータから POST 本文に移動します。
  • 効果:
    • Presentation が 1 つの辺の長さで作成された場合に、設定されていない出力側を丸めるために Presentation.copyWithUnsetSideRoundedTo を追加します。
  • マルチプレクサ:
    • MediaMuxerCompat を追加しました。これは、フレームワーク MediaMuxer のドロップイン代替です。
    • モーション フォトの作成を許可する MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo() を追加しました。
    • OPUS、VORBIS、VP8、VP9 のメディア ストリームを webm ファイル形式に多重化できるように、WebmMuxer を追加します。
  • IMA 拡張機能:
    • カスタムの ProGuard ルールを削除し、代わりに IMA Android アーカイブでリリースされたルールをアプリで使用できるようにしました。
    • ImaServerSideAdInsertionUriBuilder.setNetworkCode を追加しました。これは、Google アド マネージャーの設定で指定された広告識別子を IMA SDK が処理できるように、Google アド マネージャー ネットワークのネットワーク コードを設定するための新しい API です。ネットワーク コードは省略可能ですが、フルサービス ストリーム リクエストでは指定することをおすすめします。ネットワーク コードを確認する方法については、こちらの記事をご覧ください。
    • IMA の依存関係を 3.37.0 に引き上げました。これには、コアライブラリの desugaring を有効にする必要があります。これは、依存するアプリでも有効にする必要があります。IMA の構成に関するメモをご覧ください。 * SSAI URI ビルダーで IMA DAI カスタム UI オプションをサポート。サーバーサイド広告挿入のカスタム UI オプションには、「スキップ可能」と「この広告について」のレンダリング サポートが含まれます。この機能は現在、許可リストに登録されている一部のパブリッシャー様のみご利用いただけます。この変更により、IMA SDK のバージョンも 3.38.0(リリースノート)にアップグレードされ、カスタム UI オプション API にアクセスできるようになります。
    • 広告の後のコンテンツの準備エラーが、広告再生エラーとして誤って報告される問題を修正しました(#2656)。
  • セッション:
    • MediaSession.Callback.onPlaybackResumption に新しいパラメータを追加して、呼び出しが情報の収集のみを目的としているか、再生の開始を目的としているかを示します(#1764)。
    • MediaSession.ControllerInfo.isTrusted を更新して、自身のアプリのコントローラも信頼できるものとして宣言するようにしました(#2542)。
    • 通知の更新を手動でトリガーする MediaSessionService.triggerNotificationUpdate を追加しました(#1833)。
    • カスタム コマンド メソッドに ProgressListener を追加します。
    • MediaLibrarySession.Builder.setLibraryErrorReplicationMode のデフォルト値を致命的でない値に変更します。
    • MediaButtonReceiver.onForegroundServiceStartNotAllowedException に Context パラメータを追加しました(#2625)。
    • バインダーを介して取得するのではなく、プラットフォーム PlaybackInfo から音量調節 ID を読み取ります。これにより、再生タイプと音量調節 ID がアトミックに読み取られ、相互に一致するようになります。
    • カスタム処理のコールバックに渡される前に ACTION_UP キーイベントが除外されるバグを修正しました。これにより、media1 とプラットフォームの動作との整合性が確保されます(#2637)。
    • コマンドが使用できない場合でも PlayerWrapper によって getCurrentTimeline() が呼び出されるバグを修正しました(#2665)。
    • メインルーパーのメッセージ キューにメッセージが残ったままになり、サービス終了後にメモリリークが発生するバグを修正しました(#2692)。
    • MediaBrowser を使用して以前のセッション アプリに接続している場合、カスタム アクションが以前のセッションの PlaybackStateCompat でカスタム アクションとしてアドバタイズされている場合にのみ、カスタム コマンドがセッションに送信されます。他のすべてのカスタム アクションはサービスに送信されます。
    • セッションによってオーディオ セッション ID が設定されたときにメディア コントローラに通知する onAudioSessionIdChanged を実装しました(#244)。
    • KEYCODE_HEADSETHOOK がプレーヤーを起動せず、メディアキー イベント Intent が onStartCommand() に到達するバグを修正しました。これは、KEYCODE_MEDIA_PLAY_PAUSE(#2816)と同様に「KEYCODE_HEADSETHOOK」を処理することで修正されています。
    • セッションとコントローラ間でサーフェス サイズが通信されず、demo-session で動画エフェクトを適用できないバグを修正しました。コントローラを使用している場合、プレーヤーが setVideoSurfaceHolder 呼び出しを処理できないと、互換性を破る変更になる可能性があります。
    • スパン形式の文字列など、String 以外の CharSequence メタデータ値の伝播を修正しました(#2853)。
    • コントローラが目的のアクションをより簡単にトリガーできるように、CommandButton.executeAction を追加します。また、一部のプレーヤー コマンドとセッション コマンドにパラメータを指定して、トリガーするアクションを定義することもできます。
    • Player.Command またはカスタム以外の SessionCommand を使用してアクションを定義する CommandButton インスタンスの下位互換性を追加しました。これらは、システム UI や Android Auto などのプラットフォーム メディア セッションで正しく表示されるようになりました。
    • MediaController をプラットフォーム メディア セッションに接続するときに、同じ Bitmap が複数回圧縮される問題を修正しました。
  • UI:
    • ProgressStateWithTickInterval クラスと対応する rememberProgressStateWithTickInterval コンポーザブルを media3-ui-compose モジュールに追加しました。この状態ホルダーは、demo-compose で現在の位置と再生時間をテキスト形式で表示するために使用されます。
    • Player の音量のミュートを処理する ui-compose に MuteButtonState を追加します。この状態ホルダーは、demo-compose でミュート/ミュート解除の切り替えボタンを表示するために使用されます。
    • ProgressStateWithTickCount クラスと対応する rememberProgressStateWithTickCount コンポーザブルを media3-ui-compose モジュールに追加します。この状態ホルダーは、demo-compose で進行状況を水平方向の読み取り専用進行状況バーとして表示するために使用されます。
    • ContentFrame コンポーザブルを media3-ui-compose に追加します。これは、PlayerSurface 管理とアスペクト比のサイズ変更、シャッターによるカバーを組み合わせたものです。
    • Compose AndroidView 内で SurfaceView を使用すると、動画が引き伸ばされたり、切り抜かれたりする、既知の API 34 プラットフォームのバグを回避しました。このバグは、SURFACE_TYPE_SURFACE_VIEW を使用する ContentFrame と PlayerSurface のコンポーザブルに影響します(#1237、#2811)。
    • 新しい media3-ui-compose-material3 モジュールを作成し、Material3 テーマのコンポーザブル(PlayPauseButton、NextButton、PreviousButton、SeekBackButton、SeekForwardButton、RepeatButton、ShuffleButton、MuteButton)を追加します。
    • TimeText コンポーザブルを media3-ui-compose-material3 に追加して、プレーヤーの進行状況をテキスト形式で表示します。現在の位置、再生時間、残り時間を表示するように構成できます。
    • PlayerView にメディア ルートボタンを配置するためのサポートを追加しました。
    • BidiFormatter を使用して、RTL テキスト字幕の句読点を正しく表示するようにしました(#11214)。
  • HLS 拡張機能:
    • HLS インタースティシャル スキップ属性を解析します。
    • HLS プレイリストとアセットリスト ドキュメントのスキップ コントロール属性を AdPlaybackState にマッピングして、一般公開します。
    • 開始時間を定義する EXT-X-PROGRAM-START-DATE タグがプレイリストから削除されたときに、プレイリストの開始時間がドロップされるバグを修正しました(#2760)。
    • バイナリ検索を使用して、プレイリスト内の指定された位置のセグメント インデックスを検索します(#2826)。
    • HlsInterstitialsAdsLoader.skipCurrentAd() と skipCurrentAdGroup()、および対応するメソッドを追加して、インデックスで広告と広告グループをスキップできるようにしました。
    • 広告期間の開始を報告する HlsInterstitialsAdsLoader.Listener.onAdStarted を追加しました(#2859)。
    • ISO 8601 の日時文字列で、日付と時刻の区切り文字としてスペースを使用できます。
    • セグメントのない HlsMediaPlaylist の次のチャンクの取得を適切に処理します(#2821)。
    • ライブ配信のプレロールにはデフォルトの開始位置を使用します。
  • DASH 拡張機能:
    • 非階層 data: URI マニフェストを使用して DASH ストリームを再生する際の UnsupportedOperationException を修正しました(#2688)。
    • リリース時と、ユーザーがメディア アイテムを更新したときに、LiveConfiguration を DashMediaSource の MediaItem で指定された値にリセットします(#2606)。
    • プレーヤー エラーとして報告されなかった無効なマニフェスト更新によるクラッシュを回避しました(#2805)。
  • RTSP 拡張機能:
    • H264 と H265 の断片化された NAL ユニットを処理する際に、RTP パケットが欠落するエラーを処理しました(#2613)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1 など):
    • AV1 拡張機能: AV1 ソフトウェア デコーダは、以前の libgav1 実装に代わり、高性能な dav1d ライブラリを使用するようになり、デコード速度が向上しました。
    • FFmpeg 拡張機能: STREAMINFO ブロックが正しく解析され、デコーダに渡されるようにすることで、一部の FLAC ファイルが再生されない問題を修正しました(#2887)。
  • Cast 拡張機能:
    • CastPlayer.Builder を追加します。これにより、CastPlayer でローカル再生とキャスト再生の両方が可能になります。キャスト再生のみをサポートする以前の CastPlayer の動作を維持するには、RemoteCastPlayer を使用します。既存の CastPlayer コンストラクタは以前の動作を維持しますが、非推奨となり、代わりに CastPlayer ビルダーまたは RemoteCastPlayer ビルダーを使用することが推奨されます。
    • DefaultMediaItemConverter で null 以外の MIME タイプの適用を停止しました。
    • MediaItem.mediaMetadata.mediaType を使用して、DefaultCastOptionsProvider#toMediaQueueItem で使用する Cast MEDIA_TYPE を推測します(利用可能な場合)。
    • DefaultCastOptionsProvider でリモートからローカルへの転送を有効にします。
    • セッション デモに Cast のサポートを追加します。
    • コンポーズ可能な UI にメディア ルートボタンを表示するサポートを追加しました。
    • アクションバー メニューにメディア ルートボタンを表示するためのサポートを追加します。
    • メディア ルートボタンを View UI として表示するサポートを追加しました。
  • テスト ユーティリティ:
    • FakeClock の自動進行動作の最大時間差を追加します。デフォルトは 1 秒ですが、FakeClock.Builder で構成できます。
    • RobolectricUtil.runMainLooperUntil(および runLooperUntil)のメッセージ間の最大時間差を追加しました。デフォルトは 1 秒ですが、これらのメソッドの新しいオーバーロードで構成できます。
    • CapturingRenderersFactory を test-utils から test-utils-robolectric に移動します。
  • サポートが終了したシンボルを削除しました。
    • 非推奨の DefaultPreloadManager コンストラクタを削除しました。代わりに DefaultPreloadManager.Builder を使用してください。
    • 非推奨の EditedMediaItemSequence コンストラクタを削除しました。代わりに EditedMediaItemSequence.Builder を使用してください。
    • BitmapFactoryImageDecoder.BitmapDecoder を削除しました。代わりに ExternallyLoadedImageDecoder を使用してください。
    • 非推奨の ShadowMediaCodecConfig.forAllSupportedMimeTypes() を削除しました。 代わりに ShadowMediaCodecConfig.withAllDefaultSupportedCodecs() を使用してください
    • 非推奨の ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes() を削除しました。代わりに ShadowMediaCodecConfig.withNoDefaultSupportedCodecs() を使用してください。

1.9.0-rc01

2025 年 12 月 1 日

1.9.0 の安定版を使用してください。

1.9.0-beta01

2025 年 11 月 20 日

1.9.0 の安定版を使用してください。

1.9.0-alpha01

2025 年 10 月 22 日

1.9.0 の安定版を使用してください。

バージョン 1.8.0

1.8.1

2026 年 5 月 21 日

バージョン 1.8.1 には、次のコミットが含まれています。

  • 効果:
    • サーフェスレス コンテキストから移行するときに、GL_DRAW_BUFFER と GL_READ_BUFFER を明示的に設定します。

バージョン 1.8.0

2025 年 7 月 30 日

バージョン 1.8.0 に含まれる commit については、こちらをご覧ください。

  • 共通ライブラリ:
    • ForwardingSimpleBasePlayer でのプレーヤーの置換のサポートを追加しました。
  • ExoPlayer:
    • シャッフル モードのゲッターを ExoPlayer インターフェースに追加しました(#2522)。
    • DefaultAudioSink が複数のスレッドからアクセスされた場合に、より明確に例外をスローするようにしました。プレーヤーの外部で RendererCapabilities.getFormatSupport を呼び出したことが原因でこの問題が発生した場合は、ExoPlayer の再生スレッドと同じスレッドでこのメソッドを呼び出すか、再生に使用したものとは異なるインスタンスを使用してください(#1191)。
    • テレビの非ステレオ音声形式が DefaultTrackSelector でサポート対象外としてマークされることがあるバグを修正しました。
    • MediaCodec の DECODE_ONLY フラグ(スクラブモードではデフォルトで有効)を使用する場合に、最後のフレームが正しくレンダリングされるようにします。
    • ExoPlayer.Builder に渡された Context からの仮想デバイス ID の使用をサポートするようになりました。
    • スクラブモードで動的スケジュール設定をデフォルトで有効にする。
    • アイテムの末尾にシークするときに、ソースの不要な再読み込みを回避します。
    • スクラブモードではデフォルトで MediaCodec.BUFFER_FLAG_DECODE_ONLY を使用します。
    • プリロード スレッドとは異なる再生スレッドを持つ ExoPlayer によって PreloadMediaSource が再生された場合に IllegalStateException をスローします(#2495)。
    • デフォルトの実装で cloneAndMove を ShuffleMode に追加しました(#2226)。
    • render の呼び出しが不要な場合に、より大きな値を返すように Renderer.getMinDurationToProgressUs のデフォルトの動作を変更します。
    • 一時停止中に最後までシークすると、内部スケジューリングによって最後のフレームが遅延するバグを修正しました。現時点では、このバグの修正は ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled が有効になっている場合にのみ有効になります。
    • ExoPlayer.setScrubbingModeEnabled(boolean) メソッドを追加しました。これにより、頻繁なシーク(ユーザーがスクラブバーをドラッグするなど)に対してプレーヤーが最適化されます。スクラブモードの動作は、ExoPlayer と ExoPlayer.Builder の setScrubbingModeParameters(..) でカスタマイズできます。
    • スクラブモードで、小数部分のシーク許容範囲をカスタマイズできるようにします。
    • スクラブモードでのコーデックの動作率を向上させます。
    • AdsMediaSource のコンテンツの準備エラーが報告されないことがあるバグを修正しました(#2337)。
    • 字幕のサイドローディング時などに使用される MergingMediaSource のメモリリークを修正しました(#2338)。
    • CmcdConfiguration.Factory が null を返して、特定のメディア アイテムの CMCD ロギングを無効にできるようにしました(#2386)。
    • デフォルトの画像バッファサイズを 128 KB(テキスト トラックからのコピー&ペースト ミス)から 26 MB に増やしました。これは 50 MP のウルトラ HDR 画像に十分なサイズです(#2417)。
    • PreCacheHelper を追加しました。これにより、アプリは指定された開始位置と再生時間で単一のメディアをプリキャッシュできます。
    • DefaultPreloadManager で指定された位置からのプリロードのサポートを追加しました。
  • Transformer:
    • 動画エンコード設定のチップセット固有の最適化を可能にする CodecDbLite を追加します。
    • DefaultEncoderFactory に setEnableCodecDbLite フラグを追加して、CodecDB Lite の設定の最適化を有効にします。デフォルトでは、このフラグは false に設定されています。
    • (addGap() を介して追加された)最初のギャップを無音の音声で埋めるには、EditedMediaItemSequence.Builder で experimentalSetForceAudioTrack(true) を明示的に設定する必要があります。ギャップがシーケンスの中央にある場合、このフラグは必要ありません。
    • Muxer インターフェースを media3-transformer から media3-muxer に移動します。
    • メディア アイテムを画像としてインポートするには、MediaItem.Builder().setImageDuration(long) の設定を必須にします。
    • Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean) を追加します。これには、トリミング時に MP4 編集リストが含まれ、トリミング開始点より前のキーフレームとトリミング開始点の間のサンプルを無視するようプレーヤーに指示します。
    • Kotlin と Jetpack Compose を使用するように Composition Demo アプリを更新し、カスタム VideoCompositorSettings を追加して、シーケンスを 2x2 またはピクチャー イン ピクチャーのレイアウトに配置します。
  • エクストラクタ:
    • 断片化された MP4 ファイルからメタデータを解析します(#2084)。
    • JPEG: 最初に Exif セグメントがないモーション フォトをサポート(#2552)。
    • 複数の sidx アトムを含むフラグメント化された MP4 でのシークのサポートを追加しました。 この動作は、FragmentedMp4Extractor で FLAG_MERGE_FRAGMENTED_SIDX フラグを使用して有効にできます(#9373)。
    • FLAC ファイル内の空のシーク テーブル(プレースホルダ シーク ポイントのみを含むテーブルを含む)を無視し、ファイルの再生時間がわかっている場合はバイナリ検索シークにフォールバックします(#2327)。
    • 認識されない SEI タイプを完全にスキップするように H.265 SEI ユニットの解析を修正しました(#2456)。
    • WAVE_FORMAT_EXTENSIBLE タイプのファイルを解析するときに、音声形式にヘッダー拡張の SubFormat データを使用するように WavExtractor を更新します。
    • MP4: 未加工の PCM 音声トラックを定義する ipcm ボックスと fpcm ボックスのサポートを追加しました(64 ビット浮動小数点 PCM はサポートされていません)。
    • MP4: 動画の回転と反転の両方を行う tkhd 変換マトリックスの回転部分を処理します。これにより、iPhone の前面カメラで撮影された反射動画が正しい向きで表示されますが、y 軸で誤って反射されます(#2012)。
    • MP3: FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS) が原因で固定ビットレートのシークにフォールバックする場合、シーク不可能な Xing、VBRI、および同様の可変ビットレートのメタデータから、再生時間とデータサイズを使用します(#2194)。
  • オーディオ:
    • メディアの終了間際に音声再生が開始されたときに AnalyticsListener.onAudioPositionAdvancing が呼び出されないバグを修正しました。
    • ChannelMappingAudioProcessor と TrimmingAudioProcessor ですべてのリニア PCM サンプル形式のサポートを追加しました。
    • CompositionPlayer での音声ギャップのサポートを追加しました。
    • BaseAudioProcessor#reset() から BaseAudioProcessor#flush() への不要な呼び出しを削除しました。
    • DefaultAudioMixer での定電力アップミックス/ダウンミックスを許可します。
    • ChannelMappingAudioProcessor、TrimmingAudioProcessor、ToFloatPcmAudioProcessor を公開しました(#2339)。
    • ベストエフォート型の推定ではなく、AudioTrackPositionTracker の AudioTrack#getUnderrunCount() を使用して DefaultAudioSink のアンダーランを検出します。
    • オーディオ出力デバイスからの予期しない位置ドリフトに対するオーディオ タイムスタンプのスムージングを改善しました。
    • Bluetooth デバイスに接続されているときに、一時停止から再開した後の最初の 10 秒間、音声と動画の同期が解除されるバグを修正しました。
    • AnalyticsListener.onAudioPositionAdvancing が、音声の進行が開始された時刻ではなく、最初の測定の時刻を報告していたバグを修正しました。
    • 一部のデバイスでステレオ音声にフォールバックした後にマルチチャンネル音声に復元する問題を修正しました(#2258)。
  • 動画:
    • デタッチされたサーフェスの回避策を「lenovo」デバイスと「motorola」デバイスに拡張しました(#2059)。
    • 音声サンプルがリクエストされた位置から正確に開始されない場合に、起動時の動画フレームのリリースをスムーズにするよう改善しました。
    • デタッチされたサーフェスの回避策を「realme」デバイスに拡張しました(#2059)。
    • デコード専用の入力バッファをキューに入れるときに MediaCodec.BUFFER_FLAG_DECODE_ONLY フラグを含めるように、試験運用版の ExoPlayer API を追加しました。このフラグは、デコード専用バッファをスキップするようデコーダに指示し、シークを高速化します。DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag で有効にします。* ソフトウェア動画コーデックのコーデック パフォーマンス チェックを改善しました。これにより、一部の追加トラックが EXCEEDS_CAPABILITIES としてマークされることがあります。
    • 一部のデバイスで VP9 Widevine の再生エラーを修正しました(#2408)。
  • テキスト:
    • MP4 ファイルの VobSub トラックのサポートを追加しました(#2510)。
    • 字幕セグメントの読み込みが最初に失敗し、その後正常に読み込まれ、その後に複数の空の字幕セグメントが続く場合に、再生が停止する問題を修正しました(#2517)。
    • 字幕を有効にしたときに進行中のキューが表示されるように SSA と SubRip を修正しました(#2309)。
    • 字幕エラーのあるストリームから、空の字幕トラックを含むライブ ストリームに切り替えると、再生が停止する問題を修正しました(#2328)。
    • B フレームを含む H.262 ストリームを再生する際に CEA-608 字幕が文字化けする問題を修正しました(#2372)。
    • Matroska ファイルで CodecId = S_TEXT/SSA を使用した SSA 字幕のサポートを追加しました。以前は、MatroskaExtractor は CodecId = S_TEXT/ASS のみをサポートしていました。これは、SubStation Alpha 字幕の「高度な」(v4+)バリアントを表すことを目的としています(ただし、ExoPlayer の解析ロジックは両方のバリアントで同じです)(#2384)。
    • SubStation Alpha(SSA)字幕ファイルの layer プロパティのサポートを追加しました。このプロパティは、複数のキューが画面に同時に表示される場合に、キューの z オーダーを定義するために使用されます(#2124)。
  • メタデータ:
    • メディアの再生時間と Timeline を MetadataRetriever に取得するサポートを追加し、インスタンス ベースの AutoCloseable API に移行しました。新しい Builder を使用して MediaItem のインスタンスを作成し、retrieveTrackGroups()、retrieveTimeline()、retrieveDurationUs() を呼び出してメタデータの ListenableFuture を取得します。以前の静的メソッドは非推奨になりました(#2462)。
  • 画像:
    • デコードされたビットマップを BitmapFactoryImageDecoder の表示サイズに制限し、非常に大きな(50 MP など)画像を表示しようとしたときに PlayerView から Canvas: trying to draw too large bitmap. が発生してアプリがクラッシュするのを回避します。
    • Context パラメータを受け取るように DefaultRenderersFactory.getImageDecoderFactory() のシグネチャを変更します。
    • CompositionPlayer で使用される最大ビットマップ出力サイズを、Transformer で既に使用されているサイズに合わせます(つまり、ExoPlayer とは異なり、CompositionPlayer はビットマップをデコードするときにディスプレイ サイズを考慮しません)。
  • DRM:
    • MediaItem.DrmConfiguration を受け入れる OfflineLicenseHelper.newWidevineInstance の新しいオーバーロードを追加し、HTTP リクエスト ヘッダーが正しく適用されるようにしました(#2169)。
  • 効果:
    • Presentation.createForShortSide(int) を追加して、入力の向きに関係なく、最短の辺が常に指定された値と一致するようにする Presentation を作成します。
  • マルチプレクサ:
    • フラグメント化された MP4 のオーディオ サンプルに正しいサンプル フラグが設定されないバグを修正しました。
    • writeSampleData() API が、MediaCodec.BufferInfo ではなく、マルチプレクサ固有の BufferInfo クラスを使用するようになりました。
    • Muxer.Factory#supportsWritingNegativeTimestampsInEditList を追加します。デフォルトは false です。
  • IMA 拡張機能:
    • 1 つの広告の読み込みエラーにより、別の広告グループが誤って無効になるバグを修正しました。
    • VOD ウィンドウの終了後に広告グループが再生を停止するバグを修正しました。 開始時間がウィンドウより後の広告グループは、MediaPeriodQueue にエンキューされなくなりました(#2215)。
  • セッション:
    • サードパーティの非特権 Media3 コントローラからの接続が無視されるバグを修正しました。
    • 以前の MediaBrowserServiceCompat にカスタム コマンドを送信する際に、使用可能なコマンドのチェックを削除しました。これは、以前のアプリに接続された以前のコントローラ/ブラウザの動作と同じです。
    • プレーヤーの最初の再生エラーが、永続的なカスタム例外として誤って処理されるバグを修正しました。これにより、アプリケーションが復元できなくなります。
    • セッションで処理されない一部のコントローラの変更が IllegalStateExceptions を引き起こす可能性があるバグを修正しました。
    • セッションで処理されないコントローラ アクションによって、コントローラが無効な状態のままになるバグを修正しました。
    • StrictMode の安全でない起動違反の警告を修正しました(#2330)。
    • メインスレッドとは異なるアプリケーション スレッドからプレーヤーを実行しているときに、メインスレッドから setSessionExtras を呼び出すと IllegalStateException が発生するバグを修正しました(#2265)。
    • プレーヤーがメディア アイテムを準備または再生せずに設定されている場合、通知を自動的に表示しないようにしました(#2423https://github.com/androidx/media/issues/2423)。この動作は MediaSessionService.setShowNotificationForIdlePlayer で構成できます。
    • すべてまたは選択したコントローラにカスタム PlaybackException を追加します。
    • MediaController でのライブ ストリームのシークによって IllegalArgumentException が発生する可能性があるバグを修正しました。
    • ライブ配信の場合、プラットフォーム メディア コントローラの再生位置と現在のアイテムをシークする機能を公開しないようにして、Android Auto UI(およびプラットフォーム メディア セッションからこの情報を使用する他のコントローラ)で位置アーティファクトが発生しないようにしました(#1758)。
    • 従来の MediaBrowserServiceCompat に接続された MediaBrowser の getLibraryRoot に null を渡すと NullPointerException が生成されるバグを修正しました。
    • カスタム アクション、検索結果、または getItem リクエストを送信すると、レガシー セッション アプリが ClassNotFoundException でクラッシュするバグを修正しました。
    • MediaItem.LocalConfiguration.uri がプラットフォーム セッションの MediaMetadata に共有されるバグを修正しました。コントローラがメディアを再リクエストできるように URI を意図的に共有するには、代わりに MediaItem.RequestMetadata.mediaUri を設定します。
  • UI:
    • LazyColumn などの再利用可能なコンポーネント内の PlayerSurface が正しく機能しないバグを修正しました(#2493)。
    • Compose のバグを修正しました。このバグにより、初期ボタン状態の設定と状態の変化(アイコンの形状や有効化など)の監視の間にギャップが生じていました。モニタリング期間外に Player に加えられた変更が取得されるようになりました(#2313)。
    • SeekBackButtonState と SeekForwardButtonState の状態ホルダーとコンポーザブルを media3-ui-compose モジュールに追加します。
    • PlayerControlView に ExoPlayer のスクラブモードのサポートを追加しました。有効にすると、ユーザーがスクラブバーのドラッグを開始したときにプレーヤーがスクラブモードになり、移動ごとに player.seekTo 呼び出しが発行され、画面からタッチが離れるとスクラブモードが終了します。この統合は、XML の time_bar_scrubbing_enabled = true または Java/Kotlin の setTimeBarScrubbingEnabled(boolean) メソッドを使用して有効にできます。
    • PlayerSurface が null 許容の Player 引数を受け入れるようにします。
  • ダウンロード:
    • プログレッシブ ストリームの部分的なダウンロードのサポートを追加しました。アプリは、DownloadHelper を使用してプログレッシブ ストリームを準備し、ダウンロードの対象となる時間ベースのメディアの開始位置と終了位置を指定して、ヘルパーから DownloadRequest をリクエストできます。返された DownloadRequest には、解決されたバイト範囲が含まれています。これを使用して ProgressiveDownloader を作成し、それに応じてコンテンツをダウンロードできます。
    • DownloadHelper.Factory を追加します。これにより、静的 DownloadHelper.forMediaItem() メソッドが置き換えられます。
    • SegmentDownloader の実装に Factory を追加しました。
    • アダプティブ ストリームの部分的なダウンロードのサポートを追加しました。アプリは、DownloadHelper を使用してアダプティブ ストリームを準備し、ダウンロードの対象となる時間ベースのメディアの開始位置と終了位置を指定して、ヘルパーから DownloadRequest をリクエストできます。返された DownloadRequest には、解決された期間が含まれます。これを使用して、具体的な SegmentDownloader を作成し、それに応じてコンテンツをダウンロードできます。
  • Cronet 拡張機能:
    • Cookie の自動処理を追加しました(#5975)。
  • HLS 拡張機能:
    • バッファ内で使用可能なチャンクがない場合に、HlsSampleStreamWrapper がバッファ内でシークしようとするバグを修正しました(#2598)。
    • 低レイテンシのパートとプリロード ヒントを読み込んだ後にトラックの選択を変更すると、再生が停止またはフリーズするバグを修正しました(#2299)。
    • CAN-BLOCK-RELOAD=YES がサーバーで受け入れられない場合に、目標期間の半分を待機することで、過剰な再読み込みを防止します(#2317)。
    • ミッドロールの前にインタースティシャル ストリームを開始すると再生が停止し、誤った広告のアセットリストの解決が試行されるバグを修正しました(#2558)。
    • 引用符で囲まれた文字列属性値で \f(フォームフィード)を受け入れるように、プレイリストの解析を修正しました(#2420)。
    • 同じ ID のインタースティシャルの更新をサポートしました(#2427)。
    • ライブ配信で読み込むセグメントがなくなると、再生リストの読み込みエラーが伝播されないことがあるバグを修正しました(#2401https://github.com/androidx/media/issues/2401)。
    • オーディオ レンディションがすでにグループ化されているのと同様に、NAME タグで字幕レンディションをグループ化します(#1666)。
    • X-ASSET-LIST と HlsInterstitialsAdsLoader を使用したライブ配信をサポートします。
  • DASH 拡張機能:
    • トリックプレイ アダプテーション セットがメインのアダプテーション セットと統合され、無効な TrackGroup が形成される問題を修正しました(#2148)。
    • DASH 期間の短縮時に、新しい期間を超えるサンプルがレンダリング パイプラインによってすでに読み取られている場合に例外がスローされるバグを修正しました(#2440)。
    • CMCD クエリ パラメータの使用時にリダイレクトが実行されないバグを修正しました(#2475)。
  • RTSP 拡張機能:
    • RFC 7798#4.4.2 に従って、H265 の RTP 集約パケットのサポートを追加しました(#2413)。
    • HTTP 302 レスポンスの処理時に、指定されたロケーション URI を使用するように RtspClient を修正しました(#2398)。
    • 末尾に空白文字を含む行を含む SessionDescription の解析サポートを追加しました(#2357)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1 など):
    • DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange がオーディオ デコーダ拡張機能に影響しないバグを修正しました(#2258)。
  • Cast 拡張機能:
    • setVolume() と getVolume() のサポートを追加しました(#2279)。
    • タイムラインが空のときに CastPlayer が STATE_BUFFERING に入らないようにしました。
    • getDeviceVolume()、setDeviceVolume()、getDeviceMuted()、setDeviceMuted() のサポートを追加しました(#2089)。
  • テスト ユーティリティ:
    • 指定した位置に到達するまでプレーヤーを進めるために、advance(player).untilPositionAtLeast と untilMediaItemIndex を TestPlayerRunHelper に追加しました。ほとんどの場合、これらのメソッドは既存の untilPosition メソッドや untilStartOfMediaItem メソッドよりも信頼性が高くなります。
    • FakeDownloader を test-utils-robolectric モジュールに移動して、他のテストで再利用できるようにします。
    • transformer.TestUtil.addAudioDecoders(String...)、transformer.TestUtil.addAudioEncoders(String...)、transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...) を削除しました。代わりに ShadowMediaCodecConfig を使用して、シャドウ エンコーダとデコーダを構成します。
    • ShadowMediaCodecConfig によって報告されるコーデック名の接頭辞「exotest」を「media3」に置き換えました。
  • サポートが終了したシンボルを削除しました。
    • 非推奨になった SegmentDownloader コンストラクタ SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor) と、そのサブクラス DashDownloader、HlsDownloader、SsDownloader の対応するコンストラクタを削除しました。
    • 非推奨の Player.hasNext()、Player.hasNextWindow() を削除しました。代わりに Player.hasNextMediaItem() を使用してください。
    • 非推奨の Player.next() を削除しました。代わりに Player.seekToNextMediaItem() を使用してください。
    • 非推奨の Player.seekToPreviousWindow() を削除しました。代わりに Player.seekToPreviousMediaItem() を使用してください。
    • 非推奨の Player.seekToNextWindow() を削除しました。代わりに Player.seekToNextMediaItem() を使用してください。
    • exoplayer モジュールで非推奨となった BaseAudioProcessor を削除しました。common モジュールの BaseAudioProcessor を使用します。
    • 非推奨の MediaCodecVideoRenderer コンストラクタ MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider) を削除しました。

バージョン 1.8.0-rc02

2025 年 7 月 24 日

1.8.0 の安定版を使用してください。

バージョン 1.8.0-rc01

2025 年 7 月 16 日

1.8.0 の安定版を使用してください。

バージョン 1.8.0-beta01

2025 年 7 月 2 日

1.8.0 の安定版を使用してください。

バージョン 1.8.0-alpha01

2025 年 5 月 19 日

1.8.0 の安定版を使用してください。

バージョン 1.7.0

バージョン 1.7.1

2025 年 5 月 16 日

このリリースは 1.6.1 と同じコードで、1.7.0 よりも「新しい」リリースとして表示されるようにリリースされています。1.7.0 は、誤って安定版としてタグ付けされたアルファ版リリースでした(下記参照)。

バージョン 1.7.0

2025 年 5 月 16 日

このリリースは 1.7.0-alpha01 であるべきでしたが、誤って maven.google.com で 1.7.0(安定版)のタグが付けられました。使用しないでください。1.6.1 のままにするか、1.7.1(1.6.1 と同じコード)にアップグレードします。

バージョン 1.6.0

1.6.1

2025 年 4 月 14 日

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

  • 共通ライブラリ:
    • 新しい pitch 値で PlaybackParameters を簡単にコピーするための PlaybackParameters.withPitch(float) メソッドを追加しました(#2257)。
  • ExoPlayer:
    • 次のメディア アイテムの初期化中に回復可能なレンダラ エラーが発生したためにメディア アイテムの移行が失敗する問題を修正しました(#2229)。
    • PreloadMediaSource が準備前に getBufferedDurationUs() を呼び出そうとしたときに、ProgressiveMediaPeriod が IllegalStateException をスローする問題を修正しました(#2315)。
    • DASH、HLS、SmoothStreaming のマニフェスト リクエストで CmcdData が送信される問題を修正しました(#2253)。
    • 広告グループが削除された後も AdPlaybackState.withAdDurationsUs(long[][]) を使用できるようにします。ユーザーは、削除された広告グループの期間の配列を渡す必要があります。この配列は空または null にすることができます(#2267)。
  • エクストラクタ:
    • MP4: tkhd ボックスから alternate_group を解析し、各トラックの Format.metadata の Mp4AlternateGroupData エントリとして公開します(#2242)。
  • オーディオ:
    • 短いコンテンツの再生リストを再生するときに位置が停止する可能性があるオフロードの問題を修正しました(#1920)。
  • セッション:
    • プラットフォーム MediaSession コールバックの集計タイムアウトを 500 ミリ秒から 100 ミリ秒に短縮し、アプリがこの値を構成できるように試験運用版のセッターを追加しました。
    • ユーザーが閉じた通知が再び表示される問題を修正しました(#2302)。
    • ラップされたプレーヤーが実際には空である場合に、セッションが 1 つのアイテムのタイムラインを返すバグを修正しました。この問題は、ラップされたプレーヤーで COMMAND_GET_TIMELINE が利用できないときに、COMMAND_GET_CURRENT_MEDIA_ITEM が利用可能で、ラップされたプレーヤーが空の場合に発生していました(#2320)。
    • setForegroundServiceTimeoutMs などのサービスとの他のインタラクションの後に MediaSessionService.setMediaNotificationProvider を呼び出すと、サイレントに無視されるバグを修正しました(#2305)。
  • UI:
    • PlayerSurface を有効にして、ExoPlayer.setVideoEffects と CompositionPlayer を使用できるようにします。
    • PlayerSurface を新しい Player で再コンポーズできないバグを修正しました。
  • HLS 拡張機能:
    • HLS メディアの CmcdData でチャンクの再生時間が設定されず、暗号化されたメディア セグメントの処理時にアサーション エラーが発生する問題を修正しました(#2312)。
  • RTSP 拡張機能:
    • TCP を使用するように RTSP セッションを構成する方法として、RTSPT スキームを使用した URI のサポートを追加しました(#1484)。
  • Cast 拡張機能:
    • プレイリスト メタデータのサポートを追加しました(#2235)。

1.6.0

2025 年 3 月 26 日

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

  • 共通ライブラリ:
    • AudioManagerCompat と AudioFocusRequestCompat を追加して、androidx.media の同等のクラスを置き換えます。
    • Kotlin を 1.9.20 から 2.0.20 にアップグレードし、Compose Compiler Gradle プラグインを使用します。KotlinX Coroutines ライブラリを 1.8.1 から 1.9.0 にアップグレードしました。
    • Format.toBundle(boolean excludeMetadata) メソッドを削除し、代わりに Format.toBundle() を使用します。
    • SimpleBasePlayer のバグを修正しました。null MediaMetadata を指定した setPlaylist の後に State で新しい currentMediaItemIndex を設定しても、メタデータが再評価されないバグを修正しました(#1940)。
    • SimpleBasePlayer.State のアクセスを protected から public に変更して、他のクラスの更新を処理しやすくしました(#2128)。
  • ExoPlayer:
    • プラットフォーム MediaExtractor と同等の機能を提供する新しいクラス MediaExtractorCompat を追加しました。
    • MediaCodecVideoRenderer を使用した再生用の試験運用版「ExoPlayer」プリウォーミング サポートを追加しました。experimentalSetEnableMediaCodecVideoRendererPrewarming を介して DefaultRenderersFactory を構成し、ExoPlayer にセカンダリ MediaCodecVideoRenderer を提供できます。有効にすると、ExoPlayer は再生中に連続するメディア アイテムの動画を前処理して、メディア アイテムの遷移レイテンシを短縮します。
    • DefaultLoadControl の bufferForPlaybackMs と bufferForPlaybackAfterRebufferMs のデフォルト値をそれぞれ 1,000 ms と 2,000 ms に減らしました。
    • DeviceInfo とデバイスの音量を非同期で初期化します(setDeviceVolumeControlEnabled を使用して有効にしている場合)。これらの値は ExoPlayer.Builder.build() の直後には使用できません。Player.Listener は onDeviceInfoChanged と onDeviceVolumeChanged を通じて変更を通知します。
    • プレーヤーの作成直後に、初期オーディオ セッション ID を利用できなくなりました。必要に応じて、AnalyticsListener.onAudioSessionIdChanged を使用して最初の更新をリッスンできます。
    • 動画トラックを選択する際は、言語を考慮してください。デフォルトでは、選択した音声トラックの言語に一致する「メイン」の動画トラックを選択します(利用可能な場合)。動画の言語設定は、TrackSelectionParameters.Builder.setPreferredVideoLanguage(s) を使用して明示的に指定できます。
    • DefaultTrackSelector.selectVideoTrack() メソッドに selectedAudioLanguage パラメータを追加します。
    • MediaSourceEventListener.onLoadStarted と対応する MediaSourceEventListener.EventDispatcher メソッドに retryCount パラメータを追加しました。
    • マルチピリオド DASH ストリームのプレイリスト アイテムまたはピリオドの再生時間が実際のコンテンツと一致しない場合に、アイテムの最後でフレームがフリーズするバグを修正しました(#1698)。
    • BasePreloadManager.Listener を最上位の PreloadManagerListener に移動します。
    • RenderersFactory.createSecondaryRenderer を実装して、プリウォーミング用のセカンダリ レンダラを提供できます。プリウォーミングにより、再生中のメディア アイテムの切り替えが高速化されます。
    • アダプティブ ストリーミング形式の DASH、HLS、SmoothStreaming でマニフェスト リクエストの CmcdData を送信できるようにしました(#1951)。
    • MediaCodecRenderer.onReadyToInitializeCodec で初期化されるコーデックの MediaCodecInfo を指定します(#1963)。
    • AdsMediaSource を変更して、広告グループを追加することで AdPlaybackStates が拡大できるようにします。無効な変更が検出され、例外がスローされます。
    • ミッドロール広告の後にコンテンツ メディアに移行する際に、追加のデコード専用フレームが連続して表示される問題を修正しました。
    • DefaultRenderersFactory が 2 つの MetadataRenderer インスタンスを追加して、アプリがデフォルトで 2 つの異なるスキームのメタデータを受信できるようにします。
    • 再生が一時停止されたときに、チャンクの進行中の読み込みをキャンセルする必要があるかどうかを再評価します(#1785)。
    • シーク不可のメディアでクリッピングを許可するオプションを ClippingMediaSource に追加しました。
    • プリウォーミングによるシークが、次のメディア アイテムの遷移をブロックするバグを修正しました。
    • STATE_IDLE または STATE_ENDED に移行しているにもかかわらず、ExoPlayer.isLoading() が true のままになるバグを修正しました(#2133)。
    • lastRebufferRealtimeMs を LoadControl.Parameter に追加しました(#2113)。
  • Transformer:
    • 下位互換性のある代替形式へのトランスマルチプレックスのサポートを追加します。
    • ドルビー ビジョン(プロファイル 8)形式のコード変換とトランスマルチプレクシングのサポートを追加しました。
    • Format を使用するように VideoFrameProcessor.registerInputStream と VideoFrameProcessor.Listener.onInputStreamRegistered のパラメータを更新します。
    • DefaultEncoderFactory を使用するときに HDR 静的メタデータを生成します。
    • MediaMetricsManager を使用した Android プラットフォーム診断のサポートを有効にしました。Transformer では編集イベントとパフォーマンス データがプラットフォームに転送されるため、デバイスのシステム パフォーマンスとデバッグ情報の提供に役立てることができます。このデータは、デバイスのユーザーが使用状況と診断情報の共有を有効にしている場合に、Google によって収集されることもあります。アプリは、Transformer.Builder.setUsePlatformDiagnostics(false) で Transformer のプラットフォーム診断への貢献を無効にできます。
    • InAppMuxer を InAppMp4Muxer と InAppFragmentedMp4Muxer に分割します。InAppMp4Muxer は、フラグメント化されていない MP4 ファイルを生成するために使用します。InAppFragmentedMp4Muxer は、フラグメント化された MP4 ファイルを生成するために使用します。
    • Muxer インターフェースを media3-muxer から media3-transformer に移動します。
    • MediaProjectionAssetLoader を追加しました。これは、画面録画用の MediaProjection からメディアを提供します。また、Transformer デモアプリに画面録画のサポートを追加しました。
    • Codec インターフェースに #getInputFormat() を追加しました。
    • 可能な場合は、DefaultVideoFrameProcessor と DefaultVideoCompositor の呼び出し元に GlObjectsProvider を解放する責任を移します。
  • エクストラクタ:
    • AVI: ストリーム ヘッダーにチャンク数ではなくバイト数が格納されている、一定のビットレートで圧縮された音声を含むファイルの処理を修正しました。
    • 長さが 4 バイトではなく 1 バイトまたは 2 バイトで表される NAL ユニットの処理を修正しました。
    • 編集リストが、先行する同期フレームのない非同期フレームで始まる場合に、MP4 編集リストの ArrayIndexOutOfBoundsException を修正しました(#2062)。
    • 一部のデバイスで TS ストリームが停止する問題を修正しました(#2069)。
    • FLAC: 32 ビット FLAC ファイルのサポートを追加しました。以前は、IllegalStateException: Playback stuck buffering and not loading で再生できませんでした(#2197)。
  • オーディオ:
    • 再生が再開されたときに onAudioPositionAdvancing が呼び出されるように修正しました(以前は、再生が一時停止されたときに呼び出されていました)。
    • SpeedChangingAudioProcessor がデフォルト パラメータで構成されている場合は、SonicAudioProcessor をバイパスしないでください。
    • DefaultAudioSink が停止する原因となる Sonic#getOutputSize() のアンダーフローを修正しました。
    • MediaCodecAudioRenderer.getDurationToProgressUs() と DecoderAudioRenderer.getDurationToProgressUs() を修正し、シークによって指定された再生時間が正しくリセットされるようにしました。
    • androidx.media3.common.audio.SonicAudioProcessor を最終版にします。
    • ChannelMappingAudioProcessor と TrimmingAudioProcessor に浮動小数点 PCM のサポートを追加しました。
  • 動画:
    • アプリケーションがオーバーライドしてプレースホルダ サーフェスの使用をブロックできるように、MediaCodecVideoRenderer.shouldUsePlaceholderSurface を protected に変更しました(#1905)。
    • シークを高速化するために、試験運用版の ExoPlayer AV1 サンプル依存関係解析を追加しました。新しい DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies API で有効にします。
    • 依存関係のない遅延 MediaCodecVideoRenderer デコーダ入力バッファをドロップする試験運用版 ExoPlayer API を追加しました。DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs で有効にします。* サーフェスのないプレーヤーがすぐに準備完了になり、保留中のフレームのデコードが非常に遅くなる問題を修正しました(#1973)。
    • 画面のちらつきを回避するため、Xiaomi デバイスと OPPO デバイスをデタッチされたサーフェス モードから除外しました(#2059)。
  • テキスト:
    • VobSub 字幕のサポートを追加しました(#8260)。
    • MediaItem.Builder.setSubtitleConfigurations で構成されたすべての字幕ファイルの積極的な読み込みを停止し、代わりにトラック選択で選択された字幕ファイルを 1 つだけ読み込むようにしました(#1721)。
    • TTML: style を使用した tts:origin と tts:extent の参照のサポートを追加しました(#2953)。
    • WebVTT と SubRip のタイムスタンプを小数点以下 3 桁に制限します。 以前は、任意の小数点以下の桁数を誤って解析していましたが、常に値がミリ秒単位であると想定していたため、タイムスタンプが正しくありませんでした(#1997)。
    • プレイリストに CEA-608 または CEA-708 の字幕付きのクリップされたアイテムが含まれている場合に、再生がハングする問題を修正しました。
    • SSA ファイルに再生時間がゼロ(開始時間と終了時間が同じ)のキューが含まれている場合の IllegalStateException を修正しました(#2052)。
    • 字幕が音声や動画と同じコンテナに多重化されている場合に、字幕の解析エラーを抑制(およびログに記録)します(#2052)。
    • CR 行末を使用する WebVTT ファイルでのマルチバイト UTF-8 文字の処理を修正しました(#2167)。
  • DRM:
    • API 27 未満のデバイスで ClearKey コンテンツを再生する際の MediaCodec$CryptoException: Operation not supported in this configuration エラーを修正しました(#1732)。
  • 効果:
    • OverlaySettings の機能を StaticOverlaySettings に移動しました。OverlaySettings をサブクラス化して、動的なオーバーレイ設定を可能にできます。
  • マルチプレクサ:
    • 完全修飾名が非常に長くなるのを避けるため、MuxerException を Muxer インターフェースから移動しました。
    • Mp4Muxer.Builder と FragmentedMp4Muxer.Builder の両方で、setSampleCopyEnabled() メソッドの名前を setSampleCopyingEnabled() に変更しました。
    • Mp4Muxer.addTrack() と FragmentedMp4Muxer.addTrack() が TrackToken ではなく int トラック ID を返すようになりました。
    • Mp4Muxer と FragmentedMp4Muxer が Muxer インターフェースを実装しなくなりました。
    • Mp4Muxer サンプルのバッチ処理とコピーをデフォルトで無効化。
    • 音声トラックのみが書き込まれた場合に多数のフラグメントが作成される FragmentedMp4Muxer のバグを修正しました。
  • セッション:
    • 再生が一時停止、停止、または失敗した場合に、フォアグラウンド サービスの状態をさらに 10 分間維持します。これにより、ユーザーはさまざまなデバイスでフォアグラウンド サービス制限を受けることなく、このタイムアウト内に再生を再開できます。player.pause() を呼び出すだけでは、onTaskRemoved をオーバーライドするときに stopSelf() の前にフォアグラウンド サービスを停止できなくなりました。代わりに MediaSessionService.pauseAllPlayersAndStopSelf() を使用してください。
    • 再生がエラー状態または停止状態になったときに、通知を表示したままにします。通知は、プレイリストがクリアされるか、プレーヤーが解放された場合にのみ削除されます。
    • Android プラットフォームの MediaSession アクション ACTION_PLAY と ACTION_PAUSE の処理を改善し、利用可能なコマンドに応じてどちらか一方のみを設定し、どちらか一方のみが設定されている場合も受け入れるようにしました。
    • Context を MediaButtonReceiver.shouldStartForegroundService のパラメータとして追加しました(#1887)。
    • 以前のセッションに接続された MediaController で Player メソッドを呼び出すと、保留中の更新から変更がドロップされるバグを修正しました。
    • MediaSession.setSessionActivity(PendingIntent) が null を受け入れるようにしました(#2109)。
    • プレイリストがクリアされたときに、古い通知が表示されたままになるバグを修正しました(#2211)。
  • UI:
    • PlayerSurface、PresentationState、PlayPauseButtonState、NextButtonState、PreviousButtonState、RepeatButtonState、ShuffleButtonState、PlaybackSpeedState の状態ホルダーとコンポーザブルを media3-ui-compose モジュールに追加しました。
  • ダウンロード:
    • CacheWriter のバグを修正しました。このバグは、データソースが IOException 以外の Exception をスローした場合に、データソースが開いたままになり、キャッシュ領域がロックされたままになるというものです(#9760)。
  • HLS 拡張機能:
    • HlsInterstitialsAdsLoader の最初のバージョンを追加します。広告ローダーは、HLS メディア プレイリストの HLS インタースティシャルを読み取り、AdsMediaSource に渡される AdPlaybackState にマッピングします。この初期バージョンでは、X-ASSET-URI 属性を持つ HLS VOD ストリームのみがサポートされています。
    • HlsInterstitialsAdsLoader.AdsMediaSourceFactory を追加しました。アプリはこれを使用して、HlsInterstitialsAdsLoader を使用する AdsMediaSource インスタンスを便利かつ安全に作成できます。
    • HLS 再生リストから SUPPLEMENTAL-CODECS タグを解析して、Dolby Vision 形式を検出するようになりました(#1785)。
    • HLS ストリームで同期位置をシークする条件を緩和しました(#2209)。
  • DASH 拡張機能:
    • DASH の AC-4 Level-4 形式のサポートを追加しました(#1898)。
    • マルチピリオド ライブ配信で広告挿入の更新間隔を計算する際の問題を修正しました(#1698)。
    • DASH マニフェストから scte214:supplementalCodecs 属性を解析して、Dolby Vision 形式を検出するようにしました(#1785)。
    • ライブ配信で、宣言された期間を超えるメディア サンプルが期間に含まれている場合の期間遷移の処理を改善しました(#1698)。
    • adaptation-set-switching とマークされているが、言語またはロールフラグが異なるアダプテーション セットがマージされる問題を修正しました(#2222)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1 など):
    • 組み込みの MPEG-H デコーダを使用して MPEG-H 音声をデコードする MPEG-H デコーダ モジュールを追加しました(#1826)。
  • MIDI 拡張機能:
    • カスタムの AudioSink インスタンスと AudioRendererEventListener インスタンスを MidiRenderer に組み込みます。
  • Cast 拡張機能:
    • play-services-cast-framework 依存関係を 21.5.0 に引き上げ、Google Play 開発者サービスがインストールされているが無効になっているデバイスで、API 34 以降をターゲットとするアプリの FLAG_MUTABLE クラッシュを修正しました(#2178)。
  • デモアプリ:
    • ボタンを追加して demo-compose を拡張し、スケーリングとシャッターのサポートにより PlayerSurface の統合を強化します。
  • サポートが終了したシンボルを削除しました。
    • 非推奨の AudioMixer.create() メソッドを削除しました。代わりに DefaultAudioMixer.Factory().create() を使用してください。
    • 非推奨の次の Transformer.Builder メソッドを削除しました。
      • setTransformationRequest()、代わりに setAudioMimeType()、setVideoMimeType()、setHdrMode() を使用してください。
      • setAudioProcessors()、EditedMediaItem.Builder.setEffects() でオーディオ プロセッサを設定し、代わりに Transformer.start() に渡します。
      • setVideoEffects()、EditedMediaItem.Builder.setEffects() で動画エフェクトを設定し、代わりに Transformer.start() に渡します。
      • setRemoveAudio()、代わりに EditedMediaItem.Builder.setRemoveAudio() を使用して、Transformer.start() に渡された EditedMediaItem から音声を削除してください。
      • setRemoveVideo()。代わりに EditedMediaItem.Builder.setRemoveVideo() を使用して、Transformer.start() に渡された EditedMediaItem から動画を削除します。
      • setFlattenForSlowMotion()。代わりに EditedMediaItem.Builder.setFlattenForSlowMotion() を使用して、Transformer.start() に渡された EditedMediaItem をフラット化してください。
      • setListener()、代わりに addListener()、removeListener()、removeAllListeners() を使用してください。
    • 非推奨となった次の Transformer.Listener メソッドを削除しました。
      • onTransformationCompleted(MediaItem)、代わりに onCompleted(Composition, ExportResult) を使用してください。
      • onTransformationCompleted(MediaItem, TransformationResult)、代わりに onCompleted(Composition, ExportResult) を使用してください。
      • onTransformationError(MediaItem, Exception)、代わりに onError(Composition, ExportResult, ExportException) を使用してください。
      • onTransformationError(MediaItem, TransformationException)、代わりに onError(Composition, ExportResult, ExportException) を使用してください。
      • onTransformationError(MediaItem, TransformationResult, TransformationException)、代わりに onError(Composition, ExportResult, ExportException) を使用してください。
      • onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)、代わりに onFallbackApplied(Composition, TransformationRequest, TransformationRequest) を使用してください。
    • 非推奨の TransformationResult クラスを削除しました。代わりに ExportResult を使用してください。
    • 非推奨の TransformationException クラスを削除しました。代わりに ExportException を使用してください。
    • サポートが終了した Transformer.PROGRESS_STATE_NO_TRANSFORMATION を削除しました。代わりに Transformer.PROGRESS_STATE_NOT_STARTED を使用してください。
    • サポートが終了した Transformer.setListener() を削除しました。代わりに Transformer.addListener()、Transformer.removeListener()、Transformer.removeAllListeners() を使用してください。
    • サポートが終了した Transformer.startTransformation() を削除しました。代わりに Transformer.start(MediaItem, String) を使用してください。
    • サポートが終了した SingleFrameGlShaderProgram を削除しました。代わりに BaseGlShaderProgram を使用してください。
    • Transformer.flattenForSlowMotion を削除しました。代わりに EditedMediaItem.flattenForSlowMotion を使用してください。
    • ExoPlayer.VideoComponent、ExoPlayer.AudioComponent、ExoPlayer.TextComponent、ExoPlayer.DeviceComponent を削除しました。
    • androidx.media3.exoplayer.audio.SonicAudioProcessor を削除しました。
    • サポートが終了した次の DownloadHelper メソッドを削除しました。
      • コンストラクタ DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[])。代わりに DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList) を使用してください。
      • getRendererCapabilities(RenderersFactory)。RenderersFactory を指定して DefaultRendererCapabilitiesList を作成し、DefaultRendererCapabilitiesList.getRendererCapabilities() を呼び出すことで、同等の機能を実現できます。
      • PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat) メソッドを削除しました。代わりに PlayerNotificationManager.setMediaSessionToken(MediaSession.Token) を使用して (MediaSession.Token) compatToken.getToken() を渡します。

1.6.0-rc02

2025 年 3 月 19 日

1.6.0 安定版を使用します。

1.6.0-rc01

2025 年 3 月 12 日

1.6.0 の安定版を使用してください。

1.6.0-beta01

2025 年 2 月 26 日

1.6.0 安定版を使用します。

バージョン 1.6.0-alpha03

2025 年 2 月 6 日

1.6.0 安定版を使用します。

バージョン 1.6.0-alpha02

2025 年 1 月 30 日

1.6.0 の安定版を使用してください。

バージョン 1.6.0-alpha01

2024 年 12 月 20 日

1.6.0 安定版を使用します。

バージョン 1.5

バージョン 1.5.1

2024 年 12 月 19 日

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

  • ExoPlayer:
    • MediaCodec での非同期復号の使用を無効にして、このプラットフォーム API で報告されているコーデック タイムアウトの問題を回避します(#1641)。
  • エクストラクタ:
    • MP3: VBRI フレームの目次がファイル内のすべての MP3 データをカバーしていない場合に、再生を早期に停止しないようにしました(#1904)。
  • 動画:
    • onOutputFormatChanged の処理中に指定された MediaCodecAdapter のピクセル アスペクト比の値の使用をロールバックしました(#1371)。
  • テキスト:
    • ReplacingCuesResolver.discardCuesBeforeTimeUs で、timeUs でアクティブなキュー(以前に開始されたがまだ終了していない)が誤って破棄されるバグを修正しました(#1939)。
  • メタデータ:
    • Vorbis コメントからディスク/トラック番号とジャンルを抽出して MediaMetadata に格納します(#1958)。

バージョン 1.5.0

2024 年 11 月 27 日

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

  • 共通ライブラリ:
    • 完全な整合性とリスナー処理を確保しながら、小さな調整で別のプレーヤーに転送できる ForwardingSimpleBasePlayer を追加しました(#1183)。
    • SimpleBasePlayer.State.playlist を getPlaylist() メソッドに置き換えます。
    • SimpleBasePlayer.State.Builder.setPlaylist() のオーバーライドを追加して、プレイリスト構造を構築する代わりに、Timeline と現在の Tracks および Metadata を直接指定します。
    • minSdk を 21(Android Lollipop)に引き上げます。これは、他のすべての AndroidX ライブラリと整合しています。
    • Common ライブラリ上に構築された Kotlin 固有の機能を提供する androidx.media3:media3-common-ktx アーティファクトを追加
    • media3-common-ktx ライブラリに Player.listen suspend 拡張関数を追加しました。これにより、コルーチンをスピンして Player.Events をリッスンできるようになりました。
    • ランタイム クラス検証エラーを回避するように設計された、手動でアウトライン化された内部クラスから @DoNotInline アノテーションを削除しました。最近のバージョンの R8 では、このような呼び出しが自動的にアウトライン化され、ランタイム エラーが回避されるようになりました(手動でのアウトライン化は不要になりました)。ライブラリのすべての Gradle ユーザーは、compileSdk = 35 のため、これを行う R8 のバージョンを使用する Android Gradle プラグインのバージョンをすでに使用している必要があります。Gradle 以外のビルドシステムを使用するライブラリのユーザーは、R8 と同等の圧縮/難読化ステップで同様の自動アウトライン プロセスを実行して、ランタイム クラス検証エラーを回避する必要があります。この変更は、他の AndroidX ライブラリですでに実施されています。
  • ExoPlayer:
    • MediaCodecRenderer.onProcessedStreamChange() をすべてのメディア アイテムに対して呼び出せるようになりました。以前は、最初のアイテムに対しては呼び出されませんでした。これを有効にするには、MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart() を使用します。
    • PreloadMediaSource.PreloadControl.onPreloadError を追加して、エラーが発生したときに PreloadMediaSource.PreloadControl 実装がアクションを実行できるようにします。
    • BasePreloadManager.Listener を追加して、Preload イベントをアプリに伝播します。
    • SNTP クライアントのタイムアウトの変更と、タイムアウト時の代替アドレスの再試行を許可しました(#1540)。
    • フィールドが常にゼロだったため、MediaCodecAdapter.Configuration.flags を削除しました。
    • Wear OS API 35 以降で、ユーザーが再生用に内蔵スピーカーを選択できるようにします(デバイスがこのサポートをアドバタイズしている場合)。
    • オーディオ フォーカスの処理が有効になるまで、Context.getSystemService(Context.AUDIO_SERVICE) へのブロッキング呼び出しを延期します。これにより、音声フォーカスの処理が有効になっていない場合に、ブロッキング呼び出しが行われないようにします(#1616)。
    • 読み込みに失敗した場合、バッファリングされた時間に関係なく再生を許可します(#1571)。
    • AnalyticsListener.onRendererReadyChanged() を追加して、個々のレンダラが再生の準備を完了したことを通知します。
    • MediaCodec が非同期モード(API 31 以降のデフォルトの動作)で動作しているときに、MediaCodec.CryptoException が「予期しないランタイム エラー」として報告されることがある問題を修正しました。
    • PreloadMediaSource.PreloadControl.onContinueLoadingRequested() で bufferedPositionUs ではなく bufferedDurationUs を渡します。また、DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS を DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS に変更します。アプリは、位置ではなく、対応するメディアソースをこの IntDef でプリロードする必要があるデフォルトの開始位置からの特定の期間を表す値を渡す必要があります。
    • すべてのメソッド呼び出しを別のレンダラに転送する ForwardingRenderer 実装を追加しました(1703)。
    • 再生リストの次のアイテムの再生リストのプリロードを追加します。アプリは、必要に応じて ExoPlayer.setPreloadConfiguration(PreloadConfiguration) を呼び出すことで、プリロードを有効にできます。デフォルトでは、プリロードは無効になっています。オプトインした場合、再生を妨げないように、DefaultLoadControl は、プレーヤーが再生のために読み込みを行っていない場合にのみプリロードを開始して続行するように制限します。アプリは、LoadControl.shouldContinuePreloading() を適切に実装することで、この動作を変更できます(DefaultLoadControl でこのメソッドをオーバーライドする場合など)。LoadControl のデフォルト実装では、アプリが LoadControl のカスタム実装を使用している場合にプリロードが無効になります。
    • サブクラス リスナーのイベントを呼び出せるように、メソッド MediaSourceEventListener.EventDispatcher.dispatchEvent() を追加しました(1736)。
    • 一貫して共有される構成で DefaultPreloadManager インスタンスと ExoPlayer インスタンスをビルドする DefaultPreloadManager.Builder を追加しました。
    • DefaultLoadControl 実装は ExoTrackSelection[] からストリーム タイプを取得できるため、LoadControl.onTracksSelected() から Renderer[] パラメータを削除します。
    • DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]) を非推奨にし、オーバーライドを防ぐためにメソッドを final としてマークしました。 代わりに新しい DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]) を使用してください。
    • MergingMediaSource のセカンダリ ソースから MediaSourceEventListener イベントを報告します。これにより、サイドローディングされた字幕(MediaItem.LocalConfiguration.subtitleConfigurations で追加された字幕)の読み込み開始/エラー/キャンセル/完了イベントが報告されます。これは、AnalyticsListener から出力された重複する読み込みイベントとして表示されることがあります。
    • 字幕とメタデータのエラーによって再生が完全に停止しないようにします。代わりに、問題のあるトラックが無効になり、残りのトラックの再生が続行されます(#1722)。
      • 新しい字幕処理(抽出中)では、関連する解析エラー(無効な字幕データなど)と読み込みエラー(HTTP 404 など)が onLoadError コールバックを介して出力されます。
      • 以前の字幕処理(レンダリング中)では、関連する読み込みエラーのみが onLoadError コールバックを介して出力され、解析エラーは無視されます(これは以前からの動作です)。
    • マルチピリオド DASH ストリームのプレイリスト アイテムまたはピリオドの再生時間が実際のコンテンツと一致しない場合に、アイテムの最後でフレームがフリーズするバグを修正しました(#1698)。
    • SntpClient にセッターを追加して、クライアントが再初期化された後の最後の更新からの最大経過時間を設定できるようにしました(#1794)。
  • Transformer:
    • SurfaceAssetLoader を追加しました。これは、Surface を介して Transformer への動画データのキューイングをサポートします。
    • ImageAssetLoader は、IllegalStateException をスローする代わりに、AssetLoader.onError を介してサポートされていない入力を報告します。
    • MediaItem.Builder.setImageDurationMs を使用した画像表示時間の設定を、画像のエクスポートで必須にします。
    • 音声 EditedMediaItem のシーケンスのギャップのエクスポート サポートを追加しました。
  • トラック選択:
    • DefaultTrackSelector: 他の要素が同じである場合、チャンネルベースのオーディオよりもオブジェクトベースのオーディオを優先します。
  • エクストラクタ:
    • Mp4Extractor と FragmentedMp4Extractor が、後続のサンプルで参照として使用されない H264 サンプルを識別できるようにします。
    • AmrExtractor でインデックス ベースのシークを有効にするオプションを追加しました。
    • 有効なフレーム間に 128 kB を超えるデータがある MP3 ファイルを、無効ではなく、切り捨てられたものとして扱います。これにより、末尾に MP3 以外のデータがあり、MP3 バイトの長さを示す他のメタデータがないファイルは、ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1} で失敗するのではなく、MP3 データの末尾で再生が停止するようになりました(#1563)。
    • MP4 ファイルの編集リストを処理する際に、キーフレーム以外のメディア開始位置のプレロール サンプルの処理を修正しました(#1659)。
    • Mp4Extractor と FragmentedMp4Extractor の mdhd ボックスのメディア再生時間を使用して、フレームレートの計算を改善しました(#1531)。
    • MP4 編集リストで media_time のスケーリングが正しくない問題を修正しました。segment_duration はすでに映画のタイムスケールを使用して正しくスケーリングされていましたが、media_time は MP4 形式標準で指定されているように、トラックのタイムスケールを使用して適切にスケーリングされるようになりました(#1792)。
    • 編集リストを含む MP4 の endIndices 計算で、順序が不適切なフレームを処理するようにしました(#1797)。
    • MP4 ファイルの mdhd ボックスでのメディア再生時間の解析を修正し、-1 値を処理できるようにしました(#1819)。
    • H.263 動画の MP4 ファイルで h263 ボックスを識別するサポートを追加しました(#1821)。
    • AC-4 レベル 4 ISO ベース メディア ファイル形式のサポートを追加しました(#1265)。
  • DataSource:
    • API レベル 34 ではなくバージョン S 拡張機能 7 から使用できるように HttpEngineDataSource を更新しました(#1262)。
    • DataSourceContractTest: DataSource.getUri() が解決された URI を返すことをアサートします(ドキュメントに記載されているとおり)。これがリクエストされた URI と異なる場合、テストでは新しい DataSourceContractTest.TestResource.Builder.setResolvedUri() メソッドを使用してこれを示すことができます。
    • DataSourceContractTest: open() の呼び出しが失敗した後(リソースが「見つからない」ため)で、その後の close() 呼び出しの前に、DataSource.getUri() と getResponseHeaders() が「open」値を返すことをアサートします。
      • DataSourceContractTest.getNotFoundResources() をオーバーライドすると、テスト サブクラスで複数の「見つからない」リソースを提供し、想定されるヘッダーも提供できます。これにより、HTTP 404(ヘッダーあり)と「サーバーが見つかりません」(ヘッダーなし)を区別できます。
  • オーディオ:
    • メディアに CTA-2075 ラウドネス メタデータが存在する場合は、コーデックで自動的に構成します。
    • シーク時に音量がスムーズに下がるようにします。
    • シーク中に発生することがあるポップ音を修正しました。
    • Sonic のタイム ストレッチ/ピッチシフト アルゴリズムの切り捨てエラーの累積を修正しました。
    • 出力フレームがドロップする原因となっていた SpeedChangingAudioProcessor のバグを修正しました。
  • 動画:
    • MediaCodecVideoRenderer は、レンダリングされず、他のサンプルで参照として使用されないサンプルのデコードを回避します。
    • API 35 以降では、MediaCodecAdapter が configure で null Surface を受け取り、コーデックがサポートしている場合(MediaCodecInfo.detachedSurfaceSupported)、以前に設定された Surface を削除するために新しいメソッド detachOutputSurface を呼び出すようになりました。
    • onOutputFormatChanged の処理時に MediaCodecAdapter で指定されたピクセル アスペクト比の値を使用します(#1371)。
    • Galaxy Tab S7 FE で 60 fps のセキュアな H264 ストリームがサポート対象外としてマークされるデバイスの問題の回避策を追加しました(#1619)。
    • ストリーム終了シグナルを返さずに最後のサンプルの後に停止するコーデックの回避策を追加しました。
  • テキスト:
    • カスタム VoiceSpan を追加し、WebVTT 音声スパンに入力します(#1632)。
    • HLS の WebVTT で、非常に大きな字幕タイムスタンプ(マイクロ秒として表され、90,000 MPEG タイムベースを乗算すると 64 ビットの long がオーバーフローする)が表示されるようにしました(#1763)。
    • ドルビー ビジョン コンテンツで CEA-608 字幕をサポート(#1820)。
    • CEA-608 字幕が有効になっている場合に、DASH マルチピリオド ストリームで再生が停止する問題を修正しました(#1863)。
  • メタデータ:
    • icy または vnd.dvb.ait コンテンツを含むトラックに C.TRACK_TYPE_METADATA タイプを割り当てます。
  • 画像:
    • ExternallyLoadedImageDecoder を追加して、Glide や Coil などの外部画像読み込みライブラリとの統合を簡素化します。
  • DataSource:
    • FileDescriptor からの読み取りに使用できる新しい DataSource である FileDescriptorDataSource を追加しました(#3757)。
  • 効果:
    • マイナーな SurfaceTexture スケーリングの DefaultVideoFrameProcessor 回避策を追加しました。SurfaceTexture には、切り抜かれたバッファの端にある 1 テクセル境界を切り取る小さなスケーリングが含まれる場合があります。出力が想定に近づくように処理されるようになりました。
    • DefaultVideoFrameProcessor.queueInputBitmap() をスピードアップします。その結果、Transformer を使用して画像を動画にエクスポートする処理が高速になります。
  • IMA 拡張機能:
    • 再生リストを消去すると ImaServerSideAdInsertionMediaSource で ArrayIndexOutOfBoundsException が発生するバグを修正しました。
    • プレロールのないサーバーサイド挿入の DAI ストリームで、最後のミッドロールを過ぎて再生すると ArrayIndexOutOfBoundsException が発生するバグを修正しました(#1741)。
  • セッション:
    • MediaButtonReceiver.shouldStartForegroundService(Intent) を追加して、このメソッドをオーバーライドすることで、アプリが再生再開のために受信する再生コマンドを抑制できるようにします。デフォルトでは、サービスは常に開始され、システムが ForegroundServiceDidNotStartInTimeException でサービスをクラッシュさせない限り、再生を抑制することはできません(#1528)。
    • 以前のサービスに接続しているときに、MediaBrowser から送信されたカスタム コマンドが、メソッドの MediaBrowserServiceCompat バリアントではなく MediaSessionCompat.Callback にディスパッチされるバグを修正しました。これにより、MediaBrowser が以前のサービスから返された実際の戻り値を受け取ることができませんでした(#1474)。
    • メディアボタン インテントのブロードキャスト レシーバーを設定する際に、特定のメーカーのデバイスによってスローされる IllegalArgumentException を処理します(#1730)。
    • メディア アイテムのコマンドボタンを追加します。これにより、以前のライブラリで Custom browse actions と呼ばれていた Media3 API が MediaBrowserCompat に追加されます。Media3 では、メディア アイテムのコマンドボタンは MediaBrowser と MediaController の両方で使用できます。カスタム ブラウジング アクションを実装するをご覧ください。* play() をリクエストした後に、Media3 コントローラがセッション アプリにフォアグラウンド サービスを開始させることができないことがあるバグを修正しました。
    • CommandButton.Builder.setIconUri を制限して、コンテンツ URI のみを受け入れるようにします。
    • 以前の MediaBrowserCompat に接続するときに、Media3 ブラウザの接続ヒントを最初の MediaBrowserCompat に渡します。サービスは、onGetRoot() の最初の呼び出しでルートヒントとして渡された接続ヒントを受け取ることができます。
    • レガシー ブラウザ サービスに接続された MediaBrowser が、ブラウザが parentid に登録された後にサービスから送信されたエラーを受信しないバグを修正しました。
    • 相互運用性の動作を改善し、以前の MediaBrowserService に接続されている Media3 ブラウザが、親に登録するときに parentId の子を 2 回リクエストしないようにしました。
  • UI:
    • XML ベースの共有遷移に関する問題により、PlayerView-in-Compose-AndroidView の回避策で引き伸ばされた/切り抜かれた動画をオプトインにしました。AndroidView 内で PlayerView を使用するアプリは、オプトインするために PlayerView.setEnableComposeSurfaceSyncWorkaround を呼び出す必要があります(#1237、#1594)。
    • PlayerView に setFullscreenButtonState を追加し、全画面表示ボタンのアイコンをオンデマンドで更新できるようにしました。つまり、帯域外で、クリック操作に反応しないようにしました(#1590、#184)。
    • アプリ定義のテキスト トラック選択設定がある場合に、テキスト選択の [なし] が機能しないバグを修正しました。
  • DASH 拡張機能:
    • セグメントの途中で開始するピリオドのサポートを追加しました(#1440)。
  • スムーズなストリーミング拡張機能:
    • テキスト トラックを含む SmoothStreaming ストリームを再生する際の Bad magic number for Bundle エラーを修正しました(#1779)。
  • RTSP 拡張機能:
    • エンコードされた @ 文字を含む URL のユーザー情報削除を修正しました(#1138)。
    • ヘッダー拡張機能を含む RTP パケットの解析時にクラッシュする問題を修正しました(#1225)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1 など):
    • IAMF デコーダ モジュールを追加します。このモジュールは、libiamf ネイティブ ライブラリを使用して音声を合成し、IAMF トラックを含む MP4 ファイルの再生をサポートします。
      • 再生は、ステレオ レイアウトと、空間化を伴う 5.1(オプションのヘッド トラッキングを有効にすることも可能)で有効になっていますが、バイノーラル再生は現在サポートされていません。
    • Android 15 のデコーダ拡張機能に 16 KB ページのサポートを追加しました(#1685)。
  • Cast 拡張機能:
    • CastSession の切断後にタイムラインのクリーンアップを停止します。これにより、切断後に送信側アプリがローカルで再生を再開できるようになります。
    • Context が指定されている場合は、CastPlayer の DeviceInfo を入力します。これにより、MediaSession を RoutingSession にリンクできるようになります。これは、出力切り替えを統合するために必要です(#1056)。
  • テスト ユーティリティ:
    • DataSourceContractTest に、以下を検証するテストが含まれるようになりました。
      • 入力ストリーム read position が更新されました。
      • 出力バッファ offset が正しく適用されている。
  • デモアプリ
    • デモのショート動画アプリのメモリリークを解決しました(#1839)。
  • サポートが終了したシンボルを削除しました。
    • 非推奨の Player.hasPrevious、Player.hasPreviousWindow() を削除しました。代わりに Player.hasPreviousMediaItem() を使用してください。
    • 非推奨の Player.previous() メソッドを削除しました。代わりに Player.seekToPreviousMediaItem() を使用してください。
    • 非推奨の DrmSessionEventListener.onDrmSessionAcquired メソッドを削除しました。
    • 非推奨の DefaultEncoderFactory コンストラクタを削除しました。代わりに DefaultEncoderFactory.Builder を使用してください。

バージョン 1.5.0-rc02

2024 年 11 月 19 日

1.5.0 の安定版を使用してください。

バージョン 1.5.0-rc01

2024 年 11 月 13 日

1.5.0 の安定版を使用します。

バージョン 1.5.0-beta01

2024 年 10 月 30 日

1.5.0 の安定版を使用してください。

バージョン 1.5.0-alpha01

2024 年 9 月 10 日

1.5.0 の安定版を使用します。

バージョン 1.4.0

バージョン 1.4.1

2024 年 8 月 27 日

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

  • ExoPlayer:
    • PreloadMediaSource でプリロード コールバックを非同期で処理します(#1568)。
    • 読み込みに失敗した場合に、バッファリングされた時間に関係なく再生できるようにしました(#1571)。
  • エクストラクタ:
    • MP3: Info フレームの長さフィールドに基づいて、末尾の MP3 以外のデータを正しく無視することで、Searched too many bytes エラーを修正しました(#1480)。
  • テキスト:
    • TTML: パーセンテージ tts:fontSize 値の処理を修正し、パーセンテージ tts:fontSize 値を持つ親ノードから正しく継承されるようにしました。
    • リクエストされた出力開始時間が Subtitle の最終イベント時間以上であるケースを誤って処理していたため、LegacySubtitleUtil の IndexOutOfBoundsException を修正しました(#1516)。
  • DRM:
    • L1 Widevine コンテンツを再生する API 31 以降のデバイスで android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE エラーを修正しました。このエラーは、フレームワークの MediaDrm.requiresSecureDecoder メソッドの実装が不完全なために発生します(#1603)。
  • 効果:
    • release() メソッドを GlObjectsProvider に追加します。
  • セッション:
    • ドキュメントに記載されているように、KEYCODE_HEADSETHOOK のダブルタップを「次へシーク」アクションに変換します(#1493)。
    • ForegroundServiceDidNotStartInTimeException を回避するために無視するかどうかを決定する際に、MediaButtonReceiver で KEYCODE_HEADSETHOOK を「再生」コマンドとして処理します(#1581)。
  • RTSP 拡張機能:
    • SDP 解析で無効なメディア記述をスキップするようにしました(#1087)。

バージョン 1.4.0

2024 年 7 月 25 日

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

  • 共通ライブラリ:
    • 想定される no-op シーク呼び出しを無視するのではなく、保護された BasePlayer.seekTo() メソッドと SimpleBasePlayer.handleSeek() メソッドに転送します。カスタム プレーヤーでこれらのメソッドを実装する場合は、mediaItemIndex == C.INDEX_UNSET を使用してこれらの追加呼び出しを処理する必要があります。
    • 拡張された Java 8 脱糖に対するコンパイル依存関係を削除しました(#1312)。
    • MediaItem.Builder.setImageDurationMs() に渡された期間が、画像以外の MediaItem で無視されることを確認します(ドキュメントに記載されているとおり)。
    • Format.customData を追加して、Format インスタンスに関するアプリ提供のカスタム情報を保存します。
  • ExoPlayer:
    • rankingData で定義された優先度に基づいて複数のソースのプリロードを調整する BasePreloadManager を追加しました。このクラスを拡張することで、カスタマイズが可能です。DefaultPreloadManager を追加します。これは、PreloadMediaSource を使用してソースのメディア サンプルをメモリにプリロードし、UI 上のアイテムのインデックスを示す整数 rankingData を使用します。
    • LoadControl のほとんどのメソッドに PlayerId を追加し、LoadControl の実装で複数のプレーヤーをサポートできるようにしました。
    • Buffer.isDecodeOnly() と C.BUFFER_FLAG_DECODE_ONLY を削除しました。レンダラとデコーダはタイムスタンプに基づいてバッファをスキップするかどうかを決定するため、このフラグを設定する必要はありません。カスタム Renderer 実装では、準備時間が BaseRenderer.getLastResetPositionUs() 以上かどうかを確認して、サンプルを表示するかどうかを決定する必要があります。カスタム SimpleDecoder 実装では、必要に応じて isAtLeastOutputStartTimeUs() を確認したり、他のバッファに DecoderOutputBuffer.shouldBeSkipped をマークしてスキップしたりできます。
    • TargetPreloadStatusControl.getTargetPreloadStatus(T) が null 値を返して、指定された rankingData で MediaSource をプリロードしないことを示せるようにします。
    • BasePreloadManager に remove(MediaSource) を追加します。
    • reset() を BasePreloadManager に追加して、プリロード マネージャー インスタンスを保持しながら、保持しているすべてのソースを解放します。
    • ExoPlayer.setPriority()(および Builder.setPriority())を追加して、PriorityTaskManager で使用される優先度の値と、API 35 の MediaCodec の重要度を定義します。
    • 最後の再バッファリング時間の更新に関する問題を修正しました。この問題により、CMCD で bs(バッファ不足)キーが正しくなくなっていました(#1124)。
    • PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) を追加して、ソースが最後まで読み込まれたことを示します。これにより、DefaultPreloadManager とカスタム PreloadMediaSource.PreloadControl の実装で、次のソースをプリロードしたり、他のアクションを実行したりできます。
    • アイテムの末尾で無音部分をスキップすると再生例外がトリガーされるバグを修正しました。
    • PreloadMediaSource に clear を追加して、プリロード期間を破棄します。
    • 優先度の高いタスクのためにコーデック リソースが再利用されるときに使用される新しいエラーコード PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED を追加しました。
    • 最初のコンテンツ メディアの準備が完了する前に、AdsMediaSource がプレロール広告を読み込めるようにしました(#1358)。
    • 元の期間がマニフェストからすでに削除された後に、マルチピリオド DASH ライブ配信を再準備すると、再生が STATE_ENDED に移動するバグを修正しました。
    • PreloadMediaSource.PreloadControl の onTimelineRefreshed() の名前を onSourcePrepared() に、onPrepared() の名前を onTracksSelected() に変更しました。また、DefaultPreloadManager.Stage の IntDef の名前も適宜変更します。
    • 動的スケジューリングの試験運用版サポートを追加し、CPU のウェイク サイクルに合わせて作業を調整し、レンダラが処理を進められるようになるまでウェイクアップを遅らせるようにしました。これを有効にするには、ExoPlayer インスタンスの設定時に experimentalSetDynamicSchedulingEnabled() を使用します。
    • Renderer.getDurationToProgressUs() を追加しました。Renderer は、このメソッドを実装して、レンダラが進行するために再生を進める必要がある時間を ExoPlayer に返すことができます。ExoPlayer が experimentalSetDynamicSchedulingEnabled() で設定されている場合、ExoPlayer は、作業タスクをスケジュールする時間を計算するときにこのメソッドを呼び出します。
    • MediaCodecRenderer で使用できる入力バッファと出力バッファがあるときにアラートを出す MediaCodecAdapter#OnBufferAvailableListener を追加します。MediaCodecRenderer は、これらのコールバックを受信すると ExoPlayer にシグナルを送信します。ExoPlayer が experimentalSetDynamicSchedulingEnabled() で設定されている場合、ExoPlayer は、レンダラが処理を進められるように作業ループをスケジュールします。
    • 個々のパラメータではなく、LoadControl メソッドのデータクラスを使用します。
    • ExoPlayer.isReleased() を追加して、Exoplayer.release() が呼び出されたかどうかを確認します。
    • ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() を追加して、seekToPrevious() が前のアイテムをシークする最大位置を構成します(#1425)。
    • 音声フォーカスに関する不整合を修正しました。たとえば、プレーヤーが一時停止しているときに、完全なフォーカス喪失または一時的なフォーカス喪失が報告されない問題を修正しました(#1436)。
    • 初期準備ステップの後にエクストラクタが追加のトラックを報告することによって発生する可能性のある IndexOutOfBoundsException を修正しました(#1476)。
    • ExoPlayer.setVideoEffect() の Effects は、レンダラー オフセットが削除されたタイムスタンプを受け取ります(#1098)。
    • 別のプレイリスト アイテムを先読みしているときに発生したプレーヤー エラーを処理する際に、IllegalArgumentException が発生する可能性を修正しました(#1483)。
  • Transformer:
    • audioConversionProcess と videoConversionProcess を ExportResult に追加して、出力ファイルの各トラックがどのように作成されたかを示します。
    • トリム最適化の H.264 レベルチェックを緩和。
    • シーケンス内の SDR 入力メディアと HDR 入力メディアの切り替えのサポートを追加しました。
    • コンポジション レベルのオーディオ エフェクトのサポートを追加しました。
    • ウルトラ HDR 画像を HDR 動画にコード変換するサポートを追加しました。
    • リセットして再利用した後に DefaultAudioMixer が正しいバイト数を出力しない問題を修正しました。
    • PCM 入力を処理する際にオーディオ チャンネル数がステレオに制限されるデコーダのバグを回避しました。
    • ExoPlayerAssetLoader でトラックを選択する際は、音声チャンネル数の制約を無視します。これは再生にのみ適用されるためです。
    • androidx.media3.transformer.Muxer インターフェースを androidx.media3.muxer.Muxer に置き換え、androidx.media3.transformer.Muxer を削除します。
    • コンテンツ URI スキームからの HEIC 画像の読み込みを修正しました。 (#1373)。
    • AudioGraphInput で音声トラックの長さを調整して、AV 同期を改善します。
    • ExportResult.processedInputs フィールドを削除します。このフィールドをコーデックの詳細に使用する場合は、代わりに DefaultDecoderFactory.listener を使用してください。コーデック例外の場合、コーデックの詳細は ExportException.codecInfo で確認できます。
  • エクストラクタ:
    • MPEG-TS: ストリームの最後のアクセス ユニットをサンプルキューに渡すことで、最後のフレームがレンダリングされるようにする変更をロールフォワードしました(#7909)。I フレームのみの HLS ストリーム(#1150)と H.262 HLS ストリーム(#1126)で発生した問題を解決するための修正を組み込みました。
    • MP3: 基盤となるストリームによって報告されるサイズ(ファイルサイズ、HTTP Content-Length ヘッダーなど)よりも、Info フレームのデータサイズを優先します。これにより、再生不可能なトレーラー データ(アルバムアートなど)が、一定のビットレートのシーク計算から除外され、シークの精度が向上します(#1376)。
    • MP3: Info フレーム(存在する場合)のフレーム数などのデータを使用して、固定ビットレート シークの平均ビットレートを計算します。Info フレームの後のフレームのビットレートから推定するのではなく、PCUT フレーム(#1376)など、人為的に小さくする可能性があります。
    • AVI コンテナでの PCM 音声形式の抽出を修正しました。
  • オーディオ:
    • パススルー再生の DTS:X Profile 2 エンコード属性を修正しました(#1299)。
    • オフロード再生の場合、AudioTrack.stop() を呼び出す前に DefaultAudioSink でストリーム完了のトラッキング フィールドをリセットして、AudioTrack.StreamEventCallback#onPresentationEnded が保留中のすべてのデータが再生されたタイミングを正しく識別できるようにします。
    • SilenceSkippingAudioProcessor で、異なる音声形式(ステレオからモノラルなど)間の移行によりプロセッサが例外をスローするバグを修正しました(#1352)。
    • MediaCodecAudioRenderer.getDurationToProgressUs() を実装して、MediaCodecAudioRenderer が処理を進められるときに ExoPlayer がメインの作業ループを動的にスケジュールするようにします。
  • 動画:
    • 再生中にサーフェスを切り替えると Listener.onRenderedFirstFrame() が早く到着する問題を修正しました。
    • 必要に応じて互換性のある AV1 デコーダを使用するように、ドルビー ビジョンのデコーダ フォールバック ロジックを修正しました(#1389)。
    • 再生中に動画レンダラを有効にすると発生する可能性があるコーデック例外を修正しました。
  • テキスト:
    • シーク位置より前に開始する字幕がスキップされる問題を修正しました。 この問題は Media3 1.4.0-alpha01 でのみ発生します。
    • デフォルトの字幕解析動作を変更し、レンダリング中ではなく抽出中に実行されるようにしました(抽出とレンダリングの違いについては、ExoPlayer のアーキテクチャ図をご覧ください)。
      • この変更は、MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false) と TextRenderer.experimentalSetLegacyDecodingEnabled(true) の両方を呼び出すことでオーバーライドできます。これらのコンポーネントを ExoPlayer インスタンスに組み込む方法については、カスタマイズに関するドキュメントをご覧ください。これらのメソッド(および従来の字幕デコードのすべてのサポート)は、今後のリリースで削除される予定です。
      • カスタムの SubtitleDecoder 実装を使用しているアプリは、代わりに SubtitleParser(および SubtitleDecoderFactory の代わりに SubtitleParser.Factory)を実装するように更新する必要があります。
    • PGS: ランレングス デコードを修正し、0 をリテラル カラー値ではなくカラー インデックスとして解決するようにしました(#1367)。
    • CEA-708: rowLock 値を無視します。CEA-708-E S-2023 仕様では、ストリームに存在する値に関係なく、rowLock と columnLock の両方が true であると想定する必要があると規定されています(columnLock のサポートは実装されていないため、実質的に常に false であると想定されます)。
      • これはもともと 1.3.0-alpha01 のリリースノートに含まれていましたが、1.3.0-rc01 のリリース前に誤って変更が元に戻されました。この問題は解決され、変更が再び表示されるようになりました。
    • CEA-708: ExoPlayer が「set pen location」コマンドを単純に処理することで、改行が重複して追加されないようにしました(#1315)。
    • WebVTT 字幕サンプルにキューが含まれていない場合(DASH ストリームの一部など)に LegacySubtitleUtil から IllegalArgumentException が発生する問題を修正しました(#1516)。
  • メタデータ:
    • MP4 から ID3 並べ替えタグへのマッピングを修正しました。以前は、「アルバムの並べ替え」(soal)、「アーティストの並べ替え」(soar)、「アルバム アーティストの並べ替え」(soaa)の MP4 タグが、TSO2、TSOA、TSOP の ID3 タグに誤ってマッピングされていました(#1302)。
    • 値が 1 バイトを超える場合に、MP4(/iTunes)の数値 gnre(ジャンル)タグと tmpo(テンポ)タグの読み取りを修正しました。
    • ID3 TCON フレームを MediaMetadata.genre に伝播します(#1305)。
  • 画像:
    • 正方形でない DASH サムネイル グリッドのサポートを追加しました(#1300)。
    • API 34 以降で AVIF のサポートを追加しました。
    • ExoPlayer.setImageOutput() のパラメータとして null を指定して、以前に設定された ImageOutput をクリアできるようにしました。
  • DataSource:
    • android.resource://package/id 未加工リソース URI のサポートを実装します。ここで、package は現在のアプリケーションのパッケージとは異なります。これは以前はドキュメントに記載されていませんでしたが、名前ではなく別のパッケージのリソースにアクセスするより効率的な方法です。
    • DataSpec コンストラクタで url が null 以外であることを積極的に確認します。このパラメータは、null 以外としてすでにアノテーションされています。
    • ByteArrayDataSource が、構築時にハードコードされるのではなく、open() 中に URI をバイト配列に解決できるようにしました(#1405)。
  • DRM:
    • DefaultDrmSessionManagerProvider で LoadErrorHandlingPolicy を設定できるようにしました(#1271)。
  • 効果:
    • SpeedChangeEffect の同じ EditedMediaItem または Composition 内での複数の速度変更をサポート。
    • ウルトラ HDR ビットマップ入力からの HLG および PQ 出力のサポート。
    • EGL_GL_COLORSPACE_BT2020_HLG_EXT のサポートを追加しました。これにより、ExoPlayer.setVideoEffect と Transformer のデバッグ SurfaceView での HLG サーフェス出力が改善されます。
    • setOverlayFrameAnchor() で適用される x 値と y 値を反転して、ドキュメントと一致するようにオーバーレイ マトリックスの実装を更新しました。OverlaySettings.Builder.setOverlayFrameAnchor() を使用する場合は、x 値と y 値に -1 を掛けて反転します。
    • ExoPlayer#setVideoEffects と併用すると TimestampWrapper がクラッシュするバグを修正しました(#821)。
    • デフォルトの SDR 色作業空間を、リニアカラーから電気 BT 709 SDR 動画に変更しました。また、元の色空間を保持する 3 つ目のオプションも提供します。
    • EditedMediaItemSequences の不確定な z オーダーを定義できるようにしました(#1055)。
    • さまざまな HDR コンテンツで一貫した輝度範囲を維持します(HLG 範囲を使用)。
    • HDR コンテンツでのウルトラ HDR(ビットマップ)オーバーレイのサポートを追加しました。
    • API 26 より前で SeparableConvolution エフェクトを使用できるようにします。
    • オーバーレイとフレームのダイナミック レンジが一致する必要があるため、未使用の OverlaySettings.useHdr を削除します。
    • TextOverlay の HDR サポートを追加しました。テキスト オーバーレイの輝度は OverlaySettings.Builder.setHdrLuminanceMultiplier() で調整できます。
  • IMA 拡張機能:
    • アプリが DAI 広告ストリームを再生するために必要な API を安定版に昇格。
    • replaceAdTagParameters(Map <String, String>) を ImaServerSideAdInsertionMediaSource.AdLoader に追加します。これにより、実行時に広告タグのパラメータを置き換えることができます。
    • 広告の再生中にプレーヤー エラーが発生したときに VideoAdPlayer.VideoAdPlayerCallback.onError() が呼び出されないバグを修正しました(#1334)。
    • IMA SDK のバージョンを 3.33.0 に引き上げ、data:// 広告タグ URI を使用する際の NullPointerException を修正しました(#700)。
  • セッション:
    • CommandButton.enabled のデフォルトを true に変更し、関連するコマンドが使用可能な場合でも、コントローラの値が false のままになるようにします。
    • カスタム アイコン リソースの代わりに使用する必要がある CommandButton のアイコン定数を追加しました。
    • MediaSessionService.isPlaybackOngoing() を追加して、onTaskRemoved() でサービスを停止する必要があるかどうかをアプリがクエリできるようにしました(#1219)。
    • すべてのセッションの再生を一時停止し、stopSelf() を呼び出して MediaSessionService のライフサイクルを終了できる MediaSessionService.pauseAllPlayersAndStopSelf() を追加しました。
    • MediaSessionService.onTaskRemoved(Intent) をオーバーライドして、再生が進行中の場合はサービスをフォアグラウンドで実行し、それ以外の場合はサービスを停止する、安全なデフォルト実装を提供します。
    • プラットフォーム セッション メタデータに再生時間を設定しないことで、ライブ配信のメディア通知でシークバーを非表示にしました(#1256)。
    • MediaMetadata から MediaDescriptionCompat への変換を調整し、media1 と同じ優先順位とロジックを使用してメタデータ プロパティを選択します。
    • 致命的でないエラーを Media3 コントローラに送信できる MediaSession.sendError() を追加しました。通知コントローラ(MediaSession.getMediaNotificationControllerInfo() を参照)を使用する場合、カスタムエラーは、指定されたエラー情報(#543)を使用してプラットフォーム セッションの PlaybackState をエラー状態に更新するために使用されます。
    • MediaSession.Callback.onPlayerInteractionFinished() を追加して、特定のコントローラからの一連のプレーヤー操作が終了したときにセッションに通知します。
    • SessionError を追加し、エラーコードの代わりに SessionResult と LibraryResult で使用して、エラーに関する詳細情報と、可能であればエラーの解決方法を提供します。
    • メディア セッションを公開するアプリとのインタラクションをテストするために使用できる、media3 コントローラ テストアプリのコードを公開します。
    • media3 の MediaSession[Builder].setSessionExtras() に渡されたエクストラを media1 コントローラの PlaybackStateCompat.getExtras() に伝播します。
    • 致命的なエラーと致命的でないエラーをプラットフォーム セッションにマッピングします。PlaybackException は、PlaybackStateCompat の致命的なエラー状態にマッピングされます。MediaSession.sendError(ControllerInfo, SessionError) を指定してメディア通知コントローラに送信された SessionError は、PlaybackStateCompat の非致命的エラーにマッピングされます。つまり、エラーコードとメッセージは設定されますが、プラットフォーム セッションの状態は STATE_ERROR とは異なるままになります。
    • コントローラごとにセッション アクティビティを設定して、グローバル セッション アクティビティをオーバーライドできるようにします。セッション アクティビティは、AcceptedResultBuilder.setSessionActivivty(PendingIntent) を使用して ConnectionResult を作成することで、接続時にコントローラに対して定義できます。接続すると、セッション アクティビティを MediaSession.setSessionActivity(ControllerInfo, PendingIntent) で更新できます。
    • MediaLibrarySession.Callback への呼び出しのエラー レプリケーションを改善しました。エラー レプリケーションは、MediaLibrarySession.Builder.setLibraryErrorReplicationMode() を使用してエラータイプを選択するか、デフォルトで有効になっているエラー レプリケーションをオプトアウトすることで構成できるようになりました。
  • UI:
    • ExoPlayer に接続されている場合に PlayerView に画像表示のサポートを追加しました(#1144)。
    • グローバル オーバーライドではなく、PlayerView インスタンスごとに異なるドローアブルを使用できるように、XML 属性を介して PlayerControlView のさまざまなアイコンをカスタマイズできるようにしました(#1200)。
    • API 34 で Compose AndroidView 内で SurfaceView を使用すると、動画が引き伸ばされたり、切り抜かれたりするプラットフォームのバグを回避しました(#1237)。
  • ダウンロード:
    • DownloadHelper が未リリースの Renderer インスタンスをリークしないようにしました。これにより、IllegalStateException: Too many receivers, total of 1000, registered for pid でアプリがクラッシュする可能性があります(#1224)。
  • Cronet 拡張機能:
    • CronetDataSource の SocketTimeoutException を修正。Cronet の一部のバージョンでは、コールバックによって提供されるリクエストが常に同じとは限りません。これにより、コールバックが完了せず、リクエストがタイムアウトします(https://issuetracker.google.com/328442628)。
  • HLS 拡張機能:
    • 不連続性を待機している保留中の EMSG サンプルが、誤ったオフセットで HlsSampleStreamWrapper に委任され、IndexOutOfBoundsException または IllegalArgumentException が発生するバグを修正しました(#1002)。
    • LL-HLS ストリームでメイン以外の再生リストが再読み込みされ続けるバグを修正しました(#1240)。
    • 初期化セグメントを含む HLS で CMCD を有効にすると、Source Error と IllegalArgumentException が発生するバグを修正しました。
    • ライブ再生中に、プライマリ以外の再生プレイリストが更新されないバグを修正しました(#1240)。
    • HLS ライブ ストリームで CMCD を有効にすると ArrayIndexOutOfBoundsException が発生するバグを修正しました(#1395)。
  • DASH 拡張機能:
    • マルチピリオド ライブ ストリームを再準備すると IndexOutOfBoundsException がスローされるバグを修正しました(#1329)。
    • dashif:Laurl ライセンス URL のサポートを追加しました(#1345)。
  • Cast 拡張機能:
    • MediaQueueItem のアルバム タイトルが Media3 メディア アイテムのアーティストに変換されるバグを修正しました(#1255)。
  • テスト ユーティリティ:
    • FakeRenderer に onInit() と onRelease() を実装します。
    • 致命的でないエラー(AnalyticsListener.onVideoCodecError() に報告されたエラーなど)で失敗するように TestPlayerRunHelper.runUntil()/playUntil() メソッドを変更しました。この動作を無効にするには、新しい TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() メソッド チェーンを使用します。
  • デモアプリ:
    • ショート動画デモアプリで DefaultPreloadManager を使用します。
    • コマンドラインから Intent 引数を使用してリピートモードを設定できるようにしました(#1266)。
    • デバイスでサポートされている場合は、HttpDataSource として HttpEngineDataSource を使用します。
  • サポートが終了したシンボルを削除しました。
    • CronetDataSourceFactory を削除しました。代わりに CronetDataSource.Factory を使用してください。
    • 一部の DataSpec コンストラクタを削除しました。代わりに DataSpec.Builder を使用してください
    • DefaultHttpDataSource、OkHttpDataSource、CronetDataSource から 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.DUMMY メソッドと getDummyDrmSessionManager() メソッドを削除しました。代わりに DrmSessionManager.DRM_UNSUPPORTED を使用してください。
    • AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)、AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)、AudioRendererEventListener.onAudioInputFormatChanged(Format)、VideoRendererEventListener.onVideoInputFormatChanged(Format) を削除します。代わりに、DecoderReuseEvaluation を受け取るオーバーロードを使用してください。
    • IntDef「RendererSupport.FormatSupport」と定数「FORMAT_HANDLED」、「FORMAT_EXCEEDS_CAPABILITIES」、「FORMAT_UNSUPPORTED_DRM」、「FORMAT_UNSUPPORTED_SUBTYPE」、「FORMAT_UNSUPPORTED_TYPE」を削除しました。代わりに、androidx.media3.common.C の同等の IntDef と定数(C.FORMAT_HANDLED など)を使用してください。
    • Bundleable インターフェースを削除します。これには、すべての Bundleable.Creator<Foo> CREATOR 定数フィールドの削除が含まれます。代わりに、呼び出し元は各型の Bundle toBundle() メソッドと static Foo fromBundle(Bundle) メソッドを使用する必要があります。

バージョン 1.4.0-rc01

2024 年 7 月 10 日

1.4.0 の安定版を使用してください。

バージョン 1.4.0-beta01

2024 年 6 月 26 日

1.4.0 安定版を使用してください。

バージョン 1.4.0-alpha02

2024 年 6 月 7 日

1.4.0 の安定版を使用してください。

バージョン 1.4.0-alpha01

2024 年 4 月 17 日

1.4.0 の安定版を使用してください。

バージョン 1.3.0

バージョン 1.3.1

2024 年 4 月 11 日

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

  • 共通ライブラリ:
    • Format.labels を追加して、ローカライズされたラベルやその他の代替ラベルを許可します。
  • ExoPlayer:
    • PreloadMediaPeriod が再度プリロードされたときにストリームを保持できない問題を修正しました。
    • トラックの再選択で、再生期間に適切な TrackSelectionResult を適用します。
    • メディア アイテム間の移行時に再生期間を進めた後にのみ、早期有効化されたレンダラを開始するようにしました(#1017)。
    • DefaultVideoFrameProcessor.Factory.Builder.build() の ProGuard -keepclasseswithmembers ルールに、欠落していた戻り値の型を追加しました(#1187)。
  • Transformer:
    • API 30 より前のバージョンで MediaMuxer が負の表示タイムスタンプをサポートしていないためにスローされる例外の回避策を追加しました。
  • トラック選択:
    • DefaultTrackSelector: フレームレートが低い、または設定されていない動画トラックよりも、「妥当な」フレームレート(10 fps 以上)の動画トラックを優先します。これにより、プレーヤーは、2 つの HEVC トラック(1 つは高解像度だがフレーム数が非常に少ない)を含むモーション フォトから抽出された MP4 で「実際の」動画トラックを選択するようになります(#1051)。
  • エクストラクタ:
    • WAV ファイルから奇数サイズのチャンクを読み取る際にパディングがスキップされない問題を修正しました(#1117)。
    • MP3: XING や VBRI などのメタデータ フレームから Format.averageBitrate を入力します。
    • MPEG-TS: ストリームの最後のアクセス ユニットをサンプルキューに渡すことで、最後のフレームがレンダリングされるようにすることを目的とした変更を元に戻しました(#7909)。これは、この変更により、I フレームのみの HLS ストリーム(#1150)と H.262 HLS ストリーム(#1126)で新しい問題が発生するためです。
  • オーディオ:
    • オフロード モードでオーディオ トラックの初期化に失敗した場合に、オフロードを無効にしてレンダラーを復元できるようにします。
  • 動画:
    • Galaxy Tab S7 FE、Chromecast with Google TV、Lenovo M10 FHD Plus で、60 fps の H265 ストリームがサポート対象外としてマークされるデバイスの問題の回避策を追加しました。
    • API で要求されているようにデバイスが自動的に処理しない場合でも、トンネリング中に最初のフレームが常にレンダリングされるようにする回避策を追加しました(#1169)。(#966)。
    • HDR カラー情報の処理によりコーデックが誤動作し、SDR 動画トラックのアダプティブ フォーマットの切り替えが妨げられる問題を修正しました(#1158)。
  • テキスト:
    • WebVTT: 連続するキューが WebvttParser.parse から不要な CuesWithTiming インスタンスを作成しないようにしました(#1177)。
  • DRM:
    • 一部の Android 14 デバイスで、ResourceBusyException または NotProvisionedException の代わりに MediaDrm フレームワークによってスローされる可能性がある NoSuchMethodError を回避しました(#1145)。
  • 効果:
    • 色空間を変換することで、PQ から SDR へのトーン マッピングを改善しました。
  • セッション:
    • コントローラが現在のアイテムを置き換えると、現在の位置が戻る問題を修正しました(#951)。
    • null 以外の extras のみを含む MediaMetadata がメディア コントローラとセッション間で送信されない問題を修正しました(#1176)。
  • UI:
    • Locale が表示名を識別できない場合に、音声トラックの言語名を含めるようにフォールバックしました(#988)。
  • DASH 拡張機能:
    • マニフェストのすべての Label 要素を Format.labels に入力します(#1054)。
  • RTSP 拡張機能:
    • SDP 解析で空のセッション情報値(i-tag)をスキップするようにしました(#1087)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
    • MIDI 拡張機能は、追加の Maven リポジトリを構成する必要があるため、デフォルトでローカル依存関係として無効にします。ローカル依存関係からこのモジュールを必要とするユーザーは、再度有効にできます。

バージョン 1.3.0

2024 年 3 月 6 日

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

  • 共通ライブラリ:
    • package が現在のアプリケーションのパッケージと異なる android.resource://package/[type/]name 未加工リソース URI のサポートを実装します。これは、動作することが常にドキュメントに記載されていましたが、これまでは正しく実装されていませんでした。
    • アプリコードで設定された、またはメディアから読み取られた MIME タイプを正規化して、すべて小文字にします。
    • AdPlaybackState で、単一の Uri ではなく、完全な MediaItem を使用して広告を定義します。
    • minSdk を 19(Android KitKat)に引き上げます。これは他のすべての AndroidX ライブラリと整合しており、AndroidX 依存関係の最新バージョンにアップグレードするために必要です。
    • artworkUri と artworkData の少なくとも 1 つが null 以外の場合、MediaMetadata.Builder.populate(MediaMetadata) で両方を入力します(#964)。
  • ExoPlayer:
    • PreloadMediaSource と PreloadMediaPeriod を追加しました。これにより、アプリは再生前に特定の開始位置でコンテンツ メディア ソースをプリロードできます。PreloadMediaSource は、Timeline を受信するためのコンテンツ メディアソースの準備、指定された開始位置での期間の準備とキャッシュ、トラックの選択、期間のメディアデータの読み込みを行います。アプリは、PreloadMediaSource.PreloadControl を実装してプリロードの進行状況を制御し、プリロードされたソースをプレーヤーに設定して再生します。
    • アプリが ImageRenderer.ImageOutput を設定できるようにする ExoPlayer.setImageOutput を追加しました。
    • DefaultRenderersFactory は、デフォルトで null の ImageOutput と ImageDecoder.Factory.DEFAULT を含む ImageRenderer をプレーヤーに提供するようになりました。
    • 無音部分がスキップされたときに Player.Listener.onPositionDiscontinuity イベントを出力します(#765)。
    • 抽出中に字幕を解析する試験運用版のサポートを追加しました。これは MediaSource.Factory.experimentalParseSubtitlesDuringExtraction() を使用して有効にできます。
    • PreloadMediaSource でアダプティブ メディアソースをサポートします。
    • HttpEngine API を使用して、HttpDataSource である HttpEngineDataSource を実装します。
    • CompositeSequenceableLoader のサブクラス化を防止します。このコンポーネントは以前に拡張可能にされましたが、ライブラリ内でサブクラス化されることはありませんでした。カスタマイズは、デコレータ パターンを使用してインスタンスをラップし、カスタム CompositeSequenceableLoaderFactory を実装することで行えます。
    • 同じ時間を繰り返すと、このアイテムのメタデータが消去される問題を修正しました(#1007)。
    • BundledChunkExtractor.Factory と DefaultHlsExtractorFactory の experimentalSetSubtitleParserFactory メソッドの名前を setSubtitleParserFactory に変更し、null を渡すことを禁止しました。新しい experimentalParseSubtitlesDuringExtraction(boolean) メソッドを使用して、解析動作を制御します。
    • 抽出時に使用される SubtitleParser.Factory をカスタマイズするためのサポートを追加しました。これは MediaSource.Factory.setSubtitleParserFactory() で実現できます。
    • MergingMediaSource から生成されたすべての Format.id フィールドにソース プレフィックスを追加します。これにより、どのソースが Format を生成したかを特定できます(#883)。
    • カスタムの共通メディア クライアント データ(CMCD)キー名の検証に使用される正規表現を、ハイフンのみをチェックするように変更して修正しました(#1028)。
    • CMCD クエリ パラメータの二重エンコードを停止しました(#1075)。
  • Transformer:
    • H.265/HEVC SEF スローモーション動画のフラット化のサポートを追加しました。
    • トランスマルチプレクシングの速度を向上させました(特に「動画の削除」編集の場合)。
    • 出力ファイルが動画フレームで開始されるようにする API を追加しました。これにより、プレゼンテーション タイムスタンプまで最初の動画フレームを表示しないプレーヤー実装との互換性が、トリミング オペレーションの出力で向上します(#829)。
    • 単一アセットの MP4 トリミング オペレーションを最適化するためのサポートを追加しました。
    • 動画フレームが出力ファイルに最初のタイムスタンプを持つようにサポートを追加しました。iOS ベースのプレーヤーで出力ファイルが黒いフレームで始まる問題を修正しました(#829)。
  • トラック選択:
    • DefaultTrackSelector.selectImageTrack を追加して、画像トラックの選択を有効にします。
    • TrackSelectionParameters.isPrioritizeImageOverVideoEnabled を追加して、画像トラックと動画トラックの両方が利用可能な場合に画像トラックを選択するかどうかを決定します。デフォルト値は false で、動画トラックの選択が優先されることを意味します。
  • エクストラクタ:
    • MP4 エクストラクタに AV1C 解析を追加して、ColorInfo.colorSpace、ColorInfo.colorTransfer、ColorInfo.colorRange の値を取得できるようにしました(#692)。
    • MP3: Info ヘッダー(Xing ヘッダーに相当する CBR)を持つファイルに対して、固定ビットレート(CBR)シークを使用します。以前は Info ヘッダーのシークテーブルを使用していましたが、この方法では、シークテーブルを無視してファイルが CBR であると想定する場合よりも、再生位置の細かい調整の精度が低下します。
    • MPEG2-TS: DTS、DTS-LBR、DTS:X Profile2 のサポートを追加しました(#275)。
    • TS 記述子から音声タイプを抽出してロールフラグにマッピングし、ユーザーがより適切な音声トラックを選択できるようにしました(#973)。
  • オーディオ:
    • 音量の滑らかな変化により無音部分をスキップするアルゴリズムを改善しました。最小限の無音部分と、より自然な無音部分の長さが維持されます(#7423)。
    • スキップされた無音をより確定的に報告するようにしました(#1035)。
  • 動画:
    • VideoFrameProcessor.Factory 引数を取る MediaCodecVideoRenderer コンストラクタを変更し、VideoSinkProvider 引数を取るコンストラクタに置き換えます。カスタム VideoFrameProcessor.Factory を挿入するアプリは、カスタム VideoFrameProcessor.Factory を使用する CompositingVideoSinkProvider をインスタンス化し、動画シンク プロバイダを MediaCodecVideoRenderer に渡すことができます。
  • テキスト:
    • ビットマップ キューのシリアル化を修正し、DefaultExtractorsFactory.setTextTrackTranscodingEnabled の使用時に Tried to marshall a Parcel that contained Binder objects エラーを解決しました(#836)。
    • CEA-708: rowLock 値を無視します。CEA-708-E S-2023 仕様では、ストリームに存在する値に関係なく、rowLock と columnLock の両方が true であると想定する必要があると規定されています(columnLock のサポートは実装されていないため、実質的に常に false であると想定されます)。
  • 画像:
    • DASH サムネイルのサポートを追加しました。グリッド画像は切り抜かれ、個々のサムネイルがプレゼンテーション時間に近い ImageOutput に提供されます。
  • DRM:
    • DRM コンテンツの「クリアリード」の暗号化されていないサンプルを、デフォルトですぐに再生します。これは、後で暗号化されるサンプルのキーがまだ準備されていない場合でも同様です。再生位置が暗号化されたサンプルに到達したときに鍵の準備ができていないと、再生が途中で停止する可能性があります(ただし、以前は、この時点では再生がまったく開始されていませんでした)。この動作は、MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey または DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys で無効にできます。
      • IMA 拡張機能:
    • 適切なファイル拡張子がない DASH 広告と HLS 広告を再生できない問題を修正しました。
  • セッション:
    • TV アプリのダブルクリック検出を無効にしました(#962)。
    • null 以外のエクストラのみを含む MediaItem.RequestMetadata がメディア コントローラとセッション間で送信されない問題を修正しました。
    • MediaLibraryService ではなく Context のみを受け取るコンストラクタを 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)。
  • Transformer:
    • 高い動作レートを設定したために、エンコーダが構成時にスローする問題を回避しました。
  • エクストラクタ:
    • JPEG モーション フォトのセカンダリ(再生不可)HEVC トラックを ROLE_FLAG_ALTERNATE としてマークし、解像度が高いために再生用に自動的に選択されないようにします。
    • TS H264 ストリームの誤ったキーフレーム検出を修正しました(#864)。
    • 47,721 秒を超える TS ストリームの再生時間の推定を修正しました(#855)。
  • オーディオ:
    • 複数回呼び出された場合の SilenceSkippingAudioProcessor の EOS の処理を修正しました(#712)。
  • 動画:
    • Galaxy Tab S7 FE、Chromecast with Google TV、Lenovo M10 FHD Plus で、60 fps の AVC ストリームがサポート対象外としてマークされるデバイスの問題の回避策を追加しました(#693)。
  • メタデータ:
    • MediaMetadata が大文字のキーを持つ Vorbis コメントからのみ入力されるバグを修正しました(#876)。
    • 非常に大きな ID3 フレームを解析するときに OutOfMemoryError をキャッチします。つまり、再生が完全に失敗するのではなく、タグ情報なしで再生を続行できます。
  • DRM:
    • 誤った ClearKey https://default.url ライセンス 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 でマテリアル デザインを使用している場合に、早送りボタンと巻き戻しボタンが表示されない問題を修正しました(#511)。
    • PlayerControlView の早送りボタンの数字がずれる問題を修正しました(#547)。
  • DASH 拡張機能:
    • DASH マニフェストで「f800」をドルビーのチャンネル数 5 として解析します(#688)。
  • デコーダ拡張機能(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) を使用することをおすすめします)。
    • null 許容のジェネリック型パラメータと null 許容の配列要素型が null 許容として検出されない Kotlin の互換性の問題を修正しました。たとえば、TrackSelectorResult メソッドと SimpleDecoder メソッドのパラメータです(#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.canUpdateMediaItem と MediaSource.updateMediaItem を追加して、Player.replaceMediaItem(s) を介した作成後に MediaItem の更新を受け入れます。
    • Player.replaceMediaItem(s) を介してライブラリによって提供されるすべての MediaSource クラスの MediaItem 更新を許可します(#33、#9978)。
    • MimeTypes.TEXT_EXOPLAYER_CUES を MimeTypes.APPLICATION_MEDIA3_CUES に名前変更します。
    • PNG ファイル全体を 1 つのサンプルとして TrackOutput に送信して読み取る PngExtractor を追加します。
    • SequenceableLoader インターフェースの SequenceableLoader.continueLoading(long) メソッドを SequenceableLoader.continueLoading(LoadingInfo loadingInfo) に拡張します。LoadingInfo には、既存の playbackPositionUs に加えて、playbackSpeed や lastRebufferRealtimeMs などの追加パラメータが含まれています。
    • 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)。
    • クエリ パラメータを使用して共通メディア クライアント データ(CMCD)データを送信する機能を追加しました(#553)。
    • ExperimentalBandwidthMeter の ConcurrentModificationException を修正しました(#612)。
    • CompositeMediaSource.getMediaTimeForChildMediaTime に MediaPeriodId パラメータを追加します。
    • ConcatenatingMediaSource2 で ClippingMediaSource(および期間/ウィンドウ時間オフセットを持つ他のソース)をサポートしました(#11226)。
    • MediaPeriodId 引数も受け取るように BaseRenderer.onStreamChanged() を変更します。
  • Transformer:
    • 画像入力の EXIF 回転データを解析します。
    • TransformationRequest.HdrMode アノテーション タイプとそれに関連する定数を削除しました。代わりに Composition.HdrMode とそれに関連する定数を使用してください。
    • OverlaySettings を簡素化して、回転の問題を修正します。
    • SampleConsumer.queueInputBitmap の frameRate パラメータと durationUs パラメータを TimestampIterator に変更しました。
  • トラック選択:
    • DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness を追加して、シームレスでない適応を明示的に許可または禁止します。デフォルトは、現在の動作である true のままです。
  • エクストラクタ:
    • MPEG-TS: ストリームの最後のアクセス ユニットをサンプルキューに渡すことで、最後のフレームがレンダリングされるようにしました(#7909)。
    • rotationDegrees の決定時の入力ミスを修正しました。projectionPosePitch を projectionPoseRoll に変更しました(#461)。
    • Extractor インスタンスを instanceof で直接検査できるという前提を削除します。Extractor の実装の詳細にランタイム アクセスする場合は、まず Extractor.getUnderlyingInstance を呼び出す必要があります。
    • BmpExtractor 個追加します。
    • WebpExtractor 個追加します。
    • HeifExtractor 個追加します。
    • Mp4Extractor に QuickTime クラシックのサポートを追加しました。
  • オーディオ:
    • MP4 と Matroska で 24/32 ビットのビッグ エンディアン PCM のサポートを追加し、MP4 で lpcm の PCM エンコードを解析します。
    • MP4 での Vorbis オーディオの抽出のサポートを追加しました。
    • DefaultAudioOffloadSupportProvider を介して、シンクが形式に提供できるオフロード サポートのレベルを取得する AudioSink.getFormatOffloadSupport(Format) を追加しました。isFormatSupported、isGaplessSupported、isSpeedChangeSupported を含む新しい AudioOffloadSupport を返します。
    • AudioSink.setOffloadMode() を追加します。これにより、オーディオ シンクのオフロード構成が構成されます。デフォルトは、AudioSink.OFFLOAD_MODE_DISABLED です。
    • オフロードは、TrackSelectionParameters の setAudioOffloadPreference で有効にできます。設定された設定が有効で、デバイスがその形式のオフロードをサポートし、トラックの選択が単一のオーディオ トラックである場合、オーディオ オフロードが有効になります。
    • audioOffloadModePreference が AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED に設定されている場合、DefaultTrackSelector は音声トラックのみを選択します。ただし、そのトラックの形式がオフロードでサポートされている場合に限ります。オフロードでサポートされている音声トラックがない場合、トラックは選択されません。
    • トラックの移行後に再生位置の問題が発生するため、API レベル 33 より前のオフロードでギャップレス サポートを無効にしました。
    • DefaultRenderersFactory.buildAudioSink メソッド シグネチャからパラメータ enableOffload を削除しました。
    • メソッド DefaultAudioSink.Builder.setOffloadMode を削除します。
    • intdef 値 DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED を削除します。
    • オフロード再生中の Opus ギャップレス メタデータのサポートを追加しました。
    • 最初の書き込みで失敗した場合にオフロードを無効にすることで、レンダラの復元を可能にしました(#627)。
    • 音声のみのオフロード再生で、オフロード スケジューリングをデフォルトで有効にします。
    • ExoPlayer.experimentalSetOffloadSchedulingEnabled と AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged を削除します。
    • onExperimentalSleepingForOffloadChanged の名前を onSleepingForOffloadChanged に、onExperimentalOffloadedPlayback の名前を onOffloadedPlayback に変更しました。
    • オーディオ オフロード モードに関連する TrackSelectionParameters インターフェースと定義を内部の AudioOffloadPreferences クラスに移動します。
    • onAudioTrackInitialized コールバックと onAudioTrackReleased コールバックを AnalyticsListener、AudioRendererEventListener、AudioSink.Listener に追加します。
    • DTS Express の音声バッファのアンダーフローの問題を修正しました(#650)。
    • E-AC3-JOC の機能チェックで IllegalArgumentException がスローされるバグを修正しました(#677)。
  • 動画:
    • MediaCodecVideoRenderer がカスタム VideoFrameProcessor.Factory を使用できるようにします。
    • 音声ストリームが負のタイムスタンプで始まる場合に最初のフレームをレンダリングできないバグを修正しました(#291)。
  • テキスト:
    • ExoplayerCuesDecoder を削除しました。sampleMimeType = application/x-media3-cues を含むテキスト トラックは、SubtitleDecoder インスタンスを必要とせずに、TextRenderer によって直接処理されるようになりました。
  • メタデータ:
    • 実装は null を返す必要があるため、「デコードのみ」のサンプルに対して MetadataDecoder.decode が呼び出されることはなくなります。
  • 効果:
    • タイムスタンプによる VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) キューイング ビットマップ入力を追加します。
    • VideoFrameProcessor.registerInputStream() を非ブロッキングに変更します。アプリは VideoFrameProcessor.Listener#onInputStreamRegistered() を実装する必要があります。
    • VideoFrameProcessor.queueInputBitmap の frameRate パラメータと durationUs パラメータを 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)。
    • メディア通知コントローラをプロキシとして使用して、通知とプラットフォーム セッションに入力するために使用される利用可能なコマンドとカスタム レイアウトを設定します。
    • MediaSessionService.onStartCommand() が受信したメディアボタン イベントを、プラットフォーム セッションにルーティングして Media3 に戻すのではなく、Media3 内で変換します。これにより、呼び出し元コントローラは常にメディア通知コントローラになり、アプリはサポートされているすべての API レベルで同じ方法で通知からの呼び出しを簡単に認識できます。
    • 以前の MediaSessionCompat に接続されている場合に MediaController.getCurrentPosition() が進まないバグを修正しました。
    • 便宜上、MediaLibrarySession.getSubscribedControllers(mediaId) を追加します。
    • MediaLibrarySession.Callback.onSubscribe() をオーバーライドして、コントローラがサブスクライブする親 ID の可用性をアサートします。成功すると、サブスクリプションが承認され、notifyChildrenChanged() がすぐに呼び出されてブラウザに通知されます(#561)。
    • Automotive OS 用のセッション デモ モジュールを追加し、Android Auto 用のセッション デモを有効にしました。
    • COMMAND_GET_TIMELINE がメディア通知コントローラで使用できない場合は、フレームワーク セッションのキューを設定しないでください。Android Auto がクライアント コントローラとしてフレームワーク セッションから読み取る場合、Android Auto の UI に queue ボタンが表示されないという影響があります(#339)。
    • SimpleBitmapLoader の代わりに DataSourceBitmapLoader をデフォルトで使用します(#271、#327)。
    • アプリがデフォルトのメディアボタン イベント処理をオーバーライドできるようにする MediaSession.Callback.onMediaButtonEvent(Intent) を追加しました。
  • UI:
    • Wear OS デバイス用の Player.Listener 実装を追加します。この実装は、Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT による再生の抑制を処理し、ユーザーが適切なオーディオ出力(Bluetooth ヘッドフォンなど)に接続できるようにするシステム ダイアログを起動します。設定可能なタイムアウト(デフォルトは 5 分)内に適切なデバイスが接続されると、リスナーは自動的に再生を再開します。
  • ダウンロード:
    • Android 14 との互換性を確保するため、DownloadService に「データ同期」フォアグラウンド サービス タイプを宣言します。このサービスを使用する場合、アプリはマニフェストに dataSync を foregroundServiceType として追加し、FOREGROUND_SERVICE_DATA_SYNC 権限を追加する必要もあります(#11239)。
  • HLS 拡張機能:
    • 前回の読み込み完了時刻ではなく、前回の読み込み開始時刻から計算された間隔で HLS ライブ プレイリストを更新します(#663)。
  • DASH 拡張機能:
    • セグメント テンプレート URL で同じ DASH 識別子を複数使用できるようにします。
    • 抽出中に字幕を解析する試験運用版のサポートを追加しました。これにより、字幕セグメント間の移行時のちらつきの解決など、重複する字幕の結合がより適切にサポートされます。これは DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() を使用して有効にできます(#288)。
  • RTSP 拡張機能:
    • TCP へのフォールバック時に IndexOutOfBoundsException が発生する、または特定の状況で再生がハングする可能性がある競合状態を修正しました。
    • RtspMediaPeriod の読み込み状態を返すときに、RTSP 設定の状態を確認します(#577)。
    • Options レスポンスのパブリック ヘッダーでカスタム Rtsp リクエスト メソッドを無視するようになりました(#613)。
    • キープアライブ RTSP オプション リクエストを送信する時間間隔で RTSP セットアップ レスポンスのタイムアウト値を使用します(#662)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
    • MIDI デコーダー モジュールをリリースしました。このモジュールは、Jsyn ライブラリを使用して音声を合成し、標準 MIDI ファイルの再生をサポートします。
    • 表示する必要のない出力バッファを直接マークする DecoderOutputBuffer.shouldBeSkipped を追加しました。これは、非推奨となる C.BUFFER_FLAG_DECODE_ONLY よりも優先されます。
    • Decoder.setOutputStartTimeUs と SimpleDecoder.isAtLeastOutputStartTimeUs を追加して、デコーダが開始時間より前にデコード専用サンプルをドロップできるようにしました。非推奨となる Buffer.isDecodeOnly よりも、こちらを使用することをおすすめします。
    • MIDI デコーダ アーティファクトを Maven リポジトリに公開する際のバグを修正しました。アーティファクトの名前を media3-exoplayer-midi に変更しました(#734)。
  • Leanback 拡張機能:
    • サーフェスを無効にすると Leanback コードで ArithmeticException が発生する可能性があるバグを修正しました(#617)。
  • テスト ユーティリティ:
    • TestExoPlayerBuilder と FakeClock を Espresso UI テストおよび Compose UI テストと互換性があるようにします。これにより、Espresso または Compose ビューの操作中に再生が非決定的に進むバグが修正されます。
  • サポートが終了したシンボルを削除しました。
    • TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) と TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean) を削除しました。代わりに Composition.Builder.setHdrMode(int) を使用して Composition を Transformer.start(Composition, String) に渡します。
    • 非推奨の DownloadNotificationHelper.buildProgressNotification メソッドを削除し、代わりに notMetRequirements パラメータを受け取る非推奨でないメソッドを使用します。

バージョン 1.2.0-rc01

2023 年 11 月 1 日

1.2.0 安定版を使用してください。

バージョン 1.2.0-beta01

2023 年 10 月 19 日

1.2.0 安定版を使用してください。

バージョン 1.2.0-alpha02

2023 年 9 月 29 日

1.2.0 安定版を使用してください。

バージョン 1.2.0-alpha01

2023 年 8 月 17 日

1.2.0 安定版を使用してください。

バージョン 1.1.0

バージョン 1.1.1

2023 年 8 月 16 日

  • 共通ライブラリ:
    • すべてのモジュールから、誤って追加された multidex 依存関係を削除しました(#499)。
  • ExoPlayer:
    • PlaybackStatsListener で、プレイリストがクリアされた後に不要な PlaybackStats が作成される問題を修正しました。
    • Common Media Client Data(CMCD)ロギングに、ストリーミング形式(sf)、ストリーム タイプ(st)、バージョン(v)、トップ ビットレート(tb)、オブジェクト期間(d)、測定スループット(mtp)、オブジェクト タイプ(ot)のフィールドを追加しました(#8699)。
  • オーディオ:
    • 非常に短いファイルを再生するときに Player.getState() が STATE_ENDED に移行しないバグを修正しました(#538)。
  • オーディオ オフロード:
    • RFC 7845 に従って、オフロードされた Opus 再生用のビットストリームに Ogg ID ヘッダーとコメント ヘッダー ページを付加します。
  • 動画:
    • H.265/HEVC: SPS の短期および長期参照画像情報の解析を修正しました。
  • テキスト:
    • CEA-608: 表示可能なテキストのみを考慮するようにキューの切り捨てロジックを変更しました。 以前は、キューの長さを 32 文字に制限する際に、インデントとタブのオフセットが含まれていました(仕様上は技術的に正しい)(#11019)。
  • IMA 拡張機能:
    • IMA SDK のバージョンを 3.30.3 に引き上げました。
  • セッション:
    • コントローラの状態にカスタム レイアウトを追加し、それにアクセスするためのゲッターを提供します。カスタム レイアウトが変更されると、MediaController.Listener.onCustomLayoutChanged が呼び出されます。異なるカスタム レイアウトを異なる Media3 コントローラに送信するアプリは、MediaSession.Callback.onConnect で AcceptedResultBuilder を使用して、接続が完了したときにカスタム レイアウトがコントローラで使用できるようにします。
    • MediaLibraryServiceLegacyStub が、これをサポートしていない Result にエラーを送信し、UnsupportedOperationException が生成されるケースを修正しました(#78)。
    • レガシー コマンド(COMMAND_ADJUST_DEVICE_VOLUME と COMMAND_SET_DEVICE_VOLUME)と新しいコマンド(COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS と COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS)の両方で volumeControlType を決定することで、PlayerWrapper が VolumeProviderCompat を作成する方法を修正しました(#554)。

バージョン 1.1.0

2023 年 7 月 5 日

  • 共通ライブラリ:
    • 不適切なオーディオ ルートの抑制理由を追加し、準備ができたら再生します。 抑制時間が長すぎる理由を変更します。 (#15)。
    • Player にコマンドを追加します。
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • ユーザーが音量フラグを指定できるように、オーバーロードされたメソッドを Player に追加します。
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • 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)
    • MediaSource から利用可能なトラックタイプをフィルタできる FilteringMediaSource を追加しました。
    • アダプティブ ストリーミング形式 DASH、HLS、SmoothStreaming の送信リクエストに共通メディア クライアント データ(CMCD)を含めるためのサポートを追加しました。br、bl、cid、rtp、sid の各フィールドが組み込まれました(#8699)。API 構造と API メソッド:
      • CMCD ロギングはデフォルトで無効になっています。有効にするには、MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) を使用します。
      • デフォルトでは、すべてのキーが有効になっています。CmcdConfiguration.RequestConfig.isKeyAllowed(String key) をオーバーライドして、ログに記録されるキーをフィルタします。
      • CmcdConfiguration.RequestConfig.getCustomData() をオーバーライドして、カスタムキーのロギングを有効にします。
    • メインデモのマニフェストにアクションを追加して、カスタム *.exolist.json ファイルでデモアプリを簡単に起動できるようにしました(#439)。
    • 動画の再生中に Effect を使用するための ExoPlayer.setVideoEffects() を追加します。
    • SampleQueue を更新して、sourceId を int ではなく long として保存します。これにより、パブリック メソッド SampleQueue.sourceId と SampleQueue.peekSourceId のシグネチャが変更されます。
    • LoadControl メソッド shouldStartPlayback と onTracksSelected に、これらのメソッドを関連する MediaPeriod に関連付けるパラメータを追加しました。
    • マップでキーとして使用される UID を持つ期間を含むタイムライン パラメータを追加して、ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) のシグネチャを変更します。これは、マルチピリオド ライブ ストリームの同時実行の問題を回避するために必要です。
    • EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) と BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs) を非推奨にしました。代わりに、mediaTimeOffsetUs を含まないメソッドのバリアントを呼び出すことができます。非推奨のバリアントでも、ディスパッチャによってディスパッチされる MediaLoadData オブジェクトの startTimeUs と endTimeUs にオフセットが追加されることはなくなりました。
    • ExoTrackSelection.blacklist の名前を excludeTrack に、isBlacklisted の名前を isTrackExcluded に変更します。
    • 空のプレイリストで呼び出された場合の ExoPlayer.setMediaItem(s) と addMediaItem(s) の動作の不整合を修正しました。
  • Transformer:
    • Transformer.Builder.setMediaSourceFactory(MediaSource.Factory) を削除します。代わりに ExoPlayerAssetLoader.Factory(MediaSource.Factory) と Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory) を使用してください。
    • Transformer.startTransformation(MediaItem, ParcelFileDescriptor) を削除。
    • 入力フレームの処理が保留されているときに動画ストリームの終了が通知されると、変換が停止する(マルチプレクサのタイムアウトにつながる)バグを修正しました。
    • findDecoder/EncoderForFormat ユーティリティを使用する代わりに MediaCodecList を介してコーデックをクエリし、サポートを拡張します。
    • 一部のデバイスで動作しないため、DefaultEncoderFactory の B フレーム構成を削除しました。
  • トラック選択:
    • デフォルトで無効化される DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange を追加しました。有効にすると、レンダラの機能が変更されたときに DefaultTrackSelector が新しいトラック選択をトリガーします。
  • エクストラクタ:
    • Ogg: 長時間のファイルでシークする際のバグを修正しました(#391)。
    • FMP4: TimestampAdjuster が emsg アトムからのメタデータ サンプル時間で誤ったタイムスタンプ オフセットを初期化する問題を修正しました(#356)。
  • オーディオ:
    • トンネリングが有効で、AudioProcessors がアクティブな場合(ギャップレス トリミングなど)に、一部の再生が失敗するバグを修正しました(#10847)。
    • ダイレクト再生(オフロード)で Opus フレームを Ogg パケットにカプセル化します。
    • オフロード スケジューリングを使用して、スリープ中の現在位置を推定します。
    • プレーヤーのライフサイクルの終了時にリソースを解放するための 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 が動画をサポートしていない場合、またはサポートされている動画トラックのサイズがまだ決定されていない場合、MediaCodecVideoRenderer を使用する ExoPlayer の動画サイズの幅と高さは 0 になります。
  • DRM:
    • DRM パッケージの外部から呼び出されることが想定されていない、DefaultDrmSession のいくつかの内部専用メソッドの可視性を下げました。
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • MP4 コンテナ ファイルの作成に使用できる新しい muxer ライブラリを追加しました。
  • IMA 拡張機能:
    • DAI で複数期間のライブ DASH ストリームを有効にします。現在の実装では、ライブ配信でのシークはまだサポートされていません(#10912)。
    • 連続するタイムラインで計算されたコンテンツの位置がわずかに異なるため、ライブ ストリームに新しい広告グループが挿入されるバグを修正しました。
  • セッション:
    • 現在 Player メソッドを呼び出しているコントローラに関する情報を取得するヘルパー メソッド MediaSession.getControllerForCurrentRequest を追加します。
    • androidx.media3.session.MediaButtonReceiver を追加して、アプリが Bluetooth ヘッドセットなどから送信されたメディアボタン イベントで再生再開を実装できるようにしました(#167)。
    • MediaSession.Callback.onAddMediaItems にデフォルトの実装を追加し、リクエストされた MediaItems に LocalConfiguration(URI など)がある場合に Player に渡せるようにしました(#282)。
    • Android 12 以前のコンパクトなメディア通知ビューに、デフォルトで「前にシーク」ボタンと「次にシーク」ボタンを追加しました(#410)。
    • MediaSession.Callback.onAddMediaItems にデフォルトの実装を追加し、リクエストされた MediaItems に LocalConfiguration(URI など)がある場合に Player に渡せるようにしました(#282)。
    • Android 12 以前のコンパクトなメディア通知ビューに、デフォルトで「前にシーク」ボタンと「次にシーク」ボタンを追加しました(#410)。
  • UI:
    • 再生/一時停止ボタンを含むカスタム UI 要素を記述するための Util メソッド shouldShowPlayButton と handlePlayPauseButtonAction を追加しました。
  • RTSP 拡張機能:
    • MPEG4-LATM の場合、Describe Response SDP メッセージに profile-level-id 値がない場合は、デフォルトの profile-level-id 値を使用します(#302)。
    • DESCRIBE レスポンス ヘッダーに存在する場合は、RTSP セッションからの相対パス解決にベース URI を使用します(#11160)。
  • DASH 拡張機能:
    • マルチピリオド DASH ストリームの MediaLoadData.startTimeMs と MediaLoadData.endTimeMs からメディア時間オフセットを削除しました。
    • マルチピリオドのライブ DASH メディアソースを再準備すると IndexOutOfBoundsException が生成されるバグを修正しました(#10838)。
  • HLS 拡張機能:
    • HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) を追加して、TimestampAdjuster の初期化を待機する読み込みスレッドのタイムアウトを設定します。タイムアウト前に初期化が完了しない場合、再生が無限に停止しないように PlaybackException がスローされます。タイムアウトはデフォルトで 0 に設定されています(#323)。
  • テスト ユーティリティ:
    • DataSourceContractTest で URI スキームの大文字と小文字が区別されないことを確認します。
  • サポートが終了したシンボルを削除しました。
    • DefaultAudioSink コンストラクタを削除しました。代わりに DefaultAudioSink.Builder を使用してください。
    • HlsMasterPlaylist を削除し、代わりに HlsMultivariantPlaylist を使用します。
    • Player.stop(boolean) を削除しました。代わりに Player.stop() と Player.clearMediaItems()(reset が true の場合)を使用してください。
    • 非推奨の 2 つの SimpleCache コンストラクタを削除しました。パフォーマンスを向上させるため、代わりに DatabaseProvider を受け取る非推奨でないコンストラクタを使用してください。
    • DefaultBandwidthMeter コンストラクタを削除しました。代わりに DefaultBandwidthMeter.Builder を使用してください。
    • DefaultDrmSessionManager コンストラクタを削除しました。代わりに DefaultDrmSessionManager.Builder を使用してください。
    • 非推奨の 2 つの HttpDataSource.InvalidResponseCodeException コンストラクタを削除し、追加のフィールド(cause、responseBody)を受け入れる非推奨でないコンストラクタを使用して、エラー ロギングを強化します。
    • DownloadHelper.forProgressive、DownloadHelper.forHls、DownloadHelper.forDash、DownloadHelper.forSmoothStreaming を削除し、代わりに DownloadHelper.forMediaItem を使用します。
    • 非推奨の DownloadService コンストラクタを削除しました。channelDescriptionResourceId パラメータを指定するオプションを含む、非推奨でないコンストラクタを使用してください。
    • 非推奨の Charsets の文字列定数(ASCII_NAME、UTF8_NAME、ISO88591_NAME、UTF16_NAME、UTF16LE_NAME)を削除しました。代わりに、kotlin.text パッケージ、java.nio.charset.StandardCharsets、com.google.common.base.Charsets の Kotlin Charsets を使用してください。
    • 非推奨の WorkManagerScheduler コンストラクタを削除しました。代わりに、Context パラメータを指定するオプションを含む非推奨でないコンストラクタを使用してください。
    • Format クラスのインスタンス化に使用されていた非推奨のメソッド createVideoSampleFormat、createAudioSampleFormat、createContainerFormat、createSampleFormat を削除しました。代わりに Format.Builder を使用して Format のインスタンスを作成します。
    • 非推奨のメソッド copyWithMaxInputSize、copyWithSubsampleOffsetUs、copyWithLabel、copyWithManifestFormatInfo、copyWithGaplessInfo、copyWithFrameRate、copyWithDrmInitData、copyWithMetadata、copyWithBitrate、copyWithVideoSize を削除し、代わりに Format.buildUpon() とセッター メソッドを使用します。
    • 非推奨の ExoPlayer.retry() を削除しました。代わりに prepare() を使用してください。
    • 非推奨の引数なしの DefaultTrackSelector コンストラクタを削除しました。代わりに DefaultTrackSelector(Context) を使用してください。
    • 非推奨の OfflineLicenseHelper コンストラクタを削除しました。代わりに OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) を使用してください。
    • 非推奨の DownloadManager コンストラクタを削除しました。代わりに Executor を受け取るコンストラクタを使用してください。
    • 非推奨の Cue コンストラクタを削除しました。代わりに Cue.Builder を使用してください。
    • 非推奨の OfflineLicenseHelper コンストラクタを削除しました。代わりに OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) を使用してください。
    • 非推奨となった 4 つの AnalyticsListener メソッドを削除しました。
      • onDecoderEnabled、代わりに onAudioEnabled と onVideoEnabled を使用してください。
      • onDecoderInitialized、代わりに onAudioDecoderInitialized または onVideoDecoderInitialized を使用してください。
      • onDecoderInputFormatChanged、代わりに onAudioInputFormatChanged または onVideoInputFormatChanged を使用してください。
      • onDecoderDisabled、代わりに onAudioDisabled と onVideoDisabled を使用してください。
    • 非推奨の Player.Listener.onSeekProcessed と AnalyticsListener.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.2 がリリースされました。バージョン 1.0.2 に含まれる commit については、こちらをご覧ください。

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

このリリースには、1.0.1 リリース以降の次の変更が含まれています。

  • コアライブラリ:
    • Buffer にフラグ C.BUFFER_FLAG_LAST_SAMPLE が含まれているかどうかを示す Buffer.isLastSample() を追加しました。
    • フレームを含む最後のサンプルが「ストリームの終了」サンプルを読み取らずにデキューされた場合に、最後のフレームがレンダリングされないことがある問題を修正しました。(#11079)。
  • エクストラクタ:
    • RTSP および MP4 エクストラクタですでに使用されている解析ロジックを再利用することで、MPEG-TS ファイル内の H.265 SPS の解析を修正しました(#303)。
  • テキスト:
    • SSA: バイトオーダー マークで始まる UTF-16 ファイルのサポートを追加しました(#319)。
  • セッション:
    • アクションを更新する以前の MediaSessionCompat に接続したときに、MediaController が使用可能なコマンドを更新しない問題を修正しました。
    • API 30 で、システム UI から params.isRecent == true を使用して Callback.onGetLibraryRoot を呼び出したときに、MediaLibraryService が null を返さないバグを修正しました(#355)。
    • MediaSessionService または MediaLibraryService のメモリリークを修正しました(#346)。
    • MediaSession で Timeline と位置の更新を組み合わせると、MediaController が IllegalStateException をスローするバグを修正しました。

バージョン 1.0.1

2023 年 4 月 18 日

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

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

  • コアライブラリ:
    • デフォルトの位置にシークする際、ターゲット ライブ ストリームのオーバーライドをリセットします(#11051)。
    • メディア内の空のサンプル ストリームが原因で再生が停止するバグを修正しました。
  • セッション:
    • 以前の MediaSessionCompat によって公開された複数の同一のキューアイテムが MediaController で例外を引き起こすバグを修正しました(#290)。
    • 以前の MediaControllerCompat.Callback.onSessionEvent への MediaSession.broadcastCustomCommand の転送が欠落していたため、追加しました(#293)。
    • MediaSession.setPlayer を呼び出しても、利用可能なコマンドが更新されないバグを修正しました。
    • MediaController から送信された TrackSelectionOverride インスタンスが、Format.metadata を含むグループを参照している場合に無視される問題を修正しました(#296)。
    • 以前の MediaSessionCompat を介してメタデータにアクセスするために Player.COMMAND_GET_CURRENT_MEDIA_ITEM を使用できるようにする必要がある問題を修正しました。
    • 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.0 がリリースされました。バージョン 1.0.0 に含まれる commit については、こちらをご覧ください。

このリリースは 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 に含まれる commit については、こちらをご覧ください。

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

  • コアライブラリ:
    • API 33 でのネットワーク タイプ検出を修正しました(#10970)。
    • ExoPlayer.isTunnelingEnabled の呼び出し時の NullPointerException を修正しました(#10977)。
  • ダウンロード:
    • 結合する 2 つのセグメントの開始時間の最大差を SegmentDownloader とサブクラスで構成できるようにしました(#248)。
  • オーディオ:
    • Samsung デバイスでギャップレス MP3 再生が機能しない問題を修正しました(#8594)。
    • 音声を無効にした直後に設定された再生速度が、以前の速度変更によってオーバーライドされる可能性があるバグを修正しました(#10882)。
  • 動画:
    • HEVC HDR10 形式を HEVCProfileMain10 ではなく HEVCProfileMain10HDR10 にマッピングします。
    • Chromecast with Google TV と Lenovo M10 FHD Plus で、60 fps の AVC ストリームがサポート対象外としてマークされるデバイスの問題の回避策を追加しました(#10898)。
    • 画面のリフレッシュ レートを大幅に上回るフレームレートでメディアを再生する際のフレーム リリースのパフォーマンスの問題を修正しました。
  • Cast:
    • メディア アイテム間の移行時に一時的な STATE_IDLE が発生する問題を修正しました(#245)。
  • RTSP:
    • 無効な RTSP Describe レスポンス メッセージの解析でスローされた IllegalArgumentException をキャッチします(#10971)。
  • セッション:
    • 通知の再生/一時停止ボタンがプレーヤーの状態に応じて更新されないバグを修正しました(#192)。
  • IMA 拡張機能:
    • 最初の(広告がない場合は唯一の)LOADED イベントが受信されなかったため、広告のない DAI ストリームが開始されないバグを修正しました。

バージョン 1.0.0-rc01

2023 年 2 月 16 日

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

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

  • コアライブラリ:
    • メディアの再生パフォーマンスが低い可能性があるとデコーダが報告する場合でも、レンダラのデコーダの順序付けロジックを調整して MediaCodecSelector の設定を維持します。たとえば、デフォルトのセレクタは、その形式を完全にサポートするソフトウェア デコーダよりも、機能サポートのみ組み込まれたハードウェア デコーダを優先します(#10604)。
    • 新しい ExoPlayer インスタンス用に既存の再生スレッドを設定する ExoPlayer.Builder.setPlaybackLooper を追加しました。
    • ダウンロード マネージャー ヘルパーを消去できるようにしました(#10776)。
    • シークに使用するコマンドも指定するパラメータを BasePlayer.seekTo に追加しました。
    • API 21 以上でドローアブルを読み込む際、テーマを使用します(#220)。
    • 複数のメディア アイテムを 1 つのウィンドウに結合できる ConcatenatingMediaSource2 を追加しました(#247)。
  • エクストラクタ:
    • トラックアトムの解析時にサンプル テーブル(stbl)に必要なサンプルの説明(stsd)が欠落している場合は、NullPointerException ではなく ParserException をスローします。
    • fMP4 で同期フレームを直接シークする際、サンプルを正しくスキップします(#10941)。
  • オーディオ:
    • 直接再生(パススルー)における AudioTrack の最小バッファサイズを計算する際、圧縮音声形式のビットレートを使用します。
  • テキスト:
    • 字幕ファイルにキューが含まれていない場合に無効な(負の)インデックスを Subtitle.getEventTime に渡す TextRenderer を修正しました。
    • SubRip: バイトオーダー マークで始まる UTF-16 ファイルのサポートを追加しました。
  • メタデータ:
    • ID3 v2.4 で許されているように、ID3 フレームから複数の null 区切り値を解析します。
    • コンテンツのタイプまたはメタデータで記述されたフォルダのタイプを示す MediaMetadata.mediaType を追加しました。
    • MediaMetadata.isBrowsable を追加して MediaMetadata.folderType の代わりとしました。このフォルダタイプは次のリリースで非推奨になります。
  • DASH:
    • タイル数など、画像適合セットに対する完全な解析を追加しました(#3752)。
  • UI:
    • 非推奨の PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) を修正しました。これにより、公開設定の変更が登録済みのリスナーに渡されます(#229)。
    • 右から左(RTL)レイアウトを使用する場合の、PlayerView での中央プレーヤー コントロールの順序を修正しました(#227)。
  • セッション:
    • カスタム プレーヤーの Player インターフェースの実装用に、抽象クラス SimpleBasePlayer を追加しました。
    • プラットフォーム セッション トークンを Media3 SessionToken に変換するヘルパー メソッドを追加しました(#171)。
    • onMediaMetadataChanged を使用して、プラットフォーム メディア セッションの更新をトリガーします(#219)。
    • DefaultMediaNotificationProvider の getMediaButtons() の引数としてメディア セッションを追加し、わかりやすくするために不変リストを使用するようにします(#216)。
    • onSetMediaItems コールバック リスナーを追加して、Player に設定する前に、セッションごとに MediaItem リスト、開始インデックス、位置を変更、設定する手段を提供しました(#156)。
    • Bluetooth 以外のメディアボタン イベントに対するダブルタップの検出を回避しました(#233)。
    • 不正なレガシー セッション状態に備えて、QueueTimeline の堅牢性を高めました(#241)。
  • メタデータ:
    • ID3 v2.4 で許されているように、ID3 フレームから複数の null 区切り値を解析します。
    • コンテンツのタイプまたはメタデータで記述されたフォルダのタイプを示す MediaMetadata.mediaType を追加しました。
    • MediaMetadata.isBrowsable を追加して MediaMetadata.folderType の代わりとしました。このフォルダタイプは次のリリースで非推奨になります。
  • Cast 拡張機能:
    • Cast SDK のバージョンを 21.2.0 に引き上げました。
  • IMA 拡張機能:
    • スレッドに関する問題を回避するために、アプリスレッド上の ImaServerSideAdInsertionMediaSource のプレーヤー リスナーを削除しました。
    • プロパティ focusSkipButtonWhenAvailable を ImaServerSideAdInsertionMediaSource.AdsLoader.Builder に追加して、TV デバイスでスキップボタンのフォーカスをリクエストし、デフォルトで true に設定するようにしました。
    • focusSkipButton() メソッドを ImaServerSideAdInsertionMediaSource.AdsLoader に追加して、スキップボタンのフォーカスをプログラムでリクエストできるようにしました。
    • IMA SDK のバージョンを 3.29.0 に引き上げました。
  • デモアプリ:
    • ランタイムのダウンロード通知用に、通知権限をリクエストします(#10884)。

バージョン 1.0.0-beta03

2022 年 11 月 22 日

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

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

  • コアライブラリ:
    • 現在選択されているトラックでトンネリングが有効になっているかどうかを確認する ExoPlayer.isTunnelingEnabled を追加しました(#2518)。
    • 単一の MediaSource のラップを簡素化するための WrappingMediaSource を追加しました(#7279)。
    • 使用可能なメモリの不足が原因で再生が止まる前にバックバッファを破棄します。
    • オフロードが有効な場合に「doSomeWork」ブロックのトレースを閉じます。
    • PlaybackStatsListener での高速シークに関するセッション トラッキングの問題を修正しました(#180)。
    • 単一のアイテムのプレイリストで seekToNext または seekToPrevious を呼び出す場合、欠落していた onMediaItemTransition コールバックを送信します(#10667)。
    • 動画がレンダリングされるサーフェスのサイズを返す Player.getSurfaceSize を追加しました。
    • プレーヤーの解放中にリスナーを削除すると IllegalStateException が発生する可能性があるバグを修正しました(#10758)。
  • ビルド:
    • コンパイル エラーを回避するため、最小 compileSdkVersion を適用しました(#10684)。
    • 別の Gradle ビルドに含まれている場合はブロックを公開しません。
  • トラック選択:
    • ディスプレイがドルビー ビジョンをサポートしていない場合は、他のトラックを優先します(#8944)。
  • ダウンロード:
    • 同じ PriorityTaskManager でダウンロードと再生を同時に行うことで発生する ProgressiveDownloader の無限ループを修正しました(#10570)。
    • ダウンロードの通知を即座に表示します(#183)。
    • スレッドが過度に作成されるのを避けるため、並列ダウンロードの削除を 1 に制限しました(#10458)。
  • 動画:
    • ディスプレイがドルビー ビジョンをサポートしていない場合は、別のデコーダを試します(#9794)。
  • オーディオ:
    • 複数のプレーヤーを同時に解放するときに OutOfMemory エラーを回避するため、AudioTrack インスタンスを解放するのに SingleThreadExecutor を使用します(#10057)。
    • AudioTrack のオフロード状態の AudioOffloadListener.onExperimentalOffloadedPlayback を追加しました(#134)。
    • AudioTrackBufferSizeProvider を公開インターフェースにしました。
    • 優先するオーディオ出力デバイスを設定するために ExoPlayer.setPreferredAudioDevice を追加しました(#135)。
    • androidx.media3.exoplayer.audio.AudioProcessor から androidx.media3.common.audio.AudioProcessor に名前を変更しました。
    • すべての Android バージョンで、8 チャンネルと 12 チャンネルのオーディオをそれぞれ 7.1 と 7.1.4 のチャンネル マスクにマッピングしました(#10701)。
  • メタデータ:
    • メタデータが利用可能になり次第すぐにレンダリングするように MetadataRenderer を設定できるようになりました。MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) でインスタンスを作成して、レンダラがメタデータをすぐに出力するか、プレーヤーの位置と同期して出力するかを指定します。
  • DRM:
    • 空ではないが無効なライセンスの URL を返す、Android 13 の ClearKey 実装のバグを回避します。
    • プレイリストで DRM スキームを切り替えるときの setMediaDrmSession failed: session not opened エラー(例: Widevine から ClearKey)を修正しました。
  • テキスト:
    • CEA-608: フィールド 2 でサービスの切り替えコマンドが正しく処理されるようにしました(#10666)。
  • DASH:
    • マニフェストから EventStream.presentationTimeOffset を解析しました(#10460)。
  • UI:
    • プレーヤーの現在のオーバーライドを TrackSelectionDialogBuilder のプリセットとして使用しました(#10429)。
  • セッション:
    • 非同期解決が必要なコマンドであっても、常に正しい順序で実行されるようにしました(#85)。
    • DefaultMediaNotificationProvider インスタンスを作成するための DefaultMediaNotificationProvider.Builder を追加しましたビルダーは、プロバイダが使用する通知 ID、通知チャンネル ID、通知チャンネル名を設定できます。また、メソッド DefaultMediaNotificationProvider.setSmallIcon(int) を追加して、通知の小さなアイコンを設定できます(#104)。
    • MediaController.release() より前に送信されたコマンドがドロップされないようにしました(#99)。
    • SimpleBitmapLoader は、file:// URI からビットマップを読み込めます(#108)。
    • ある期間に MediaController が広告をシークできないようにするアサーションを修正しました(#122)。
    • 再生が終了するとMediaSessionService がフォアグラウンドから停止され、最後に再生されたメディア アイテムを再生するための通知が表示されます(#112)。
    • 一時停止のペンディング インテントではフォアグラウンド サービスは開始されません(#167)。
    • API 26 と API 27 で DefaultNotificationProvider が作成した、通知に関連付けられた「バッジ」は手動で非表示にします(API 28 以降ではバッジは自動的に非表示になります)(131)。
    • 従来の MediaSession から Media3 MediaController への 2 番目のバインダーの接続で IllegalStateExceptions が発生するバグを修正しました(#49)。
  • RTSP:
    • H263 の断片化されたパケットの処理を追加しました(#119)。
    • MP4A-LATM のサポートを追加しました(#162)。
  • IMA:
    • IMA SDK の広告の読み込みが進まない場合に、広告情報を読み込むためのタイムアウトを追加しました(#10510)。
    • コンテンツの最後に移動するときにミッドロール広告をスキップできないようにしました(#10685)。
    • IMA DAI などのサーバーサイドで挿入される広告を含むライブ配信のウィンドウ表示時間が正確に計算されます(#10764)。
  • FFmpeg 拡張機能:
    • FFmpeg ライブラリを NDK 23.1.7779620 以降にリンクするのに必要な新たなフラグを追加しました(#9933)。
  • AV1 拡張機能:
    • 最新の Android Studio リリースとの非互換性の問題を避けるために CMake バージョンを更新しました(#9933)。
  • Cast 拡張機能:
    • MediaController を使用して再生を制御するときに CastPlayer を識別できるように getDeviceInfo() を実装しました(#142)。
  • Transformer:
    • 出力サンプルの生成が遅すぎる場合に検出できるよう、マルチプレクサのウォッチドッグ タイマーを追加しました。
  • サポートが終了したシンボルを削除しました。
    • Transformer.Builder.setOutputMimeType(String) を削除しました。この機能は削除されました。デフォルトのマルチプレクサが使用されている場合、MIME タイプは常に MP4 になります。

バージョン 1.0.0-beta02

2022 年 7 月 21 日

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

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

  • コアライブラリ:
    • ExoPlayer.setShuffleOrder で ShuffleOrder を変更すると、reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED で Player.Listener#onTimelineChanged が呼び出されるようにしました(#9889)。
    • プログレッシブ メディアの場合、選択したトラックのみがバッファリングされた位置に含まれるようになりました(#10361)。
    • すべての ExoPlayer ログ出力に対してカスタムの logger を許可しました(#9752)。
    • 特定のケースで機能していなかった、DefaultMediaSourceFactory の setDataSourceFactory の実装を修正しました(#116)。
  • エクストラクタ:
    • H265 短期参照画像セットの解析を修正しました(#10316)。
    • esds ボックスからのビットレートの解析を修正しました(#10381)。
  • DASH:
    • マニフェストからの ClearKey ライセンス URL を解析しました(#10246)。
  • UI:
    • TalkBack が再生コントロール メニューの現在アクティブな速度オプションを通知するようにしました(#10298)。
  • RTSP:
    • VP8 の断片化されたパケットの処理を追加しました(#110)。
  • Leanback 拡張機能:
    • LeanbackAdapter の playWhenReady の変更をリッスンするようになりました(10420)。
  • Cast:
    • CastTimeline で Window.mediaItem としてプレイリスト メソッドに渡された 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 に含まれる commit については、こちらをご覧ください。

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

  • コアライブラリ:
    • MediaMetricsManager による Android プラットフォーム診断のサポートを有効にしました。ExoPlayer では再生イベントとパフォーマンス データがプラットフォームに転送されるため、デバイスのシステム パフォーマンスとデバッグ情報の提供に役立てることができます。このデータは、デバイスのユーザーが使用状況と診断情報の共有を有効にしている場合に、Google によって収集されることもあります。アプリは、ExoPlayer.Builder.setUsePlatformDiagnostics(false) で ExoPlayer のプラットフォーム診断への貢献を無効にできます。
    • 字幕をサイドローディングしたり、再生中に選択した字幕を変更したりする場合など、MergingMediaSource の使用時にトラックが頻繁にリセットされるバグを修正しました(#10248)。
    • API 29 と 30 で 5G-NSA ネットワーク タイプの検出を停止しました。これらの再生は 4G ネットワークを前提としています。
    • null を MediaSource.Factory.setDrmSessionManagerProvider、MediaSource.Factory.setLoadErrorHandlingPolicy に渡すことを禁止しました。DefaultDrmSessionManagerProvider と DefaultLoadErrorHandlingPolicy のインスタンスは、必要に応じて明示的に渡すことができます。
    • 正確な LocalConfiguration が不明の場合に、メディアの再生に必要なメタデータを表す MediaItem.RequestMetadata を追加しました。また、MediaMetadata.mediaUrl は RequestMetadata に含まれるようになったため削除しました。
    • プレーヤーが 1 つの項目を設定できるように Player.Command.COMMAND_SET_MEDIA_ITEM を追加しました。
  • トラック選択:
    • TrackSelectionOverrides クラスを TrackSelectionParameters にフラット化し、TrackSelectionOverride をトップレベル クラスに昇格しました。
    • TracksInfo の名前を Tracks に、TracksInfo.TrackGroupInfo の名前を Tracks.Group に変更しました。Player.getCurrentTracksInfo と Player.Listener.onTracksInfoChanged の名前も Player.getCurrentTracks と Player.Listener.onTracksChanged に変更されました。これには、Player.Listener.onTracksChanged メソッド名の「サポート終了解除」も含まれますが、パラメータのタイプが異なります。
    • サポートが終了した DefaultTrackSelector.ParametersBuilder ではなく DefaultTrackSelector.Parameters.Builder を返すように、DefaultTrackSelector.buildUponParameters と DefaultTrackSelector.Parameters.buildUpon を変更しました。
    • デフォルトで有効化される DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities を追加しました。有効にすると、DefaultTrackSelector は、チャンネル数がデバイスの出力機能を超えないオーディオ トラックを優先します。ハンドヘルド デバイスでは、マルチチャンネル フォーマットを空間化できる(Android 12L 以降)場合か、ドルビー サラウンド音声形式である場合を除き、DefaultTrackSelector はマルチチャンネル オーディオ フォーマットよりもステレオ / モノラルを優先します。さらに、オーディオ空間化をサポートしているデバイスでは、DefaultTrackSelector が Spatializer プロパティの変更を監視し、これに応じて新しいトラック選択をトリガーします。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 == 3(OutlineColour がキューの背景を設定する)の場合の 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 インターフェースと連携するように TrackSelectionView と TrackSelectionDialogBuilder を書き換えました。これにより、ビューを他の Player 実装で使用できるようになり、UI モジュールから ExoPlayer モジュールへの依存関係が削除されます。これは互換性を破る変更です。
    • PlayerView トラック セレクタに強制テキスト トラックを表示せずに、「なし」が選択されている場合は、適切な強制テキスト トラックが選択されるようにしました(#9432)。
  • DASH:
    • DTS AudioChannelConfiguration 要素からチャンネル数を解析しました。これにより、DTS ストリームの音声パススルーが再度有効になります(#10159)。
    • null を DashMediaSource.Factory.setCompositeSequenceableLoaderFactory に渡すことを禁止しました。DefaultCompositeSequenceableLoaderFactory のインスタンスは、必要に応じて明示的に渡すことができます。
  • HLS:
    • プレイリストの CODECS 属性にオーディオ コーデックが含まれていない場合、チャンクフルの準備にフォールバックしました(#10065)。
    • null を HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory、HlsMediaSource.Factory.setPlaylistParserFactory、HlsMediaSource.Factory.setPlaylistTrackerFactory に渡すことを禁止しました。DefaultCompositeSequenceableLoaderFactory や DefaultHlsPlaylistParserFactory のインスタンス、または 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.setMediaUri と MediaSession.Callback.onSetMediaUri を削除しました。MediaController.setMediaItem と MediaSession.Callback.onAddMediaItems を使用して同じ機能を実現できます。
    • メディアを再生するための従来の MediaController 呼び出しを onSetMediaUri ではなく MediaSession.Callback.onAddMediaItems に転送しました。
    • 通知のカスタマイズを行うための MediaNotification.Provider と DefaultMediaNotificationProvider を追加しました。
    • アートワークの画像をダウンロードするための BitmapLoader と SimpleBitmapLoader を追加しました。
    • 以前のセッションとの下位互換性を維持するための 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.getCurrentTrackGroups と Player.getCurrentTrackSelections を削除しました。代わりに Player.getCurrentTracks を使用してください。ExoPlayer.getCurrentTrackGroups と ExoPlayer.getCurrentTrackSelections を引き続き使用することもできますが、これらのメソッドは非推奨のままです。
    • DownloadHelper、DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT、DEFAULT_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 に含まれる commit については、こちらをご覧ください。

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

  • オーディオ:
    • HLS でのドルビー アトモス(E-AC3-JOC)の音声機能に関するエラーを修正しました。
  • エクストラクタ:
    • FMP4: v0 と v1 の両方の emsg アトムスを含むストリームに対して、emsg サンプル メタデータが誤った順序で出力される問題を修正しました(#9996)。
  • テキスト:
    • SubtitleConfiguration フィールドの優先順位を設定し、Factory 値が設定されていない場合はその値に戻すために、SingleSampleMediaSource.Factory.setTrackId と MediaItem.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 ヘッダー フィールド name と genre をそれぞれ MediaMetadata.station と MediaMetadata.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 を変更しました。
    • AudioTrackBufferSizeProvider を DefaultAudioSink に挿入することで、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 を使用している場合は、代わりに 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 名前空間を宣言していないマニフェストのベース 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 拡張機能:
    • CastPlayer が onIsPlayingChanged を正しく呼び出せないバグを修正しました(#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#setDrmSessionManager、MediaSourceFactory#setDrmHttpDataSourceFactory、MediaSourceFactory#setDrmUserAgent を削除しました。代わりに MediaSourceFactory#setDrmSessionManagerProvider を使用してください。
    • MediaSourceFactory#setStreamKeys を削除しました。代わりに MediaItem.Builder#setStreamKeys を使用してください。
    • MediaSourceFactory#createMediaSource(Uri) を削除しました。代わりに MediaSourceFactory#createMediaSource(MediaItem) を使用してください。
    • DashMediaSource、HlsMediaSource、SsMediaSource から setTag を削除しました。代わりに MediaItem.Builder#setTag を使用してください。
    • DashMediaSource#setLivePresentationDelayMs(long, boolean) を削除しました。MediaItem.Builder#setLiveConfiguration と MediaItem.LiveConfiguration.Builder#setTargetOffsetMs を使用してマニフェストをオーバーライドするか、DashMediaSource#setFallbackTargetLiveOffsetMs を使用してフォールバック値を提供してください。
    • (Simple)ExoPlayer.setThrowsWhenUsingWrongThread を削除しました。スレッドの強制適用をオプトアウトすることはできなくなりました。
    • ActionFile と ActionFileUpgradeUtil を削除しました。ExoPlayer 2.16.1 以前で ActionFileUpgradeUtil を使用して、以前のアクション ファイルを DefaultDownloadIndex に統合してください。
    • ProgressiveMediaSource#setExtractorsFactory を削除しました。代わりに ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory) コンストラクタを使用してください。
    • ProgressiveMediaSource.Factory#setTag と ProgressiveMediaSource.Factory#setCustomCacheKey を削除しました。代わりに MediaItem.Builder#setTag と MediaItem.Builder#setCustomCacheKey を使用してください。
    • DefaultRenderersFactory(Context, @ExtensionRendererMode int) コンストラクタと DefaultRenderersFactory(Context, @ExtensionRendererMode int, long) コンストラクタを削除しました。代わりに DefaultRenderersFactory(Context) コンストラクタ、DefaultRenderersFactory#setExtensionRendererMode、DefaultRenderersFactory#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 に含まれる commit については、こちらをご覧ください。

新機能

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

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

詳細については、Media3 GitHub プロジェクトをご覧ください。

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