Media3

メディアのユースケースのサポート ライブラリ。
最新の更新 安定版リリース リリース候補版 ベータ版リリース アルファ版リリース
2024 年 4 月 12 日 1.3.1 - - 1.4.0-alpha01

依存関係の宣言

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

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

Groovy

dependencies {
    def media3_version = "1.3.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
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

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

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

    // For integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

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

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

    // 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"
}

Kotlin

dependencies {
    val media3_version = "1.3.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
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

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

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

    // For integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

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

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

    // 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")
}

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

フィードバック

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

バージョン 1.4.0

バージョン 1.4.0-alpha01

2024 年 4 月 17 日

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

  • ExoPlayer:
    • rankingData で定義された優先度に基づいて複数のソースのプリロードを調整する BasePreloadManager を追加しました。このクラスを拡張することでカスタマイズできます。DefaultPreloadManager を追加しました。これは、PreloadMediaSource を使用してソースのメディア サンプルをメモリにプリロードし、UI 上のアイテムのインデックスを示す整数の rankingData を使用します。
    • LoadControl のほとんどのメソッドに PlayerId を追加して、LoadControl の実装で複数のプレーヤーをサポートできるようにします。
    • Buffer.isDecodeOnly()C.BUFFER_FLAG_DECODE_ONLY を削除しました。レンダラとデコーダがタイムスタンプに基づいてバッファのスキップを決定するため、このフラグを設定する必要はありません。カスタム Renderer の実装では、バッファ時間が BaseRenderer.getLastResetPositionUs() 以上かどうかを確認して、サンプルを表示するかどうかを決定する必要があります。SimpleDecoder のカスタム実装では、必要に応じて isAtLeastOutputStartTimeUs をチェックできます。また、他のバッファを DecoderOutputBuffer.shouldBeSkipped でマークしてスキップすることもできます。
    • 指定された rankingDataMediaSource をプリロードしないことを示すために、TargetPreloadStatusControl.getTargetPreloadStatus(T) が null 値を返せるようにします。
    • remove(MediaSource)BasePreloadManager に追加します。
  • Transformer:
    • 出力ファイル内の各トラックがどのように作成されたかを示す audioConversionProcessvideoConversionProcessExportResult に追加します。
    • トリムの最適化に関する H.264 レベルのチェックを緩和。
    • シーケンス内の SDR 入力メディアと HDR 入力メディアの切り替えのサポートを追加しました。
    • 楽曲レベルのオーディオ エフェクトのサポートを追加しました。
    • ウルトラ HDR 画像の HDR 動画へのコード変換のサポートを追加します。
    • DefaultAudioMixer がリセットして再利用した後に正しいバイト数を出力しない問題を修正しました。
  • 動画:
    • 再生中にサーフェスを切り替えるときに Listener.onRenderedFirstFrame() の到着が早すぎる問題を修正しました。
  • データソース:
    • android.resource://package/id 未加工リソース URI のサポートを実装します。ここで、package は現在のアプリのパッケージとは異なります。これは以前は機能することが文書化されていませんでしたが、名前を指定するよりも別のパッケージ内のリソースにアクセスする方が効率的な方法です。
    • DataSpec コンストラクタで、url が null でないことを積極的にチェックします。このパラメータはすでに null でないアノテーションが付けられています。
  • 効果:
    • 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 で乗算して反転させます。
  • セッション:
    • CommandButton.enabled のデフォルトを true に変更し、関連するコマンドが使用可能な場合でもコントローラで値が false のままになるようにします。
    • カスタム アイコン リソースの代わりに使用する CommandButton のアイコン定数を追加しました。
    • MediaSessionService.isPlaybackOngoing() を追加し、onTaskRemoved() でサービスを停止する必要があるかどうかをアプリがクエリできるようにしました(#1219)。
    • MediaSessionService.pauseAllPlayersAndStopSelf() を追加しました。これにより、すべてのセッションの再生を一時停止し、stopSelf を呼び出して MediaSessionService のライフサイクルを終了できます。
    • MediaSessionService.onTaskRemoved(Intent) をオーバーライドして、安全なデフォルト実装を提供します。再生が進行中の場合はサービスをフォアグラウンドで実行し、それ以外の場合は停止します。
  • ダウンロード:
    • DownloadHelper によって未リリースの Renderer インスタンスがリークしないようにしてください。リークすると、最終的に IllegalStateException: Too many receivers, total of 1000, registered for pid でアプリがクラッシュする可能性があります(#1224)。
  • テスト ユーティリティ:
    • FakeRendereronInit()onRelease() を実装します。
    • 致命的でないエラー(AnalyticsListener.onVideoCodecError に報告されたエラーなど)で失敗するように TestPlayerRunHelper.runUntil/playUntil メソッドを変更します。この動作を無効にするには、新しい TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() メソッド チェーンを使用します。
  • デモアプリ:
    • ショート動画デモアプリで DefaultPreloadManager を使用します。
  • サポートが終了したシンボルを削除しました。
    • CronetDataSourceFactory を削除しました。代わりに CronetDataSource.Factory を使用してください。
    • 一部の DataSpec コンストラクタを削除しました。代わりに DataSpec.Builder を使用してください

バージョン 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:
    • MediaMuxer が API 30 より前の負の表示タイムスタンプをサポートしていないことが原因でスローされる例外の回避策を追加しました。
  • トラックの選択:
    • DefaultTrackSelector: フレームレートが「妥当」な(10 fps 以上)の動画トラックが、フレームレートが低すぎる、または設定されていないものよりも優先されます。これにより、プレーヤーはモーション フォトから抽出された MP4 の「実際の」動画トラックを選択するようになります。このトラックには、解像度が高いもののフレーム数が非常に少ない 2 つの HEVC トラックが含まれる場合があります(#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 で 60 fps の H265 ストリームがサポート対象外とマークされるデバイスの問題の回避策を追加しました。
    • 最初のフレームが API で要求されるように自動的にレンダリングされない場合であっても、トンネリング中に最初のフレームが常にレンダリングされるようにする回避策を追加しました(#1169)。(#966)。
    • HDR カラー情報の処理によってコーデックが誤動作し、SDR 動画トラックのアダプティブ フォーマット切り替えができなくなる問題を修正しました(#1158)。
  • テキスト:
    • WebVTT: 直接連続するキューによって WebvttParser.parse から不要な CuesWithTiming インスタンスが作成されないようにします(#1177)。
  • DRM:
    • 一部の Android 14 デバイスで、ResourceBusyExceptionNotProvisionedException の代わりに MediaDrm フレームワークがスローできる NoSuchMethodError を回避しました(#1145)。
  • 効果:
    • 色空間を変換することで PQ から SDR へのトーン マッピングを改善。
  • セッション:
    • コントローラが現在のアイテムを置き換えるときに、現在の位置が戻る問題を修正しました(#951)。
    • null 以外の extras を持つ MediaMetadata がメディア コントローラとセッション間で送信されない問題を修正しました(#1176)。
  • UI:
    • Locale が表示名を識別できない場合に、音声トラックの言語名を含めるようにフォールバックしました(#988)。
  • DASH 拡張機能:
    • マニフェストのすべての Label 要素を Format.labels に代入しました(#1054)。
  • RTSP 拡張機能:
    • SDP 解析で空のセッション情報値(i タグ)をスキップします(#1087)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
    • 追加の Maven リポジトリを構成する必要があるため、MIDI 拡張機能をローカル依存関係としてデフォルトで無効にします。ローカルの依存関係からこのモジュールを必要とするユーザーは、モジュールを再度有効にすることができます

バージョン 1.3.0

2024 年 3 月 6 日

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

  • 共通ライブラリ:
    • package が現在のアプリケーションのパッケージと異なる android.resource://package/[type/]name 未加工リソース URI のサポートを実装します。これは動作が文書化されていますが、これまで正しく実装されていませんでした。
    • アプリコードまたはメディアから読み取られた MIME タイプを完全に小文字に正規化します。
    • AdPlaybackState では、単一の Uri ではなく、完全な MediaItem を使用して広告を定義します。
    • minSdk を 19(Android KitKat)に増やしました。これは、他のすべての AndroidX ライブラリと連携しており、AndroidX 依存関係を最新バージョンにアップグレードするために必要です。
    • 少なくとも一方が null でない場合、artworkUriartworkData の両方を 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)。
    • ハイフンのみを確認するように変更することで、カスタム Common Media Client Data(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: 固定ビットレート(CBR)を使用して、Info ヘッダー(Xing ヘッダーと同等の 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 広告が再生できない問題を修正しました。
  • セッション:
    • TV アプリのダブルクリック検出を無効にしました(#962)。
    • null 以外のエクストラのみを持つ MediaItem.RequestMetadata がメディア コントローラとセッション間で転送されない問題を修正しました。
    • MediaLibraryService ではなく Context のみを受け取るコンストラクタを MediaLibrarySession.Builder に追加しました。
  • HLS 拡張機能:
    • HlsMediaPeriod をパッケージ非公開の公開設定に縮小。このタイプは、HLS パッケージの外部から直接依存しないでください。
    • Resolve はセグメントの先頭をより効率的にシークできるようになりました(#1031)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
    • MIDI デコーダ: SysEx イベント メッセージを無視します(#710)。
  • テスト ユーティリティ:
    • TestPlayerRunHelper.playUntilPosition で再生を一時停止しない。テストは再生中の状態を維持しますが、テストがアサーションと追加のアクションを追加できるようになるまで、進行状況を一時停止します。
  • デモアプリ:
    • ショート動画デモ モジュールを追加して、ショート動画コンテンツのユースケースで PreloadMediaSource の使用方法をデモします。

バージョン 1.3.0-rc01

2024 年 2 月 22 日

1.3.0 安定版を使用します。

バージョン 1.3.0-beta01

2024 年 2 月 7 日

1.3.0 安定版を使用します。

バージョン 1.3.0-alpha01

2024 年 1 月 15 日

1.3.0 安定版を使用します。

バージョン 1.2.0

バージョン 1.2.1

2024 年 1 月 9 日

  • ExoPlayer:
    • LiveConfiguration.min/maxOffset の範囲外で手動でシークすると、オフセットが min/maxOffset に引き続き調整される問題を修正しました。
    • 3、5、6、7、8 チャンネルで OPUS と VORBIS のチャンネル レイアウトが正しくない問題を修正しました(#8396)。
    • ライブ ストリームでトラックをゼロに移動した後にトラックを選択すると、ストリームがデフォルトの位置から誤って開始される問題を修正しました(#9347)。
    • CmcdData.Factory の新しいインスタンスがチャンクソースから bufferedDurationUs に対して負の値を受け取り、その結果 IllegalArgumentException が発生する問題を修正しました(#888)。
  • Transformer:
    • 動作レートが高いため設定時にエンコーダがスローする問題を回避する。
  • エクストラクタ:
    • JPEG モーション フォト内のセカンダリ(再生不可)HEVC トラックを ROLE_FLAG_ALTERNATE としてマークし、解像度が高いために自動的に再生用に選択されないようにします。
    • TS H264 ストリームの間違ったキーフレーム検出を修正しました(#864)。
    • 47,721 秒を超える TS ストリームの推定時間を修正しました(#855)。
  • オーディオ:
    • 複数回呼び出された場合の SilenceSkippingAudioProcessor の EOS の処理を修正しました(#712)。
  • 動画:
    • Galaxy Tab S7 FE、Chromecast with Google TV、Lenovo M10 FHD Plus で 60 fps AVC ストリームがサポート対象外とマークされるというデバイス問題の回避策を追加しました(#693)。
  • メタデータ:
    • MediaMetadata が大文字のキーを含む Vorbis コメントからのみ入力されるバグを修正しました(#876)。
    • 非常に大きな ID3 フレームを解析するときに OutOfMemoryError をキャッチします。つまり、再生を完全に失敗させるのではなく、タグ情報なしで再生を続行できます。
  • DRM:
    • 不要な ClearKey https://default.url ライセンスの URL の回避策を API 33 以上に拡張しました(以前は API 33 でのみ適用されていました)。(#837
    • 暗号化されたコンテンツから、サーフェスがプレーヤーにアタッチされていないコンテンツをクリアに切り替えるときの ERROR_DRM_SESSION_NOT_OPENED を修正しました。このエラーは、クリア コンテンツを再生する際にセキュアなデコーダを誤って使用したことが原因でした。
  • セッション:
    • MediaMetadataCompat のカスタムキーと値を MediaMetadata.extras に、MediaMetadata.extrasMediaMetadataCompat に追加します(#756#802)。
    • 以前のコントローラの notifyChildrenChanged のブロードキャストを修正しました(#644)。
    • 無効になっている通知の setWhen タイマーに負の時間を設定すると、一部のデバイスでクラッシュが発生するバグを修正しました(#903)。
    • 最初の通知更新がリクエストされたときにメディア通知コントローラの接続が完了していない場合の IllegalStateException を修正しました(#917)。
  • UI:
    • BottomSheetDialogFragment でマテリアル デザインを使用した場合に、進むボタンと巻き戻しボタンが表示されない問題を修正しました(#511)。
    • PlayerControlView の早送りボタンの数字がずれる問題を修正しました(#547)。
  • DASH 拡張機能:
    • DASH マニフェストで、「f800」をドルビーのチャンネル数 5 として解析しました(#688)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
    • MIDI: 早送りするとプログラム変更イベントがスキップされる問題を修正しました(#704)。
    • FFmpeg 6.0 に移行し、サポートされている NDK を r26b に更新しました(#707#867)。
  • Cast 拡張機能:
    • キャスト デバイスでメディアの読み込みが失敗したときにアプリがクラッシュしないように Timeline の作成をサニタイズしました(#708)。

バージョン 1.2.0

2023 年 11 月 15 日

  • 共通ライブラリ:
    • @Nullable Throwable パラメータを Log.Logger インターフェースのメソッドに追加します。これらのメソッドの message パラメータには、Log.{d,i,w,e}() メソッドに渡される Throwable に関する情報が含まれなくなったため、必要に応じて実装でこの情報を手動で追加する必要があります(Logger.appendThrowableString(String, Throwable) を使用する場合もあります)。
    • null 値許容の汎用型パラメータと null 値許容配列要素型が null 値許容型として検出されない Kotlin の互換性の問題を修正しました。例としては、TrackSelectorResultSimpleDecoder のメソッド パラメータが挙げられます(#6792)。
    • Util.shouldShowPlayButton のデフォルトの UI と通知動作を変更して、(一時的な音声フォーカス喪失などにより)再生が一時的に抑制されている間は「再生」ボタンを表示します。従来の動作は、PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) または MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) を使用して維持できます(#11213)。
    • androidx.annotation:annotation-experimental1.3.1 にアップグレードして、https://issuetracker.google.com/251172715 を修正してください。
    • ExoPlayer.setAudioAttributesPlayer インターフェースに移動します。
  • ExoPlayer:
    • デコードのみのサンプルが正しく識別されないことで発生する AC4 ストリームでのシークの問題を修正しました(#11000)。
    • ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput でこの機能を有効にした場合、不適切なオーディオ出力デバイス(Wear OS デバイスの内蔵スピーカーなど)での再生の抑制を追加します。適切なオーディオ出力がない場合、または再生中に適切な出力がすべて切断された場合、再生が試行されると、再生抑制の理由は Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT として更新されます。適切な出力が接続されると、抑制理由は削除されます。
    • Player.replaceMediaItem(s) で作成後に MediaItem の更新を受け入れるために、MediaSource.canUpdateMediaItemMediaSource.updateMediaItem を追加しました。
    • Player.replaceMediaItem(s) を介してライブラリから提供されるすべての MediaSource クラスに対して MediaItem の更新を許可します(#33#9978)。
    • MimeTypes.TEXT_EXOPLAYER_CUES から MimeTypes.APPLICATION_MEDIA3_CUES に名前を変更しました。
    • PNG ファイル全体を送信して読み取る PngExtractor を 1 つのサンプルとして TrackOutput に追加します。
    • SequenceableLoader インターフェースの SequenceableLoader.continueLoading(long) メソッドを SequenceableLoader.continueLoading(LoadingInfo loadingInfo) に拡張します。LoadingInfo には、既存の playbackPositionUs に加えて、playbackSpeedlastRebufferRealtimeMs などの追加パラメータが含まれます。
    • ChunkSource インターフェースの ChunkSource.getNextChunk(long, long, List, ChunkHolder) メソッドを ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder) に拡張します。
    • Common Media Client Data(CMCD)のロギングに、バッファ不足(bs)、期限(dl)、再生速度(pr)、起動(su)のフィールドを追加しました(#8699)。
    • 輝度とクロマのビット深度を ColorInfo に追加しました(#491)。
    • 共通メディア クライアント データ(CMCD)のロギングに、次のオブジェクト リクエスト(nor)と次の範囲リクエスト(nrr)のフィールドを追加しました(#8699)。
    • クエリ パラメータを使用して Common Media Client Data(CMCD)データを送信する機能を追加しました(#553)。
    • ExperimentalBandwidthMeterConcurrentModificationException を修正しました(#612)。
    • MediaPeriodId パラメータを CompositeMediaSource.getMediaTimeForChildMediaTime に追加しました。
    • 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 を追加しました。
    • 従来の QuickTime のサポートを Mp4Extractor に追加しました。
  • オーディオ:
    • 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 クラスに移動しました。
    • onAudioTrackInitialized コールバックと onAudioTrackReleased コールバックを 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 に戻すのではなく、Media3 内の MediaSessionService.onStartCommand() で受信したメディアボタン イベントを変換します。これにより、呼び出し元コントローラは常にメディア通知コントローラとなり、アプリはサポートされているすべての 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 オプション リクエストを送信する時間間隔で RTSP セットアップ レスポンスのタイムアウト値を使用しました(#662)。
  • デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
    • MIDI デコーダ モジュールをリリースします。このモジュールは、Jsyn ライブラリを使用して音声を合成する標準 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)。
    • 以前のコマンド(COMMAND_ADJUST_DEVICE_VOLUMECOMMAND_SET_DEVICE_VOLUME)と新しいコマンド(COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS)の両方で volumeControlType を決定することにより、PlayerWrapperVolumeProviderCompat を作成する方法を修正しました(#554)。

バージョン 1.1.0

2023 年 7 月 5 日

  • 共通ライブラリ:
    • 不適切なオーディオ ルートのサプレッション理由を追加し、サプレッションが長すぎる理由の変更の準備ができたときに再生。(#15)。
    • プレーヤーにコマンドを追加します。
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • ユーザーが音量フラグを指定できるようにするオーバーロード メソッドをプレーヤーに追加します。
      • 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() を追加しました。
    • sourceIdint ではなく long として保存するように SampleQueue を更新します。これにより、パブリック メソッド SampleQueue.sourceIdSampleQueue.peekSourceId のシグネチャが変更されます。
    • LoadControl のメソッド shouldStartPlaybackonTracksSelected にパラメータを追加して、これらのメソッドを適切な MediaPeriod と関連付けられるようにします。
    • ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) の署名を変更するには、マップ内でキーとして使用される UID を持つ期間を含むタイムライン パラメータを追加します。これは、複数期間のライブ配信での同時実行の問題を回避するために必要です。
    • 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 atom のメタデータ サンプル時間を使用して誤ったタイムスタンプ オフセットを初期化する問題を修正しました(#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)。
    • デフォルトの実装を MediaSession.Callback.onAddMediaItems に追加し、LocalConfiguration(URI など)がある場合に、リクエストされた MediaItemsPlayer に渡すことができるようにしました(#282)。
    • Android 12 以前で、コンパクトなメディア通知ビューに「前に移動」コマンドボタンと「次に移動」コマンドボタンをデフォルトで追加しました(#410)。
    • デフォルトの実装を MediaSession.Callback.onAddMediaItems に追加し、LocalConfiguration(URI など)がある場合に、リクエストされた MediaItemsPlayer に渡すことができるようにしました(#282)。
    • Android 12 以前で、コンパクトなメディア通知ビューに「前に移動」コマンドボタンと「次に移動」コマンドボタンをデフォルトで追加しました(#410)。
  • UI:
    • 再生/一時停止ボタンを備えたカスタム UI 要素を書き込むユーティリティ メソッド shouldShowPlayButtonhandlePlayPauseButtonAction を追加しました。
  • RTSP 拡張機能:
    • MPEG4-LATM では、Explain 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 を使用してください。
    • 非推奨となった 2 つの HttpDataSource.InvalidResponseCodeException コンストラクタを削除し、追加のフィールド(causeresponseBody)を受け入れる非推奨ではないコンストラクタを使用して、エラーロギングを強化します。
    • DownloadHelper.forProgressiveDownloadHelper.forHlsDownloadHelper.forDashDownloadHelper.forSmoothStreaming を削除し、代わりに DownloadHelper.forMediaItem を使用してください。
    • 非推奨の DownloadService コンストラクタを削除し、channelDescriptionResourceId パラメータを指定するオプションを含む非推奨ではないコンストラクタを使用してください。
    • 文字セット(ASCII_NAMEUTF8_NAMEISO88591_NAMEUTF16_NAMEUTF16LE_NAME)の非推奨の文字列定数を削除し、代わりに kotlin.text パッケージ、java.nio.charset.StandardCharsets または com.google.common.base.Charsets の Kotlin 文字セットを使用します。
    • 非推奨の WorkManagerScheduler コンストラクタを削除しました。代わりに Context パラメータを指定するオプションを含む非推奨ではないコンストラクタを使用してください。
    • Format クラスのインスタンス化に使用されていた、非推奨のメソッド createVideoSampleFormatcreateAudioSampleFormatcreateContainerFormatcreateSampleFormat を削除しました。代わりに、Format.Builder を使用して Format のインスタンスを作成します。
    • 非推奨のメソッド 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、代わりに onAudioEnabledonVideoEnabled を使用してください。
      • onDecoderInitialized。代わりに onAudioDecoderInitializedonVideoDecoderInitialized を使用してください。
      • onDecoderInputFormatChanged。代わりに onAudioInputFormatChangedonVideoInputFormatChanged を使用してください。
      • onDecoderDisabled、代わりに onAudioDisabledonVideoDisabled を使用してください。
    • 非推奨の Player.Listener.onSeekProcessedAnalyticsListener.onSeekProcessed を削除し、代わりに onPositionDiscontinuityDISCONTINUITY_REASON_SEEK とともに使用してください。
    • ExoPlayer.setHandleWakeLock(boolean) を削除し、代わりに setWakeMode(int) を使用してください。
    • 非推奨の DefaultLoadControl.Builder.createDefaultLoadControl() を削除し、代わりに build() を使用してください。
    • 非推奨の MediaItem.PlaybackProperties を削除し、代わりに MediaItem.LocalConfiguration を使用してください。非推奨のフィールド MediaItem.playbackProperties の型が MediaItem.LocalConfiguration になりました。

バージョン 1.1.0-rc01

2023 年 6 月 21 日

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

バージョン 1.1.0-beta01

2023 年 6 月 7 日

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

バージョン 1.1.0-alpha01

2023 年 5 月 10 日

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

バージョン 1.0.0

バージョン 1.0.2

2023 年 5 月 18 日

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

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

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

  • コアライブラリ:
    • Buffer にフラグ C.BUFFER_FLAG_LAST_SAMPLE が含まれているかどうかを示す Buffer.isLastSample() を追加しました。
    • 「ストリームの終わり」のサンプルを読み取らずにフレームを含む最後のサンプルがキューから外された場合、最後のフレームがレンダリングされないことがある問題を修正しました。(#11079)。
  • エクストラクタ:
    • RTSP エクストラクタと MP4 エクストラクタですでに使用されている解析ロジックを再利用することで、MPEG-TS ファイル内の H.265 SPS の解析を修正しました(#303)。
  • テキスト:
    • SSA: バイトオーダー マークで始まる UTF-16 ファイルのサポートを追加しました(#319)。
  • セッション:
    • アクションを更新する以前の MediaSessionCompat に接続したときに、MediaController が使用可能なコマンドを更新しない問題を修正しました。
    • API 30 で params.isRecent == true を使用したシステム 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 を呼び出しても使用可能なコマンドが更新されないバグを修正しました。
    • MediaController から送信された TrackSelectionOverride インスタンスが、Format.metadata を含むグループを参照している場合に無視される問題を修正しました(#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 で 60 fps AVC ストリームがサポート対象外とマークされるデバイスの問題に対する回避策を追加しました(#10898)。
    • 画面のリフレッシュ レートを大幅に超えるフレームレートでメディアを再生する際のフレーム リリース パフォーマンスの問題を修正しました。
  • Cast:
    • メディア アイテム間の遷移時の一時的な STATE_IDLE を修正しました(#245)。
  • RTSP:
    • 無効な RTSP describe レスポンス メッセージの解析でスローされる IllegalArgumentException をキャッチしました(#10971)。
  • セッション:
    • 通知の再生/一時停止ボタンがプレーヤーの状態に更新されないバグを修正しました(#192)。
  • IMA 拡張機能:
    • 最初の(広告なしの場合は唯一の)LOADED イベントが受信されなかったため、広告のない DAI ストリームが開始されないバグを修正しました。

バージョン 1.0.0-rc01

2023 年 2 月 16 日

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

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

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