Media3

メディアのユースケースのサポート ライブラリ。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2025 年 7 月 2 日 1.7.1 - 1.8.0-beta01 1.8.0-alpha01

依存関係の宣言

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

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

Groovy

dependencies {
    def media3_version = "1.6.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 integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

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

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

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

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

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

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

Kotlin

dependencies {
    val media3_version = "1.6.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 integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

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

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

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

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

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

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

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

フィードバック

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

バージョン 1.8.0

バージョン 1.8.0-beta01

2025 年 7 月 2 日

androidx.media3:media3-*:1.8.0-beta01 がリリースされました。バージョン 1.8.0-beta01 にはこれらの commit が含まれています。

  • 共通ライブラリ:
    • ForwardingSimpleBasePlayer でのプレーヤーの置き換えのサポートを追加しました。
  • ExoPlayer:
    • ExoPlayer.Builder に渡された Context から仮想デバイス ID を使用するためのサポートを追加しました。
    • スクラブモードで動的スケジューリングをデフォルトで有効にします。
    • アイテムの末尾にシークするときに、不要なソースの再読み込みを回避します。
    • スクラブ モードでは、デフォルトで MediaCodec.BUFFER_FLAG_DECODE_ONLY を使用します。
    • プリロード スレッドとは異なる再生スレッドを持つ ExoPlayer によって PreloadMediaSource が再生されるときに IllegalStateException をスローします(#2495)。
    • デフォルト実装で cloneAndMoveShuffleMode に追加(#2226)。
    • render の呼び出しが不要な場合、Renderer.getMinDurationToProgressUs のデフォルトの動作を変更して、より大きな値を返すようにします。
    • 一時停止中にシークバーを最後まで移動すると、内部スケジューリングによって最後のフレームが遅延するバグを修正現在のところ、このバグ修正は ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled が有効になっている場合にのみ有効です。
  • Transformer:
    • 動画エンコード設定のチップセット固有の最適化を可能にする CodecDbLite を追加
    • DefaultEncoderFactorysetEnableCodecDbLite フラグを追加して、CodecDB Lite 設定の最適化を有効化。デフォルトでは、このフラグは false に設定されています。
  • エクストラクタ:
    • 複数の sidx アトムを含むフラグメント化された MP4 でのシークのサポートを追加します。この動作は、FragmentedMp4ExtractorFLAG_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)。
  • オーディオ:
    • ChannelMappingAudioProcessorTrimmingAudioProcessor で、すべてのリニア PCM サンプル形式のサポートを追加。
    • CompositionPlayer での音声ギャップのサポートを追加。
    • BaseAudioProcessor#reset() から BaseAudioProcessor#flush() への不要な呼び出しを削除。
  • 動画:
    • 音声サンプルがリクエストされた位置で正確に開始されない場合に、起動時のスムーズな動画フレームのリリースを改善
    • 取り外し可能なサーフェスの回避策を「realme」デバイスに拡張(#2059)。
  • テキスト:
    • 字幕セグメントの読み込みに最初に失敗し、その後正常に読み込まれ、空の字幕セグメントが続く場合に再生が停止する問題を修正しました(#2517)。
  • メタデータ:
    • MetadataRetriever でメディアの再生時間と Timeline の取得をサポートし、インスタンス ベースの AutoCloseable API に移行しました。新しい Builder を使用して MediaItem のインスタンスを作成し、retrieveTrackGroups()retrieveTimeline()retrieveDurationUs() を呼び出してメタデータの ListenableFuture を取得します。以前の静的メソッドは非推奨になりました(#2462)。
  • 画像:
    • BitmapFactoryImageDecoder の表示サイズにデコードされたビットマップを制限し、非常に大きな(50 メガピクセルなど)画像を表示しようとしたときに PlayerView からの Canvas: trying to draw too large bitmap. でアプリがクラッシュしないようにします。
    • Context パラメータを受け取るように DefaultRenderersFactory.getImageDecoderFactory() のシグネチャを変更します。
    • CompositionPlayer で使用されるビットマップの最大出力サイズを、Transformer で使用されるサイズと一致させます(つまり、CompositionPlayerExoPlayer とは異なり、ビットマップをデコードする際にディスプレイ サイズを考慮しません)。
  • Muxers:
    • フラグメント化された MP4 の音声サンプルに正しいサンプル フラグが設定されないバグを修正
  • セッション:
    • メインスレッドとは異なるアプリケーション スレッドからプレーヤーを実行しているときに、メインスレッドから setSessionExtras を呼び出すと IllegalStateException が発生するバグを修正しました(#2265)。
    • メディア アイテムを準備または再生せずに設定した場合、通知を自動的に表示しない(#2423 https://github.com/androidx/media/issues/2423)。この動作は MediaSessionService.setShowNotificationForIdlePlayer で構成できます。
    • すべてのコントローラまたは選択したコントローラにカスタム PlaybackException を追加します。
    • MediaController でライブ ストリームをシークすると IllegalArgumentException が発生するバグを修正しました。
    • ライブ配信の場合、Android Auto UI(およびプラットフォーム メディア セッションからこの情報を使用する他のコントローラ)で位置のアーティファクトが発生しないように、プラットフォーム メディア コントローラでの再生位置の公開と現在のアイテムでのシーク機能を停止します(#1758)。
  • Cronet 拡張機能:
    • Cookie の自動処理を追加しました(#5975)。
  • HLS 拡張機能:
    • 引用符付き文字列属性値で \f(フォームフィード)を受け入れるように、再生リストの解析を修正しました(#2420)。
    • 同じ ID のインタースティシャルを更新するサポート(#2427)。
    • ライブ ストリームで読み込むセグメントがなくなると、再生リストの読み込みエラーが伝播されないことがあるバグを修正しました(#2401 https://github.com/androidx/media/issues/2401)。
    • 音声レンディションがすでにグループ化されているのと同様に、字幕レンディションを NAME タグでグループ化します(#1666)。
  • DASH 拡張機能:
    • 新しい期間を超えるサンプルがレンダリング パイプラインによってすでに読み取られている場合に、DASH 期間の長さを短縮すると例外がスローされるバグを修正しました(#2440)。
    • CMCD クエリ パラメータを使用するとリダイレクトがフォローされないバグを修正しました(#2475)。
  • RTSP 拡張機能:
    • HTTP 302 レスポンスの処理時に提供されたロケーション URI を使用するように RtspClient を修正しました(#2398)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1 など):
    • DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange がオーディオ デコーダ拡張機能に影響しないバグを修正しました(#2258)。
  • Cast 拡張機能:
    • setVolume()getVolume() のサポートを追加しました(#2279)。
    • タイムラインが空のときに CastPlayer が STATE_BUFFERING に入らないようにします。
  • テスト ユーティリティ:
    • 指定した位置に達するまでプレーヤーを進めるために、TestPlayerRunHelperadvance(player).untilPositionAtLeastuntilMediaItemIndex を追加します。ほとんどの場合、これらのメソッドは既存の untilPosition メソッドと untilStartOfMediaItem メソッドよりも信頼性が高くなります。
    • 他のテストで再利用できるように FakeDownloadertest-utils-robolectric モジュールに移動

バージョン 1.8.0-alpha01

2025 年 5 月 19 日

androidx.media3:media3-*:1.8.0-alpha01 がリリースされました。バージョン 1.8.0-alpha01 には、これらの commit が含まれています。

  • ExoPlayer:
    • ExoPlayer.setScrubbingModeEnabled(boolean) メソッドを追加します。これにより、頻繁なシーク(ユーザーがスクラバーバーをドラッグするなど)に対してプレーヤーが最適化されます。スクラブ モードの動作は、ExoPlayerExoPlayer.BuildersetScrubbingModeParameters(..) でカスタマイズできます。
    • スクラブ モードで分数シーク許容値をカスタマイズできるようにします。
    • スクラビング モードでコーデックの動作レートを上げます。
    • AdsMediaSource のコンテンツの準備エラーが報告されないことがあるバグを修正しました(#2337)。
    • 字幕をサイドローディングする際などに使用される MergingMediaSource のメモリリークを修正しました(#2338)。
    • CmcdConfiguration.Factorynull を返して、特定のメディア アイテムの CMCD ロギングを無効にできるようにします(#2386)。
    • デフォルトの画像バッファサイズを 128 KB(テキスト トラックからのコピー&ペーストの誤り)から 26 MB に増やしました。これは 50 MP のウルトラ HDR 画像に十分な大きさです(#2417)。
    • アプリが指定された開始位置と再生時間で単一のメディアをプリキャッシュできるようにする PreCacheHelper を追加しました。
  • Transformer:
    • addGap() で追加された)最初のギャップを無音音声で埋めるには、EditedMediaItemSequence.BuilderexperimentalSetForceAudioTrack(true) を明示的に設定する必要があります。ギャップがシーケンスの中間にある場合、このフラグは必要ありません。
    • Muxer インターフェースを media3-transformer から media3-muxer に移動します。
    • メディア アイテムを画像としてインポートする際に MediaItem.Builder().setImageDuration(long) の設定を必須にします。
    • トリミング時に MP4 編集リストを含む Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean) を追加して、トリミング開始点前のキーフレームとトリミング開始点との間のサンプルを無視するようプレーヤーに指示します。
    • Kotlin と Jetpack Compose を使用するように Composition Demo アプリを更新し、シーケンスを 2x2 または PiP レイアウトに配置するカスタム VideoCompositorSettings を追加しました。
  • エクストラクタ:
    • MP3: FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)#2194)により固定ビットレート シークにフォールバックする際に、シークできない Xing、VBRI などの可変ビットレート メタデータから期間とデータサイズを使用します。
  • オーディオ:
    • DefaultAudioMixer で一定のパワー アップミキシング/ダウンミキシングを許可。
    • ChannelMappingAudioProcessorTrimmingAudioProcessorToFloatPcmAudioProcessor を公開しました(#2339)。
    • AudioTrackPositionTrackerAudioTrack#getUnderrunCount() を使用して、ベスト エフォート推定ではなく DefaultAudioSink のアンダーランを検出します。
    • オーディオ出力デバイスからの予期しない位置のずれに対するオーディオ タイムスタンプの平滑化を改善。
    • Bluetooth デバイスに接続しているときに一時停止から再開すると、最初の 10 秒間 A/V 同期が崩れるバグを修正
    • AnalyticsListener.onAudioPositionAdvancing が、音声の進行開始時刻ではなく、最初の測定時刻を報告していたバグを修正しました。
  • 動画:
    • デコード専用の入力バッファをキューに入れるときに MediaCodec.BUFFER_FLAG_DECODE_ONLY フラグを含めるための試験運用版 ExoPlayer API を追加しました。このフラグは、デコード専用バッファをスキップするようデコーダに指示し、シークを高速化します。DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag で有効にします。
    • ソフトウェア動画コーデックのコーデック パフォーマンス チェックを改善。これにより、一部のトラックが EXCEEDS_CAPABILITIES としてマークされることがあります。
    • 一部のデバイスで VP9 Widevine の再生エラーを修正(#2408)。
  • テキスト:
    • 字幕を有効にしたときに進行中のキューを表示するよう SSA と SubRip を修正しました(#2309)。
    • 字幕エラーのあるストリームから字幕トラックが空のライブ ストリームに切り替えると再生が停止する問題を修正しました(#2328)。
    • B フレームを含む H.262 ストリームを再生する際に CEA-608 字幕が文字化けする問題を修正しました(#2372)。
    • Matroska ファイルで CodecId = S_TEXT/SSA を使用した SSA 字幕のサポートを追加しました。以前は、MatroskaExtractor は SubStation Alpha 字幕の「高度な」(v4 以降)バリアントを表す CodecId = S_TEXT/ASS のみをサポートしていました(ただし、ExoPlayer の解析ロジックは両方のバリアントで同じです)(#2384)。
    • SubStation Alpha(SSA)字幕ファイルで layer プロパティのサポートを追加しました。このプロパティは、複数のキューが同時に画面に表示される場合に、キューの z オーダーを定義するために使用されます(#2124)。
  • 効果:
    • 入力の向きに関係なく、短い辺が常に指定された値と一致するようにする Presentation を作成する Presentation.createForShortSide(int) を追加します。
  • Muxers:
    • writeSampleData() API が MediaCodec.BufferInfo ではなく、muxer 固有の BufferInfo クラスを使用するようになりました。
    • デフォルトで false になる Muxer.Factory#supportsWritingNegativeTimestampsInEditList を追加します。
  • IMA 拡張機能:
    • 1 つの広告の読み込みエラーが原因で、別の広告グループが誤って無効になるバグを修正しました。
    • VOD ウィンドウの終了後に広告グループが再生を停止するバグを修正しました。期間後に開始する広告グループは、MediaPeriodQueue にエンキューされなくなりました(#2215)。
  • セッション:
    • 従来の MediaBrowserServiceCompat に接続された MediaBrowsergetLibraryRoot に null を渡すと NullPointerException が生成されるバグを修正しました。
    • カスタム アクション、検索結果、getItem リクエストの送信時に、ClassNotFoundException でレガシー セッション アプリがクラッシュするバグを修正しました。
    • MediaItem.LocalConfiguration.uri がプラットフォーム セッションの MediaMetadata に共有されるバグを修正。コントローラがメディアを再リクエストできるように URI を意図的に共有するには、代わりに MediaItem.RequestMetadata.mediaUri を設定します。
  • UI:
    • 初期ボタンの状態の設定と状態の変化(アイコンの形状や有効 / 無効など)の監視の間にギャップが生じる Compose のバグを修正しました。観測期間外に Player に加えられた変更が取得されるようになりました(#2313)。
    • SeekBackButtonStateSeekForwardButtonState の状態ホルダーとコンポーザブルを media3-ui-compose モジュールに追加します。
    • ExoPlayer のスクラブ モードのサポートを PlayerControlView に追加します。有効にすると、ユーザーがスクラバーバーのドラッグを開始したときにプレーヤーがスクラビング モードになり、移動ごとに player.seekTo 呼び出しが発行され、画面からタッチが離れるとスクラビング モードが終了します。この統合は、XML の time_bar_scrubbing_enabled = true または Java/Kotlin の setTimeBarScrubbingEnabled(boolean) メソッドで有効にできます。
    • PlayerSurface が null 可能な Player 引数を受け入れるようにします。
  • ダウンロード:
    • プログレッシブ ストリームの部分ダウンロードのサポートを追加アプリは DownloadHelper でプログレッシブ ストリームを準備し、ダウンロードでカバーする時間ベースのメディアの開始位置と終了位置を指定して、ヘルパーに DownloadRequest をリクエストできます。返された DownloadRequest には解決されたバイト範囲が含まれており、それを使用して ProgressiveDownloader を作成し、対応するコンテンツをダウンロードできます。
    • 静的 DownloadHelper.forMediaItem() メソッドを置き換える DownloadHelper.Factory を追加します。
    • SegmentDownloader 実装に Factory を追加
    • アダプティブ ストリームの部分ダウンロードのサポートを追加アプリは DownloadHelper でアダプティブ ストリームを準備し、ダウンロードでカバーする時間ベースのメディアの開始位置と終了位置を指定して、ヘルパーから DownloadRequest をリクエストできます。返された DownloadRequest には解決された時間範囲が含まれており、それを使用して具体的な SegmentDownloader を作成し、対応するコンテンツをダウンロードできます。
  • HLS 拡張機能:
    • HlsInterstitialsAdsLoader を使用した X-ASSET-LIST とライブ ストリームをサポートします。
  • RTSP 拡張機能:
    • 末尾に空白文字を含む行を含む SessionDescription の解析サポートを追加しました(#2357)。
  • Cast 拡張機能:
    • getDeviceVolume()setDeviceVolume()getDeviceMuted()setDeviceMuted() のサポートを追加しました(#2089)。
  • テスト ユーティリティ:
    • 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) と、そのサブクラス DashDownloaderHlsDownloaderSsDownloader の対応するコンストラクタを削除しました。
    • 非推奨の 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.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() を呼び出そうとすると、ProgressiveMediaPeriodIllegalStateException をスローする問題を修正(#2315)。
    • DASH、HLS、SmoothStreaming のマニフェスト リクエストで CmcdData を送信する問題を修正しました(#2253)。
    • 広告グループの削除後も AdPlaybackState.withAdDurationsUs(long[][]) を使用できることを確認します。ユーザーは、削除された広告グループの期間の配列を渡す必要があります。この配列は空または null にできます(#2267)。
  • エクストラクタ:
    • MP4: tkhd ボックスから alternate_group を解析し、各トラックの Format.metadata 内の Mp4AlternateGroupData エントリとして公開します(#2242)。
  • オーディオ:
    • 短いコンテンツのプレイリストを再生するときに位置が動かなくなる可能性があるオフロードの問題を修正しました(#1920)。
  • セッション:
    • プラットフォーム MediaSession コールバックの集計タイムアウトを 500 ミリ秒から 100 ミリ秒に短縮し、アプリがこの値を設定できるように試験運用版のセッターを追加
    • ユーザーが通知を閉じた後、通知が再び表示される問題を修正(#2302)。
    • ラップされたプレーヤーが実際には空の場合に、セッションが単一アイテムのタイムラインを返すバグを修正しました。これは、ラップされたプレーヤーに COMMAND_GET_TIMELINE がなく、COMMAND_GET_CURRENT_MEDIA_ITEM があり、ラップされたプレーヤーが空の場合に発生しました(#2320)。
    • setForegroundServiceTimeoutMs などのサービスとの他のインタラクションの後に MediaSessionService.setMediaNotificationProvider の呼び出しが無視されるバグを修正しました(#2305)。
  • UI:
    • PlayerSurfaceExoPlayer.setVideoEffects および CompositionPlayer と連携できるようにします。
    • 新しい PlayerPlayerSurface を再コンポーズできないバグを修正しました。
  • HLS 拡張機能:
    • HLS メディアの CmcdData でチャンクの長さが設定されず、暗号化されたメディア セグメントの処理時にアサーション エラーが発生する問題を修正しました(#2312)。
  • RTSP 拡張機能:
    • RTSP セッションで TCP を使用するように構成する方法として、RTSPT スキームを含む URI のサポートを追加しました(#1484)。
  • Cast 拡張機能:
    • プレイリスト メタデータのサポートを追加しました(#2235)。

1.6.0

2025 年 3 月 26 日

androidx.media3:media3-*:1.6.0 がリリースされました。バージョン 1.6.0 には、これらの commit が含まれています。

  • 共通ライブラリ:
    • androidx.media の同等のクラスを置き換えるために、AudioManagerCompatAudioFocusRequestCompat を追加しました。
    • Kotlin を 1.9.20 から 2.0.20 にアップグレードし、Compose Compiler Gradle プラグインを使用します。KotlinX コルーチン ライブラリを 1.8.1 から 1.9.0 にアップグレード。
    • Format.toBundle(boolean excludeMetadata) メソッドを削除し、代わりに Format.toBundle() を使用します。
    • SimpleBasePlayer で、null MediaMetadata を使用して setPlaylist の後に State で新しい currentMediaItemIndex を設定しても、メタデータが再評価されないバグを修正しました(#1940)。
    • SimpleBasePlayer.State のアクセスを保護から公開に変更し、他のクラスでの更新を処理しやすくします(#2128)。
  • ExoPlayer:
    • プラットフォームの MediaExtractor と同等の機能を提供する新しいクラス MediaExtractorCompat を追加します。
    • MediaCodecVideoRenderer を使用した再生用に、試験運用版の「ExoPlayer」事前ウォーミングのサポートを追加しました。DefaultRenderersFactory から experimentalSetEnableMediaCodecVideoRendererPrewarming を構成して、セカンダリ MediaCodecVideoRendererExoPlayer に提供できます。有効にすると、ExoPlayer は再生中に連続するメディア アイテムの動画を前処理して、メディア アイテムの切り替えのレイテンシを短縮します。
    • DefaultLoadControlbufferForPlaybackMsbufferForPlaybackAfterRebufferMs のデフォルト値をそれぞれ 1,000 ミリ秒と 2,000 ミリ秒に減らしました。
    • DeviceInfo とデバイスの音量を非同期で初期化します(setDeviceVolumeControlEnabled を使用して有効になっている場合)。これらの値は ExoPlayer.Builder.build() の直後には使用できません。Player.ListeneronDeviceInfoChangedonDeviceVolumeChanged を介して変更を通知します。
    • プレーヤーの作成後、初期オーディオ セッション ID がすぐに利用できなくなりました。必要に応じて、AnalyticsListener.onAudioSessionIdChanged を使用して初期更新をリッスンできます。
    • 動画トラックを選択する際は言語を考慮します。デフォルトでは、選択した音声トラックの言語と一致する「メイン」動画トラックが選択されます(利用可能な場合)。動画の言語設定は TrackSelectionParameters.Builder.setPreferredVideoLanguage(s) で明示的に指定できます。
    • DefaultTrackSelector.selectVideoTrack() メソッドに selectedAudioLanguage パラメータを追加します。
    • retryCount パラメータを MediaSourceEventListener.onLoadStarted と対応する MediaSourceEventListener.EventDispatcher メソッドに追加します。
    • 実際のコンテンツと一致しない再生リスト アイテムまたは期間を含むマルチ期間 DASH ストリームで、アイテムの最後にフレームがフリーズするバグを修正しました(#1698)。
    • BasePreloadManager.Listener をトップレベルの PreloadManagerListener に移動します。
    • RenderersFactory.createSecondaryRenderer を実装して、事前ウォーミング用のセカンダリ レンダラを提供できます。プリウォーミングにより、再生中のメディア アイテムの切り替えが速くなります。
    • アダプティブ ストリーミング形式の DASH、HLS、SmoothStreaming でマニフェスト リクエストの CmcdData を送信できるようにしました(#1951)。
    • MediaCodecRenderer.onReadyToInitializeCodec で初期化されるコーデックの MediaCodecInfo を提供します(#1963)。
    • AdsMediaSource を変更して、広告グループを追加することで AdPlaybackStates を拡張できるようにします。無効な変更が検出され、例外がスローされます。
    • ミッドロール広告の後にコンテンツ メディアに移行する際に、デコード専用のフレームが連続して表示されることがある問題を修正しました。
    • DefaultRenderersFactory で 2 つの MetadataRenderer インスタンスを追加し、アプリがデフォルトで 2 つの異なるメタデータ スキームを受信できるようにします。
    • 再生が一時停止されたときに、チャンクの進行中の読み込みをキャンセルするかどうかを再評価します(#1785)。
    • シークできないメディアでのクリップを許可するオプションを ClippingMediaSource に追加。
    • プリウォーミングによるシークで次のメディア アイテムへの切り替えがブロックされるバグを修正
    • ExoPlayer.isLoading()STATE_IDLE または STATE_ENDED に移行した後も true のままになるバグを修正しました(#2133)。
    • LoadControl.ParameterlastRebufferRealtimeMs を追加します(#2113)。
  • Transformer:
    • 下位互換性のある代替形式へのトランスミュークシングのサポートを追加します。
    • ドルビー ビジョン(プロファイル 8)形式のトランスコーディングとトランスミュークシングのサポートを追加。
    • Format を使用するように VideoFrameProcessor.registerInputStreamVideoFrameProcessor.Listener.onInputStreamRegistered のパラメータを更新します。
    • DefaultEncoderFactory を使用する際に HDR 静的メタデータを生成します。
    • MediaMetricsManager を使用した Android プラットフォーム診断のサポートを有効にしました。Transformer では編集イベントとパフォーマンス データがプラットフォームに転送されるため、デバイスのシステム パフォーマンスとデバッグ情報の提供に役立てることができます。このデータは、デバイスのユーザーが使用状況と診断情報の共有を有効にしている場合に、Google によって収集されることもあります。アプリは、Transformer.Builder.setUsePlatformDiagnostics(false) で Transformer のプラットフォーム診断への貢献を無効にできます。
    • InAppMuxerInAppMp4MuxerInAppFragmentedMp4Muxer に分割します。InAppMp4Muxer はフラグメント化されていない MP4 ファイルを生成するために使用され、InAppFragmentedMp4Muxer はフラグメント化された MP4 ファイルを生成するために使用されます。
    • Muxer インターフェースを media3-muxer から media3-transformer に移動します。
    • 画面録画用の MediaProjection からメディアを提供する MediaProjectionAssetLoader を追加し、Transformer デモアプリに画面録画のサポートを追加
    • Codec インターフェースに #getInputFormat() を追加します。
    • 可能であれば、DefaultVideoFrameProcessorDefaultVideoCompositor の呼び出し元に GlObjectsProvider を解放する責任を移します。
  • エクストラクタ:
    • AVI: ストリーム ヘッダーにチャンク数ではなくバイト数が格納されている、一定ビットレートの圧縮音声を含むファイルの処理を修正
    • 長さが 1 バイトまたは 2 バイト(4 バイトではない)で表される 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 を final にします。
    • ChannelMappingAudioProcessorTrimmingAudioProcessor に浮動小数点 PCM のサポートを追加します。
  • 動画:
    • プレースホルダ サーフェスの使用をブロックするために、アプリがオーバーライドできるように MediaCodecVideoRenderer.shouldUsePlaceholderSurface を protected に変更します(#1905)。
    • シークを高速化するために、試験運用版の ExoPlayer AV1 サンプル依存関係の解析を追加しました。新しい DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies API で有効にします。
    • 依存関係のない遅延 MediaCodecVideoRenderer デコーダ入力バッファをドロップする試験運用版 ExoPlayer API を追加しました。DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs で有効にします。
    • サーフェスがないプレーヤーがすぐに準備完了になり、保留中のフレームのデコードが非常に遅くなる問題を修正しました(#1973)。
    • 画面のちらつきを回避するため、Xiaomi と OPPO のデバイスを分離型サーフェス モードから除外(#2059)。
  • テキスト:
    • VobSub 字幕のサポートを追加しました(#8260)。
    • MediaItem.Builder.setSubtitleConfigurations で構成されたすべての字幕ファイルを積極的に読み込むのを停止し、代わりにトラック選択で選択された場合のみ 1 つを読み込むようにします(#1721)。
    • TTML: style を使用した tts:origintts:extent の参照のサポートを追加しました(#2953)。
    • WebVTT と SubRip のタイムスタンプを小数点以下 3 桁に制限します。以前は、小数点以下の桁数を誤って解析し、常に値がミリ秒単位であると想定していたため、タイムスタンプが正しくありませんでした(#1997)。
    • プレイリストに CEA-608 または CEA-708 の字幕を含むクリップされたアイテムが含まれている場合に再生がハングする問題を修正しました。
    • SSA ファイルに継続時間ゼロのキュー(開始時間と終了時間が同じ)が含まれている場合の IllegalStateException を修正(#2052)。
    • 字幕が音声や動画と同じコンテナに多重化されている場合、字幕の解析エラーを抑制(およびログ記録)します(#2052)。
    • CR 行末文字を使用する WebVTT ファイルでのマルチバイト UTF-8 文字の処理を修正しました(#2167)。
  • DRM:
    • API レベル 27 未満のデバイスで ClearKey コンテンツを再生する際の MediaCodec$CryptoException: Operation not supported in this configuration エラーを修正しました(#1732)。
  • 効果:
    • OverlaySettings の機能を StaticOverlaySettings に移動しました。OverlaySettings は、動的なオーバーレイ設定を可能にするためにサブクラス化できます。
  • Muxers:
    • 完全修飾名が非常に長くなるのを避けるため、MuxerExceptionMuxer インターフェースから移動しました。
    • Mp4Muxer.BuilderFragmentedMp4Muxer.Builder の両方で setSampleCopyEnabled() メソッドの名前を setSampleCopyingEnabled() に変更しました。
    • Mp4Muxer.addTrack()FragmentedMp4Muxer.addTrack()TrackToken ではなく int トラック ID を返すようになりました。
    • Mp4MuxerFragmentedMp4MuxerMuxer インターフェースを実装しなくなりました。
    • Mp4Muxer サンプルのバッチ処理とコピーをデフォルトで無効にします。
    • 音声トラックのみが書き込まれたときに大量のフラグメントを作成する FragmentedMp4Muxer のバグを修正
  • セッション:
    • 再生が一時停止、停止、または失敗した場合、フォアグラウンド サービスの状態を 10 分間保持します。これにより、ユーザーはさまざまなデバイスでフォアグラウンド サービスの制限を受けることなく、このタイムアウト内で再生を再開できます。onTaskRemoved をオーバーライドするときに stopSelf() の前にフォアグラウンド サービスを停止するために player.pause() を呼び出すことはできなくなりました。代わりに MediaSessionService.pauseAllPlayersAndStopSelf() を使用してください。
    • 再生がエラー状態または停止状態になったときに、通知を表示したままにします。通知は、プレイリストがクリアされるか、プレーヤーがリリースされた場合にのみ削除されます。
    • Android プラットフォームの MediaSession アクション ACTION_PLAY と ACTION_PAUSE の処理を改善し、利用可能なコマンドに応じていずれか 1 つのみを設定し、いずれか 1 つのみが設定されている場合も受け入れるようにしました。
    • ContextMediaButtonReceiver.shouldStartForegroundService のパラメータとして追加します(#1887)。
    • レガシー セッションに接続された MediaControllerPlayer メソッドを呼び出すと、保留中の更新から変更が削除されるバグを修正しました。
    • MediaSession.setSessionActivity(PendingIntent) が null を受け入れるようにしました(#2109)。
    • プレイリストがクリアされたときに古い通知が引き続き表示されるバグを修正しました(#2211)。
  • UI:
    • PlayerSurfacePresentationStatePlayPauseButtonStateNextButtonStatePreviousButtonStateRepeatButtonStateShuffleButtonStatePlaybackSpeedState の状態ホルダーとコンポーザブルを media3-ui-compose モジュールに追加します。
  • ダウンロード:
    • データソースが IOException 以外の Exception をスローした場合に、データソースが開いたままになり、キャッシュ領域がロックされる CacheWriter のバグを修正しました(#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 レベル 4 形式のサポートを追加しました(#1898)。
    • マルチピリオドのライブ配信で広告挿入の更新間隔を計算する際の問題を修正しました(#1698)。
    • DASH マニフェストから scte214:supplementalCodecs 属性を解析して、ドルビー ビジョン形式を検出します(#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.VideoComponentExoPlayer.AudioComponentExoPlayer.TextComponentExoPlayer.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:
    • このプラットフォーム API で報告されたコーデック タイムアウトの問題を回避するため、MediaCodec での非同期復号の使用を無効化(#1641)。
  • エクストラクタ:
    • MP3: VBRI フレームの目次がファイル内のすべての MP3 データをカバーしていない場合、再生を途中で停止しない(#1904)。
  • 動画:
    • onOutputFormatChanged の処理時に提供された MediaCodecAdapter のピクセル アスペクト比の値の使用をロールバック(#1371)。
  • テキスト:
    • ReplacingCuesResolver.discardCuesBeforeTimeUs で、timeUs でアクティブなキュー(開始済みだがまだ終了していない)が誤って破棄されるバグを修正しました(#1939)。
  • メタデータ:
    • Vorbis コメントからディスク/トラック番号とジャンルを MediaMetadata に抽出します(#1958)。

バージョン 1.5.0

2024 年 11 月 27 日

androidx.media3:media3-*:1.5.0 がリリースされました。バージョン 1.5.0 にはこれらの commit が含まれています。

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

バージョン 1.5.0-rc02

2024 年 11 月 19 日

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

バージョン 1.5.0-rc01

2024 年 11 月 13 日

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

バージョン 1.5.0-beta01

2024 年 10 月 30 日

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

バージョン 1.5.0-alpha01

2024 年 9 月 10 日

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

バージョン 1.4.0

バージョン 1.4.1

2024 年 8 月 27 日

androidx.media3:media3-*:1.4.1 がリリースされました。バージョン 1.4.1 にはこれらの commit が含まれています。

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

バージョン 1.4.0

2024 年 7 月 25 日

androidx.media3:media3-*:1.4.0 がリリースされました。バージョン 1.4.0 にはこれらのコミットが含まれています。

  • 共通ライブラリ:
    • no-op と推定されるシーク呼び出しを無視するのではなく、保護された BasePlayer.seekTo() メソッドと SimpleBasePlayer.handleSeek() メソッドに転送します。カスタム プレーヤーでこれらのメソッドを実装する場合は、mediaItemIndex == C.INDEX_UNSET でこれらの追加の呼び出しを処理する必要がある場合があります。
    • 拡張された Java 8 の脱糖化のコンパイル依存関係を削除(#1312)。
    • 画像以外の MediaItem では、MediaItem.Builder.setImageDurationMs() に渡された期間が無視されることを確認します(ドキュメントに記載されています)。
    • Format.customData を追加して、Format インスタンスに関するアプリ提供のカスタム情報を保存します。
  • ExoPlayer:
    • 複数のソースのプリロードを、それぞれの rankingData で定義された優先度に基づいて調整する BasePreloadManager を追加します。このクラスを拡張することでカスタマイズできます。PreloadMediaSource を使用してソースのメディア サンプルをメモリにプリロードし、UI 上のアイテムのインデックスを示す整数 rankingData を使用する DefaultPreloadManager を追加します。
    • LoadControl のほとんどのメソッドに PlayerId を追加して、LoadControl の実装で複数のプレーヤーをサポートできるようにします。
    • Buffer.isDecodeOnly()C.BUFFER_FLAG_DECODE_ONLY を削除しました。レンダラとデコーダがタイムスタンプに基づいてバッファをスキップするかどうかを判断するため、このフラグを設定する必要はありません。カスタム Renderer 実装では、バッファ時間が BaseRenderer.getLastResetPositionUs() 以上かどうかを確認して、サンプルを表示するかどうかを決定する必要があります。カスタム SimpleDecoder 実装では、必要に応じて isAtLeastOutputStartTimeUs() をチェックしたり、他のバッファに DecoderOutputBuffer.shouldBeSkipped をマークしてスキップしたりできます。
    • TargetPreloadStatusControl.getTargetPreloadStatus(T) が null 値を返すことを許可し、指定された rankingDataMediaSource をプリロードしないことを示します。
    • remove(MediaSource)BasePreloadManager に追加します。
    • BasePreloadManagerreset() を追加して、プリロード マネージャー インスタンスを保持しながら、すべての保持ソースを解放します。
    • API 35 以降で PriorityTaskManager で使用される優先度値と MediaCodec の重要度を定義するために ExoPlayer.setPriority()(および Builder.setPriority())を追加しました。
    • CMCD で bs(バッファ不足)キーが正しくないという結果になった、最後の再バッファリング時間の更新に関する問題を修正しました(#1124)。
    • PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) を追加して、ソースが最後まで読み込まれたことを示します。これにより、DefaultPreloadManager とカスタム PreloadMediaSource.PreloadControl 実装で次のソースをプリロードしたり、他のアクションを実行したりできます。
    • アイテムの末尾で無音部分をスキップすると再生例外がトリガーされるバグを修正しました。
    • プリロード期間を破棄するには、PreloadMediaSourceclear を追加します。
    • 優先度の高いタスクのためにコーデック リソースが再利用されるときに使用される新しいエラーコード PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED を追加
    • AdsMediaSource で、最初のコンテンツ メディアの準備が完了する前にプレロール広告を読み込めるようにしました(#1358)。
    • 元の期間がマニフェストからすでに削除された後で、マルチ期間 DASH ライブ ストリームを再準備すると、再生が STATE_ENDED に移動するバグを修正しました。
    • PreloadMediaSource.PreloadControlonTimelineRefreshed() の名前を onSourcePrepared() に、onPrepared() の名前を onTracksSelected() に変更します。また、DefaultPreloadManager.Stage の IntDef の名前も適宜変更します。
    • CPU のウェイクサイクルに合わせて作業を調整し、レンダラが進行できるまでウェイクアップを遅らせる動的スケジューリングの試験運用版のサポートを追加しました。ExoPlayer インスタンスの設定時に experimentalSetDynamicSchedulingEnabled() を使用して有効にできます。
    • Renderer.getDurationToProgressUs() を追加しました。Renderer は、このメソッドを実装して、レンダラが進行するために再生を進める必要がある時間を ExoPlayer に返すことができます。ExoPlayerexperimentalSetDynamicSchedulingEnabled() で設定されている場合、ExoPlayer は、作業タスクのスケジュール時間を計算するときにこのメソッドを呼び出します。
    • MediaCodecRenderer で使用できる入力バッファと出力バッファがある場合にアラートを出すため、MediaCodecAdapter#OnBufferAvailableListener を追加します。MediaCodecRenderer は、これらのコールバックを受信すると ExoPlayer にシグナルを送信します。ExoPlayerexperimentalSetDynamicSchedulingEnabled() で設定されている場合、ExoPlayer はレンダラが進行できるときにワークループをスケジュールします。
    • 個々のパラメータではなく、LoadControl メソッドにデータクラスを使用します。
    • Exoplayer.release() が呼び出されたかどうかを確認する ExoPlayer.isReleased() を追加します。
    • seekToPrevious() が前のアイテムをシークする最大位置を構成する ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() を追加しました(#1425)。
    • 音声フォーカスの不整合を修正しました。たとえば、プレーヤーが一時停止しているときに、フル フォーカスまたは一時フォーカスの喪失が報告されない問題を修正しました(#1436)。
    • 抽出ツールが最初の準備ステップの後にトラックを追加で報告することによって発生する可能性のある IndexOutOfBoundsException を修正しました(#1476)。
    • ExoPlayer.setVideoEffect()Effects は、レンダラ オフセットが削除されたタイムスタンプを受け取ります(#1098)。
    • 別のプレイリスト アイテムを先読みしている間に発生したプレーヤー エラーを処理する際の潜在的な IllegalArgumentException を修正(#1483)。
  • Transformer:
    • ExportResultaudioConversionProcessvideoConversionProcess を追加して、出力ファイルの各トラックがどのように作成されたかを示します。
    • トリミング最適化の 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.StreamEventCallback#onPresentationEnded が正しく識別できるように、AudioTrack.stop() を呼び出す前に DefaultAudioSink でストリーム完了のトラッキング フィールドをリセットします。
    • 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 仕様では、ストリームに存在する値に関係なく、rowLockcolumnLock の両方が true であると想定されるべきであると規定されています(columnLock のサポートは実装されていないため、実際には常に false であると想定されます)。
      • この変更は元々 1.3.0-alpha01 のリリースノートに含まれていましたが、1.3.0-rc01 のリリース前に誤って元に戻されました。この問題は修正され、変更が再び表示されるようになりました。
    • CEA-708: ExoPlayer の「ペンの位置を設定」コマンドの単純な処理によって重複した改行が追加されるのを回避(#1315)。
    • WebVTT 字幕サンプルにキューが含まれていない場合(DASH ストリームの一部など)に LegacySubtitleUtil から IllegalArgumentException が発生する問題を修正しました(#1516)。
  • メタデータ:
    • MP4 から ID3 ソートタグへのマッピングを修正以前は、アルバムの並べ替え(soal)、アーティストの並べ替え(soar)、アルバム アーティストの並べ替え(soaa)の MP4 タグが、TSO2TSOATSOP の ID3 タグに誤ってマッピングされていました(#1302)。
    • 値が 1 バイトを超える場合に MP4(/iTunes)の数値 gnre(ジャンル)タグと tmpo(テンポ)タグの読み取りを修正
    • ID3 TCON フレームを MediaMetadata.genre に伝播(#1305)。
  • 画像:
    • 正方形以外の DASH サムネイル グリッドのサポートを追加しました(#1300)。
    • API 34 以降で AVIF のサポートを追加。
    • ExoPlayer.setImageOutput() のパラメータとして null を使用して、以前に設定された ImageOutput をクリアできるようにしました。
  • DataSource:
    • package が現在のアプリのパッケージと異なる android.resource://package/id 生リソース URI のサポートを実装します。これは以前は動作が文書化されていませんでしたが、名前でアクセスするよりも効率的に別のパッケージのリソースにアクセスする方法です。
    • DataSpec コンストラクタで url が null でないことを積極的にチェックします。このパラメータはすでに非 null としてアノテーションされています。
    • ByteArrayDataSource が、構築時にハードコードされるのではなく、open() 中に URI をバイト配列に解決できるようにします(#1405)。
  • DRM:
    • DefaultDrmSessionManagerProviderLoadErrorHandlingPolicy を設定できるようにしました(#1271)。
  • 効果:
    • SpeedChangeEffect の同じ EditedMediaItem または Composition 内で複数の速度変更をサポートします。
    • ウルトラ HDR ビットマップ入力からの HLG および PQ 出力をサポート。
    • EGL_GL_COLORSPACE_BT2020_HLG_EXT のサポートを追加しました。これにより、ExoPlayer.setVideoEffect と Transformer の Debug SurfaceView での HLG サーフェス出力が改善されます。
    • setOverlayFrameAnchor() で適用される x 値と y 値を反転させて、ドキュメントと一致するようにオーバーレイ行列の実装を更新します。OverlaySettings.Builder.setOverlayFrameAnchor() を使用する場合は、x 値と y 値を -1 で乗算して反転させます。
    • TimestampWrapperExoPlayer#setVideoEffects とともに使用するとクラッシュするバグを修正しました(#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)。
    • data:// 広告タグ URI を使用している場合の NullPointerException を修正するため、IMA SDK のバージョンを 3.33.0 に引き上げました(#700)。
  • セッション:
    • CommandButton.enabled のデフォルトを true に変更し、関連付けられたコマンドが使用可能であっても、コントローラの値を false のままにできることを確認します。
    • カスタム アイコン リソースの代わりに使用する CommandButton のアイコン定数を追加
    • MediaSessionService.isPlaybackOngoing() を追加して、アプリが onTaskRemoved() でサービスを停止する必要があるかどうかをクエリできるようにしました(#1219)。
    • すべてのセッションの再生を一時停止し、stopSelf() を呼び出して MediaSessionService のライフサイクルを終了できる MediaSessionService.pauseAllPlayersAndStopSelf() を追加します。
    • MediaSessionService.onTaskRemoved(Intent) をオーバーライドして、再生が進行中の場合はサービスをフォアグラウンドで実行し、それ以外の場合はサービスを停止する安全なデフォルト実装を提供します。
    • プラットフォーム セッション メタデータに再生時間を設定しないことで、ライブ配信のメディア通知でシークバーを非表示にしました(#1256)。
    • メタデータ プロパティを選択する際に、media1 と同じ優先順位とロジックを使用するように、MediaMetadata から MediaDescriptionCompat への変換を調整します。
    • 致命的でないエラーを Media3 コントローラに送信できるようにする MediaSession.sendError() を追加します。通知コントローラを使用する場合(MediaSession.getMediaNotificationControllerInfo() を参照)、カスタム エラーは、プラットフォーム セッションの PlaybackState を指定されたエラー情報を含むエラー状態に更新するために使用されます(#543)。
    • 特定のコントローラからのプレーヤー操作の一連の処理が終了したときにセッションに通知するために、MediaSession.Callback.onPlayerInteractionFinished() を追加します。
    • SessionError を追加し、エラーコードの代わりに SessionResultLibraryResult で使用して、エラーに関する詳細情報と、可能であればエラーの解決方法を提供します。
    • メディア セッションを公開するアプリとのインタラクションをテストするために使用できる、media3 コントローラ テストアプリのコードを公開します。
    • media3 の MediaSession[Builder].setSessionExtras() に渡されたエクストラを media1 コントローラの PlaybackStateCompat.getExtras() に伝播します。
    • 致命的なエラーと致命的でないエラーをプラットフォーム セッションにマッピングします。PlaybackExceptionPlaybackStateCompat の致命的なエラー状態にマッピングされます。MediaSession.sendError(ControllerInfo, SessionError) を伴ってメディア通知コントローラに送信された SessionError は、PlaybackStateCompat の非致命的エラーにマッピングされます。これは、エラーコードとメッセージは設定されるものの、プラットフォーム セッションの状態は STATE_ERROR と異なるままになることを意味します。
    • コントローラごとにセッション アクティビティを設定して、グローバル セッション アクティビティをオーバーライドできるようにします。セッション アクティビティは、AcceptedResultBuilder.setSessionActivivty(PendingIntent) を使用して ConnectionResult を作成することで、接続時にコントローラに対して定義できます。接続が確立されると、MediaSession.setSessionActivity(ControllerInfo, PendingIntent) を使用してセッション アクティビティを更新できます。
    • MediaLibrarySession.Callback への呼び出しのエラー複製を改善。エラー レプリケーションは、MediaLibrarySession.Builder.setLibraryErrorReplicationMode() を使用してエラータイプを選択するか、デフォルトでオンになっているエラー レプリケーションをオプトアウトすることで構成できるようになりました。
  • UI:
    • ExoPlayer に接続されている場合、PlayerView に画像表示のサポートを追加しました(#1144)。
    • PlayerControlView のさまざまなアイコンのカスタマイズを xml 属性で追加し、グローバルなオーバーライドではなく、PlayerView インスタンスごとに異なるドローアブルを許可しました(#1200)。
    • API 34 で Compose AndroidView 内の SurfaceView を使用すると、動画が引き伸ばされたり切り取られたりする原因となるプラットフォームのバグを回避しました(#1237)。
  • ダウンロード:
    • DownloadHelper が未リリースの Renderer インスタンスをリークしないようにします。これにより、最終的に IllegalStateException: Too many receivers, total of 1000, registered for pid でアプリがクラッシュする可能性があります(#1224)。
  • Cronet 拡張機能:
    • CronetDataSourceSocketTimeoutException を修正しました。Cronet の一部のバージョンでは、コールバックによって提供されるリクエストが常に同じであるとは限りません。これにより、コールバックが完了せず、リクエストがタイムアウトします(https://issuetracker.google.com/328442628)。
  • HLS 拡張機能:
    • 不連続性を待機している保留中の EMSG サンプルが、HlsSampleStreamWrapper で誤ったオフセットで委任され、IndexOutOfBoundsException または IllegalArgumentException が発生するバグを修正しました(#1002)。
    • LL-HLS ストリームでプライマリ以外のプレイリストが再読み込みされ続けるバグを修正しました(#1240)。
    • 初期化セグメントを含む HLS で CMCD を有効にすると Source ErrorIllegalArgumentException が発生するバグを修正しました。
    • ライブ再生中にプライマリ以外の再生リストが更新されないバグを修正しました(#1240)。
    • HLS ライブ ストリームで CMCD を有効にすると ArrayIndexOutOfBoundsException が発生するバグを修正(#1395)。
  • DASH 拡張機能:
    • マルチ期間のライブ ストリームを再準備すると IndexOutOfBoundsException がスローされるバグを修正しました(#1329)。
    • dashif:Laurl ライセンス URL のサポートを追加しました(#1345)。
  • Cast 拡張機能:
    • MediaQueueItem のアルバム タイトルを Media3 メディア アイテムのアーティストに変換するバグを修正しました(#1255)。
  • テスト ユーティリティ:
    • FakeRendereronInit()onRelease() を実装します。
    • TestPlayerRunHelper.runUntil()/playUntil() メソッドを変更して、致命的でないエラー(AnalyticsListener.onVideoCodecError() に報告されたエラーなど)で失敗するようにします。新しい TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() メソッド チェーンを使用して、この動作を無効にします。
  • デモアプリ:
    • 短編動画デモアプリで DefaultPreloadManager を使用します。
    • コマンドラインから Intent 引数でリピート モードを設定できるようにしました(#1266)。
    • デバイスでサポートされている場合は、HttpDataSource として HttpEngineDataSource を使用します。
  • サポートが終了したシンボルを削除しました。
    • CronetDataSourceFactory を削除しました。代わりに CronetDataSource.Factory を使用してください。
    • 一部の DataSpec コンストラクタを削除しました。代わりに DataSpec.Builder を使用してください
    • DefaultHttpDataSourceOkHttpDataSourceCronetDataSource から setContentTypePredicate(Predicate) メソッドを削除しました。代わりに、各 XXXDataSource.Factory で同等のメソッドを使用してください。
    • OkHttpDataSource コンストラクタと OkHttpDataSourceFactory を削除しました。代わりに OkHttpDataSource.Factory を使用してください。
    • PlayerMessage.setHandler(Handler) を削除しました。代わりに setLooper(Looper) を使用してください。
    • Timeline.Window.isLive フィールドを削除します。代わりに isLive() メソッドを使用してください。
    • DefaultHttpDataSource コンストラクタを削除しました。代わりに DefaultHttpDataSource.Factory を使用してください。
    • DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS を削除しました。代わりに DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS を使用してください。
    • MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean) を削除しました。代わりに MediaCodecInfo.canReuseCodec(Format, Format) を使用してください
    • DrmSessionManager.DUMMY メソッドと getDummyDrmSessionManager() メソッドを削除しました。代わりに DrmSessionManager.DRM_UNSUPPORTED を使用してください。
    • AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)AudioRendererEventListener.onAudioInputFormatChanged(Format)VideoRendererEventListener.onVideoInputFormatChanged(Format) を削除します。代わりに DecoderReuseEvaluation を受け取るオーバーロードを使用してください。
    • RendererSupport.FormatSupport IntDef と FORMAT_HANDLEDFORMAT_EXCEEDS_CAPABILITIESFORMAT_UNSUPPORTED_DRMFORMAT_UNSUPPORTED_SUBTYPEFORMAT_UNSUPPORTED_TYPE 定数を削除しました。代わりに、androidx.media3.common.C の同等の IntDef と定数(C.FORMAT_HANDLED など)を使用してください。
    • Bundleable インターフェースを削除します。これには、すべての Bundleable.Creator<Foo> CREATOR 定数フィールドの削除が含まれます。呼び出し元は、代わりに各タイプで Bundle toBundle() メソッドと static Foo fromBundle(Bundle) メソッドを使用する必要があります。

バージョン 1.4.0-rc01

2024 年 7 月 10 日

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

バージョン 1.4.0-beta01

2024 年 6 月 26 日

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

バージョン 1.4.0-alpha02

2024 年 6 月 7 日

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

バージョン 1.4.0-alpha01

2024 年 4 月 17 日

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

バージョン 1.3.0

バージョン 1.3.1

2024 年 4 月 11 日

androidx.media3:media3-*:1.3.1 がリリースされました。バージョン 1.3.1 にはこれらの commit が含まれています。

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

バージョン 1.3.0

2024 年 3 月 6 日

androidx.media3:media3-*:1.3.0 がリリースされました。バージョン 1.3.0 にはこれらの commit が含まれています。

  • 共通ライブラリ:
    • package が現在のアプリのパッケージと異なる android.resource://package/[type/]name 生リソース URI のサポートを実装します。これは常に動作するようにドキュメント化されていましたが、これまで正しく実装されていませんでした。
    • アプリコードで設定された MIME タイプ、またはメディアから読み取られた MIME タイプを完全に小文字に正規化します。
    • AdPlaybackState で、単一の Uri ではなく、完全な MediaItem を使用して広告を定義します。
    • minSdk を 19(Android KitKat)に増やします。これは他のすべての AndroidX ライブラリと整合しており、AndroidX 依存関係の最新バージョンにアップグレードするために必要です。
    • artworkUriartworkData の少なくとも一方が null 以外の場合、MediaMetadata.Builder.populate(MediaMetadata) の両方を入力します(#964)。
  • ExoPlayer:
    • アプリが再生前に特定の開始位置でコンテンツ メディアソースをプリロードできるようにする PreloadMediaSourcePreloadMediaPeriod を追加PreloadMediaSource は、Timeline を受信するためのコンテンツ メディアソースの準備、指定された開始位置での期間の準備とキャッシュ保存、トラックの選択、期間のメディアデータの読み込みを行います。アプリは PreloadMediaSource.PreloadControl を実装してプリロードの進行状況を制御し、プリロードされたソースを再生用にプレーヤーに設定します。
    • アプリが ImageRenderer.ImageOutput を設定できるようにする ExoPlayer.setImageOutput を追加しました。
    • DefaultRenderersFactory は、デフォルトで null の ImageOutputImageDecoder.Factory.DEFAULT を含む ImageRenderer をプレーヤーに提供します。
    • 無音スキップ時に Player.Listener.onPositionDiscontinuity イベントを発行(#765)。
    • 抽出時の字幕解析の試験運用版サポートを追加しました。これは MediaSource.Factory.experimentalParseSubtitlesDuringExtraction() を使用して有効にできます。
    • PreloadMediaSource でアダプティブ メディアソースをサポート。
    • HttpEngine API を使用して HttpDataSource を使用する HttpEngineDataSource を実装します。
    • CompositeSequenceableLoader のサブクラス化を防止します。このコンポーネントは以前に拡張可能にされましたが、ライブラリ内でサブクラス化されたことはありません。カスタマイズは、デコレータ パターンを使用してインスタンスをラップし、カスタム CompositeSequenceableLoaderFactory を実装することで行えます。
    • 同じ時間を繰り返すと、このアイテムのメタデータがクリアされる問題を修正しました(#1007)。
    • BundledChunkExtractor.FactoryDefaultHlsExtractorFactoryexperimentalSetSubtitleParserFactory メソッドの名前を 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 で、動画トラックの選択が優先されることを意味します。
  • エクストラクタ:
    • ColorInfo.colorSpaceColorInfo.colorTransferColorInfo.colorRange の値を取得するために、MP4 エクストラクタに AV1C の解析を追加しました(#692)。
    • MP3: Info ヘッダー(Xing ヘッダーの CBR 相当)を持つファイルに対して固定ビットレート(CBR)シークを使用します。以前は Info ヘッダーのシーク テーブルを使用していましたが、これを無視してファイルが CBR であると仮定した場合よりもシークの精度が低くなります。
    • MPEG2-TS: DTS、DTS-LBR、DTS:X Profile2 のサポートを追加(#275)。
    • TS 記述子から音声タイプを抽出し、ロールフラグにマッピングして、ユーザーがより多くの情報に基づいて音声トラックを選択できるようにしました(#973)。
  • オーディオ:
    • 音量のスムーズなランプアップにより、無音スキップ アルゴリズムを改善しました。最小限の無音とより自然な無音期間を保持しました(#7423)。
    • スキップされた無音をより確定的にレポートします(#1035)。
  • 動画:
    • VideoFrameProcessor.Factory 引数を取る MediaCodecVideoRenderer コンストラクタを変更し、VideoSinkProvider 引数を取るコンストラクタに置き換えます。カスタム VideoFrameProcessor.Factory を挿入したいアプリは、カスタム VideoFrameProcessor.Factory を使用する CompositingVideoSinkProvider をインスタンス化し、動画シンク プロバイダを MediaCodecVideoRenderer に渡すことができます。
  • テキスト:
    • DefaultExtractorsFactory.setTextTrackTranscodingEnabled を使用する際に Tried to marshall a Parcel that contained Binder objects エラーを解決するため、ビットマップ キューのシリアル化を修正しました(#836)。
    • CEA-708: rowLock 値を無視します。CEA-708-E S-2023 仕様では、ストリーム内の値に関係なく、rowLockcolumnLock の両方が true であると想定されるべきであると規定されています(columnLock のサポートは実装されていないため、常に false であると想定されます)。
  • 画像:
    • DASH サムネイルのサポートを追加しました。グリッド画像は切り抜かれ、個々のサムネイルはプレゼンテーションの時刻の直前に提供されます。ImageOutput
  • DRM:
    • 後続の暗号化されたサンプルのキーがまだ準備できていない場合でも、デフォルトで DRM コンテンツ内の暗号化されていない「クリアリード」サンプルをすぐに再生します。再生位置が暗号化されたサンプルに達したときに鍵の準備がまだできていない場合、再生中に停止することがあります(ただし、以前は再生がこの時点でまったく開始されませんでした)。この動作は、MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey または DefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys で無効にできます。
  • IMA 拡張機能:
    • 適切なファイル拡張子がない DASH 広告と HLS 広告を再生できない問題を修正
  • セッション:
    • テレビアプリのダブルクリック検出を無効化しました(#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)。
    • ライブ配信でシークを 0 にした後、トラック選択でストリームがデフォルトの位置から開始される問題を修正しました(#9347)。
    • CmcdData.Factory の新しいインスタンスがチャンクソースから bufferedDurationUs の負の値を受け取り、IllegalArgumentException が発生する問題を修正しました(#888)。
  • Transformer:
    • 高い動作レートを設定したためにエンコーダが構成時に例外をスローする問題を回避しました。
  • エクストラクタ:
    • JPEG モーション写真のセカンダリ(再生不可)HEVC トラックを ROLE_FLAG_ALTERNATE としてマークし、解像度が高いために再生用に自動的に選択されないようにします。
    • TS H264 ストリームのキーフレーム検出の誤りを修正しました(#864)。
    • 47,721 秒を超える TS ストリームの再生時間の推定を修正しました(#855)。
  • オーディオ:
    • 複数回呼び出された場合の SilenceSkippingAudioProcessor の EOS の処理を修正しました(#712)。
  • 動画:
    • Galaxy Tab S7 FE、Chromecast with Google TV、Lenovo M10 FHD Plus で、60fps AVC ストリームがサポート対象外とマークされるデバイスの問題の回避策を追加(#693)。
  • メタデータ:
    • MediaMetadata が大文字のキーを含む Vorbis コメントからのみ入力されるバグを修正しました(#876)。
    • 非常に大きな ID3 フレームを解析するときに OutOfMemoryError をキャッチします。これにより、再生が完全に失敗するのではなく、タグ情報なしで再生を続行できます。
  • DRM:
    • 偽の ClearKey https://default.url ライセンス URL の回避策を API 33 以降に拡張(以前は、回避策は API 33 にのみ適用されていました)(#837)。
    • プレーヤーにサーフェスがアタッチされていない状態で、暗号化されたコンテンツからクリア コンテンツに切り替える際の ERROR_DRM_SESSION_NOT_OPENED を修正このエラーは、クリア コンテンツの再生にセキュア デコーダが誤って使用されたことが原因で発生しました。
  • セッション:
    • カスタムキーと値を MediaMetadataCompat から MediaMetadata.extras に、MediaMetadata.extras から MediaMetadataCompat に配置します(#756#802)。
    • レガシー コントローラの notifyChildrenChanged のブロードキャストを修正しました(#644)。
    • 通知の無効な setWhen タイマーに負の時間を設定すると、一部のデバイスでクラッシュが発生するバグを修正しました(#903)。
    • 最初の通知更新がリクエストされたときにメディア通知コントローラが接続を完了していない場合の IllegalStateException を修正しました(#917)。
  • UI:
    • BottomSheetDialogFragment でマテリアル デザインを使用している場合に、早送りボタンと巻き戻しボタンが表示されない問題を修正しました(#511)。
    • PlayerControlView の早送りボタンの数字がずれて表示される問題を修正しました(#547)。
  • DASH 拡張機能:
    • DASH マニフェストで Dolby のチャンネル数として「f800」を 5 として解析(#688)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
    • MIDI: 早送りでプログラム変更イベントがスキップされる問題を修正しました(#704)。
    • FFmpeg 6.0 に移行し、サポートされている NDK を r26b に更新(#707#867)。
  • Cast 拡張機能:
    • キャスト デバイスでメディアの読み込みに失敗した場合にアプリがクラッシュしないように、Timeline の作成をサニタイズ(#708)。

バージョン 1.2.0

2023 年 11 月 15 日

  • 共通ライブラリ:
    • Log.Logger インターフェースのメソッドに @Nullable Throwable パラメータを追加します。これらのメソッドの message パラメータには、Log.{d,i,w,e}() メソッドに渡された Throwable に関する情報は含まれなくなりました。そのため、実装では、必要に応じてこの情報を手動で追加する必要があります(Logger.appendThrowableString(String, Throwable) を使用することもできます)。
    • null 値許容のジェネリック型パラメータと null 値許容の配列要素型が null 値許容として検出されない Kotlin の互換性の問題を修正しました。たとえば、TrackSelectorResult メソッドと SimpleDecoder メソッドのパラメータなどがあります(#6792)。
    • Util.shouldShowPlayButton のデフォルトの UI と通知の動作を変更して、再生が一時的に抑制されている間(一時的な音声フォーカスの喪失など)に [再生] ボタンを表示します。PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) または MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) を使用することで、以前の動作を維持できます(#11213)。
    • https://issuetracker.google.com/251172715 を修正するため、androidx.annotation:annotation-experimental1.3.1 にアップグレードします。
    • ExoPlayer.setAudioAttributesPlayer インターフェースに移動します。
  • ExoPlayer:
    • デコード専用のサンプルが正しく識別されないことが原因で AC4 ストリームでシークの問題が発生する問題を修正しました(#11000)。
    • ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput でこの機能が有効になっている場合、不適切な音声出力デバイス(Wear OS デバイスの内蔵スピーカーなど)での再生を抑制する機能を追加しました。適切な音声出力が利用できないときに再生が試みられた場合、または再生中に適切な出力がすべて切断された場合、再生抑制の理由は Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT に更新されます。適切な出力が接続されると、抑制の理由は削除されます。
    • MediaSource.canUpdateMediaItemMediaSource.updateMediaItem を追加して、作成後に Player.replaceMediaItem(s) 経由で MediaItem の更新を受け入れます。
    • ライブラリが Player.replaceMediaItem(s) 経由で提供するすべての MediaSource クラスで MediaItem の更新を許可します(#33#9978)。
    • MimeTypes.TEXT_EXOPLAYER_CUESMimeTypes.APPLICATION_MEDIA3_CUES に名前変更します。
    • PNG ファイル全体を TrackOutput に送信して読み取る PngExtractor を 1 つのサンプルとして追加します。
    • SequenceableLoader インターフェースの SequenceableLoader.continueLoading(long) メソッドを SequenceableLoader.continueLoading(LoadingInfo loadingInfo) に拡張します。LoadingInfo には、既存の playbackPositionUs に加えて、playbackSpeedlastRebufferRealtimeMs などの追加パラメータが含まれています。
    • ChunkSource インターフェースの ChunkSource.getNextChunk(long, long, List, ChunkHolder) メソッドを ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder) に拡張します。
    • 共通メディア クライアント データ(CMCD)ロギングにバッファ スターベーション(bs)、デッドライン(dl)、再生レート(pr)、スタートアップ(su)のフィールドを追加(#8699)。
    • ColorInfo に輝度とクロマのビット深度を追加(#491)。
    • 共通メディア クライアント データ(CMCD)のロギングに、次のオブジェクト リクエスト(nor)と次の範囲リクエスト(nrr)のフィールドを追加しました(#8699)。
    • クエリ パラメータを使用して共通メディア クライアント データ(CMCD)データを送信する機能を追加しました(#553)。
    • ExperimentalBandwidthMeterConcurrentModificationException を修正しました(#612)。
    • CompositeMediaSource.getMediaTimeForChildMediaTimeMediaPeriodId パラメータを追加。
    • ConcatenatingMediaSource2ClippingMediaSource(および期間/ウィンドウ時間オフセットのある他のソース)をサポート(#11226)。
    • MediaPeriodId 引数も受け取るように BaseRenderer.onStreamChanged() を変更
  • Transformer:
    • 画像入力の EXIF 回転データを解析します。
    • TransformationRequest.HdrMode アノテーション型とそれに関連する定数を削除しました。代わりに、Composition.HdrMode とその関連定数を使用してください。
    • OverlaySettings を簡素化して、回転の問題を修正します。
    • SampleConsumer.queueInputBitmapframeRate パラメータと durationUs パラメータを TimestampIterator に変更しました。
  • トラックの選択:
    • DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness を追加して、シームレスでない適応を明示的に許可または禁止します。デフォルトは、現在の true の動作のままです。
  • エクストラクタ:
    • MPEG-TS: ストリームの最後のアアクセス ユニットをサンプルキューに渡して、最後のフレームがレンダリングされるようにします(#7909)。
    • rotationDegrees を決定する際のタイプミスを修正projectionPosePitchprojectionPoseRoll に変更しました(#461)。
    • Extractor インスタンスを instanceof で直接検査できるという前提を削除します。Extractor の実装の詳細に実行時にアクセスする場合は、まず Extractor.getUnderlyingInstance を呼び出す必要があります。
    • BmpExtractor を追加しました。
    • WebpExtractor を追加しました。
    • HeifExtractor を追加しました。
    • Mp4ExtractorQuickTime classic のサポートを追加
  • オーディオ:
    • MP4 と Matroska で 24/32 ビットのビッグ エンディアン PCM のサポートを追加し、MP4 で lpcm の PCM エンコードを解析します。
    • MP4 で Vorbis 音声を抽出するためのサポートを追加。
    • DefaultAudioOffloadSupportProvider を介して、シンクがフォーマットに対して提供できるオフロード サポートのレベルを取得する AudioSink.getFormatOffloadSupport(Format) を追加しました。isFormatSupportedisGaplessSupportedisSpeedChangeSupported を含む新しい AudioOffloadSupport を返します。
    • オーディオ シンクのオフロード構成を設定する AudioSink.setOffloadMode() を追加します。デフォルトは AudioSink.OFFLOAD_MODE_DISABLED です。
    • オフロードは、TrackSelectionParameterssetAudioOffloadPreference を介して有効にできます。設定された設定が有効化で、デバイスがその形式のオフロードをサポートし、トラック選択が単一のオーディオ トラックである場合、オーディオ オフロードが有効になります。
    • audioOffloadModePreferenceAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED に設定されている場合、DefaultTrackSelector は、そのトラックの形式がオフロードでサポートされている場合にのみ、音声トラックを選択します。オフロードでサポートされている音声トラックがない場合、トラックは選択されません。
    • トラックの切り替え後に再生位置の問題が発生するため、API レベル 33 より前のオフロードのギャップレス サポートを無効化。
    • DefaultRenderersFactory.buildAudioSink メソッド シグネチャからパラメータ enableOffload を削除します。
    • メソッド DefaultAudioSink.Builder.setOffloadMode を削除します。
    • intdef 値 DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED を削除します。
    • オフロード再生中に Opus ギャップレス メタデータのサポートを追加。
    • 最初の書き込みで失敗した場合にオフロードを無効にしてレンダラを復元できるようにしました(#627)。
    • 音声のみのオフロード再生で、オフロード スケジューリングをデフォルトで有効化。
    • ExoPlayer.experimentalSetOffloadSchedulingEnabledAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged を削除します。
    • onExperimentalSleepingForOffloadChanged の名前を onSleepingForOffloadChanged に、onExperimentalOffloadedPlayback の名前を onOffloadedPlayback に変更しました。
    • オーディオ オフロード モード関連の TrackSelectionParameters インターフェースと定義を内部 AudioOffloadPreferences クラスに移動。
    • onAudioTrackInitializedonAudioTrackReleased のコールバックを AnalyticsListenerAudioRendererEventListenerAudioSink.Listener に追加します。
    • DTS Express の音声バッファのアンダーフローの問題を修正しました(#650)。
    • E-AC3-JOC の機能チェックで IllegalArgumentException がスローされるバグを修正しました(#677)。
  • 動画:
    • MediaCodecVideoRenderer がカスタム VideoFrameProcessor.Factory を使用できるようにします。
    • 音声ストリームが負のタイムスタンプで始まる場合、最初のフレームをレンダリングできないバグを修正しました(#291)。
  • テキスト:
    • ExoplayerCuesDecoder を削除しました。sampleMimeType = application/x-media3-cues を含むテキスト トラックは、SubtitleDecoder インスタンスを必要とせずに TextRenderer によって直接処理されるようになりました。
  • メタデータ:
    • 実装はとにかく null を返す必要があるため、「デコード専用」のサンプルに対して MetadataDecoder.decode が呼び出されることはなくなります。
  • 効果:
    • タイムスタンプで VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) キューイング ビットマップ入力を追加。
    • VideoFrameProcessor.registerInputStream() を非ブロッキングに変更します。アプリは VideoFrameProcessor.Listener#onInputStreamRegistered() を実装する必要があります。
    • VideoFrameProcessor.queueInputBitmapframeRate パラメータと durationUs パラメータを TimestampIterator に変更しました。
  • IMA 拡張機能:
    • 再生リストの最初のアイテムではないマルチピリオド DASH ライブ ストリームで例外がスローされるバグを修正しました(#571)。
    • AdsLoader.destroy() を呼び出す前に StreamManager をリリースする
    • IMA SDK のバージョンを 3.31.0 に引き上げました。
  • セッション:
    • DefaultMediaNotificationProvider で通知のフォアグラウンド サービスの動作を FOREGROUND_SERVICE_IMMEDIATE に設定します(#167)。
    • Samsung デバイスで非推奨の API に関する問題を回避するため、API 31 以上では android.media.session.MediaSession.setMediaButtonBroadcastReceiver() のみを使用します(#167)。
    • メディア通知コントローラをプロキシとして使用して、通知とプラットフォーム セッションの入力に使用される利用可能なコマンドとカスタム レイアウトを設定します。
    • Media3 内の MediaSessionService.onStartCommand() で受信したメディアボタン イベントを、プラットフォーム セッションにルーティングして 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:
    • Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT による再生抑制を処理する Wear OS デバイス用の Player.Listener 実装を追加します。この実装では、システム ダイアログを起動して、ユーザーが適切な音声出力(Bluetooth ヘッドフォンなど)を接続できるようにします。リスナーは、構成可能なタイムアウト(デフォルトは 5 分)内に適切なデバイスが接続されると、再生を自動的に再開します。
  • ダウンロード:
    • Android 14 との互換性のために、DownloadService の「データ同期」フォアグラウンド サービス タイプを宣言します。このサービスを使用する場合、アプリはマニフェストで dataSyncforegroundServiceType として追加し、FOREGROUND_SERVICE_DATA_SYNC 権限(#11239)を追加する必要があります。
  • HLS 拡張機能:
    • HLS ライブ プレイリストを、最後の読み込み完了時間ではなく、最後の読み込み開始時間から計算された間隔で更新します(#663)。
  • DASH 拡張機能:
    • セグメント テンプレート URL で同じ DASH 識別子を複数許可します。
    • 抽出時の字幕解析の試験運用版サポートを追加しました。これにより、字幕セグメント間の切り替え時にちらつきを解消するなど、重複する字幕の統合がより適切にサポートされます。これは DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() を使用して有効にできます(#288)。
  • RTSP 拡張機能:
    • TCP にフォールバックしたときに IndexOutOfBoundsException が発生したり、特定の状況で再生がハングアップしたりする可能性のある競合状態を修正しました。
    • RtspMediaPeriod の読み込み状態を返すときに RTSP セットアップの状態を確認します(#577)。
    • Options レスポンスのパブリック ヘッダーでカスタム Rtsp リクエスト メソッドを無視する(#613)。
    • キープアライブ RTSP Options リクエストを送信する時間間隔で RTSP Setup Response タイムアウト値を使用します(#662)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
    • Jsyn ライブラリを使用してオーディオを合成し、標準 MIDI ファイルの再生をサポートする MIDI デコーダ モジュールをリリース。
    • DecoderOutputBuffer.shouldBeSkipped を追加して、表示する必要のない出力バッファを直接マークします。これは、非推奨となる C.BUFFER_FLAG_DECODE_ONLY よりも優先されます。
    • デコーダが開始時刻前にデコード専用のサンプルをドロップできるように、Decoder.setOutputStartTimeUsSimpleDecoder.isAtLeastOutputStartTimeUs を追加しました。これは、非推奨となる Buffer.isDecodeOnly よりも優先されます。
    • MIDI デコーダ アーティファクトを Maven リポジトリに公開するバグを修正アーティファクトの名前が media3-exoplayer-midi に変更されました(#734)。
  • Leanback 拡張機能:
    • サーフェスを無効にすると Leanback コードで ArithmeticException が発生する可能性があるバグを修正しました(#617)。
  • テスト ユーティリティ:
    • TestExoPlayerBuilderFakeClock を Espresso UI テストと Compose UI テストに対応させます。この修正により、Espresso または Compose ビューの操作中に再生が非決定的に進むバグが修正されます。
  • サポートが終了したシンボルを削除しました。
    • TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean) を削除しました。代わりに Composition.Builder.setHdrMode(int) を使用し、CompositionTransformer.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:
    • プレイリストがクリアされた後にスプリアスな PlaybackStats が作成される PlaybackStatsListener の問題を修正
    • 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.onConnectAcceptedResultBuilder を使用して、接続が完了したときにカスタム レイアウトがコントローラで使用可能になるようにします。
    • MediaLibraryServiceLegacyStub が、この機能をサポートしていない Result にエラーを送信し、UnsupportedOperationException を生成していた問題を修正しました(#78)。
    • PlayerWrapperVolumeProviderCompat を作成する方法を修正します。レガシー コマンド(COMMAND_ADJUST_DEVICE_VOLUMECOMMAND_SET_DEVICE_VOLUME)と新しいコマンド(COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS)の両方で volumeControlType を決定します(#554)。

バージョン 1.1.0

2023 年 7 月 5 日

  • 共通ライブラリ:
    • 不適切な音声ルートの抑制理由を追加し、準備ができたら再生します。 抑制が長すぎる理由を変更します。(#15)。
    • Player にコマンドを追加します。
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • ユーザーが音量フラグを指定できるように、Player にオーバーロードされたメソッドを追加します。
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • DeviceInfoBuilder を追加し、既存のコンストラクタを非推奨にしました。
    • リモート再生のルーティング コントローラ ID を指定するために DeviceInfo.routingControllerId を追加しました。
    • 同じ位置でアイテムを追加および削除するためのショートカットとして 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 の送信リクエストに Common Media Client Data(CMCD)を含めるサポートを追加しました。brblcidrtpsid の各フィールドが組み込まれました(#8699)。API の構造と API メソッド:
      • CMCD ロギングはデフォルトで無効になっています。有効にするには MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) を使用します。
      • デフォルトではすべてのキーが有効になっています。ログに記録するキーをフィルタするには、CmcdConfiguration.RequestConfig.isKeyAllowed(String key) をオーバーライドします。
      • CmcdConfiguration.RequestConfig.getCustomData() をオーバーライドして、カスタムキーのロギングを有効にします。
    • メインのデモのマニフェストにアクションを追加して、カスタム *.exolist.json ファイルでデモアプリを起動しやすくします(#439)。
    • 動画再生中に Effect を使用するための ExoPlayer.setVideoEffects() を追加。
    • int ではなく long として sourceId を保存するように SampleQueue を更新します。これにより、パブリック メソッド SampleQueue.sourceIdSampleQueue.peekSourceId のシグネチャが変更されます。
    • LoadControl メソッド shouldStartPlaybackonTracksSelected に、これらのメソッドを関連する MediaPeriod に関連付けることができるパラメータを追加します。
    • マップでキーとして使用される UID を含む期間を含むタイムライン パラメータを追加して、ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) のシグネチャを変更します。これは、マルチピリオド ライブ ストリームで同時実行の問題を回避するために必要です。
    • EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs) を非推奨にします。代わりに、mediaTimeOffsetUs のないメソッドのバリアントを呼び出すことができます。非推奨のバリアントの場合でも、ディスパッチャによってディスパッチされる MediaLoadData オブジェクトの startTimeUsendTimeUs にオフセットが追加されなくなりました。
    • ExoTrackSelection.blacklist の名前を excludeTrack に、isBlacklisted の名前を isTrackExcluded に変更します。
    • 空のプレイリストで呼び出された場合の ExoPlayer.setMediaItem(s)addMediaItem(s) の動作の不整合を修正しました。
  • Transformer:
    • Transformer.Builder.setMediaSourceFactory(MediaSource.Factory) を削除します。代わりに ExoPlayerAssetLoader.Factory(MediaSource.Factory)Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory) を使用してください。
    • Transformer.startTransformation(MediaItem, ParcelFileDescriptor) を削除しています。
    • 入力フレームの処理が保留中のときに動画ストリームの終了が通知されると、変換が停止し(多重化ツールのタイムアウトにつながる)、変換が停止するバグを修正しました。
    • findDecoder/EncoderForFormat ユーティリティを使用する代わりに MediaCodecList を介してコーデックをクエリし、サポートを拡大します。
    • 一部のデバイスで動作しないため、DefaultEncoderFactory の B フレーム設定を削除します。
  • トラック選択:
    • デフォルトで無効化される DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange を追加しました。有効にすると、レンダラーの機能が変更されたときに DefaultTrackSelector が新しいトラック選択をトリガーします。
  • エクストラクタ:
    • Ogg: 長い再生時間のファイルでシークする際のバグを修正しました(#391)。
    • FMP4: TimestampAdjuster が emsg アトムのメタデータ サンプル時間で誤ったタイムスタンプ オフセットを初期化する問題を修正しました(#356)。
  • オーディオ:
    • トンネリングが有効で AudioProcessors がアクティブな場合に、一部の再生が失敗するバグを修正しました(ギャップレス トリミングなど)(#10847)。
    • ダイレクト再生(オフロード)で Opus フレームを Ogg パケットにカプセル化します。
    • オフロード スケジューリングでスリープ中の現在位置を推定します。
    • プレーヤーのライフサイクルの最後にリソースを解放するための Renderer.release()AudioSink.release() を追加します。
    • DefaultAudioSink でオーディオ機能の変更をリッスンします。DefaultAudioSink のコンストラクタに必須パラメータ context を追加します。これにより、DefaultAudioSinkAudioCapabilitiesReceiver のリスナーとして登録され、機能の変更が通知されると audioCapabilities プロパティを更新します。
    • AudioSink.Listener インターフェースの新しいイベント onAudioCapabilitiesChanged と、onRendererCapabilitiesChanged イベントをトリガーする新しいインターフェース RendererCapabilities.Listener を介して、オーディオ機能の変更を伝播します。
    • オーディオ チャンネルにスケーリング/ミキシングを適用するための ChannelMixingAudioProcessor を追加しました。
    • オーディオ機能の変更後にバイパス モードが可能な場合にオーディオ デコーダを破棄するため、新しい int 値 DISCARD_REASON_AUDIO_BYPASS_POSSIBLEDecoderDiscardReasons に追加
    • DTS Express と DTS:X のダイレクト再生のサポートを追加しました(#335)。
  • 動画:
    • レンダラが無効になっている場合、MediaCodecVideoRenderer が幅と高さが 0 の VideoSize を報告するようにします。Player.getVideoSize() が変更されると、Player.Listener.onVideoSizeChanged が適宜呼び出されます。この変更により、Player.getCurrentTracks が動画をサポートしていない場合や、サポートされている動画トラックのサイズがまだ決定されていない場合、MediaCodecVideoRenderer を使用する ExoPlayer の動画サイズは幅と高さが 0 になります。
  • DRM:
    • DRM パッケージの外部から呼び出されることが想定されていない DefaultDrmSession の内部専用メソッドの可視性を低減します。
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • MP4 コンテナ ファイルの作成に使用できる新しい muxer ライブラリを追加。
  • IMA 拡張機能:
    • DAI で複数期間のライブ DASH ストリームを有効にします。現在の実装では、ライブ配信でのシークはまだサポートされていません(#10912)。
    • 連続するタイムラインで計算されたコンテンツの位置がわずかに異なるため、ライブ ストリームに新しい広告グループが挿入されるバグを修正
  • セッション:
    • 現在 Player メソッドを呼び出しているコントローラの情報を取得するヘルパー メソッド MediaSession.getControllerForCurrentRequest を追加します。
    • androidx.media3.session.MediaButtonReceiver を追加して、アプリが Bluetooth ヘッドセットなどから送信されたメディア ボタン イベントで再生再開を実装できるようにしました(#167)。
    • リクエストされた MediaItemsLocalConfiguration(URI など)を持っている場合、Player に渡せるように、MediaSession.Callback.onAddMediaItems にデフォルト実装を追加(#282)。
    • Android 12 以前では、コンパクト メディア通知ビューに「前の位置にシーク」と「次の位置にシーク」のコマンドボタンをデフォルトで追加(#410)。
    • リクエストされた MediaItemsLocalConfiguration(URI など)を持っている場合、Player に渡せるように、MediaSession.Callback.onAddMediaItems にデフォルト実装を追加(#282)。
    • Android 12 以前では、コンパクト メディア通知ビューに「前の位置にシーク」と「次の位置にシーク」のコマンドボタンをデフォルトで追加(#410)。
  • UI:
    • 再生/一時停止ボタン付きのカスタム UI 要素を作成する Util メソッド shouldShowPlayButtonhandlePlayPauseButtonAction を追加します。
  • RTSP 拡張機能:
    • MPEG4-LATM の場合、Describe Response SDP メッセージにない場合は、デフォルトの profile-level-id 値を使用します(#302)。
    • DESCRIBE レスポンス ヘッダーに存在する場合、RTSP セッションからの相対パス解決にベース URI を使用します(#11160)。
  • DASH 拡張機能:
    • マルチ期間 DASH ストリームの MediaLoadData.startTimeMsMediaLoadData.endTimeMs からメディア時間オフセットを削除します。
    • マルチピリオドのライブ Dash メディアソースを再準備すると IndexOutOfBoundsException が発生するバグを修正しました(#10838)。
  • HLS 拡張機能:
    • HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) を追加して、読み込みスレッドが TimestampAdjuster の初期化を待機するタイムアウトを設定します。タイムアウト前に初期化が完了しない場合は、再生が無限に停止しないように PlaybackException がスローされます。デフォルトではタイムアウトは 0 に設定されています(#323)。
  • テスト ユーティリティ:
    • DataSourceContractTest で URI スキームの大文字と小文字が区別されないことを確認します。
  • サポートが終了したシンボルを削除しました。
    • DefaultAudioSink コンストラクタを削除しました。代わりに DefaultAudioSink.Builder を使用してください。
    • HlsMasterPlaylist を削除し、代わりに HlsMultivariantPlaylist を使用します。
    • Player.stop(boolean) を削除しました。代わりに Player.stop()Player.clearMediaItems()resettrue の場合)を使用してください。
    • 非推奨の 2 つの SimpleCache コンストラクタを削除し、代わりに DatabaseProvider を受け取る非推奨でないコンストラクタを使用して、パフォーマンスを向上させます。
    • DefaultBandwidthMeter コンストラクタを削除しました。代わりに DefaultBandwidthMeter.Builder を使用してください。
    • DefaultDrmSessionManager コンストラクタを削除しました。代わりに DefaultDrmSessionManager.Builder を使用してください。
    • 非推奨の HttpDataSource.InvalidResponseCodeException コンストラクタを 2 つ削除し、追加のフィールド(causeresponseBody)を受け入れる非推奨でないコンストラクタを使用して、エラー ロギングを強化します。
    • DownloadHelper.forProgressiveDownloadHelper.forHlsDownloadHelper.forDashDownloadHelper.forSmoothStreaming を削除し、代わりに DownloadHelper.forMediaItem を使用します。
    • 非推奨の DownloadService コンストラクタを削除し、channelDescriptionResourceId パラメータを指定するオプションを含む非推奨のコンストラクタを使用します。
    • 非推奨の Charset の String 定数(ASCII_NAMEUTF8_NAMEISO88591_NAMEUTF16_NAMEUTF16LE_NAME)を削除し、代わりに kotlin.text パッケージ、java.nio.charset.StandardCharsets、または com.google.common.base.Charsets の Kotlin Charset を使用します。
    • 非推奨の WorkManagerScheduler コンストラクタを削除し、代わりに Context パラメータを指定するオプションを含む非推奨のコンストラクタを使用します。
    • Format クラスのインスタンス化に使用されていた、サポートが終了したメソッド createVideoSampleFormatcreateAudioSampleFormatcreateContainerFormatcreateSampleFormat を削除しました。代わりに、Format のインスタンスを作成するには Format.Builder を使用します。
    • 非推奨のメソッド copyWithMaxInputSizecopyWithSubsampleOffsetUscopyWithLabelcopyWithManifestFormatInfocopyWithGaplessInfocopyWithFrameRatecopyWithDrmInitDatacopyWithMetadatacopyWithBitratecopyWithVideoSize を削除し、代わりに 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.onSeekProcessedAnalyticsListener.onSeekProcessed を削除し、代わりに DISCONTINUITY_REASON_SEEK を使用して onPositionDiscontinuity を使用します。
    • 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 で、params.isRecent == true を使用して System UI から Callback.onGetLibraryRoot への呼び出しで MediaLibraryService が null を返さないバグを修正しました(#355)。
    • MediaSessionService または MediaLibraryService のメモリリークを修正しました(#346)。
    • MediaSessionTimeline と位置情報の更新を組み合わせると、MediaControllerIllegalStateException をスローするバグを修正しました。

バージョン 1.0.1

2023 年 4 月 18 日

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

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

  • コアライブラリ:
    • デフォルトの位置にシークしたときに、ターゲット ライブ ストリームのオーバーライドをリセットします(#11051)。
    • メディア内の空のサンプル ストリームが原因で再生が停止するバグを修正しました。
  • セッション:
    • 以前の MediaSessionCompat によって公開された複数の同一のキューアイテムが MediaController で例外を引き起こすバグを修正しました(#290)。
    • MediaSession.broadcastCustomCommand のレガシー MediaControllerCompat.Callback.onSessionEvent への転送の欠落を追加(#293)。
    • MediaSession.setPlayer を呼び出しても利用可能なコマンドが更新されないバグを修正しました。
    • Format.metadata を含むグループを参照している場合、MediaController から送信された TrackSelectionOverride インスタンスが無視される問題を修正しました(#296)。
    • 以前の MediaSessionCompat を介してメタデータにアクセスするには Player.COMMAND_GET_CURRENT_MEDIA_ITEM が必要になる問題を修正しました。
    • バックグラウンド スレッドの MediaSession インスタンスが MediaSessionService で使用されるとクラッシュする問題を修正しました(#318)。
    • アプリが意図していないにもかかわらず、ライブラリによってメディア ボタン レシーバが宣言される問題を修正しました(#314)。
  • DASH:
    • 空のセグメント タイムラインの処理を修正しました(#11014)。
  • RTSP:
    • UDP での RTSP セットアップが RTSP エラー 461 UnsupportedTransport で失敗した場合、TCP で再試行します(#11069)。

バージョン 1.0.0

2023 年 3 月 22 日

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

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

1.0.0-rc02 からの変更はありません。

バージョン 1.0.0-rc02

2023 年 3 月 2 日

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

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

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

バージョン 1.0.0-rc01

2023 年 2 月 16 日

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

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

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

バージョン 1.0.0-beta03

2022 年 11 月 22 日

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

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

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

バージョン 1.0.0-beta02

2022 年 7 月 21 日

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

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

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

バージョン 1.0.0-beta01

2022 年 6 月 16 日

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

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

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

バージョン 1.0.0-alpha03

2022 年 3 月 14 日

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

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

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

バージョン 1.0.0-alpha02

2022 年 3 月 2 日

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

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

  • コアライブラリ:
    • 保護されたメソッド DefaultRenderersFactory.getCodecAdapterFactory() を追加し、buildVideoRenderers() または buildAudioRenderers() をオーバーライドする DefaultRenderersFactory のサブクラスが、コーデック アダプター ファクトリにアクセスして MediaCodecRenderer インスタンスに渡せるようにしました。
    • ICY ヘッダー フィールド namegenre をそれぞれ MediaMetadata.stationMediaMetadata.genre に反映し、Player.Listener.onMediaMetadataChanged() を介してアプリに到達できるようにしました(#9677)。
    • DefaultHttpDataSource#getResponseHeaders から null のキーを削除しました。
    • MediaCodec インスタンスの作成に失敗した場合、スリープと再試行を行います。これにより、サーフェスを安全なコーデックから別のコーデックに切り替えたときに一部のデバイスで発生する問題を回避できます(#8696)。
    • MediaCodecAdapter.getMetrics() を追加して、ユーザーが MediaCodec から指標データを取得できるようにしました(#9766)。
    • Maven の依存関係の解決を修正しました(#8353)。
    • 低レイテンシ機能がないライブ ストリームや、速度設定のユーザー リクエストがないライブ ストリームについて、自動速度調整を無効にしました(#9329)。
    • DecoderCounters#inputBufferCount から queuedInputBufferCount に名前を変更しました。
    • SimpleExoPlayer.renderers を非公開にしました。レンダラには ExoPlayer.getRenderer を介してアクセスできます。
    • Player.EventFlags の値と一致するように、一部の AnalyticsListener.EventFlags 定数値を更新しました。
    • AnalyticsCollector をインターフェースとデフォルトの実装に分割し、アプリで必要ない場合は R8 によって削除されるようにしました。
  • トラック選択:
    • トラック選択での優先動画ロールフラグをサポートしました(#9402)。
    • 複数の動画トラックを選択する際に優先する MIME タイプとロールフラグが考慮されるように、動画トラック選択ロジックを更新しました(#9519)。
    • デコーダとハードウェアのサポートレベルが同じである自動選択形式のみを選択するように、動画と音声のトラック選択ロジックを更新しました(#9565)。
    • プライマリのハードウェア アクセラレーテッド デコーダで複数のコーデックがサポートされている場合は、より効率的なコーデックを優先するように、動画トラック選択ロジックを更新しました(#4835)。
    • 技術的なトラック選択の制約(優先 MIME タイプ、最大チャンネル数など)よりも、音声コンテンツの設定(「デフォルト」の音声トラック、システム ロケール言語に一致するトラックなど)を優先します。
    • あるトラック グループをオーバーライドしても同じタイプの他のトラック グループが無効にならないという、トラック選択の問題を修正しました(#9675)。
    • 空でないトラックと空のトラックのオーバーライドが混在していると正しく適用されないという、トラック選択の問題を修正しました(#9649)。
    • TrackGroupArray 内の TrackGroup の重複を禁止しました。TrackGroup コンストラクタで id を設定することで、TrackGroup が常に区別できるようになります。これにより、アクティブなトラックのオーバーライドでアプリをバックグラウンド化した後に再生を再開するとクラッシュする問題が修正されます(#9718)。
    • 再生がライブエッジに非常に近い場合でも、十分なネットワーク帯域幅があれば品質を向上させられるように、AdaptiveTrackSelection のロジックを修正しました(#9784)。
  • 動画:
    • 必要に応じて互換性のある H264/H265 デコーダを使用するように、ドルビー ビジョンのデコーダ フォールバック ロジックを修正しました。
  • オーディオ:
    • 必要に応じて互換性のある E-AC3 デコーダを使用するように、ドルビー アトモス(E-AC3-JOC)のデコーダ フォールバック ロジックを修正しました。
    • null ではなく AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES を明示的に渡すことが必須になるように、AudioCapabilities API を変更しました。
    • AudioTrackBufferSizeProviderDefaultAudioSink に挿入することで、AudioTrack バッファサイズの計算をカスタマイズできるようにしました(#8891)。
    • リクエストされたバッファサイズが 1 MB を超える場合は、AudioTrack の作成を再試行します(#9712)。
  • エクストラクタ:
    • WAV: RF64 ストリームのサポートを追加しました(#9543)。
    • H.265 SPS NAL ユニットの不適切な解析を修正しました(#9719)。
    • Ogg Opus ファイルと Ogg Vorbis ファイルの Vorbis コメント(METADATA_BLOCK_PICTURE を含む)を解析します。
  • テキスト:
    • 構成から作成された字幕トラックの Format.id フィールドに反映される MediaItem.SubtitleConfiguration.id フィールドを追加しました(#9673)。
    • Matroska コンテナでの WebVTT 字幕の基本的なサポートを追加しました(#9886)。
    • 宣言されたサイズを超えるサービス ブロックを Cea708Decoder が読み取らないようにしました。
  • DRM:
    • DrmSessionManager.(pre)acquireSession から playbackLooper を削除しました。カスタムの MediaSource でアプリが DrmSessionManager を使用している場合は、代わりに playbackLooperDrmSessionManager.setPlayer に渡す必要があります。
  • 広告の再生 / IMA:
    • IMA ダイナミック広告挿入(DAI)のサポートを追加しました(#8213)。
    • 広告グループをリセットしてもう一度再生できるように、AdPlaybackState にメソッドを追加しました(#9615)。
    • 広告の再生時、再生速度 1.0 を強制適用します(#9018)。
    • 広告グループの読み込みに失敗するとすぐに再生がリセットされる問題を修正しました(#9929)。
  • UI:
    • 特定のテーマを使用している場合の、StyledPlayerView の巻き戻しボタンと早送りボタンの数字の色を修正しました(#9765)。
    • 再生速度の文字列を正しく解釈するようになりました(#9811)。
  • DASH:
    • 解析した必須プロパティと補足プロパティを Representation に追加しました(#9579)。
    • forced-subtitle トラックロールをサポートしました(#9727)。
    • main トラックロールを C.SELECTION_FLAG_DEFAULT として解釈しないようにしました。
    • DVB 名前空間を宣言していないマニフェストのベース URL 除外ロジックを修正しました(#9856)。
    • 相対 MPD.Location URL をサポートしました(#9939)。
  • HLS:
    • 音声のみの HLS ストリームの Format.label を正しく入力できるようになりました(#9608)。
    • 起動時間を改善するためにデフォルトでチャンクレス準備を使用します。マスター プレイリストで宣言されていないクローズド キャプション トラックが描出に含まれている場合は、マスター プレイリストに追加して再生できるようにするか、HlsMediaSource.Factory.setAllowChunklessPreparation(false) でチャンクレス準備をオフにする必要があります。
    • HLS でのキーフレームの正確なシークをサポートしました(#2882)。
  • RTSP:
    • 任意のサーバー接続に使用される SocketFactory をオーバーライドするクライアント API を提供しました(#9606)。
    • DIGEST と BASIC がどちらも存在する場合、DIGEST 認証方式を優先します(#9800)。
    • RTSP トラック タイミングを利用できない場合に対応しました(#9775)。
    • 無効な RTP-Info ヘッダー値を無視するようになりました(#9619)。
  • Transformer:
    • 必要な最小 API バージョンを 21 に増やしました。
    • TransformationException は、変換中に発生するエラーの記述に使用されるようになりました。
    • 変換オプションを指定するための TransformationRequest を追加しました。
    • 複数のリスナーを登録できるようになりました。
    • コーデック出力が部分的に読み取られたときに Transformer が停止する問題を修正しました。
    • muxer スローを解放するときに Transformer.getProgress で発生する可能性がある NPE を修正しました。
    • 変換を適用するためのデモアプリを追加しました。
  • MediaSession 拡張機能:
    • デフォルトで、停止時に MediaSessionConnector がプレイリストを消去するようになりました。プレイリストを保持する必要があるアプリは、コネクタで setClearMediaItemsOnStop(false) を呼び出すことができます。
  • Cast 拡張機能:
    • CastPlayeronIsPlayingChanged を正しく呼び出せないバグを修正しました(#9792)。
    • DefaultMediaItemConverter を使用したアートワークを含む音声メタデータをサポートしました(#9663)。
  • FFmpeg 拡張機能:
    • build_ffmpeg.sh が GNU ではなく LLVM の bin utils に依存するようになりました(#9933)。
  • Android 12 の互換性:
    • com.google.android.gms:play-services-cast-framework:20.1.0 に依存するように Cast 拡張機能をアップグレードしました。以前のバージョンの play-services-cast-framework は Android 12 をターゲットとするアプリに対応しておらず、PendingIntent の作成時に IllegalArgumentException でクラッシュします(#9528)。
  • サポートが終了したシンボルを削除しました。
    • Player.EventListener を削除しました。代わりに Player.Listener を使用してください。
    • MediaSourceFactory#setDrmSessionManagerMediaSourceFactory#setDrmHttpDataSourceFactoryMediaSourceFactory#setDrmUserAgent を削除しました。代わりに MediaSourceFactory#setDrmSessionManagerProvider を使用してください。
    • MediaSourceFactory#setStreamKeys を削除しました。代わりに MediaItem.Builder#setStreamKeys を使用してください。
    • MediaSourceFactory#createMediaSource(Uri) を削除しました。代わりに MediaSourceFactory#createMediaSource(MediaItem) を使用してください。
    • DashMediaSourceHlsMediaSourceSsMediaSource から setTag を削除しました。代わりに MediaItem.Builder#setTag を使用してください。
    • DashMediaSource#setLivePresentationDelayMs(long, boolean) を削除しました。MediaItem.Builder#setLiveConfigurationMediaItem.LiveConfiguration.Builder#setTargetOffsetMs を使用してマニフェストをオーバーライドするか、DashMediaSource#setFallbackTargetLiveOffsetMs を使用してフォールバック値を提供してください。
    • (Simple)ExoPlayer.setThrowsWhenUsingWrongThread を削除しました。スレッドの強制適用をオプトアウトすることはできなくなりました。
    • ActionFileActionFileUpgradeUtil を削除しました。ExoPlayer 2.16.1 以前で ActionFileUpgradeUtil を使用して、以前のアクション ファイルを DefaultDownloadIndex に統合してください。
    • ProgressiveMediaSource#setExtractorsFactory を削除しました。代わりに ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory) コンストラクタを使用してください。
    • ProgressiveMediaSource.Factory#setTagProgressiveMediaSource.Factory#setCustomCacheKey を削除しました。代わりに MediaItem.Builder#setTagMediaItem.Builder#setCustomCacheKey を使用してください。
    • DefaultRenderersFactory(Context, @ExtensionRendererMode int) コンストラクタと DefaultRenderersFactory(Context, @ExtensionRendererMode int, long) コンストラクタを削除しました。代わりに DefaultRenderersFactory(Context) コンストラクタ、DefaultRenderersFactory#setExtensionRendererModeDefaultRenderersFactory#setAllowedVideoJoiningTimeMs を使用してください。
    • すべてのパブリック CronetDataSource コンストラクタを削除しました。代わりに CronetDataSource.Factory を使用してください。
  • 次の IntDefs@Target(TYPE_USE) のみに変更しました。Kotlin での使用のコンパイルが失敗するおそれがありますが、アノテーションを移動して型(Int)にアノテーションを付けることで修正できます。
    • @AacAudioObjectType
    • @Ac3Util.SyncFrameInfo.StreamType
    • @AdLoadException.Type
    • @AdtsExtractor.Flags
    • @AmrExtractor.Flags
    • @AspectRatioFrameLayout.ResizeMode
    • @AudioFocusManager.PlayerCommand
    • @AudioSink.SinkFormatSupport
    • @BinarySearchSeeker.TimestampSearchResult.Type
    • @BufferReplacementMode
    • @C.BufferFlags
    • @C.ColorRange
    • @C.ColorSpace
    • @C.ColorTransfer
    • @C.CryptoMode
    • @C.Encoding
    • @C.PcmEncoding
    • @C.Projection
    • @C.SelectionReason
    • @C.StereoMode
    • @C.VideoOutputMode
    • @CacheDataSource.Flags
    • @CaptionStyleCompat.EdgeType
    • @DataSpec.Flags
    • @DataSpec.HttpMethods
    • @DecoderDiscardReasons
    • @DecoderReuseResult
    • @DefaultAudioSink.OutputMode
    • @DefaultDrmSessionManager.Mode
    • @DefaultTrackSelector.SelectionEligibility
    • @DefaultTsPayloadReaderFactory.Flags
    • @EGLSurfaceTexture.SecureMode
    • @EbmlProcessor.ElementType
    • @ExoMediaDrm.KeyRequest.RequestType
    • @ExtensionRendererMode
    • @Extractor.ReadResult
    • @FileTypes.Type
    • @FlacExtractor.Flagscom.google.android.exoplayer2.ext.flac パッケージ)
    • @FlacExtractor.Flagscom.google.android.exoplayer2.extractor.flac パッケージ)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

バージョン 1.0.0-alpha01

2021 年 10 月 27 日

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

新機能

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

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

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

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