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
でマークしてスキップすることもできます。- 指定された
rankingData
でMediaSource
をプリロードしないことを示すために、TargetPreloadStatusControl.getTargetPreloadStatus(T)
が null 値を返せるようにします。 remove(MediaSource)
をBasePreloadManager
に追加します。
- Transformer:
- 出力ファイル内の各トラックがどのように作成されたかを示す
audioConversionProcess
とvideoConversionProcess
をExportResult
に追加します。 - トリムの最適化に関する 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)。
- テスト ユーティリティ:
FakeRenderer
にonInit()
と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:
- Transformer:
MediaMuxer
が API 30 より前の負の表示タイムスタンプをサポートしていないことが原因でスローされる例外の回避策を追加しました。
- トラックの選択:
DefaultTrackSelector
: フレームレートが「妥当」な(10 fps 以上)の動画トラックが、フレームレートが低すぎる、または設定されていないものよりも優先されます。これにより、プレーヤーはモーション フォトから抽出された MP4 の「実際の」動画トラックを選択するようになります。このトラックには、解像度が高いもののフレーム数が非常に少ない 2 つの HEVC トラックが含まれる場合があります(#1051)。
- エクストラクタ:
- オーディオ:
- オフロード モードで音声トラックの初期化に失敗した場合に、オフロードを無効にしてレンダラを復元できるようにします。
- 動画:
- 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)。
- WebVTT: 直接連続するキューによって
- DRM:
- 一部の Android 14 デバイスで、
ResourceBusyException
やNotProvisionedException
の代わりにMediaDrm
フレームワークがスローできるNoSuchMethodError
を回避しました(#1145)。
- 一部の Android 14 デバイスで、
- 効果:
- 色空間を変換することで PQ から SDR へのトーン マッピングを改善。
- セッション:
- 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 でない場合、
artworkUri
とartworkData
の両方をMediaMetadata.Builder.populate(MediaMetadata)
に入力します(#964)。
- ExoPlayer:
PreloadMediaSource
とPreloadMediaPeriod
を追加しました。これにより、アプリが再生前の特定の開始位置でコンテンツ メディアソースをプリロードできるようになります。PreloadMediaSource
は、Timeline
を受け取るためのコンテンツ メディア ソースの準備、指定された開始位置での期間の準備とキャッシュ、トラックの選択、期間のメディアデータの読み込みを行います。アプリは、PreloadMediaSource.PreloadControl
を実装してプリロードの進行状況を制御し、プリロード済みソースを再生用のプレーヤーに設定します。- アプリが
ImageRenderer.ImageOutput
を設定できるようにするExoPlayer.setImageOutput
を追加しました。 DefaultRenderersFactory
はデフォルトで、null のImageOutput
とImageDecoder.Factory.DEFAULT
を使用してImageRenderer
をプレーヤーに提供するようになりました。- 無音がスキップされたときに
Player.Listener.onPositionDiscontinuity
イベントを発行しました(#765)。 - 抽出中に字幕を解析するための試験運用版のサポートを追加しました。これは、
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
を使用して有効にできます。 PreloadMediaSource
でアダプティブ メディアソースをサポートします。- HttpEngine API を使用して
HttpDataSource
であるHttpEngineDataSource
を実装します。 CompositeSequenceableLoader
のサブクラス化を禁止しました。このコンポーネントは以前は拡張可能でしたが、ライブラリ内でサブクラス化されていませんでした。カスタマイズするには、デコレータ パターンを使用してインスタンスをラップし、カスタムCompositeSequenceableLoaderFactory
を実装します。- 同じ時間を繰り返すと、このアイテムのメタデータがクリアされる問題を修正しました(#1007)。
BundledChunkExtractor.Factory
とDefaultHlsExtractorFactory
のexperimentalSetSubtitleParserFactory
メソッドの名前をsetSubtitleParserFactory
に変更し、null
の受け渡しを禁止します。新しいexperimentalParseSubtitlesDuringExtraction(boolean)
メソッドを使用して、解析の動作を制御します。- 抽出中に使用される
SubtitleParser.Factory
をカスタマイズするためのサポートを追加しました。これはMediaSource.Factory.setSubtitleParserFactory()
で実現できます。 MergingMediaSource
から生成されるすべてのFormat.id
フィールドにソース接頭辞を追加します。これは、どのソースがFormat
を生成したかを特定するのに役立ちます(#883)。- ハイフンのみを確認するように変更することで、カスタム Common Media Client Data(CMCD)キー名の検証に使用される正規表現を修正しました(#1028)。
- CMCD クエリ パラメータの二重エンコードを停止しました(#1075)。
- Transformer:
- H.265/HEVC SEF スローモーション動画のフラット化のサポートを追加しました。
- 特に「動画の削除」の編集で、トランス多重化の速度を高めます。
- 出力ファイルが動画フレームで開始するように API を追加しました。これにより、プレゼンテーション タイムスタンプまで最初の動画フレームを表示しないプレーヤー実装に対して、トリミング オペレーションの出力の互換性を高めることができます(#829)。
- 単一アセットの MP4 トリム操作の最適化のサポートを追加しました。
- 動画フレームが出力ファイルの最初のタイムスタンプを持つようにサポートを追加します。iOS ベースのプレーヤーで黒いフレームで始まる出力ファイルを修正しました(#829)。
- トラックの選択:
DefaultTrackSelector.selectImageTrack
を追加して、画像トラックの選択を有効にします。TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
を追加して、画像トラックと動画トラックの両方が利用可能な場合に画像トラックを選択するかどうかを決定します。デフォルト値はfalse
です。これは、動画トラックの選択が優先されることを意味します。
- エクストラクタ:
ColorInfo.colorSpace
、ColorInfo.colorTransfer
、ColorInfo.colorRange
の値を取得するために、MP4 エクストラクタに AV1C 解析を追加しました(#692)。- MP3: 固定ビットレート(CBR)を使用して、
Info
ヘッダー(Xing
ヘッダーと同等の CBR)を持つファイルを探します。以前はInfo
ヘッダーからのシーク テーブルを使用していましたが、その結果、テーブルを無視してファイルが CBR であると仮定した場合よりも、シークの精度が低下します。 - MPEG2-TS: DTS、DTS-LBR、DTS:X Profile2 のサポートを追加しました(#275)。
- TS 記述子から音声タイプを抽出し、ロールフラグにマッピングすることで、ユーザーはより適切な音声トラックを選択できるようになります(#973)。
- オーディオ:
- 動画:
VideoFrameProcessor.Factory
引数を受け取るMediaCodecVideoRenderer
コンストラクタを変更し、VideoSinkProvider
引数を取るコンストラクタに置き換えます。カスタムVideoFrameProcessor.Factory
を挿入するアプリは、カスタムVideoFrameProcessor.Factory
を使用するCompositingVideoSinkProvider
をインスタンス化し、動画シンク プロバイダをMediaCodecVideoRenderer
に渡すことができます。
- テキスト:
- ビットマップ キューのシリアル化を修正して、
DefaultExtractorsFactory.setTextTrackTranscodingEnabled
使用時のTried to marshall a Parcel that contained Binder objects
エラーを解決しました(#836)。 - CEA-708:
rowLock
値を無視。CEA-708-E S-2023 仕様では、ストリーム内に存在する値に関係なく、rowLock
とcolumnLock
の両方が true であることを前提としています(columnLock
サポートは実装されていないため、事実上常に false とみなされます)。
- ビットマップ キューのシリアル化を修正して、
- 画像:
- DASH サムネイルのサポートを追加します。グリッド画像は切り抜かれ、表示時間の近くで個々のサムネイルが
ImageOutput
に提供されます。
- DASH サムネイルのサポートを追加します。グリッド画像は切り抜かれ、表示時間の近くで個々のサムネイルが
- DRM:
- 後で暗号化されたサンプルの鍵の準備ができていない場合でも、DRM コンテンツ内の暗号化されていないサンプルの「クリアリード」をデフォルトですぐに再生します。再生位置が暗号化されたサンプルに達したときに鍵の準備ができていない場合、再生の途中で停止する可能性があります(ただし、この時点では、以前の再生はまったく開始されません)。この動作は、
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
またはDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
で無効にできます。
- 後で暗号化されたサンプルの鍵の準備ができていない場合でも、DRM コンテンツ内の暗号化されていないサンプルの「クリアリード」をデフォルトですぐに再生します。再生位置が暗号化されたサンプルに達したときに鍵の準備ができていない場合、再生の途中で停止する可能性があります(ただし、この時点では、以前の再生はまったく開始されません)。この動作は、
- 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:
- 動作レートが高いため設定時にエンコーダがスローする問題を回避する。
- エクストラクタ:
- オーディオ:
- 複数回呼び出された場合の
SilenceSkippingAudioProcessor
の EOS の処理を修正しました(#712)。
- 複数回呼び出された場合の
- 動画:
- Galaxy Tab S7 FE、Chromecast with Google TV、Lenovo M10 FHD Plus で 60 fps AVC ストリームがサポート対象外とマークされるというデバイス問題の回避策を追加しました(#693)。
- メタデータ:
MediaMetadata
が大文字のキーを含む Vorbis コメントからのみ入力されるバグを修正しました(#876)。- 非常に大きな ID3 フレームを解析するときに
OutOfMemoryError
をキャッチします。つまり、再生を完全に失敗させるのではなく、タグ情報なしで再生を続行できます。
- DRM:
- 不要な ClearKey
https://default.url
ライセンスの URL の回避策を API 33 以上に拡張しました(以前は API 33 でのみ適用されていました)。(#837) - 暗号化されたコンテンツから、サーフェスがプレーヤーにアタッチされていないコンテンツをクリアに切り替えるときの
ERROR_DRM_SESSION_NOT_OPENED
を修正しました。このエラーは、クリア コンテンツを再生する際にセキュアなデコーダを誤って使用したことが原因でした。
- 不要な ClearKey
- セッション:
MediaMetadataCompat
のカスタムキーと値をMediaMetadata.extras
に、MediaMetadata.extras
をMediaMetadataCompat
に追加します(#756、#802)。- 以前のコントローラの
notifyChildrenChanged
のブロードキャストを修正しました(#644)。 - 無効になっている通知の
setWhen
タイマーに負の時間を設定すると、一部のデバイスでクラッシュが発生するバグを修正しました(#903)。 - 最初の通知更新がリクエストされたときにメディア通知コントローラの接続が完了していない場合の
IllegalStateException
を修正しました(#917)。
- UI:
- DASH 拡張機能:
- DASH マニフェストで、「f800」をドルビーのチャンネル数 5 として解析しました(#688)。
- デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
- Cast 拡張機能:
- キャスト デバイスでメディアの読み込みが失敗したときにアプリがクラッシュしないように
Timeline
の作成をサニタイズしました(#708)。
- キャスト デバイスでメディアの読み込みが失敗したときにアプリがクラッシュしないように
バージョン 1.2.0
2023 年 11 月 15 日
- 共通ライブラリ:
@Nullable Throwable
パラメータをLog.Logger
インターフェースのメソッドに追加します。これらのメソッドのmessage
パラメータには、Log.{d,i,w,e}()
メソッドに渡されるThrowable
に関する情報が含まれなくなったため、必要に応じて実装でこの情報を手動で追加する必要があります(Logger.appendThrowableString(String, Throwable)
を使用する場合もあります)。- null 値許容の汎用型パラメータと null 値許容配列要素型が null 値許容型として検出されない Kotlin の互換性の問題を修正しました。例としては、
TrackSelectorResult
やSimpleDecoder
のメソッド パラメータが挙げられます(#6792)。 Util.shouldShowPlayButton
のデフォルトの UI と通知動作を変更して、(一時的な音声フォーカス喪失などにより)再生が一時的に抑制されている間は「再生」ボタンを表示します。従来の動作は、PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
またはMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
を使用して維持できます(#11213)。androidx.annotation:annotation-experimental
を1.3.1
にアップグレードして、https://issuetracker.google.com/251172715 を修正してください。ExoPlayer.setAudioAttributes
をPlayer
インターフェースに移動します。
- ExoPlayer:
- デコードのみのサンプルが正しく識別されないことで発生する AC4 ストリームでのシークの問題を修正しました(#11000)。
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
でこの機能を有効にした場合、不適切なオーディオ出力デバイス(Wear OS デバイスの内蔵スピーカーなど)での再生の抑制を追加します。適切なオーディオ出力がない場合、または再生中に適切な出力がすべて切断された場合、再生が試行されると、再生抑制の理由はPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
として更新されます。適切な出力が接続されると、抑制理由は削除されます。Player.replaceMediaItem(s)
で作成後にMediaItem
の更新を受け入れるために、MediaSource.canUpdateMediaItem
とMediaSource.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
に加えて、playbackSpeed
やlastRebufferRealtimeMs
などの追加パラメータが含まれます。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)。
ExperimentalBandwidthMeter
のConcurrentModificationException
を修正しました(#612)。MediaPeriodId
パラメータをCompositeMediaSource.getMediaTimeForChildMediaTime
に追加しました。ConcatenatingMediaSource2
でClippingMediaSource
(および期間/ウィンドウの時間オフセットを持つ他のソース)をサポートしました(#11226)。MediaPeriodId
引数も受け取るようにBaseRenderer.onStreamChanged()
を変更します。
- Transformer:
- 画像入力の EXIF 回転データを解析します。
TransformationRequest.HdrMode
アノテーション型とそれに関連する定数を削除します。代わりに、Composition.HdrMode
とそれに関連する定数を使用してください。OverlaySettings
を簡素化して、回転に関する問題を修正します。SampleConsumer.queueInputBitmap
のframeRate
パラメータとdurationUs
パラメータをTimestampIterator
に変更しました。
- トラックの選択:
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
を追加して、非シームレス適応を明示的に許可または禁止します。デフォルトは、現在のtrue
の動作のままです。
- エクストラクタ:
- MPEG-TS: ストリームの最後のアクセス ユニットをサンプルキューに渡して、最後のフレームをレンダリングします(#7909)。
rotationDegrees
を指定する際の入力ミスを修正しました。projectionPosePitch
をprojectionPoseRoll
に変更しました(#461)。Extractor
インスタンスがinstanceof
で直接検査できるという前提を削除しました。ランタイムでExtractor
の実装の詳細にアクセスする場合は、まずExtractor.getUnderlyingInstance
を呼び出す必要があります。BmpExtractor
を追加しました。WebpExtractor
を追加しました。HeifExtractor
を追加しました。- 従来の QuickTime のサポートを
Mp4Extractor
に追加しました。
- オーディオ:
- MP4 と Matroska での 24/32 ビット ビッグ エンディアン PCM のサポートを追加し、MP4 の
lpcm
の PCM エンコードを解析します。 - MP4 で Vorbis 音声を抽出するサポートを追加しました。
- シンクが
DefaultAudioOffloadSupportProvider
を通じて形式に提供できるオフロード サポートのレベルを取得するAudioSink.getFormatOffloadSupport(Format)
を追加します。isFormatSupported
、isGaplessSupported
、isSpeedChangeSupported
を含む新しいAudioOffloadSupport
を返します。 - オーディオ シンクのオフロード構成を構成する
AudioSink.setOffloadMode()
を追加します。デフォルトはAudioSink.OFFLOAD_MODE_DISABLED
です。 - オフロードは、
TrackSelectionParameters
のsetAudioOffloadPreference
で有効にできます。設定が有効で、デバイスがその形式のオフロードをサポートし、トラックが単一の音声トラックである場合、オーディオ オフロードが有効になります。 audioOffloadModePreference
がAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
に設定されている場合、DefaultTrackSelector
は音声トラックを選択し、そのトラックの形式がオフロードでサポートされている場合にのみ選択します。オフロードで音声トラックがサポートされていない場合、トラックは選択されません。- トラック遷移後の再生位置の問題により、API レベル 33 より前の場合にオフロードのギャップレス サポートを無効にしました。
DefaultRenderersFactory.buildAudioSink
メソッド シグネチャからパラメータenableOffload
を削除しました。- メソッド
DefaultAudioSink.Builder.setOffloadMode
を削除します。 - intdef 値
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
を削除しました。 - オフロード再生中の Opus ギャップレス メタデータのサポートを追加しました。
- 最初の書き込みで失敗した場合にオフロードを無効にして、レンダラを復元できるようにしました(#627)。
- 音声のみのオフロード再生で、オフロード スケジューリングをデフォルトで有効にします。
ExoPlayer.experimentalSetOffloadSchedulingEnabled
とAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
を削除します。onExperimentalSleepingForOffloadChanged
の名前をonSleepingForOffloadChanged
に、onExperimentalOffloadedPlayback
の名前をonOffloadedPlayback
に変更しました。- オーディオ オフロード モードに関連する
TrackSelectionParameters
インターフェースと定義を内部AudioOffloadPreferences
クラスに移動しました。 onAudioTrackInitialized
コールバックとonAudioTrackReleased
コールバックをAnalyticsListener
、AudioRendererEventListener
、AudioSink.Listener
に追加しました。- DTS Express オーディオ バッファ アンダーフローの問題を修正しました(#650)。
- E-AC3-JOC の機能チェックで
IllegalArgumentException
がスローされるバグを修正しました(#677)。
- MP4 と Matroska での 24/32 ビット ビッグ エンディアン PCM のサポートを追加し、MP4 の
- 動画:
MediaCodecVideoRenderer
がカスタムVideoFrameProcessor.Factory
を使用できるようにします。- 音声ストリームが負のタイムスタンプで始まる場合に最初のフレームをレンダリングできないバグを修正しました(#291)。
- テキスト:
ExoplayerCuesDecoder
を削除しました。sampleMimeType = application/x-media3-cues
を含むテキスト トラックは、SubtitleDecoder
インスタンスを必要とすることなくTextRenderer
で直接処理されるようになりました。
- メタデータ:
- いずれにしても実装は null を返す必要があるため、「デコード専用」のサンプルでは
MetadataDecoder.decode
は呼び出されなくなりました。
- いずれにしても実装は null を返す必要があるため、「デコード専用」のサンプルでは
- 効果:
- ビットマップ入力をタイムスタンプでキューイングする
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
を追加しました。 VideoFrameProcessor.registerInputStream()
を非ブロックに変更しました。アプリはVideoFrameProcessor.Listener#onInputStreamRegistered()
を実装する必要があります。VideoFrameProcessor.queueInputBitmap
のframeRate
パラメータとdurationUs
パラメータをTimestampIterator
に変更しました。
- ビットマップ入力をタイムスタンプでキューイングする
- IMA 拡張機能:
- 再生リストの最初の項目ではない複数期間の DASH ライブ配信が例外をスローするバグを修正しました(#571)。
AdsLoader.destroy()
を呼び出す前に StreamManager を解放する- IMA SDK のバージョンを 3.31.0 に引き上げました。
- セッション:
DefaultMediaNotificationProvider
で通知フォアグラウンド サービスの動作をFOREGROUND_SERVICE_IMMEDIATE
に設定します(#167)。- 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
の「データ同期」フォアグラウンド サービス タイプを宣言します。このサービスを使用する場合、アプリでdataSync
をforegroundServiceType
としてマニフェストに追加し、FOREGROUND_SERVICE_DATA_SYNC
権限を追加する必要があります(#11239)。
- Android 14 との互換性を確保するために、
- HLS 拡張機能:
- 前回の読み込み完了時刻ではなく、最後の読み込み開始時間から計算された間隔で HLS ライブ再生リストを更新しました(#663)。
- DASH 拡張機能:
- セグメント テンプレートの URL で同じ DASH 識別子を複数使用できるようになりました。
- 抽出中に字幕を解析するための試験運用版のサポートを追加しました。これにより、字幕セグメント間を移動する際のちらつきの解決など、重なっている字幕のマージのサポートが改善されました。これを有効にするには、
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
を使用します(#288)。
- RTSP 拡張機能:
- デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
- MIDI デコーダ モジュールをリリースします。このモジュールは、Jsyn ライブラリを使用して音声を合成する標準 MIDI ファイルの再生をサポートします。
DecoderOutputBuffer.shouldBeSkipped
を追加して、提示する必要のない出力バッファを直接マークします。これは、サポートが終了するC.BUFFER_FLAG_DECODE_ONLY
よりも優先されます。Decoder.setOutputStartTimeUs
とSimpleDecoder.isAtLeastOutputStartTimeUs
を追加して、デコーダが開始時間より前にデコード専用サンプルをドロップできるようにします。これは、サポートが終了するBuffer.isDecodeOnly
よりも優先されます。- MIDI デコーダ アーティファクトが Maven リポジトリに公開されるバグを修正しました。このアーティファクトの名前は
media3-exoplayer-midi
に変更されました(#734)。
- Leanback 拡張機能:
- サーフェスを無効にすると Leanback コードで
ArithmeticException
が発生する可能性があるバグを修正しました(#617)。
- サーフェスを無効にすると Leanback コードで
- テスト ユーティリティ:
TestExoPlayerBuilder
とFakeClock
が Espresso UI テストと Compose UI テストと互換性を持つようになりました。これにより、Espresso または Compose のビューのインタラクション中に非決定論的に再生が進むバグが修正されます。
- サポートが終了したシンボルを削除しました。
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
とTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
を削除します。代わりにComposition.Builder.setHdrMode(int)
を使用して、Composition
をTransformer.start(Composition, String)
に渡します。- 非推奨の
DownloadNotificationHelper.buildProgressNotification
メソッドを削除し、代わりにnotMetRequirements
パラメータを受け取る非推奨ではないメソッドを使用してください。
バージョン 1.2.0-rc01
2023 年 11 月 1 日
1.2.0 の安定版を使用します。
バージョン 1.2.0-beta01
2023 年 10 月 19 日
1.2.0 の安定版を使用します。
バージョン 1.2.0-alpha02
2023 年 9 月 29 日
1.2.0 の安定版を使用します。
バージョン 1.2.0-alpha01
2023 年 8 月 17 日
1.2.0 の安定版を使用します。
バージョン 1.1.0
バージョン 1.1.1
2023 年 8 月 16 日
- 共通ライブラリ:
- 誤って追加された
multidex
依存関係をすべてのモジュールから削除しました(#499)。
- 誤って追加された
- ExoPlayer:
- 再生リストの消去後に不正な
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.onConnect
でAcceptedResultBuilder
を使用して、接続の完了時にコントローラでカスタム レイアウトを利用できるようにします。 MediaLibraryServiceLegacyStub
が、これをサポートしていないResult
にエラーを送信し、UnsupportedOperationException
を生成していた問題を修正しました(#78)。- 以前のコマンド(
COMMAND_ADJUST_DEVICE_VOLUME
とCOMMAND_SET_DEVICE_VOLUME
)と新しいコマンド(COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
とCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
)の両方でvolumeControlType
を決定することにより、PlayerWrapper
がVolumeProviderCompat
を作成する方法を修正しました(#554)。
- コントローラの状態にカスタム レイアウトを追加し、それにアクセスするためのゲッターを提供します。カスタム レイアウトが変更されると、
バージョン 1.1.0
2023 年 7 月 5 日
- 共通ライブラリ:
- 不適切なオーディオ ルートのサプレッション理由を追加し、サプレッションが長すぎる理由の変更の準備ができたときに再生。(#15)。
- プレーヤーにコマンドを追加します。
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)
DeviceInfo
にBuilder
を追加し、既存のコンストラクタを非推奨にしました。- リモート再生用のルーティング コントローラ 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)を含めるためのサポートを追加します。
br
、bl
、cid
、rtp
、sid
の各フィールドが追加されました(#8699)。API 構造と API メソッド:- CMCD ロギングはデフォルトで無効になっています。有効にするには、
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
を使用します。 - すべてのキーはデフォルトで有効になっています。
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
をオーバーライドして、ログに記録するキーを除外します。 CmcdConfiguration.RequestConfig.getCustomData()
をオーバーライドして、カスタムキーのロギングを有効にします。
- CMCD ロギングはデフォルトで無効になっています。有効にするには、
- カスタム
*.exolist.json
ファイルを使用してデモアプリを簡単に起動できるように、メインデモのマニフェストにアクションを追加しました(#439)。 - 動画の再生中に
Effect
を使用するためのExoPlayer.setVideoEffects()
を追加しました。 sourceId
をint
ではなくlong
として保存するようにSampleQueue
を更新します。これにより、パブリック メソッドSampleQueue.sourceId
とSampleQueue.peekSourceId
のシグネチャが変更されます。LoadControl
のメソッドshouldStartPlayback
とonTracksSelected
にパラメータを追加して、これらのメソッドを適切なMediaPeriod
と関連付けられるようにします。ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
の署名を変更するには、マップ内でキーとして使用される UID を持つ期間を含むタイムライン パラメータを追加します。これは、複数期間のライブ配信での同時実行の問題を回避するために必要です。EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
とBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
のサポートが終了しました。代わりに、mediaTimeOffsetUs
のないメソッドのバリアントを呼び出すことができます。なお、非推奨のバリアントでも、ディスパッチャによってディスパッチされるMediaLoadData
オブジェクトのstartTimeUs
とendTimeUs
にはオフセットが追加されなくなりました。ExoTrackSelection.blacklist
の名前をexcludeTrack
に、isBlacklisted
の名前をisTrackExcluded
に変更します。- 空の再生リストで呼び出されたときの
ExoPlayer.setMediaItem(s)
とaddMediaItem(s)
の動作の不一致を修正しました。
- 明示的にオプトインした場合にのみ、ExoPlayer がデバイスの音量メソッドを制御できるようにします。
- Transformer:
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
を削除します。代わりにExoPlayerAssetLoader.Factory(MediaSource.Factory)
とTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
を使用してください。Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
を削除しています。- 入力フレームが処理待ちの瞬間に動画ストリームの終了がシグナル状態になった場合、変換が停止する(マルチプレクサのタイムアウトにつながる)バグを修正しました。
- サポートを拡張するため、
findDecoder/EncoderForFormat
ユーティリティではなくMediaCodecList
でコーデックをクエリするようにしました。 - 一部のデバイスで動作しないため、
DefaultEncoderFactory
の B フレーム構成を削除しました。
- トラック選択:
- デフォルトで無効になっている
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
を追加します。有効にすると、DefaultTrackSelector
は、レンダラ機能が変更されたときに新しいトラックの選択をトリガーします。
- デフォルトで無効になっている
- エクストラクタ:
- オーディオ:
- ギャップレス トリミングなどでトンネリングが有効で、
AudioProcessors
がアクティブなときに、一部の再生が失敗するバグを修正しました(#10847)。 - 直接再生(オフロード)で Opus フレームを Ogg パケットにカプセル化します。
- オフロード スケジューリングを使用して、スリープ中に現在の位置を推定します。
- プレーヤーのライフサイクルの終了時にリソースを解放するための
Renderer.release()
とAudioSink.release()
を追加しました。 DefaultAudioSink
でオーディオ機能の変更をリッスンします。DefaultAudioSink
のコンストラクタに必須のパラメータcontext
を追加します。これにより、DefaultAudioSink
はAudioCapabilitiesReceiver
のリスナーとして登録され、機能の変更の通知時にaudioCapabilities
プロパティを更新します。AudioSink.Listener
インターフェースの新しいイベントonAudioCapabilitiesChanged
と、onRendererCapabilitiesChanged
イベントをトリガーする新しいインターフェースRendererCapabilities.Listener
を介して、オーディオ機能の変更を伝播します。- オーディオ チャンネルにスケーリング/ミキシングを適用するための
ChannelMixingAudioProcessor
を追加しました。 - 新しい int 値
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
をDecoderDiscardReasons
に追加し、オーディオ機能の変更後にバイパスモードが可能な場合にオーディオ デコーダを破棄するようにしました。 - DTS Express と DTS:X の直接再生サポートを追加しました(#335)。
- ギャップレス トリミングなどでトンネリングが有効で、
- 動画:
- レンダラが無効になっている場合に、
MediaCodecVideoRenderer
が幅と高さが 0 のVideoSize
をレポートするようにします。Player.getVideoSize()
が変更されると、それに応じてPlayer.Listener.onVideoSizeChanged
が呼び出されます。この変更により、Player.getCurrentTracks
が動画をサポートしていない場合、またはサポートされている動画トラックのサイズがまだ決定されていない場合、MediaCodecVideoRenderer
を持つ ExoPlayer の動画サイズは幅と高さが 0 になります。
- レンダラが無効になっている場合に、
- DRM:
- DRM パッケージの外部から呼び出すことを想定していない
DefaultDrmSession
の内部専用メソッドの可視性を低減します。void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- DRM パッケージの外部から呼び出すことを想定していない
- Muxer:
- MP4 コンテナ ファイルの作成に使用できる新しい muxer ライブラリを追加します。
- IMA 拡張機能:
- DAI 向けの複数期間のライブ DASH ストリームを有効にします。現在の実装では、ライブ ストリームでのシークはまだサポートされていません(#10912)。
- 連続するタイムラインで計算されたコンテンツの位置が若干異なるため、ライブ配信に新しい広告グループが挿入されるバグを修正しました。
- セッション:
- 現在
Player
メソッドを呼び出しているコントローラに関する情報を取得するために、ヘルパー メソッドMediaSession.getControllerForCurrentRequest
を追加しました。 androidx.media3.session.MediaButtonReceiver
を追加し、Bluetooth ヘッドセットなどによって送信されるメディアボタン イベントで再生の再開を実装できるようにしました(#167)。- デフォルトの実装を
MediaSession.Callback.onAddMediaItems
に追加し、LocalConfiguration
(URI など)がある場合に、リクエストされたMediaItems
をPlayer
に渡すことができるようにしました(#282)。 - Android 12 以前で、コンパクトなメディア通知ビューに「前に移動」コマンドボタンと「次に移動」コマンドボタンをデフォルトで追加しました(#410)。
- デフォルトの実装を
MediaSession.Callback.onAddMediaItems
に追加し、LocalConfiguration
(URI など)がある場合に、リクエストされたMediaItems
をPlayer
に渡すことができるようにしました(#282)。 - Android 12 以前で、コンパクトなメディア通知ビューに「前に移動」コマンドボタンと「次に移動」コマンドボタンをデフォルトで追加しました(#410)。
- 現在
- UI:
- 再生/一時停止ボタンを備えたカスタム UI 要素を書き込むユーティリティ メソッド
shouldShowPlayButton
とhandlePlayPauseButtonAction
を追加しました。
- 再生/一時停止ボタンを備えたカスタム UI 要素を書き込むユーティリティ メソッド
- RTSP 拡張機能:
- DASH 拡張機能:
- 複数期間の DASH ストリームの
MediaLoadData.startTimeMs
とMediaLoadData.endTimeMs
からメディア時間オフセットを削除しました。 - 複数期間のライブ Dash メディアソースを再準備すると
IndexOutOfBoundsException
が生成されるバグを修正しました(#10838)。
- 複数期間の DASH ストリームの
- HLS 拡張機能:
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
を追加して、読み込みスレッドがTimestampAdjuster
の初期化を待機するタイムアウトを設定します。タイムアウトまでに初期化が完了しないと、再生が無限に滞るのを避けるためにPlaybackException
がスローされます。タイムアウトはデフォルトで 0 に設定されています(#323)。
- テスト ユーティリティ:
DataSourceContractTest
で URI スキームの大文字と小文字を区別しないことを確認します。
- サポートが終了したシンボルを削除しました。
DefaultAudioSink
コンストラクタを削除します。代わりにDefaultAudioSink.Builder
を使用してください。HlsMasterPlaylist
を削除し、代わりにHlsMultivariantPlaylist
を使用してください。Player.stop(boolean)
を削除しました。代わりにPlayer.stop()
とPlayer.clearMediaItems()
(reset
がtrue
の場合)を使用してください。- 非推奨になった 2 つの
SimpleCache
コンストラクタを削除し、代わりにDatabaseProvider
を受け取る非推奨ではないコンストラクタを使用して、パフォーマンスを向上させます。 DefaultBandwidthMeter
コンストラクタを削除しました。代わりにDefaultBandwidthMeter.Builder
を使用してください。DefaultDrmSessionManager
コンストラクタを削除しました。代わりにDefaultDrmSessionManager.Builder
を使用してください。- 非推奨となった 2 つの
HttpDataSource.InvalidResponseCodeException
コンストラクタを削除し、追加のフィールド(cause
、responseBody
)を受け入れる非推奨ではないコンストラクタを使用して、エラーロギングを強化します。 DownloadHelper.forProgressive
、DownloadHelper.forHls
、DownloadHelper.forDash
、DownloadHelper.forSmoothStreaming
を削除し、代わりにDownloadHelper.forMediaItem
を使用してください。- 非推奨の
DownloadService
コンストラクタを削除し、channelDescriptionResourceId
パラメータを指定するオプションを含む非推奨ではないコンストラクタを使用してください。 - 文字セット(
ASCII_NAME
、UTF8_NAME
、ISO88591_NAME
、UTF16_NAME
、UTF16LE_NAME
)の非推奨の文字列定数を削除し、代わりにkotlin.text
パッケージ、java.nio.charset.StandardCharsets
またはcom.google.common.base.Charsets
の Kotlin 文字セットを使用します。 - 非推奨の
WorkManagerScheduler
コンストラクタを削除しました。代わりにContext
パラメータを指定するオプションを含む非推奨ではないコンストラクタを使用してください。 Format
クラスのインスタンス化に使用されていた、非推奨のメソッドcreateVideoSampleFormat
、createAudioSampleFormat
、createContainerFormat
、createSampleFormat
を削除しました。代わりに、Format.Builder
を使用してFormat
のインスタンスを作成します。- 非推奨のメソッド
copyWithMaxInputSize
、copyWithSubsampleOffsetUs
、copyWithLabel
、copyWithManifestFormatInfo
、copyWithGaplessInfo
、copyWithFrameRate
、copyWithDrmInitData
、copyWithMetadata
、copyWithBitrate
、copyWithVideoSize
を削除し、代わりにFormat.buildUpon()
とセッター メソッドを使用してください。 - 非推奨の
ExoPlayer.retry()
を削除し、代わりにprepare()
を使用してください。 - 非推奨となった引数のない
DefaultTrackSelector
コンストラクタを削除しました。代わりにDefaultTrackSelector(Context)
を使用してください。 - 非推奨の
OfflineLicenseHelper
コンストラクタを削除しました。代わりにOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
を使用してください。 - 非推奨の
DownloadManager
コンストラクタを削除しました。代わりにExecutor
を受け取るコンストラクタを使用してください。 - 非推奨の
Cue
コンストラクタを削除しました。代わりにCue.Builder
を使用してください。 - 非推奨の
OfflineLicenseHelper
コンストラクタを削除しました。代わりにOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
を使用してください。 - 以下の 4 つの非推奨の
AnalyticsListener
メソッドを削除しました。onDecoderEnabled
、代わりにonAudioEnabled
やonVideoEnabled
を使用してください。onDecoderInitialized
。代わりにonAudioDecoderInitialized
やonVideoDecoderInitialized
を使用してください。onDecoderInputFormatChanged
。代わりにonAudioInputFormatChanged
やonVideoInputFormatChanged
を使用してください。onDecoderDisabled
、代わりにonAudioDisabled
やonVideoDisabled
を使用してください。
- 非推奨の
Player.Listener.onSeekProcessed
とAnalyticsListener.onSeekProcessed
を削除し、代わりにonPositionDiscontinuity
をDISCONTINUITY_REASON_SEEK
とともに使用してください。 ExoPlayer.setHandleWakeLock(boolean)
を削除し、代わりにsetWakeMode(int)
を使用してください。- 非推奨の
DefaultLoadControl.Builder.createDefaultLoadControl()
を削除し、代わりにbuild()
を使用してください。 - 非推奨の
MediaItem.PlaybackProperties
を削除し、代わりにMediaItem.LocalConfiguration
を使用してください。非推奨のフィールドMediaItem.playbackProperties
の型がMediaItem.LocalConfiguration
になりました。
バージョン 1.1.0-rc01
2023 年 6 月 21 日
1.1.0 の安定版を使用します。
バージョン 1.1.0-beta01
2023 年 6 月 7 日
1.1.0 の安定版を使用します。
バージョン 1.1.0-alpha01
2023 年 5 月 10 日
1.1.0 の安定版を使用します。
バージョン 1.0.0
バージョン 1.0.2
2023 年 5 月 18 日
androidx.media3:media3-*:1.0.2
がリリースされました。バージョン 1.0.2 に含まれる commit については、こちらをご覧ください。
このリリースは ExoPlayer 2.18.7 リリースに対応しています。
このリリースには、1.0.1 リリースから次の変更が含まれています。
- コアライブラリ:
Buffer
にフラグC.BUFFER_FLAG_LAST_SAMPLE
が含まれているかどうかを示すBuffer.isLastSample()
を追加しました。- 「ストリームの終わり」のサンプルを読み取らずにフレームを含む最後のサンプルがキューから外された場合、最後のフレームがレンダリングされないことがある問題を修正しました。(#11079)。
- エクストラクタ:
- RTSP エクストラクタと MP4 エクストラクタですでに使用されている解析ロジックを再利用することで、MPEG-TS ファイル内の H.265 SPS の解析を修正しました(#303)。
- テキスト:
- SSA: バイトオーダー マークで始まる UTF-16 ファイルのサポートを追加しました(#319)。
- セッション:
- アクションを更新する以前の
MediaSessionCompat
に接続したときに、MediaController
が使用可能なコマンドを更新しない問題を修正しました。 - API 30 で
params.isRecent == true
を使用したシステム UI からCallback.onGetLibraryRoot
への呼び出しに対してMediaLibraryService
が null を返さないバグを修正しました(#355)。 MediaSessionService
またはMediaLibraryService
のメモリリークを修正しました(#346)。MediaSession
でTimeline
と位置の更新を組み合わせると、MediaController
がIllegalStateException
をスローするバグを修正しました。
- アクションを更新する以前の
バージョン 1.0.1
2023 年 4 月 18 日
androidx.media3:media3-*:1.0.1
がリリースされました。バージョン 1.0.1 に含まれる commit については、こちらをご覧ください。
このリリースは ExoPlayer 2.18.6 リリースに対応しています。
- コアライブラリ:
- デフォルトの位置にシークする際にターゲットのライブ ストリームのオーバーライドをリセットしました(#11051)。
- メディア内の空のサンプル ストリームが原因で再生が停止するバグを修正しました。
- セッション:
- 以前の
MediaSessionCompat
によってパブリッシュされた同一のキューアイテムが複数あり、MediaController
で例外が発生するバグを修正しました(#290)。 - 欠落していた
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 リリースに対応しています。
- コアライブラリ:
- ダウンロード:
- マージする 2 つのセグメントの開始時刻の最大差を、
SegmentDownloader
とサブクラスで構成できるようにしました(#248)。
- マージする 2 つのセグメントの開始時刻の最大差を、
- オーディオ:
- 動画:
- HEVC HDR10 形式を
HEVCProfileMain10
ではなくHEVCProfileMain10HDR10
にマッピングします。 - Chromecast with Google TV と Lenovo M10 FHD Plus で 60 fps AVC ストリームがサポート対象外とマークされるデバイスの問題に対する回避策を追加しました(#10898)。
- 画面のリフレッシュ レートを大幅に超えるフレームレートでメディアを再生する際のフレーム リリース パフォーマンスの問題を修正しました。
- HEVC HDR10 形式を
- Cast:
- メディア アイテム間の遷移時の一時的な
STATE_IDLE
を修正しました(#245)。
- メディア アイテム間の遷移時の一時的な
- RTSP:
- 無効な RTSP describe レスポンス メッセージの解析でスローされる IllegalArgumentException をキャッチしました(#10971)。
- セッション:
- 通知の再生/一時停止ボタンがプレーヤーの状態に更新されないバグを修正しました(#192)。
- IMA 拡張機能:
- 最初の(広告なしの場合は唯一の)
LOADED
イベントが受信されなかったため、広告のない DAI ストリームが開始されないバグを修正しました。
- 最初の(広告なしの場合は唯一の)
バージョン 1.0.0-rc01
2023 年 2 月 16 日
androidx.media3:media3-*:1.0.0-rc01
がリリースされました。バージョン 1.0.0-rc01 に含まれる commit については、こちらをご覧ください。
このリリースは ExoPlayer 2.18.3 リリースに対応しています。
- コアライブラリ:
- メディアの再生パフォーマンスが低い可能性があるとデコーダが報告する場合でも、レンダラのデコーダの順序付けロジックを調整して
MediaCodecSelector
の設定を維持します。たとえば、デフォルトのセレクタは、その形式を完全にサポートするソフトウェア デコーダよりも、機能サポートのみ組み込まれたハードウェア デコーダを優先します(#10604)。 - 新しい ExoPlayer インスタンス用に既存の再生スレッドを設定する
ExoPlayer.Builder.setPlaybackLooper
を追加しました。 - ダウンロード マネージャー ヘルパーを消去できるようにしました(#10776)。
- シークに使用するコマンドも指定するパラメータを
BasePlayer.seekTo
に追加しました。 - API 21 以上でドローアブルを読み込む際、テーマを使用します(#220)。
- 複数のメディア アイテムを 1 つのウィンドウに結合できる
ConcatenatingMediaSource2
を追加しました(#247)。
- メディアの再生パフォーマンスが低い可能性があるとデコーダが報告する場合でも、レンダラのデコーダの順序付けロジックを調整して
- エクストラクタ:
- トラックアトムの解析時にサンプル テーブル(stbl)に必要なサンプルの説明(stsd)が欠落している場合は、
NullPointerException
ではなくParserException
をスローします。 - fMP4 で同期フレームを直接シークする際、サンプルを正しくスキップします(#10941)。
- トラックアトムの解析時にサンプル テーブル(stbl)に必要なサンプルの説明(stsd)が欠落している場合は、
- オーディオ:
- 直接再生(パススルー)における
AudioTrack
の最小バッファサイズを計算する際、圧縮音声形式のビットレートを使用します。
- 直接再生(パススルー)における
- テキスト:
- 字幕ファイルにキューが含まれていない場合に無効な(負の)インデックスを
Subtitle.getEventTime
に渡すTextRenderer
を修正しました。 - SubRip: バイトオーダー マークで始まる UTF-16 ファイルのサポートを追加しました。
- 字幕ファイルにキューが含まれていない場合に無効な(負の)インデックスを
- メタデータ:
- ID3 v2.4 で許されているように、ID3 フレームから複数の null 区切り値を解析します。
- コンテンツのタイプまたはメタデータで記述されたフォルダのタイプを示す
MediaMetadata.mediaType
を追加しました。 MediaMetadata.isBrowsable
を追加してMediaMetadata.folderType
の代わりとしました。このフォルダタイプは次のリリースで非推奨になります。
- DASH:
- タイル数など、画像適合セットに対する完全な解析を追加しました(#3752)。
- UI:
- セッション:
- カスタム プレーヤーの
Player
インターフェースの実装用に、抽象クラスSimpleBasePlayer
を追加しました。 - プラットフォーム セッション トークンを Media3
SessionToken
に変換するヘルパー メソッドを追加しました(#171)。 onMediaMetadataChanged
を使用して、プラットフォーム メディア セッションの更新をトリガーします(#219)。DefaultMediaNotificationProvider
のgetMediaButtons()
の引数としてメディア セッションを追加し、わかりやすくするために不変リストを使用するようにします(#216)。onSetMediaItems
コールバック リスナーを追加して、Player に設定する前に、セッションごとにMediaItem
リスト、開始インデックス、位置を変更、設定する手段を提供しました(#156)。- Bluetooth 以外のメディアボタン イベントに対するダブルタップの検出を回避しました(#233)。
- 不正なレガシー セッション状態に備えて、
QueueTimeline
の堅牢性を高めました(#241)。
- カスタム プレーヤーの
- メタデータ:
- ID3 v2.4 で許されているように、ID3 フレームから複数の null 区切り値を解析します。
- コンテンツのタイプまたはメタデータで記述されたフォルダのタイプを示す
MediaMetadata.mediaType
を追加しました。 MediaMetadata.isBrowsable
を追加してMediaMetadata.folderType
の代わりとしました。このフォルダタイプは次のリリースで非推奨になります。
- Cast 拡張機能:
- Cast SDK のバージョンを 21.2.0 に引き上げました。
- IMA 拡張機能:
- スレッドに関する問題を回避するために、アプリスレッド上の
ImaServerSideAdInsertionMediaSource
のプレーヤー リスナーを削除しました。 - プロパティ
focusSkipButtonWhenAvailable
をImaServerSideAdInsertionMediaSource.AdsLoader.Builder
に追加して、TV デバイスでスキップボタンのフォーカスをリクエストし、デフォルトで true に設定するようにしました。 focusSkipButton()
メソッドをImaServerSideAdInsertionMediaSource.AdsLoader
に追加して、スキップボタンのフォーカスをプログラムでリクエストできるようにしました。- IMA SDK のバージョンを 3.29.0 に引き上げました。
- スレッドに関する問題を回避するために、アプリスレッド上の
- デモアプリ:
- ランタイムのダウンロード通知用に、通知権限をリクエストします(#10884)。
バージョン 1.0.0-beta03
2022 年 11 月 22 日
androidx.media3:media3-*:1.0.0-beta03
がリリースされました。バージョン 1.0.0-beta03 に含まれる commit については、こちらをご覧ください。
このリリースは ExoPlayer 2.18.2 リリースに対応しています。
- コアライブラリ:
- 現在選択されているトラックでトンネリングが有効になっているかどうかを確認する
ExoPlayer.isTunnelingEnabled
を追加しました(#2518)。 - 単一の
MediaSource
のラップを簡素化するためのWrappingMediaSource
を追加しました(#7279)。 - 使用可能なメモリの不足が原因で再生が止まる前にバックバッファを破棄します。
- オフロードが有効な場合に「doSomeWork」ブロックのトレースを閉じます。
PlaybackStatsListener
での高速シークに関するセッション トラッキングの問題を修正しました(#180)。- 単一のアイテムのプレイリストで
seekToNext
またはseekToPrevious
を呼び出す場合、欠落していたonMediaItemTransition
コールバックを送信します(#10667)。 - 動画がレンダリングされるサーフェスのサイズを返す
Player.getSurfaceSize
を追加しました。 - プレーヤーの解放中にリスナーを削除すると
IllegalStateException
が発生する可能性があるバグを修正しました(#10758)。
- 現在選択されているトラックでトンネリングが有効になっているかどうかを確認する
- ビルド:
- コンパイル エラーを回避するため、最小
compileSdkVersion
を適用しました(#10684)。 - 別の Gradle ビルドに含まれている場合はブロックを公開しません。
- コンパイル エラーを回避するため、最小
- トラック選択:
- ディスプレイがドルビー ビジョンをサポートしていない場合は、他のトラックを優先します(#8944)。
- ダウンロード:
- 動画:
- ディスプレイがドルビー ビジョンをサポートしていない場合は、別のデコーダを試します(#9794)。
- オーディオ:
- 複数のプレーヤーを同時に解放するときに OutOfMemory エラーを回避するため、
AudioTrack
インスタンスを解放するのにSingleThreadExecutor
を使用します(#10057)。 - AudioTrack のオフロード状態の
AudioOffloadListener.onExperimentalOffloadedPlayback
を追加しました(#134)。 AudioTrackBufferSizeProvider
を公開インターフェースにしました。- 優先するオーディオ出力デバイスを設定するために
ExoPlayer.setPreferredAudioDevice
を追加しました(#135)。 androidx.media3.exoplayer.audio.AudioProcessor
からandroidx.media3.common.audio.AudioProcessor
に名前を変更しました。- すべての Android バージョンで、8 チャンネルと 12 チャンネルのオーディオをそれぞれ 7.1 と 7.1.4 のチャンネル マスクにマッピングしました(#10701)。
- 複数のプレーヤーを同時に解放するときに OutOfMemory エラーを回避するため、
- メタデータ:
- メタデータが利用可能になり次第すぐにレンダリングするように
MetadataRenderer
を設定できるようになりました。MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
でインスタンスを作成して、レンダラがメタデータをすぐに出力するか、プレーヤーの位置と同期して出力するかを指定します。
- メタデータが利用可能になり次第すぐにレンダリングするように
- DRM:
- 空ではないが無効なライセンスの URL を返す、Android 13 の ClearKey 実装のバグを回避します。
- プレイリストで DRM スキームを切り替えるときの
setMediaDrmSession failed: session not opened
エラー(例: Widevine から ClearKey)を修正しました。
- テキスト:
- CEA-608: フィールド 2 でサービスの切り替えコマンドが正しく処理されるようにしました(#10666)。
- DASH:
- マニフェストから
EventStream.presentationTimeOffset
を解析しました(#10460)。
- マニフェストから
- UI:
- プレーヤーの現在のオーバーライドを
TrackSelectionDialogBuilder
のプリセットとして使用しました(#10429)。
- プレーヤーの現在のオーバーライドを
- セッション:
- 非同期解決が必要なコマンドであっても、常に正しい順序で実行されるようにしました(#85)。
DefaultMediaNotificationProvider
インスタンスを作成するためのDefaultMediaNotificationProvider.Builder
を追加しましたビルダーは、プロバイダが使用する通知 ID、通知チャンネル ID、通知チャンネル名を設定できます。また、メソッドDefaultMediaNotificationProvider.setSmallIcon(int)
を追加して、通知の小さなアイコンを設定できます(#104)。MediaController.release()
より前に送信されたコマンドがドロップされないようにしました(#99)。SimpleBitmapLoader
は、file://
URI からビットマップを読み込めます(#108)。- ある期間に
MediaController
が広告をシークできないようにするアサーションを修正しました(#122)。 - 再生が終了すると
MediaSessionService
がフォアグラウンドから停止され、最後に再生されたメディア アイテムを再生するための通知が表示されます(#112)。 - 一時停止のペンディング インテントではフォアグラウンド サービスは開始されません(#167)。
- API 26 と API 27 で
DefaultNotificationProvider
が作成した、通知に関連付けられた「バッジ」は手動で非表示にします(API 28 以降ではバッジは自動的に非表示になります)(131)。 - 従来の MediaSession から Media3 MediaController への 2 番目のバインダーの接続で IllegalStateExceptions が発生するバグを修正しました(#49)。
- RTSP:
- IMA:
- FFmpeg 拡張機能:
- FFmpeg ライブラリを NDK 23.1.7779620 以降にリンクするのに必要な新たなフラグを追加しました(#9933)。
- AV1 拡張機能:
- 最新の Android Studio リリースとの非互換性の問題を避けるために CMake バージョンを更新しました(#9933)。
- Cast 拡張機能:
MediaController
を使用して再生を制御するときにCastPlayer
を識別できるようにgetDeviceInfo()
を実装しました(#142)。
- Transformer:
- 出力サンプルの生成が遅すぎる場合に検出できるよう、マルチプレクサのウォッチドッグ タイマーを追加しました。
- サポートが終了したシンボルを削除しました。
Transformer.Builder.setOutputMimeType(String)
を削除しました。この機能は削除されました。デフォルトのマルチプレクサが使用されている場合、MIME タイプは常に MP4 になります。
バージョン 1.0.0-beta02
2022 年 7 月 21 日
androidx.media3:media3-*:1.0.0-beta02
がリリースされました。バージョン 1.0.0-beta02 に含まれる commit については、こちらをご覧ください。
このリリースは ExoPlayer 2.18.1 リリースに対応しています。
- コアライブラリ:
ExoPlayer.setShuffleOrder
でShuffleOrder
を変更すると、reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
でPlayer.Listener#onTimelineChanged
が呼び出されるようにしました(#9889)。- プログレッシブ メディアの場合、選択したトラックのみがバッファリングされた位置に含まれるようになりました(#10361)。
- すべての ExoPlayer ログ出力に対してカスタムの logger を許可しました(#9752)。
- 特定のケースで機能していなかった、
DefaultMediaSourceFactory
のsetDataSourceFactory
の実装を修正しました(#116)。
- エクストラクタ:
- DASH:
- マニフェストからの ClearKey ライセンス URL を解析しました(#10246)。
- UI:
- TalkBack が再生コントロール メニューの現在アクティブな速度オプションを通知するようにしました(#10298)。
- RTSP:
- VP8 の断片化されたパケットの処理を追加しました(#110)。
- Leanback 拡張機能:
LeanbackAdapter
のplayWhenReady
の変更をリッスンするようになりました(10420)。
- Cast:
バージョン 1.0.0-beta01
2022 年 6 月 16 日
androidx.media3:media3-*:1.0.0-beta01
がリリースされました。バージョン 1.0.0-beta01 に含まれる commit については、こちらをご覧ください。
これは ExoPlayer 2.18.0 リリースに対応しています。
- コアライブラリ:
MediaMetricsManager
による Android プラットフォーム診断のサポートを有効にしました。ExoPlayer では再生イベントとパフォーマンス データがプラットフォームに転送されるため、デバイスのシステム パフォーマンスとデバッグ情報の提供に役立てることができます。このデータは、デバイスのユーザーが使用状況と診断情報の共有を有効にしている場合に、Google によって収集されることもあります。アプリは、ExoPlayer.Builder.setUsePlatformDiagnostics(false)
で ExoPlayer のプラットフォーム診断への貢献を無効にできます。- 字幕をサイドローディングしたり、再生中に選択した字幕を変更したりする場合など、
MergingMediaSource
の使用時にトラックが頻繁にリセットされるバグを修正しました(#10248)。 - API 29 と 30 で 5G-NSA ネットワーク タイプの検出を停止しました。これらの再生は 4G ネットワークを前提としています。
null
をMediaSource.Factory.setDrmSessionManagerProvider
、MediaSource.Factory.setLoadErrorHandlingPolicy
に渡すことを禁止しました。DefaultDrmSessionManagerProvider
とDefaultLoadErrorHandlingPolicy
のインスタンスは、必要に応じて明示的に渡すことができます。- 正確な
LocalConfiguration
が不明の場合に、メディアの再生に必要なメタデータを表すMediaItem.RequestMetadata
を追加しました。また、MediaMetadata.mediaUrl
はRequestMetadata
に含まれるようになったため削除しました。 - プレーヤーが 1 つの項目を設定できるように
Player.Command.COMMAND_SET_MEDIA_ITEM
を追加しました。
- トラック選択:
TrackSelectionOverrides
クラスをTrackSelectionParameters
にフラット化し、TrackSelectionOverride
をトップレベル クラスに昇格しました。TracksInfo
の名前をTracks
に、TracksInfo.TrackGroupInfo
の名前をTracks.Group
に変更しました。Player.getCurrentTracksInfo
とPlayer.Listener.onTracksInfoChanged
の名前もPlayer.getCurrentTracks
とPlayer.Listener.onTracksChanged
に変更されました。これには、Player.Listener.onTracksChanged
メソッド名の「サポート終了解除」も含まれますが、パラメータのタイプが異なります。- サポートが終了した
DefaultTrackSelector.ParametersBuilder
ではなくDefaultTrackSelector.Parameters.Builder
を返すように、DefaultTrackSelector.buildUponParameters
とDefaultTrackSelector.Parameters.buildUpon
を変更しました。 - デフォルトで有効化される
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
を追加しました。有効にすると、DefaultTrackSelector
は、チャンネル数がデバイスの出力機能を超えないオーディオ トラックを優先します。ハンドヘルド デバイスでは、マルチチャンネル フォーマットを空間化できる(Android 12L 以降)場合か、ドルビー サラウンド音声形式である場合を除き、DefaultTrackSelector
はマルチチャンネル オーディオ フォーマットよりもステレオ / モノラルを優先します。さらに、オーディオ空間化をサポートしているデバイスでは、DefaultTrackSelector
が Spatializer プロパティの変更を監視し、これに応じて新しいトラック選択をトリガーします。television
UI モードのデバイスは、これらの制約から除外され、チャンネル数が最も多い形式が優先されます。この機能を有効にするには、DefaultTrackSelector
インスタンスをContext
で作成する必要があります。
- 動画:
DummySurface
からPlaceholderSurface
に名前を変更しました。MediaCodecVideoRenderer.getCodecMaxInputSize
に AV1 サポートを追加しました。
- オーディオ:
- 非標準の MIME タイプをアドバタイズする LG AC3 オーディオ デコーダーを使用しました。
- API 21 未満の ART 検証の遅延を防ぐため、
AudioAttributes.getAudioAttributesV21()
の戻り値の型をandroid.media.AudioAttributes
から新しいAudioAttributesV21
ラッパークラスに変更しました。 - プラットフォーム(API 29 以上)にクエリするか、フォーマット オーディオ チャンネル数が設定されていない場合に、オーディオ パススルーの音声エンコード チャンネル数を想定しました。これは、HLS チャンクレス準備で発生します(10204)。
- デコーダが 12 チャンネルの PCM オーディオを出力する場合に、
AudioTrack
にチャンネル マスクAudioFormat.CHANNEL_OUT_7POINT1POINT4
を設定しました(#10322)。
- DRM
- 形式変更の直後にシークする場合に、常に DRM セッションが正しく更新されるようにしました(10274)。
- テキスト:
List<Cue>
ではなくCueGroup
を返すようにPlayer.getCurrentCues()
を変更しました。- SSA:
BorderStyle == 3
(OutlineColour
がキューの背景を設定する)の場合のOutlineColour
スタイル設定がサポートされるようになりました(#8435)。 - CEA-708: データを複数のサービス ブロックに解析し、現在選択されているサービス番号に関連付けられないブロックを無視しました。
- Google 内部の字幕形式の処理にのみ使用されていた
RawCcExtractor
を削除しました。
- エクストラクタ:
- UI:
useController=false
の場合に、PlayerView
に設定されたOnClickListener
へのイベントの配信を修正しました(#9605)。また、すべてのビュー構成でイベントのOnLongClickListener
への配信を修正しました。ACTION_UP
の前のPlayerView
の境界を越えるタッチイベント シーケンスをクリックとして誤って扱う問題を修正しました(#9861)。- タップ操作でコントロールが非表示にならずに、再生が切り替えられる
PlayerView
のアクセシビリティの問題を修正しました(#8627)。 ExoPlayer
ではなくPlayer
インターフェースと連携するようにTrackSelectionView
とTrackSelectionDialogBuilder
を書き換えました。これにより、ビューを他のPlayer
実装で使用できるようになり、UI モジュールから ExoPlayer モジュールへの依存関係が削除されます。これは互換性を破る変更です。PlayerView
トラック セレクタに強制テキスト トラックを表示せずに、「なし」が選択されている場合は、適切な強制テキスト トラックが選択されるようにしました(#9432)。
- DASH:
- DTS
AudioChannelConfiguration
要素からチャンネル数を解析しました。これにより、DTS ストリームの音声パススルーが再度有効になります(#10159)。 null
をDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
に渡すことを禁止しました。DefaultCompositeSequenceableLoaderFactory
のインスタンスは、必要に応じて明示的に渡すことができます。
- DTS
- HLS:
- プレイリストの CODECS 属性にオーディオ コーデックが含まれていない場合、チャンクフルの準備にフォールバックしました(#10065)。
null
をHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
、HlsMediaSource.Factory.setPlaylistParserFactory
、HlsMediaSource.Factory.setPlaylistTrackerFactory
に渡すことを禁止しました。DefaultCompositeSequenceableLoaderFactory
やDefaultHlsPlaylistParserFactory
のインスタンス、またはDefaultHlsPlaylistTracker.FACTORY
への参照は、必要に応じて明示的に渡すことができます。
- スムーズなストリーミング:
null
をSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
に渡すことを禁止しました。DefaultCompositeSequenceableLoaderFactory
のインスタンスは、必要に応じて明示的に渡すことができます。
- RTSP:
- H263 用の RTP リーダーを追加しました(#63)。
- MPEG4 用の RTP リーダーを追加しました(#35)。
- HEVC 用の RTP リーダーを追加しました(#36)。
- AMR 用の RTP リーダーを追加しました。現在、モノチャンネルの非インターリーブ AMR ストリームのみがサポートされます。複合 AMR RTP ペイロードはサポートされません(#46)。
- VP8 用の RTP リーダーを追加しました(#47)。
- WAV 用の RTP リーダーを追加しました(#56)。
- RTSP 基本認証ヘッダーを修正しました(#9544)。
- 必須の SDP フィールドの確認は、ExoPlayer では不要なため停止しました(#10049)。
- RTSP タイミングを解析するときにチェック済み例外をスローしました(#10165)。
- VP9 用の RTP リーダーを追加しました(#47)。
- OPUS 用の RTP リーダーを追加しました(#53)。
- データソース:
DummyDataSource
からPlaceholderDataSource
に名前を変更しました。- OkHttp 割り込み処理の回避策
- セッション:
- リクエストを非同期で解決できるように
MediaSession.MediaItemFiller
をMediaSession.Callback.onAddMediaItems
に置き換えました。 MediaController
が従来のメディア セッションに接続する場合のsetMediaItems(s)
メソッドをサポートしました。MediaController.setMediaUri
とMediaSession.Callback.onSetMediaUri
を削除しました。MediaController.setMediaItem
とMediaSession.Callback.onAddMediaItems
を使用して同じ機能を実現できます。- メディアを再生するための従来の
MediaController
呼び出しをonSetMediaUri
ではなくMediaSession.Callback.onAddMediaItems
に転送しました。 - 通知のカスタマイズを行うための
MediaNotification.Provider
とDefaultMediaNotificationProvider
を追加しました。 - アートワークの画像をダウンロードするための
BitmapLoader
とSimpleBitmapLoader
を追加しました。 - 以前のセッションとの下位互換性を維持するための
MediaSession.setCustomLayout()
を追加しました。 - 以前のセッションと同等の機能を提供するための
MediaSession.setSessionExtras()
を追加しました。 MediaSession.MediaSessionCallback
の名前をMediaSession.Callback
に、MediaLibrarySession.MediaLibrarySessionCallback
の名前をMediaLibrarySession.Callback
に、MediaSession.Builder.setSessionCallback
の名前をsetCallback
に変更しました。MediaControllerImplLegacy
の NPE を修正しました(#59)。- タイムラインの変更に関するセッション位置情報を更新しました(#51)。
- コントローラをリリースした後の
MediaControllerImplBase
の NPE を修正しました(#74)。
- リクエストを非同期で解決できるように
- 広告の再生 / IMA:
- Media Rating Council(MRC)の推奨事項に合わせて、広告ポーリング レートを 100 ミリ秒ごとから 200 ミリ秒ごとに引き下げました。
- FFmpeg 拡張機能:
- CMake バージョンを
3.21.0+
に更新し、CMake のバグにより AndroidStudio の Gradle 同期が失敗するのを回避しました(#9933)。
- CMake バージョンを
- サポートが終了したシンボルを削除しました。
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
を削除しました。代わりにPlayer.Listener.onTracksChanged(Tracks)
を使用してください。Player.getCurrentTrackGroups
とPlayer.getCurrentTrackSelections
を削除しました。代わりにPlayer.getCurrentTracks
を使用してください。ExoPlayer.getCurrentTrackGroups
とExoPlayer.getCurrentTrackSelections
を引き続き使用することもできますが、これらのメソッドは非推奨のままです。DownloadHelper
、DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
、DEFAULT_TRACK_SELECTOR_PARAMETERS
の定数を削除しました。可能であればgetDefaultTrackSelectorParameters(Context)
を使用し、それ以外の場合はDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
を使用します。- コンストラクタ
DefaultTrackSelector(ExoTrackSelection.Factory)
を削除しました。代わりにDefaultTrackSelector(Context, ExoTrackSelection.Factory)
を使用してください。 Transformer.Builder.setContext
を削除しました。代わりに、Context
をTransformer.Builder
コンストラクタに渡す必要があります。
バージョン 1.0.0-alpha03
2022 年 3 月 14 日
androidx.media3:media3-*:1.0.0-alpha03
がリリースされました。バージョン 1.0.0-alpha03 に含まれる commit については、こちらをご覧ください。
これは ExoPlayer 2.17.1 リリースに対応しています。
- オーディオ:
- HLS でのドルビー アトモス(E-AC3-JOC)の音声機能に関するエラーを修正しました。
- エクストラクタ:
- FMP4: v0 と v1 の両方の emsg アトムスを含むストリームに対して、emsg サンプル メタデータが誤った順序で出力される問題を修正しました(#9996)。
- テキスト:
SubtitleConfiguration
フィールドの優先順位を設定し、Factory
値が設定されていない場合はその値に戻すために、SingleSampleMediaSource.Factory.setTrackId
とMediaItem.SubtitleConfiguration.Builder.setId
のインタラクションを修正しました(#10016)。
- 広告再生:
- ライブ HLS SSAI ストリームの広告期間における音声アンダーランを修正しました。
バージョン 1.0.0-alpha02
2022 年 3 月 2 日
androidx.media3:media3-*:1.0.0-alpha02
がリリースされました。バージョン 1.0.0-alpha02 に含まれる commit については、こちらをご覧ください。
これは ExoPlayer 2.17.0 リリースに対応しています。
- コアライブラリ:
- 保護されたメソッド
DefaultRenderersFactory.getCodecAdapterFactory()
を追加し、buildVideoRenderers()
またはbuildAudioRenderers()
をオーバーライドするDefaultRenderersFactory
のサブクラスが、コーデック アダプター ファクトリにアクセスしてMediaCodecRenderer
インスタンスに渡せるようにしました。 - ICY ヘッダー フィールド
name
とgenre
をそれぞれMediaMetadata.station
とMediaMetadata.genre
に反映し、Player.Listener.onMediaMetadataChanged()
を介してアプリに到達できるようにしました(#9677)。 DefaultHttpDataSource#getResponseHeaders
から null のキーを削除しました。MediaCodec
インスタンスの作成に失敗した場合、スリープと再試行を行います。これにより、サーフェスを安全なコーデックから別のコーデックに切り替えたときに一部のデバイスで発生する問題を回避できます(#8696)。MediaCodecAdapter.getMetrics()
を追加して、ユーザーがMediaCodec
から指標データを取得できるようにしました(#9766)。- Maven の依存関係の解決を修正しました(#8353)。
- 低レイテンシ機能がないライブ ストリームや、速度設定のユーザー リクエストがないライブ ストリームについて、自動速度調整を無効にしました(#9329)。
DecoderCounters#inputBufferCount
からqueuedInputBufferCount
に名前を変更しました。SimpleExoPlayer.renderers
を非公開にしました。レンダラにはExoPlayer.getRenderer
を介してアクセスできます。Player.EventFlags
の値と一致するように、一部のAnalyticsListener.EventFlags
定数値を更新しました。AnalyticsCollector
をインターフェースとデフォルトの実装に分割し、アプリで必要ない場合は R8 によって削除されるようにしました。
- 保護されたメソッド
- トラック選択:
- トラック選択での優先動画ロールフラグをサポートしました(#9402)。
- 複数の動画トラックを選択する際に優先する MIME タイプとロールフラグが考慮されるように、動画トラック選択ロジックを更新しました(#9519)。
- デコーダとハードウェアのサポートレベルが同じである自動選択形式のみを選択するように、動画と音声のトラック選択ロジックを更新しました(#9565)。
- プライマリのハードウェア アクセラレーテッド デコーダで複数のコーデックがサポートされている場合は、より効率的なコーデックを優先するように、動画トラック選択ロジックを更新しました(#4835)。
- 技術的なトラック選択の制約(優先 MIME タイプ、最大チャンネル数など)よりも、音声コンテンツの設定(「デフォルト」の音声トラック、システム ロケール言語に一致するトラックなど)を優先します。
- あるトラック グループをオーバーライドしても同じタイプの他のトラック グループが無効にならないという、トラック選択の問題を修正しました(#9675)。
- 空でないトラックと空のトラックのオーバーライドが混在していると正しく適用されないという、トラック選択の問題を修正しました(#9649)。
TrackGroupArray
内のTrackGroup
の重複を禁止しました。TrackGroup
コンストラクタでid
を設定することで、TrackGroup
が常に区別できるようになります。これにより、アクティブなトラックのオーバーライドでアプリをバックグラウンド化した後に再生を再開するとクラッシュする問題が修正されます(#9718)。- 再生がライブエッジに非常に近い場合でも、十分なネットワーク帯域幅があれば品質を向上させられるように、
AdaptiveTrackSelection
のロジックを修正しました(#9784)。
- 動画:
- 必要に応じて互換性のある H264/H265 デコーダを使用するように、ドルビー ビジョンのデコーダ フォールバック ロジックを修正しました。
- オーディオ:
- 必要に応じて互換性のある E-AC3 デコーダを使用するように、ドルビー アトモス(E-AC3-JOC)のデコーダ フォールバック ロジックを修正しました。
null
ではなくAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
を明示的に渡すことが必須になるように、AudioCapabilities
API を変更しました。AudioTrackBufferSizeProvider
をDefaultAudioSink
に挿入することで、AudioTrack
バッファサイズの計算をカスタマイズできるようにしました(#8891)。- リクエストされたバッファサイズが 1 MB を超える場合は、
AudioTrack
の作成を再試行します(#9712)。
- エクストラクタ:
- テキスト:
- DRM:
DrmSessionManager.(pre)acquireSession
からplaybackLooper
を削除しました。カスタムのMediaSource
でアプリがDrmSessionManager
を使用している場合は、代わりにplaybackLooper
をDrmSessionManager.setPlayer
に渡す必要があります。
- 広告の再生 / IMA:
- IMA ダイナミック広告挿入(DAI)のサポートを追加しました(#8213)。
- 広告グループをリセットしてもう一度再生できるように、
AdPlaybackState
にメソッドを追加しました(#9615)。 - 広告の再生時、再生速度 1.0 を強制適用します(#9018)。
- 広告グループの読み込みに失敗するとすぐに再生がリセットされる問題を修正しました(#9929)。
- UI:
- DASH:
- HLS:
- RTSP:
- Transformer:
- 必要な最小 API バージョンを 21 に増やしました。
TransformationException
は、変換中に発生するエラーの記述に使用されるようになりました。- 変換オプションを指定するための
TransformationRequest
を追加しました。 - 複数のリスナーを登録できるようになりました。
- コーデック出力が部分的に読み取られたときに Transformer が停止する問題を修正しました。
- muxer スローを解放するときに
Transformer.getProgress
で発生する可能性がある NPE を修正しました。 - 変換を適用するためのデモアプリを追加しました。
- MediaSession 拡張機能:
- デフォルトで、停止時に
MediaSessionConnector
がプレイリストを消去するようになりました。プレイリストを保持する必要があるアプリは、コネクタでsetClearMediaItemsOnStop(false)
を呼び出すことができます。
- デフォルトで、停止時に
- Cast 拡張機能:
- FFmpeg 拡張機能:
build_ffmpeg.sh
が GNU ではなく LLVM の bin utils に依存するようになりました(#9933)。
- Android 12 の互換性:
com.google.android.gms:play-services-cast-framework:20.1.0
に依存するように Cast 拡張機能をアップグレードしました。以前のバージョンのplay-services-cast-framework
は Android 12 をターゲットとするアプリに対応しておらず、PendingIntent
の作成時にIllegalArgumentException
でクラッシュします(#9528)。
- サポートが終了したシンボルを削除しました。
Player.EventListener
を削除しました。代わりにPlayer.Listener
を使用してください。MediaSourceFactory#setDrmSessionManager
、MediaSourceFactory#setDrmHttpDataSourceFactory
、MediaSourceFactory#setDrmUserAgent
を削除しました。代わりにMediaSourceFactory#setDrmSessionManagerProvider
を使用してください。MediaSourceFactory#setStreamKeys
を削除しました。代わりにMediaItem.Builder#setStreamKeys
を使用してください。MediaSourceFactory#createMediaSource(Uri)
を削除しました。代わりにMediaSourceFactory#createMediaSource(MediaItem)
を使用してください。DashMediaSource
、HlsMediaSource
、SsMediaSource
からsetTag
を削除しました。代わりにMediaItem.Builder#setTag
を使用してください。DashMediaSource#setLivePresentationDelayMs(long, boolean)
を削除しました。MediaItem.Builder#setLiveConfiguration
とMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
を使用してマニフェストをオーバーライドするか、DashMediaSource#setFallbackTargetLiveOffsetMs
を使用してフォールバック値を提供してください。(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
を削除しました。スレッドの強制適用をオプトアウトすることはできなくなりました。ActionFile
とActionFileUpgradeUtil
を削除しました。ExoPlayer 2.16.1 以前でActionFileUpgradeUtil
を使用して、以前のアクション ファイルをDefaultDownloadIndex
に統合してください。ProgressiveMediaSource#setExtractorsFactory
を削除しました。代わりにProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
コンストラクタを使用してください。ProgressiveMediaSource.Factory#setTag
とProgressiveMediaSource.Factory#setCustomCacheKey
を削除しました。代わりにMediaItem.Builder#setTag
とMediaItem.Builder#setCustomCacheKey
を使用してください。DefaultRenderersFactory(Context, @ExtensionRendererMode int)
コンストラクタとDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
コンストラクタを削除しました。代わりにDefaultRenderersFactory(Context)
コンストラクタ、DefaultRenderersFactory#setExtensionRendererMode
、DefaultRenderersFactory#setAllowedVideoJoiningTimeMs
を使用してください。- すべてのパブリック
CronetDataSource
コンストラクタを削除しました。代わりにCronetDataSource.Factory
を使用してください。
- 次の
IntDefs
を@Target(TYPE_USE)
のみに変更しました。Kotlin での使用のコンパイルが失敗するおそれがありますが、アノテーションを移動して型(Int
)にアノテーションを付けることで修正できます。@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(com.google.android.exoplayer2.ext.flac
パッケージ)@FlacExtractor.Flags
(com.google.android.exoplayer2.extractor.flac
パッケージ)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
バージョン 1.0.0-alpha01
2021 年 10 月 27 日
androidx.media3:media3-*:1.0.0-alpha01
がリリースされました。バージョン 1.0.0-alpha01 に含まれる commit については、こちらをご覧ください。
新しい機能と特長
Media3 は、ExoPlayer を含むメディア サポート ライブラリの新しいホームです。最初のアルファ版には、メディアのユースケースを実装するためのライブラリの機能の初期実装が含まれています。
- カスタマイズと拡張が簡単な Android 用のアプリレベルのメディア プレーヤーである ExoPlayer。
- 再生を公開して制御するためのメディア セッション機能。この新しいセッション モジュールは、ExoPlayer と同じ
Player
インターフェースを使用します。 - メディア再生のユーザー インターフェースを作成するための UI コンポーネント。
- IMA SDK による広告の挿入など、ExoPlayer で使用する他のライブラリの機能をラップするモジュール。
詳しくは、Media3 GitHub プロジェクトをご覧ください。
ExoPlayer は、以前は別の ExoPlayer GitHub プロジェクトでホストされていました。Media3 のパッケージ名は androidx.media3.exoplayer
です。しばらくの間、ExoPlayer GitHub プロジェクトの維持とリリースを続け、アプリが Media3 に移行できるようにする予定です。Media3 には、ExoPlayer のすべてのモジュールの置き換えが用意されています。ただし、以前の media2 と mediasession 拡張機能は新しい media3-session
モジュールに置き換えられています。これにより、アダプターやコネクタのクラスを使用する必要なく、プレーヤーとメディア セッションを直接統合できます。