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を JSpecifyorg.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: 多くの
MediaCodecMP3 デコーダと互換性がないため、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 秒のタイムスタンプ ジャンプを修正しました。
- Mp4Extractor: MP4 の Opus の
- 検査員:
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を実装します。
- StudioSound GMSCore モジュールを使用して、音源分離用の
- マルチプレクサ:
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)。
- RTSP クライアントが閉じられた後に遅延ネットワーク レスポンスを処理するときに発生する
- デコーダ拡張機能(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 に引き上げます。
- Gradle の
バージョン 1.11.0
1.11.1
2026 年 9 月 10 日
- ExoPlayer:
- プログレッシブ メディアの HAGC メタデータを有効または無効にするフラグを
MediaSource.FactoryからExtractorsFactoryに移動しました。以前のsetExperimentalEnableHagcPlaybackメソッドは削除され、ExtractorsFactory.setParseHagcMetadataに置き換えられました。これにより、Matroska/WebM コンテナで無効化が機能しない問題も解決されます。 - 非遷移のセカンダリ レンダラーをプリウォーミングする際に発生する再生の停止を修正しました。
- シークがリセットされ、両方のレンダラが無効になったときに、
Surfaceがプライマリ レンダラに返されるべきであるという、プリウォーミングの問題を修正しました。 - ライブ タイムラインの更新により、現在再生中のサーバーサイドで挿入された広告をデフォルトの位置が超えた場合の
ArrayIndexOutOfBoundsExceptionを修正しました(#3348)。 ScrubbingModeParameters.allowSkippingMediaCodecFlushを有効にしてシークすると、古い動画フレームが短時間表示されることがある、スクラブモードの問題を修正しました。
- プログレッシブ メディアの HAGC メタデータを有効または無効にするフラグを
- エクストラクタ:
- Matroska: クラスタの後に配置されたトラックがシーク可能なタイムラインにならない問題を修正しました(#3377)。
- オーディオ:
SilenceSkippingAudioProcessorのバッファサイズ計算を修正し、最小無音時間がフレームサイズによって誤ってスケールダウンされないようにしました(#3271)。PcmAudioUtilでの 8 ビット PCM の処理を修正し、Android で定義されているようにサンプルを符号なしとして扱うようにしました(#3271)。- ハードウェア バッファサイズが制限されているため、プレロールまたはギャップレス移行中に再生が停止する可能性があるオフロードの問題を修正しました。
- 再生スレッドが有効でなくなったときにリリース数が減少しない
DefaultAudioSinkのバグを修正しました(#3338)。
- セッション:
- HLS 拡張機能:
- DASH 拡張機能:
presentationTimeOffsetを含む画像トラックのサンプル タイムスタンプの計算が正しくない問題を修正しました(#3334)。
- デコーダ拡張機能(FFmpeg、VP9、AV1 など):
- Opus: 複数の
OpusDecoderインスタンスが同時に初期化されるときに発生するメモリ破損を修正しました。 - MPEG-H:
MpeghUiManagerにコマンドを送信する際のメモリリーク、ASCII 以外の文字の切り捨て、メモリ不足状態でのネイティブ コードでのクラッシュの可能性を修正しました(#3365)。
- Opus: 複数の
バージョン 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)。 - 「ストリームの終了」までシークするとスクラブが停止する可能性がある、スクラブモードの潜在的な問題を修正しました。
- ExoPlayer で
- 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)。
- MP4、MP3、FLAC:
- オーディオ:
- 準備完了状態から準備未完了状態に移行する際に、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 ウェイクアップがトリガーされる可能性がありました。
- テキスト:
- メタデータ:
MediaMetadata.discSubtitleフィールドを追加し、ID3v2.4TSSTと VorbisDISCSUBTITLEデータから解析します。- ID3
TPOSフレームからディスク番号とディスク数を解析します。
- 効果:
- シーク時にプレーヤーがフリーズしないように、フラッシュ時に
FinalShaderProgramWrapperの再描画状態をクリアします。
- シーク時にプレーヤーがフリーズしないように、フラッシュ時に
- マルチプレクサ:
- 新しい
addTrackReferenceAPI を介して、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オブジェクトに元のTimelineUID が含まれていない問題を修正しました。セッションは、状態の更新中にこれらの 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と ComposePresentationStateのシャッター抑制バグを修正しました。このバグは、期間 UID ルックアップをサポートしていないタイムラインでクラッシュを引き起こしていました(#3264)。
- 再生中に
- ダウンロード:
- ダウンロード用に取得されたメディア プレイリストの HLS 変数を解決するようにしました(#3258)。
- Ktor 拡張機能:
- 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 拡張機能:
- 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プロパティが使用されなくなりました。
- Media3 にローカルで依存して Gradle 複合ビルド(
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:
- トラック選択:
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 拡張機能:
- 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)トラックのサポートを追加しました。
- MP4:
- 検査員:
- 互換性を破る変更:
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 の新しいフィールドとロジックによってサポートされています。
- 圧縮オフロード モードでギャップレス オーディオのプレイリストを再生すると、再生が停止するバグを修正しました。
- IAMF デコーダ拡張機能の基盤となるデコード ライブラリを
- テキスト:
- VobSub: 常にデフォルトの 5 秒にするのではなく、
STARTとSTOPの SPU 制御コマンドを使用してキューの長さを導出します(#2935)。
- VobSub: 常にデフォルトの 5 秒にするのではなく、
- メタデータ:
- メタデータ レンダラのデフォルト数を 4 に増やし、HLS バリアントとレンディションによって公開される可能性のあるすべてのメタデータ トラックをカバーするようにしました(#3043)。
- 効果:
LottieOverlayを新しい:media3-effect-lottieモジュールに移動しました(androidx.media3.effect.LottieOverlayからandroidx.media3.effect.lottie.LottieOverlayへの名前変更も行いました)。
- エフェクト Lottie:
- 動画フレームに Lottie エフェクトを適用する機能を提供する新しい
:media3-effect-lottieモジュールを導入しました。
- 動画フレームに Lottie エフェクトを適用する機能を提供する新しい
- IMA 拡張機能:
- 最新の Ad media info API にアクセスするには、IMA SDK のバージョンを 3.39.0 に更新してください。
- 広告の MIME タイプが IMA LOADED イベントで提供された MIME タイプと一致しないバグを修正しました。この修正により、IMA から提供される広告メディア情報を使用して広告の MIME タイプがマッピングされるようになりました。
setEnableCustomTabsをImaAdsLoaderとImaServerSideAdInsertionMediaSourceに追加し、広告のクリックスルー URL をカスタムタブを使用して起動するかどうかをユーザーが制御できるようにしました。ImaAdTagUriBuilderを追加します。これは、adTagUriを構築する別の方法を提供するクラスです。これにはsetPreferredLinearOrientationAPI が含まれています。これはアルファ版テスト中の API で、リニア広告の優先方向を設定できます。アルファ版テストグループへの参加をご希望の場合は、アカウント パートナーにお問い合わせください。
- セッション:
MediaMetadata.artworkDataの大きな配列がアプリをクラッシュさせるバグを修正しました。ActionFactoryインターフェースの@Player.Command引数に int 型を使用します(#2933)。MediaSessionServiceとMediaLibraryServiceをLifecycleServiceにして、ライフサイクル対応オペレーションをサービスのライフサイクルにアタッチできるようにしました(#187)。- ローカル再生での
MediaControllerとMediaBrowserからのデバイス音量変更コマンドのサポートを停止します。アプリはローカル デバイスの音量を変更すべきではありません。必要に応じて、この目的のためにAudioManagerAPI を使用できます。 - サービスをフォアグラウンド サービスとして開始した古い
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にPlaybackSpeedToggleButtonComposable を追加します。 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 拡張機能:
- RTSP 拡張機能:
- H.264 および H.265 ストリーミングの回帰を修正しました。この回帰により、複数の RTP パケットにまたがる同じアクセス ユニットのサンプルが誤って解析されていました。これにより、動画に視覚的なアーティファクトや破損が生じていました(#3121)。
- デコーダ拡張機能(FFmpeg、VP9、AV1 など):
- MPEG-H デコーダ拡張機能に MPEG-H UI マネージャーのサポートを追加しました(#3066)。
- Cast 拡張機能:
- Cast 再生のトラック選択を実装できるようにする
RemoteCastPlayer.Builder#setTrackSelectorメソッドを追加しました。
- Cast 再生のトラック選択を実装できるようにする
- サポートが終了したシンボルを削除しました。
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)。
- 再生開始時に A/V 同期をスムーズにするため、音声が開始した後にのみ動的スケジューリングで
- エクストラクタ:
- MP3: LAME ReplayGain データを解析します (#2840)。
- オーディオ:
- Automotive のシナリオで AC-4 デコーダのサポートを評価する際に、
AC4Profile22などの以前のプロファイルのサポートを正しく削除するようにしました(#2609)。
- Automotive のシナリオで AC-4 デコーダのサポートを評価する際に、
- 動画:
- 再生が途切れないように、コンテンツのフレームレートが変更されたときに API 30 未満のデバイスで動画コーデックを破棄します(#2941)。
- テキスト:
- VobSub: 1 つの制御シーケンスのみを含む SPU、または複数の制御シーケンスに分割された重要な情報を含む SPU を正しく処理することで、一部の字幕が表示されない問題を修正しました(#2935)。
- IMA 拡張機能:
- バグの修正: 広告の MIME タイプが IMA LOADED イベントで提供された MIME タイプと一致しない問題を修正しました。この修正により、連続配信広告のインデックスと広告の掲載順位を使用して広告の MIME タイプがマッピングされるようになりました。
getAdsManager()とAdEvent.getAd()の結果にアクセスする前に null チェックを追加しました。
- セッション:
- プラットフォーム セッションに接続された
MediaControllerを停止すると、広告の再生中に停止が発生した場合にアプリがクラッシュするバグを修正しました(#2948)。 - さまざまなクラスの
extrasBundleインスタンスに検証を追加し、他のプロセスから送信される不正な形式のBundleインスタンスから保護します。 COMMAND_SEEK_NEXTまたはCOMMAND_SEEK_BACKのコマンドがないと、システム メディア通知にギャップが生じる問題を修正しました(#2976)。- 通知アイコンのビットマップ スケーリングをメインスレッドから移動しました(#2829)。
- 従来の
MediaMetadataCompatとMediaDescriptionCompatから変換する際に、作成者、ライター、作曲者がフォールバックとして使用されないバグを修正しました(#3018)。
- プラットフォーム セッションに接続された
- ダウンロード:
PriorityTooLowExceptionがSegmentDownloaderによって処理されるときに発生する可能性がある無限ループを修正しました(DASH、HLS、SmoothStreaming の場合)。protectedexecuteメソッドを使用してSegmentDownloaderをカスタム オーバーライドする場合は、タスクをSupplierでラップして提供し、再作成できるようにする必要があります(#2931)。
- HLS 拡張機能:
- 未加工のアセットリストの JSON ドキュメントを
Listener.onAssetListLoadCompletedコールバックに渡します。これは、不安定な API における互換性を破る変更です。このコールバックを実装するアプリは、JSONObject型の引数を追加する必要があります(#2950)。
- 未加工のアセットリストの JSON ドキュメントを
- 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)。
- 他の AndroidX ライブラリに合わせて
- 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 拡張機能:
- RTSP 拡張機能:
- H264 と H265 の断片化された NAL ユニットを処理する際に、RTP パケットが欠落するエラーを処理しました(#2613)。
- デコーダ拡張機能(FFmpeg、VP9、AV1 など):
- AV1 拡張機能: AV1 ソフトウェア デコーダは、以前の
libgav1実装に代わり、高性能なdav1dライブラリを使用するようになり、デコード速度が向上しました。 - FFmpeg 拡張機能:
STREAMINFOブロックが正しく解析され、デコーダに渡されるようにすることで、一部の FLAC ファイルが再生されない問題を修正しました(#2887)。
- AV1 拡張機能: AV1 ソフトウェア デコーダは、以前の
- 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フラグを含めるように、試験運用版のExoPlayerAPI を追加しました。このフラグは、デコード専用バッファをスキップするようデコーダに指示し、シークを高速化します。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に取得するサポートを追加し、インスタンス ベースのAutoCloseableAPI に移行しました。新しい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 拡張機能:
- RTSP 拡張機能:
- デコーダ拡張機能(FFmpeg、VP9、AV1 など):
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeがオーディオ デコーダ拡張機能に影響しないバグを修正しました(#2258)。
- Cast 拡張機能:
- テスト ユーティリティ:
- 指定した位置に到達するまでプレーヤーを進めるために、
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)。
- MP4:
- オーディオ:
- 短いコンテンツの再生リストを再生するときに位置が停止する可能性があるオフロードの問題を修正しました(#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)。
- HLS メディアの
- 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のバグを修正しました。nullMediaMetadataを指定した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)。 - シークを高速化するために、試験運用版の
ExoPlayerAV1 サンプル依存関係解析を追加しました。新しいDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI で有効にします。 - 依存関係のない遅延
MediaCodecVideoRendererデコーダ入力バッファをドロップする試験運用版ExoPlayerAPI を追加しました。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)。
- API 27 未満のデバイスで ClearKey コンテンツを再生する際の
- 効果:
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)。
- 再生が一時停止、停止、または失敗した場合に、フォアグラウンド サービスの状態をさらに 10 分間維持します。これにより、ユーザーはさまざまなデバイスでフォアグラウンド サービス制限を受けることなく、このタイムアウト内に再生を再開できます。
- 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)。
- MP3:
- 動画:
onOutputFormatChangedの処理中に指定されたMediaCodecAdapterのピクセル アスペクト比の値の使用をロールバックしました(#1371)。
- テキスト:
ReplacingCuesResolver.discardCuesBeforeTimeUsで、timeUsでアクティブなキュー(以前に開始されたがまだ終了していない)が誤って破棄されるバグを修正しました(#1939)。
- メタデータ:
- Vorbis コメントからディスク/トラック番号とジャンルを抽出して
MediaMetadataに格納します(#1958)。
- Vorbis コメントからディスク/トラック番号とジャンルを抽出して
バージョン 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.listensuspend 拡張関数を追加しました。これにより、コルーチンをスピンして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コールバックを介して出力され、解析エラーは無視されます(これは以前からの動作です)。
- 新しい字幕処理(抽出中)では、関連する解析エラー(無効な字幕データなど)と読み込みエラー(HTTP 404 など)が
- マルチピリオド 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(ヘッダーあり)と「サーバーが見つかりません」(ヘッダーなし)を区別できます。
- API レベル 34 ではなくバージョン S 拡張機能 7 から使用できるように
- オーディオ:
- メディアに CTA-2075 ラウドネス メタデータが存在する場合は、コーデックで自動的に構成します。
- シーク時に音量がスムーズに下がるようにします。
- シーク中に発生することがあるポップ音を修正しました。
- Sonic のタイム ストレッチ/ピッチシフト アルゴリズムの切り捨てエラーの累積を修正しました。
- 出力フレームがドロップする原因となっていた
SpeedChangingAudioProcessorのバグを修正しました。
- 動画:
MediaCodecVideoRendererは、レンダリングされず、他のサンプルで参照として使用されないサンプルのデコードを回避します。- API 35 以降では、
MediaCodecAdapterがconfigureでnullSurfaceを受け取り、コーデックがサポートしている場合(MediaCodecInfo.detachedSurfaceSupported)、以前に設定されたSurfaceを削除するために新しいメソッドdetachOutputSurfaceを呼び出すようになりました。 onOutputFormatChangedの処理時にMediaCodecAdapterで指定されたピクセル アスペクト比の値を使用します(#1371)。- Galaxy Tab S7 FE で 60 fps のセキュアな H264 ストリームがサポート対象外としてマークされるデバイスの問題の回避策を追加しました(#1619)。
- ストリーム終了シグナルを返さずに最後のサンプルの後に停止するコーデックの回避策を追加しました。
- テキスト:
- カスタム
VoiceSpanを追加し、WebVTT 音声スパンに入力します(#1632)。 - HLS の WebVTT で、非常に大きな字幕タイムスタンプ(マイクロ秒として表され、
90,000MPEG タイムベースを乗算すると 64 ビットのlongがオーバーフローする)が表示されるようにしました(#1763)。 - ドルビー ビジョン コンテンツで CEA-608 字幕をサポート(#1820)。
- CEA-608 字幕が有効になっている場合に、DASH マルチピリオド ストリームで再生が停止する問題を修正しました(#1863)。
- カスタム
- メタデータ:
- icy または vnd.dvb.ait コンテンツを含むトラックに
C.TRACK_TYPE_METADATAタイプを割り当てます。
- icy または vnd.dvb.ait コンテンツを含むトラックに
- 画像:
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)。- アプリ定義のテキスト トラック選択設定がある場合に、テキスト選択の [なし] が機能しないバグを修正しました。
- XML ベースの共有遷移に関する問題により、
- DASH 拡張機能:
- セグメントの途中で開始するピリオドのサポートを追加しました(#1440)。
- スムーズなストリーミング拡張機能:
- テキスト トラックを含む SmoothStreaming ストリームを再生する際の
Bad magic number for Bundleエラーを修正しました(#1779)。
- テキスト トラックを含む SmoothStreaming ストリームを再生する際の
- RTSP 拡張機能:
- デコーダ拡張機能(FFmpeg、VP9、AV1 など):
- IAMF デコーダ モジュールを追加します。このモジュールは、libiamf ネイティブ ライブラリを使用して音声を合成し、IAMF トラックを含む MP4 ファイルの再生をサポートします。
- 再生は、ステレオ レイアウトと、空間化を伴う 5.1(オプションのヘッド トラッキングを有効にすることも可能)で有効になっていますが、バイノーラル再生は現在サポートされていません。
- Android 15 のデコーダ拡張機能に 16 KB ページのサポートを追加しました(#1685)。
- IAMF デコーダ モジュールを追加します。このモジュールは、libiamf ネイティブ ライブラリを使用して音声を合成し、IAMF トラックを含む MP4 ファイルの再生をサポートします。
- 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:
- エクストラクタ:
- MP3:
Infoフレームの長さフィールドに基づいて、末尾の MP3 以外のデータを正しく無視することで、Searched too many bytesエラーを修正しました(#1480)。
- MP3:
- テキスト:
- TTML: パーセンテージ
tts:fontSize値の処理を修正し、パーセンテージtts:fontSize値を持つ親ノードから正しく継承されるようにしました。 - リクエストされた出力開始時間が
Subtitleの最終イベント時間以上であるケースを誤って処理していたため、LegacySubtitleUtilのIndexOutOfBoundsExceptionを修正しました(#1516)。
- TTML: パーセンテージ
- DRM:
- L1 Widevine コンテンツを再生する API 31 以降のデバイスで
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEエラーを修正しました。このエラーは、フレームワークのMediaDrm.requiresSecureDecoderメソッドの実装が不完全なために発生します(#1603)。
- L1 Widevine コンテンツを再生する API 31 以降のデバイスで
- 効果:
release()メソッドをGlObjectsProviderに追加します。
- セッション:
- 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インスタンスに関するアプリ提供のカスタム情報を保存します。
- 想定される no-op シーク呼び出しを無視するのではなく、保護された
- 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)。
- メタデータ:
- 画像:
- 正方形でない 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:
- ダウンロード:
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)。
- 不連続性を待機している保留中の EMSG サンプルが、誤ったオフセットで
- DASH 拡張機能:
- 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:
- Transformer:
- API 30 より前のバージョンで
MediaMuxerが負の表示タイムスタンプをサポートしていないためにスローされる例外の回避策を追加しました。
- API 30 より前のバージョンで
- トラック選択:
DefaultTrackSelector: フレームレートが低い、または設定されていない動画トラックよりも、「妥当な」フレームレート(10 fps 以上)の動画トラックを優先します。これにより、プレーヤーは、2 つの HEVC トラック(1 つは高解像度だがフレーム数が非常に少ない)を含むモーション フォトから抽出された MP4 で「実際の」動画トラックを選択するようになります(#1051)。
- エクストラクタ:
- オーディオ:
- オフロード モードでオーディオ トラックの初期化に失敗した場合に、オフロードを無効にしてレンダラーを復元できるようにします。
- 動画:
- テキスト:
- WebVTT: 連続するキューが
WebvttParser.parseから不要なCuesWithTimingインスタンスを作成しないようにしました(#1177)。
- WebVTT: 連続するキューが
- DRM:
- 一部の Android 14 デバイスで、
ResourceBusyExceptionまたはNotProvisionedExceptionの代わりにMediaDrmフレームワークによってスローされる可能性があるNoSuchMethodErrorを回避しました(#1145)。
- 一部の Android 14 デバイスで、
- 効果:
- 色空間を変換することで、PQ から SDR へのトーン マッピングを改善しました。
- セッション:
- 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)。
- MP4 エクストラクタに AV1C 解析を追加して、
- オーディオ:
- 動画:
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に提供されます。
- DASH サムネイルのサポートを追加しました。グリッド画像は切り抜かれ、個々のサムネイルがプレゼンテーション時間に近い
- DRM:
- DRM コンテンツの「クリアリード」の暗号化されていないサンプルを、デフォルトですぐに再生します。これは、後で暗号化されるサンプルのキーがまだ準備されていない場合でも同様です。再生位置が暗号化されたサンプルに到達したときに鍵の準備ができていないと、再生が途中で停止する可能性があります(ただし、以前は、この時点では再生がまったく開始されていませんでした)。この動作は、
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyまたはDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeysで無効にできます。- IMA 拡張機能:
- 適切なファイル拡張子がない DASH 広告と HLS 広告を再生できない問題を修正しました。
- DRM コンテンツの「クリアリード」の暗号化されていないサンプルを、デフォルトですぐに再生します。これは、後で暗号化されるサンプルのキーがまだ準備されていない場合でも同様です。再生位置が暗号化されたサンプルに到達したときに鍵の準備ができていないと、再生が途中で停止する可能性があります(ただし、以前は、この時点では再生がまったく開始されていませんでした)。この動作は、
- セッション:
- 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:
- 高い動作レートを設定したために、エンコーダが構成時にスローする問題を回避しました。
- エクストラクタ:
- オーディオ:
- 複数回呼び出された場合の
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を修正しました。このエラーは、クリア コンテンツの再生にセキュア デコーダを誤って使用したことが原因でした。
- 誤った ClearKey
- セッション:
- カスタムキーと値を
MediaMetadataCompatからMediaMetadata.extrasに、MediaMetadata.extrasからMediaMetadataCompatに配置しました(#756、#802)。 - 以前のコントローラの
notifyChildrenChangedのブロードキャストを修正しました(#644)。 - 通知の無効な
setWhenタイマーに負の時間を設定すると、一部のデバイスでクラッシュが発生するバグを修正しました(#903)。 - 最初の通知更新がリクエストされたときに、メディア通知コントローラの接続が完了していない場合の
IllegalStateExceptionを修正しました(#917)。
- カスタムキーと値を
- UI:
- DASH 拡張機能:
- DASH マニフェストで「f800」をドルビーのチャンネル数 5 として解析します(#688)。
- デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
- 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)。
- MP4 と Matroska で 24/32 ビットのビッグ エンディアン PCM のサポートを追加し、MP4 で
- 動画:
MediaCodecVideoRendererがカスタムVideoFrameProcessor.Factoryを使用できるようにします。- 音声ストリームが負のタイムスタンプで始まる場合に最初のフレームをレンダリングできないバグを修正しました(#291)。
- テキスト:
ExoplayerCuesDecoderを削除しました。sampleMimeType = application/x-media3-cuesを含むテキスト トラックは、SubtitleDecoderインスタンスを必要とせずに、TextRendererによって直接処理されるようになりました。
- メタデータ:
- 実装は null を返す必要があるため、「デコードのみ」のサンプルに対して
MetadataDecoder.decodeが呼び出されることはなくなります。
- 実装は null を返す必要があるため、「デコードのみ」のサンプルに対して
- 効果:
- タイムスタンプによる
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 分)内に適切なデバイスが接続されると、リスナーは自動的に再生を再開します。
- Wear OS デバイス用の
- ダウンロード:
- Android 14 との互換性を確保するため、
DownloadServiceに「データ同期」フォアグラウンド サービス タイプを宣言します。このサービスを使用する場合、アプリはマニフェストにdataSyncをforegroundServiceTypeとして追加し、FOREGROUND_SERVICE_DATA_SYNC権限を追加する必要もあります(#11239)。
- Android 14 との互換性を確保するため、
- HLS 拡張機能:
- 前回の読み込み完了時刻ではなく、前回の読み込み開始時刻から計算された間隔で HLS ライブ プレイリストを更新します(#663)。
- DASH 拡張機能:
- セグメント テンプレート URL で同じ DASH 識別子を複数使用できるようにします。
- 抽出中に字幕を解析する試験運用版のサポートを追加しました。これにより、字幕セグメント間の移行時のちらつきの解決など、重複する字幕の結合がより適切にサポートされます。これは
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()を使用して有効にできます(#288)。
- RTSP 拡張機能:
- デコーダ拡張機能(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)。
- サーフェスを無効にすると Leanback コードで
- テスト ユーティリティ:
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_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_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()をオーバーライドして、カスタムキーのロギングを有効にします。
- CMCD ロギングはデフォルトで無効になっています。有効にするには、
- メインデモのマニフェストにアクションを追加して、カスタム
*.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)の動作の不整合を修正しました。
- 明示的にオプトインされている場合にのみ、ExoPlayer がデバイスの音量メソッドを制御できるようにします。
- 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が新しいトラック選択をトリガーします。
- デフォルトで無効化される
- エクストラクタ:
- オーディオ:
- トンネリングが有効で、
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)
- DRM パッケージの外部から呼び出されることが想定されていない、
- 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を追加しました。
- 再生/一時停止ボタンを含むカスタム UI 要素を記述するための Util メソッド
- RTSP 拡張機能:
- DASH 拡張機能:
- マルチピリオド DASH ストリームの
MediaLoadData.startTimeMsとMediaLoadData.endTimeMsからメディア時間オフセットを削除しました。 - マルチピリオドのライブ DASH メディアソースを再準備すると
IndexOutOfBoundsExceptionが生成されるバグを修正しました(#10838)。
- マルチピリオド DASH ストリームの
- 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 リリースに対応しています。
- コアライブラリ:
- ダウンロード:
- 結合する 2 つのセグメントの開始時間の最大差を
SegmentDownloaderとサブクラスで構成できるようにしました(#248)。
- 結合する 2 つのセグメントの開始時間の最大差を
- オーディオ:
- 動画:
- HEVC HDR10 形式を
HEVCProfileMain10ではなくHEVCProfileMain10HDR10にマッピングします。 - Chromecast with Google TV と Lenovo M10 FHD Plus で、60 fps の AVC ストリームがサポート対象外としてマークされるデバイスの問題の回避策を追加しました(#10898)。
- 画面のリフレッシュ レートを大幅に上回るフレームレートでメディアを再生する際のフレーム リリースのパフォーマンスの問題を修正しました。
- HEVC HDR10 形式を
- 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)。
- トラックアトムの解析時にサンプル テーブル(stbl)に必要なサンプルの説明(stsd)が欠落している場合は、
- オーディオ:
- 直接再生(パススルー)における
AudioTrackの最小バッファサイズを計算する際、圧縮音声形式のビットレートを使用します。
- 直接再生(パススルー)における
- テキスト:
- 字幕ファイルにキューが含まれていない場合に無効な(負の)インデックスを
Subtitle.getEventTimeに渡すTextRendererを修正しました。 - SubRip: バイトオーダー マークで始まる UTF-16 ファイルのサポートを追加しました。
- 字幕ファイルにキューが含まれていない場合に無効な(負の)インデックスを
- メタデータ:
- ID3 v2.4 で許されているように、ID3 フレームから複数の null 区切り値を解析します。
- コンテンツのタイプまたはメタデータで記述されたフォルダのタイプを示す
MediaMetadata.mediaTypeを追加しました。 MediaMetadata.isBrowsableを追加してMediaMetadata.folderTypeの代わりとしました。このフォルダタイプは次のリリースで非推奨になります。
- DASH:
- タイル数など、画像適合セットに対する完全な解析を追加しました(#3752)。
- UI:
- セッション:
- カスタム プレーヤーの
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)。
- ダウンロード:
- 動画:
- ディスプレイがドルビー ビジョンをサポートしていない場合は、別のデコーダを試します(#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)。
- 複数のプレーヤーを同時に解放するときに OutOfMemory エラーを回避するため、
- メタデータ:
- メタデータが利用可能になり次第すぐにレンダリングするように
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:
- IMA:
- 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)。
- エクストラクタ:
- DASH:
- マニフェストからの ClearKey ライセンス URL を解析しました(#10246)。
- UI:
- TalkBack が再生コントロール メニューの現在アクティブな速度オプションを通知するようにしました(#10298)。
- RTSP:
- VP8 の断片化されたパケットの処理を追加しました(#110)。
- Leanback 拡張機能:
LeanbackAdapterのplayWhenReadyの変更をリッスンするようになりました(10420)。
- Cast:
バージョン 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 プロパティの変更を監視し、これに応じて新しいトラック選択をトリガーします。televisionUI モードのデバイスは、これらの制約から除外され、チャンネル数が最も多い形式が優先されます。この機能を有効にするには、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を削除しました。
- エクストラクタ:
- 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のインスタンスは、必要に応じて明示的に渡すことができます。
- DTS
- 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)。
- CMake バージョンを
- サポートが終了したシンボルを削除しました。
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を明示的に渡すことが必須になるように、AudioCapabilitiesAPI を変更しました。AudioTrackBufferSizeProviderをDefaultAudioSinkに挿入することで、AudioTrackバッファサイズの計算をカスタマイズできるようにしました(#8891)。- リクエストされたバッファサイズが 1 MB を超える場合は、
AudioTrackの作成を再試行します(#9712)。
- エクストラクタ:
- テキスト:
- DRM:
DrmSessionManager.(pre)acquireSessionからplaybackLooperを削除しました。カスタムのMediaSourceでアプリがDrmSessionManagerを使用している場合は、代わりにplaybackLooperをDrmSessionManager.setPlayerに渡す必要があります。
- 広告の再生 / IMA:
- IMA ダイナミック広告挿入(DAI)のサポートを追加しました(#8213)。
- 広告グループをリセットしてもう一度再生できるように、
AdPlaybackStateにメソッドを追加しました(#9615)。 - 広告の再生時、再生速度 1.0 を強制適用します(#9018)。
- 広告グループの読み込みに失敗するとすぐに再生がリセットされる問題を修正しました(#9929)。
- UI:
- DASH:
- HLS:
- RTSP:
- Transformer:
- 必要な最小 API バージョンを 21 に増やしました。
TransformationExceptionは、変換中に発生するエラーの記述に使用されるようになりました。- 変換オプションを指定するための
TransformationRequestを追加しました。 - 複数のリスナーを登録できるようになりました。
- コーデック出力が部分的に読み取られたときに Transformer が停止する問題を修正しました。
- muxer スローを解放するときに
Transformer.getProgressで発生する可能性がある NPE を修正しました。 - 変換を適用するためのデモアプリを追加しました。
- MediaSession 拡張機能:
- デフォルトで、停止時に
MediaSessionConnectorがプレイリストを消去するようになりました。プレイリストを保持する必要があるアプリは、コネクタでsetClearMediaItemsOnStop(false)を呼び出すことができます。
- デフォルトで、停止時に
- Cast 拡張機能:
- 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 モジュールに置き換えられます。これにより、アダプターやコネクタのクラスを使用する必要なく、プレーヤーとメディア セッションを直接統合できます。