Media3
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
2024 年 11 月 27 日 | 1.5.0 | - | - | - |
依存関係の宣言
Media3 への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。
アプリまたはモジュールの build.gradle
ファイルに、必要なアーティファクトの依存関係を追加します。
Groovy
dependencies { def media3_version = "1.4.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" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.4.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") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
依存関係について詳しくは、ビルド依存関係の追加をご覧ください。
フィードバック
お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。Media3 Issue Tracker を使用すると、質問への回答、既知の問題、機能リクエストを見つけたり、新しい問題を報告したりできます。
バージョン 1.5
バージョン 1.5.0
2024 年 11 月 27 日
androidx.media3:media3-*:1.5.0
がリリースされました。バージョン 1.5.0 に含まれる commit は次のとおりです。
- 共通ライブラリ:
- 完全な整合性とリスナー処理を確保しながら、わずかな調整で別のプレーヤーに転送できる
ForwardingSimpleBasePlayer
を追加しました(#1183)。 SimpleBasePlayer.State.playlist
をgetPlaylist()
メソッドに置き換えます。SimpleBasePlayer.State.Builder.setPlaylist()
のオーバーライドを追加して、プレイリスト構造を構築する代わりに、Timeline
と現在のTracks
とMetadata
を直接指定できるようにしました。minSdk
を 21(Android Lollipop)に引き上げました。これは、他のすべての AndroidX ライブラリと整合しています。androidx.media3:media3-common-ktx
アーティファクトを追加。Common ライブラリ上に構築された Kotlin 固有の機能を提供します。media3-common-ktx
ライブラリに、Player.Events
をリッスンするコルーチンをスピンするPlayer.listen
サスペンド拡張関数を追加します。- ランタイム クラス検証の失敗を回避するために、手動でアウトオブライン化された内部クラスから
@DoNotInline
アノテーションを削除しました。最新バージョンの R8 では、このような呼び出しを自動的にオフラインにすることで、実行時エラーを回避します(そのため、手動でのオフライン化は不要です)。ライブラリのすべての Gradle ユーザーは、compileSdk = 35
のため、この処理を行う R8 のバージョンを使用する Android Gradle プラグインのバージョンをすでに使用している必要があります。Gradle 以外のビルドシステムを使用しているライブラリのユーザーは、ランタイム クラス検証の失敗を回避するために、R8 と同等の圧縮/難読化ステップで同様の自動アウトオブライン プロセスを実行する必要があります。この変更は、他の AndroidX ライブラリですでに行われています。
- 完全な整合性とリスナー処理を確保しながら、わずかな調整で別のプレーヤーに転送できる
- ExoPlayer:
- すべてのメディア アイテムで
MediaCodecRenderer.onProcessedStreamChange()
を呼び出せるようになりました。以前は、最初の呼び出しでは呼び出されませんでした。これを有効にするには、MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
を使用します。 PreloadMediaSource.PreloadControl.onPreloadError
を追加して、PreloadMediaSource.PreloadControl
実装がエラーが発生したときにアクションを実行できるようにしました。BasePreloadManager.Listener
を追加して、プリロード イベントをアプリに伝播します。- SNTP クライアントのタイムアウトの変更を許可し、タイムアウト時に代替アドレスを再試行できるようにしました(#1540)。
- フィールドは常にゼロだったため、
MediaCodecAdapter.Configuration.flags
を削除します。 - Wear OS API 35 以降で、再生用の内蔵スピーカーをユーザーが選択できるようにします(デバイスがこのサポートをアドバタイズしている場合)。
- 音声フォーカス処理が有効になるまで、
Context.getSystemService(Context.AUDIO_SERVICE)
へのブロッキング呼び出しを延期します。これにより、オーディオ フォーカス処理が有効になっていない場合にブロッキング呼び出しが行われなくなります(#1616)。 - 読み込みに失敗した場合、バッファに保存されている時間に関係なく再生を許可します(#1571)。
- 個々のレンダラで再生の準備が整ったときに通知するために、
AnalyticsListener.onRendererReadyChanged()
を追加しました。 MediaCodec
が非同期モードで動作しているときに、MediaCodec.CryptoException
が「予期しないランタイム エラー」として報告されることがある問題を修正しました(API 31 以降のデフォルトの動作)。PreloadMediaSource.PreloadControl.onContinueLoadingRequested()
でbufferedPositionUs
ではなくbufferedDurationUs
を渡します。また、DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
をDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
に変更します。アプリは、デフォルトの開始位置からの特定の時間を示す値を渡す必要があります。この値は、対応するメディアソースをこの IntDef でプリロードする位置ではなく、- すべてのメソッド呼び出しを別のレンダラに転送する
ForwardingRenderer
実装を追加しました。(1703) - 再生リスト内の次のアイテムの再生リストのプリロードを追加します。アプリは、必要に応じて
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)
を呼び出してプリロードを有効にできます。デフォルトでは、プリロードは無効になっています。オプトインした場合、再生を妨げないように、DefaultLoadControl
は、プレーヤーが再生用に読み込んでいない場合にのみ、プリロードの開始と続行を制限します。アプリは、必要に応じてLoadControl.shouldContinuePreloading()
を実装することで、この動作を変更できます(DefaultLoadControl
でこのメソッドをオーバーライドする場合など)。LoadControl
のデフォルト実装では、アプリがLoadControl
のカスタム実装を使用している場合にプリロードが無効になります。 - サブクラス リスナーのイベントを呼び出せるように、メソッド
MediaSourceEventListener.EventDispatcher.dispatchEvent()
を追加しました。(1736) DefaultPreloadManager
インスタンスとExoPlayer
インスタンスを一貫して共有構成でビルドするDefaultPreloadManager.Builder
を追加します。DefaultLoadControl
実装がExoTrackSelection[]
からストリームタイプを取得できるため、LoadControl.onTracksSelected()
からRenderer[]
パラメータを削除しました。DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])
のサポートを終了し、オーバーライドを防ぐためにメソッドを final としてマークしました。代わりに新しいDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
を使用してください。MergingMediaSource
で、セカンダリ ソースからのMediaSourceEventListener
イベントを報告します。これにより、サイドローディングされた字幕(MediaItem.LocalConfiguration.subtitleConfigurations
で追加されたもの)の読み込み開始/エラー/キャンセル/完了イベントが報告されます。これは、AnalyticsListener
から出力された重複する読み込みイベントとして表示される場合があります。- 字幕とメタデータのエラーが原因で再生が完全に停止しないようにします。代わりに、問題のあるトラックが無効になり、残りのトラックの再生が続行されます(#1722)。
- 新しい字幕処理(抽出中)では、関連する解析エラー(無効な字幕データなど)と読み込みエラー(HTTP 404 など)が
onLoadError
コールバックを介して出力されます。 - 以前の字幕処理(レンダリング中)では、関連する読み込みエラーのみが
onLoadError
コールバックを介して出力され、解析エラーは無視されます(これは既存の動作です)。
- 新しい字幕処理(抽出中)では、関連する解析エラー(無効な字幕データなど)と読み込みエラー(HTTP 404 など)が
- 再生リストのアイテムまたはマルチ期間 DASH ストリームの期間が実際のコンテンツと一致しない場合、アイテムの最後でフレームがフリーズするバグを修正しました(#1698)。
SntpClient
にセッターを追加して、クライアントが再初期化される最後の更新からの経過時間の上限を設定しました(#1794)。
- すべてのメディア アイテムで
- Transformer:
SurfaceAssetLoader
を追加します。これにより、Surface
を介して Transformer への動画データのキューイングをサポートします。ImageAssetLoader
は、IllegalStateException
をスローするのではなく、AssetLoader.onError
を介してサポートされていない入力を報告します。MediaItem.Builder.setImageDurationMs
を使用して画像の長さを設定することを、画像のエクスポートに必須にしました。- 音声の EditedMediaItem のシーケンス内のギャップのエクスポート サポートを追加しました。
- トラック選択:
DefaultTrackSelector
: 他の要素が同じである場合は、チャンネルベースの音声よりもオブジェクトベースの音声を優先します。
- エクストラクタ:
Mp4Extractor
とFragmentedMp4Extractor
が、後続のサンプルで参照として使用されない H264 サンプルを識別できるようにします。AmrExtractor
でインデックスベースのシーキングを有効にするオプションを追加。- 有効なフレーム間の MP3 ファイルが 128 KB を超える場合は、無効ではなく切り捨てられたものとして扱います。つまり、MP3 以外のデータが最後にあり、MP3 バイトの長さを示す他のメタデータがないファイルは、
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}
で失敗するのではなく、MP3 データの終わりで再生が停止します(#1563)。 - MP4 ファイルの編集リストを処理する際、キーフレーム以外のメディア開始位置のプリロール サンプル処理を修正しました(#1659)。
Mp4Extractor
とFragmentedMp4Extractor
のmdhd
ボックスのメディアの長さを使用して、フレームレートの計算を改善しました(#1531)。- MP4 編集リストで
media_time
のスケーリングが正しく行われない問題を修正。segment_duration
はすでにムービーのタイムスケールを使用して正しくスケーリングされていましたが、media_time
は MP4 形式の標準(#1792)で指定されているように、トラックのタイムスケールを使用して正しくスケーリングされるようになりました。 - 編集リストを含む MP4 の
endIndices
計算で並べ替え順序が異なるフレームを処理しました(#1797)。 - MP4 ファイルの
mdhd
ボックスでメディアの長さの解析を修正し、-1
値を処理できるようにしました(#1819)。 - H.263 動画の MP4 ファイル内の
h263
ボックスの識別をサポートしました(#1821)。 - AC-4 レベル 4 ISO ベースのメディア ファイル形式のサポートを追加(#1265)。
- DataSource:
HttpEngineDataSource
を更新し、API レベル 34 ではなくバージョン S 拡張機能 7 以降での使用を許可しました(#1262)。DataSourceContractTest
:DataSource.getUri()
が解決済みの URI を返すことをアサートします(ドキュメントに記載されているように)。これがリクエストされた URI と異なる場合は、新しいDataSourceContractTest.TestResource.Builder.setResolvedUri()
メソッドを使用してテストでこれを示します。DataSourceContractTest
:open()
の呼び出しが失敗した後(「見つからない」リソースが原因)と、その後のclose()
呼び出しの前に、DataSource.getUri()
とgetResponseHeaders()
が「open」値を返すことをアサートします。DataSourceContractTest.getNotFoundResources()
をオーバーライドすると、テストのサブクラスで複数の「見つからない」リソースを提供し、想定されるヘッダーも提供できます。これにより、HTTP 404(ヘッダーあり)と「サーバーが見つからない」(ヘッダーなし)を区別できます。
- オーディオ:
- メディアに存在する場合は、コーデックで CTA-2075 音量メタデータを自動的に構成します。
- シーク時に音量がスムーズに下がるようにしました。
- シーク中に発生する可能性のあるパチパチという音声を修正しました。
- Sonic のタイムストレッチ/ピッチシフト アルゴリズムの切り捨てエラーの蓄積を修正。
- 出力フレームのドロップを引き起こす
SpeedChangingAudioProcessor
のバグを修正しました。
- 動画:
MediaCodecVideoRenderer
は、レンダリングも他のサンプルで参照もされないサンプルのデコードを回避します。- API 35 以降では、
MediaCodecAdapter
はconfigure
でnull
Surface
を受信し、新しいメソッドdetachOutputSurface
を呼び出して、コーデックがこれをサポートしている場合(MediaCodecInfo.detachedSurfaceSupported
)に、以前に設定されたSurface
を削除できるようになりました。 onOutputFormatChanged
の処理時に指定されている場合、MediaCodecAdapter
で指定されたピクセル アスペクト比の値を使用(#1371)。- 60 fps の安全な H264 ストリームがサポート対象外とマークされる Galaxy Tab S7 FE のデバイスの問題の回避策を追加しました。(#1619)
- 最後のサンプルの後にストリーミング終了シグナルを返さずに停止するコーデックに対する回避策を追加しました。
- テキスト:
- カスタム
VoiceSpan
を追加し、WebVTT 音声スパンに入力します(#1632)。 - 非常に大きな字幕タイムスタンプ(マイクロ秒で表して
90,000
MPEG タイムベースで乗算すると 64 ビットのlong
がオーバーフローする)を持つ HLS の WebVTT が表示されるようにしました(#1763)。 - ドルビー ビジョン コンテンツで CEA-608 字幕をサポートしました(#1820)。
- CEA-608 字幕が有効になっているときに、DASH マルチ期間ストリームで再生が停止する問題を修正しました(#1863)。
- カスタム
- メタデータ:
- icy または vnd.dvb.ait コンテンツを含むトラックに
C.TRACK_TYPE_METADATA
タイプを割り当てます。
- icy または vnd.dvb.ait コンテンツを含むトラックに
- 画像:
ExternallyLoadedImageDecoder
を追加して、Glide や Coil などの外部画像読み込みライブラリとの統合を簡素化します。
- DataSource:
FileDescriptor
からの読み取りに使用できる新しいDataSource
であるFileDescriptorDataSource
を追加しました(#3757)。
- 効果:
- 軽微な
SurfaceTexture
スケーリングの回避策としてDefaultVideoFrameProcessor
を追加。SurfaceTexture
には、切り抜かれたバッファの端の周囲にある 1 テクセルの境界を切り取る小さなスケーリングが含まれる場合があります。出力が想定どおりに近づくように処理が変更されました。 DefaultVideoFrameProcessor.queueInputBitmap()
を高速化します。その結果、Transformer
を使用して画像を動画にエクスポートする速度が向上します。
- 軽微な
- IMA 拡張機能:
- プレイリストを消去すると
ImaServerSideAdInsertionMediaSource
にArrayIndexOutOfBoundsException
が挿入されるバグを修正しました。 - プレロールのないサーバーサイドで挿入された DAI ストリームで、最後のミッドロールを過ぎて再生すると
ArrayIndexOutOfBoundsException
になるバグを修正しました(#1741)。
- プレイリストを消去すると
- セッション:
MediaButtonReceiver.shouldStartForegroundService(Intent)
を追加して、このメソッドをオーバーライドすることで、アプリが再生の再開のために受信した再生コマンドを抑制できるようにします。デフォルトでは、サービスは常に開始され、ForegroundServiceDidNotStartInTimeException
でシステムがサービスをクラッシュさせない限り、再生を抑制できません(#1528)。- 従来のサービスに接続したときに、
MediaBrowser
から送信されたカスタム コマンドが、メソッドのMediaBrowserServiceCompat
バリアントではなくMediaSessionCompat.Callback
にディスパッチされるバグを修正しました。これにより、MediaBrowser
がレガシー サービスから返された実際の戻り値を受け取ることができませんでした(#1474)。 - メディアボタン インテントのブロードキャスト レシーバーを設定するときに、特定のメーカーのデバイスによってスローされる
IllegalArgumentException
を処理(#1730)。 - メディア アイテムのコマンドボタンを追加します。これにより、
Custom browse actions
として知られている Media3 API が、MediaBrowserCompat
のレガシー ライブラリに追加されます。Media3 コマンドでは、メディア アイテムのボタンはMediaBrowser
とMediaController
の両方で使用できます。AAOS のカスタム ブラウズ アクションをご覧ください。 - Media3 コントローラが
play()
をリクエストした後に、セッションアプリがフォアグラウンド サービスを開始できないことがあるバグを修正しました。 CommandButton.Builder.setIconUri
をコンテンツ URI のみを受け付けるように制限。- 従来の
MediaBrowserCompat
に接続するときに、Media3 ブラウザの接続ヒントを最初のMediaBrowserCompat
に渡します。サービスは、onGetRoot()
の最初の呼び出しで、ルートヒントとして渡された接続ヒントを受け取ることができます。 - 以前のブラウザ サービスに接続した
MediaBrowser
が、ブラウザがparentid
をサブスクライブした後にサービスから送信されたエラーを受信しないバグを修正しました。 - 相互運用性を改善し、以前の
MediaBrowserService
に接続されている Media3 ブラウザが親にサブスクライブするときにparentId
の子を 2 回リクエストしないようにしました。
- UI:
- XML ベースの共有遷移に関する問題のため、
PlayerView
-in-Compose-AndroidView
の回避策で、引き伸ばし/切り抜きされた動画をオプトインにしました。AndroidView
内でPlayerView
を使用するアプリは、オプトインするためにPlayerView.setEnableComposeSurfaceSyncWorkaround
を呼び出す必要があります(#1237、#1594)。 setFullscreenButtonState
をPlayerView
に追加して、フルスクリーン ボタンのアイコンをオンデマンドで更新できるようにしました。つまり、クリック操作に反応してではなく、帯域外で更新できるようにしました(#1590、#184)。- アプリ定義のテキスト トラック選択設定がある場合に、テキスト選択の [なし] が機能しないバグを修正しました。
- XML ベースの共有遷移に関する問題のため、
- DASH 拡張機能:
- セグメントの途中から始まる期間のサポートを追加しました(#1440)。
- Smooth Streaming 拡張機能:
- テキスト トラックを含む SmoothStreaming ストリームを再生する際の
Bad magic number for Bundle
エラーを修正しました。(#1779)
- テキスト トラックを含む SmoothStreaming ストリームを再生する際の
- RTSP 拡張機能:
- デコーダ拡張機能(FFmpeg、VP9、AV1 など):
- IAMF デコーダ モジュールを追加します。このモジュールは、libiamf ネイティブ ライブラリを使用して IAMF トラックを含む MP4 ファイルの再生をサポートし、音声を合成します。
- 再生はステレオ レイアウトで有効になり、空間化とヘッド トラッキング(オプション)を有効にした 5.1 でも有効になりますが、現在のところバイノーラル再生はサポートされていません。
- Android 15 でデコーダ拡張機能の 16 KB ページのサポートを追加しました(#1685)。
- IAMF デコーダ モジュールを追加します。このモジュールは、libiamf ネイティブ ライブラリを使用して IAMF トラックを含む MP4 ファイルの再生をサポートし、音声を合成します。
- Cast 拡張機能:
- CastSession の切断後にタイムラインのクリーンアップを停止します。これにより、送信元アプリは切断後にローカルで再生を再開できます。
Context
が指定されている場合は、CastPlayer のDeviceInfo
に入力します。これにより、MediaSession
をRoutingSession
にリンクできるようになりました。これは、出力スイッチャーの統合に必要です(#1056)。
- テスト ユーティリティ:
DataSourceContractTest
に、次の検証を行うテストが追加されました。- 入力ストリーム
read position
が更新されます。 - 出力バッファ
offset
が正しく適用されます。
- 入力ストリーム
- デモアプリ
- デモのショート動画アプリのメモリリークを解決しました(#1839)。
- サポートが終了したシンボルを削除しました。
- 非推奨の
Player.hasPrevious
、Player.hasPreviousWindow()
を削除。代わりにPlayer.hasPreviousMediaItem()
を使用してください。 - 非推奨の
Player.previous()
メソッドを削除しました。代わりにPlayer.seekToPreviousMediaItem()
を使用してください。 - 非推奨の
DrmSessionEventListener.onDrmSessionAcquired
メソッドを削除しました。 - 非推奨の
DefaultEncoderFactory
コンストラクタを削除しました。代わりにDefaultEncoderFactory.Builder
を使用してください。
- 非推奨の
バージョン 1.5.0-rc02
2024 年 11 月 19 日
1.5.0 の安定版を使用します。
バージョン 1.5.0-rc01
2024 年 11 月 13 日
1.5.0 の安定版を使用します。
バージョン 1.5.0-beta01
2024 年 10 月 30 日
1.5.0 の安定版を使用します。
バージョン 1.5.0-alpha01
2024 年 9 月 10 日
1.5.0 の安定版を使用します。
バージョン 1.4.0
バージョン 1.4.1
2024 年 8 月 27 日
androidx.media3:media3-*:1.4.1
がリリースされました。バージョン 1.4.1 に含まれる commit はこちらをご覧ください。
- ExoPlayer:
- エクストラクタ:
- MP3:
Info
フレームの長さフィールドに基づいて、末尾の MP3 以外のデータを正しく無視することで、Searched too many bytes
エラーを修正しました(#1480)。
- MP3:
- テキスト:
- TTML: パーセンテージ
tts:fontSize
値の処理を修正し、パーセンテージtts:fontSize
値を持つ親ノードから正しく継承されるようにしました。 - リクエストされた出力の開始時間が
Subtitle
の最終イベント時間以上である場合の処理が正しく行われていなかったため、LegacySubtitleUtil
のIndexOutOfBoundsException
を修正しました(#1516)。
- TTML: パーセンテージ
- DRM:
- L1 Widevine コンテンツを再生する API 31 以降のデバイスで
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
エラーを修正。このエラーは、フレームワークのMediaDrm.requiresSecureDecoder
メソッドが不完全な状態で実装されていることが原因です(#1603)。
- L1 Widevine コンテンツを再生する API 31 以降のデバイスで
- 効果:
release()
メソッドをGlObjectsProvider
に追加しました。
- セッション:
- RTSP 拡張機能:
- SDP 解析で無効なメディア記述をスキップしました(#1087)。
バージョン 1.4.0
2024 年 7 月 25 日
androidx.media3:media3-*:1.4.0
がリリースされました。バージョン 1.4.0 に含まれるcommit
- 共通ライブラリ:
- 無効なシーク呼び出しを無視するのではなく、保護された
BasePlayer.seekTo()
メソッドとSimpleBasePlayer.handleSeek()
メソッドに転送します。これらのメソッドをカスタム プレーヤーに実装する場合は、これらの追加呼び出しをmediaItemIndex == C.INDEX_UNSET
で処理する必要があります。 - 拡張された Java 8 デシュガーリングのビルド依存関係を削除しました(#1312)。
MediaItem.Builder.setImageDurationMs()
に渡された時間は、イメージ以外のMediaItem
では無視されるようにします(ドキュメントに記載されているように)。Format.customData
を追加して、Format
インスタンスに関するアプリ提供のカスタム情報を保存します。
- 無効なシーク呼び出しを無視するのではなく、保護された
- ExoPlayer:
rankingData
で定義された優先度に基づいて、複数のソースのプリロードを調整するBasePreloadManager
を追加します。このクラスを拡張することでカスタマイズできます。DefaultPreloadManager
を追加します。これは、PreloadMediaSource
を使用してソースのメディア サンプルをメモリにプリロードし、UI 上のアイテムのインデックスを示す整数rankingData
を使用します。LoadControl
の実装で複数のプレーヤーをサポートできるように、LoadControl
のほとんどのメソッドにPlayerId
を追加しました。Buffer.isDecodeOnly()
とC.BUFFER_FLAG_DECODE_ONLY
を削除しました。レンダラとデコーダはタイムスタンプに基づいてバッファをスキップするため、このフラグを設定する必要はありません。カスタムRenderer
実装では、バッファ時間がBaseRenderer.getLastResetPositionUs()
秒以上かどうかを確認し、サンプルを表示するかどうかを判断する必要があります。カスタムSimpleDecoder
実装では、必要に応じてisAtLeastOutputStartTimeUs()
をチェックしたり、他のバッファにDecoderOutputBuffer.shouldBeSkipped
を付けてスキップしたりできます。TargetPreloadStatusControl.getTargetPreloadStatus(T)
から null 値を返すことを許可し、指定されたrankingData
でMediaSource
をプリロードしないことを示します。remove(MediaSource)
をBasePreloadManager
に追加します。BasePreloadManager
にreset()
を追加して、プリロード マネージャー インスタンスを保持しながら、保持中のすべてのソースを解放します。ExoPlayer.setPriority()
(およびBuilder.setPriority()
)を追加して、PriorityTaskManager
で使用される優先度値と、API 35 以降の MediaCodec の重要度を定義しました。- 最後の再バッファ時間の更新に関する問題を修正しました。この問題により、CMCD で
bs
(バッファ不足)キーが正しく設定されませんでした(#1124)。 - ソースが最後まで読み込まれたことを示すために
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
を追加します。これにより、DefaultPreloadManager
とカスタムPreloadMediaSource.PreloadControl
の実装で、次のソースをプリロードしたり、その他のアクションを実行したりできます。 - アイテムの末尾で無音をスキップすると再生例外が発生するバグを修正しました。
- プリロード期間を破棄するには、
PreloadMediaSource
にclear
を追加します。 - 優先度の高いタスクのためにコーデック リソースが再利用されるときに使用される新しいエラーコード
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
を追加しました。 - 最初のコンテンツ メディアの準備が完了する前に、
AdsMediaSource
がプレロール広告を読み込むようにしました(#1358)。 - 元の期間がマニフェストからすでに削除された後にマルチ期間の DASH ライブ ストリームを再準備すると、再生が
STATE_ENDED
に移動されるバグを修正しました。 PreloadMediaSource.PreloadControl
でonTimelineRefreshed()
の名前をonSourcePrepared()
に、onPrepared()
の名前をonTracksSelected()
に変更しました。それに応じて、DefaultPreloadManager.Stage
の IntDef の名前も変更します。- 動的スケジューリングの試験運用版のサポートを追加し、CPU のウェイクサイクルに合わせて作業を調整し、レンダラが進行できるまでウェイクアップを遅らせます。これは、ExoPlayer インスタンスを設定するときに
experimentalSetDynamicSchedulingEnabled()
を使用して有効にできます。 Renderer.getDurationToProgressUs()
を追加しました。Renderer
はこのメソッドを実装して、レンダラが進行するために再生を進める必要のある時間を ExoPlayer に返すことができます。ExoPlayer
がexperimentalSetDynamicSchedulingEnabled()
で設定されている場合、ExoPlayer
はワークタスクのスケジュール設定時間を計算するときにこのメソッドを呼び出します。- 入力バッファと出力バッファが
MediaCodecRenderer
で使用可能になったときにアラートするようにMediaCodecAdapter#OnBufferAvailableListener
を追加しました。MediaCodecRenderer
は、これらのコールバックを受信するとExoPlayer
にシグナルを送信します。ExoPlayer
がexperimentalSetDynamicSchedulingEnabled()
で設定されている場合、レンダラが進行できるため、ExoPlayer
はワークループをスケジュールします。 - 個々のパラメータではなく、
LoadControl
メソッドにデータクラスを使用します。 ExoPlayer.isReleased()
を追加して、Exoplayer.release()
が呼び出されたかどうかを確認します。ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
を追加して、seekToPrevious()
が前のアイテムにシークする最大位置を構成しました(#1425)。- プレーヤーが一時停止しているときに、完全なフォーカスの喪失や一時的なフォーカスの喪失が報告されないなどの、音声フォーカスの不整合を修正しました(#1436)。
- 最初の準備ステップの後にエクストラクタが追加トラックを報告することによる
IndexOutOfBoundsException
の可能性を修正しました(#1476)。 ExoPlayer.setVideoEffect()
のEffects
は、レンダラ オフセットが削除されたタイムスタンプを受け取ります(#1098)。- 別の再生リストのアイテムを先読み中に発生したプレーヤー エラーを処理する際の潜在的な
IllegalArgumentException
を修正しました(#1483)。
- Transformer:
- 出力ファイル内の各トラックの作成方法を示す
audioConversionProcess
とvideoConversionProcess
をExportResult
に追加します。 - トリム最適化の H.264 レベルのチェックを緩和。
- SDR 入力メディアと HDR 入力メディアを連続して切り替えるサポートを追加しました。
- コンポジション レベルの音声効果のサポートを追加しました。
- ウルトラ HDR 画像を HDR 動画にトランスコードするサポートを追加。
DefaultAudioMixer
がリセットされて再利用された後に、正しいバイト数を出力しない問題を修正しました。- PCM 入力を処理するときに音声チャンネル数がステレオで上限が設定されるデコーダのバグを回避。
ExoPlayerAssetLoader
でトラックを選択する場合は、音声チャンネル数の制約は無視してください。これは再生にのみ適用されます。androidx.media3.transformer.Muxer
インターフェースをandroidx.media3.muxer.Muxer
に置き換え、androidx.media3.transformer.Muxer
を削除します。- コンテンツ URI スキームからの HEIC 画像の読み込みを修正。(#1373)。
AudioGraphInput
で音声トラックの長さを調整し、AV 同期を改善。ExportResult.processedInputs
フィールドを削除します。このフィールドをコーデックの詳細に使用する場合は、代わりにDefaultDecoderFactory.listener
を使用してください。コーデック例外の場合、ExportException.codecInfo
にコーデックの詳細が表示されます。
- 出力ファイル内の各トラックの作成方法を示す
- エクストラクタ:
- MPEG-TS: ストリームの最後のアクセス ユニットをサンプルキューに渡すことで、最後のフレームがレンダリングされるように変更をロールフォワードしました(#7909)。I フレームのみ HLS ストリーム(#1150)と H.262 HLS ストリーム(#1126)で発生した問題を解決するための修正を組み込みました。
- MP3: 基盤となるストリームによって報告されるサイズ(ファイルサイズ、HTTP
Content-Length
ヘッダーなど)よりも、Info
フレームのデータサイズを優先します。これにより、再生できない予告編データ(アルバムのアートワークなど)を一定のビットレートのシーク計算から除外し、シークをより正確にすることができます(#1376)。 - MP3:
Info
フレーム(存在する場合)のフレーム数とその他のデータを使用して、一定のビットレートのシークのための平均ビットレートを計算します。Info
フレームの後のフレームのビットレートを外挿するのではなく、PCUT
フレームなど、人為的に小さいビットレートを外挿しないでください(#1376)。 - AVI コンテナでの PCM 音声形式の抽出を修正。
- オーディオ:
- パススルー再生の DTS:X プロファイル 2 エンコード属性を修正しました(#1299)。
- オフロード再生の場合は、
AudioTrack.stop()
を呼び出す前にDefaultAudioSink
でストリーム完了のトラッキング フィールドをリセットして、保留中のすべてのデータが再生されたときにAudioTrack.StreamEventCallback#onPresentationEnded
が正しく識別されるようにします。 - 異なるオーディオ形式(ステレオからモノラルなど)間の遷移でプロセッサが例外をスローする可能性がある
SilenceSkippingAudioProcessor
のバグを修正しました(#1352)。 MediaCodecAudioRenderer.getDurationToProgressUs()
を実装して、ExoPlayer が MediaCodecAudioRenderer が進行できるときにメインのワークループを動的にスケジュールするようにします。
- 動画:
- 再生中にサーフェスを切り替えたときに
Listener.onRenderedFirstFrame()
が早すぎる問題を修正しました。 - 必要に応じて互換性のある AV1 デコーダを使用するように、ドルビー ビジョンのデコーダ フォールバック ロジックを修正しました(#1389)。
- 再生中に動画レンダラを有効にすることで発生する可能性のあるコーデック例外を修正しました。
- 再生中にサーフェスを切り替えたときに
- テキスト:
- シーク位置より前に開始される字幕がスキップされる問題を修正。この問題は Media3 1.4.0-alpha01 でのみ発生します。
- デフォルトの字幕解析動作を変更し、レンダリング中ではなく抽出中に実行されるようにしました(抽出とレンダリングの違いについては、ExoPlayer のアーキテクチャ図をご覧ください)。
- この変更は、
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
とTextRenderer.experimentalSetLegacyDecodingEnabled(true)
の両方を呼び出すことでオーバーライドできます。これらのコンポーネントをExoPlayer
インスタンスに接続する方法については、カスタマイズに関するドキュメントをご覧ください。これらのメソッド(および以前の字幕デコードのサポート)は、今後のリリースで削除される予定です。 - カスタムの
SubtitleDecoder
実装を使用しているアプリは、代わりにSubtitleParser
を実装するように更新する必要があります(SubtitleDecoderFactory
の代わりにSubtitleParser.Factory
)。
- この変更は、
- PGS: ランレングス デコードを修正し、
0
をリテラル色値ではなく色インデックスとして解決しました(#1367)。 - CEA-708:
rowLock
値を無視します。CEA-708-E S-2023 仕様では、ストリームに存在する値に関係なく、rowLock
とcolumnLock
の両方を true とみなす必要があります(columnLock
のサポートは実装されていないため、事実上常に false とみなされます)。- この変更は、もともと
1.3.0-alpha01
リリースノートに含まれていましたが、1.3.0-rc01
リリース前に誤って元に戻されました。この問題は修正され、変更が再度適用されています。
- この変更は、もともと
- CEA-708: ExoPlayer が「set pen location」コマンドを単純に処理することで、重複する改行が追加されないようにしました(#1315)。
- DASH ストリームの一部など、WebVTT 字幕サンプルにキューが含まれていない場合に、
LegacySubtitleUtil
のIllegalArgumentException
を修正しました(#1516)。
- メタデータ:
- 画像:
- 正方形以外の DASH サムネイル グリッドのサポートを追加しました(#1300)。
- API 34 以降で AVIF のサポートを追加しました。
ExoPlayer.setImageOutput()
のパラメータとしてnull
を許可し、以前に設定されたImageOutput
をクリアできるようにしました。
- DataSource:
android.resource://package/id
未加工リソース URI のサポートを実装します。ここで、package
は現在のアプリのパッケージとは異なります。これは以前は動作するとはドキュメントされていませんでしたが、名前でアクセスするよりも別のパッケージ内のリソースにアクセスする効率的な方法です。DataSpec
コンストラクタでurl
が null でないことを確認します。このパラメータには、null 以外であることを示すアノテーションがすでに付けられています。ByteArrayDataSource
が、作成時にハードコードされるのではなく、open()
中に URI をバイト配列に解決できるようにしました(#1405)。
- DRM:
DefaultDrmSessionManagerProvider
にLoadErrorHandlingPolicy
を設定できるようにしました(#1271)。
- 効果:
SpeedChangeEffect
内の同じEditedMediaItem
またはComposition
内での複数の速度変更をサポート。- 超 HDR ビットマップ入力からの HLG と PQ の出力をサポート。
- EGL_GL_COLORSPACE_BT2020_HLG_EXT のサポートを追加しました。これにより、ExoPlayer.setVideoEffect と Transformer の Debug SurfaceView の HLG サーフェス出力が改善されます。
setOverlayFrameAnchor()
で適用される x 値と y 値を反転して、オーバーレイ行列の実装を更新し、ドキュメントと整合させます。OverlaySettings.Builder.setOverlayFrameAnchor()
を使用する場合は、x 値と y 値に-1
を乗算して反転します。ExoPlayer#setVideoEffects
で使用するとTimestampWrapper
がクラッシュするバグを修正しました。(#821)- デフォルトの SDR カラー作業空間をリニアカラーから電気 BT 709 SDR 動画に変更。元のカラースペースを保持する 3 つ目のオプションも提供します。
- EditedMediaItemSequences の未確定の z 順序を定義できるようにしました(#1055)。
- さまざまな HDR コンテンツで明るさ範囲を一定に保つ(HLG 範囲を使用)。
- HDR コンテンツでのウルトラ HDR(ビットマップ)オーバーレイのサポートを追加しました。
- API 26 より前に
SeparableConvolution
エフェクトを使用できるようにしました。 - オーバーレイとフレームのダイナミック レンジが一致する必要があるため、未使用の
OverlaySettings.useHdr
を削除しました。 TextOverlay
の HDR サポートを追加しました。テキスト オーバーレイの明るさはOverlaySettings.Builder.setHdrLuminanceMultiplier()
で調整できます。
- IMA 拡張機能:
- アプリが DAI 広告ストリームを再生するために必要な API を安定版に昇格しました。
ImaServerSideAdInsertionMediaSource.AdLoader
にreplaceAdTagParameters(Map <String, String>)
を追加し、実行時に広告タグ パラメータを置き換えられるようにしました。- 広告の再生中にプレーヤー エラーが発生したときに
VideoAdPlayer.VideoAdPlayerCallback.onError()
が呼び出されないバグを修正しました(#1334)。 - IMA SDK のバージョンを 3.33.0 に引き上げ、
data://
広告タグ URI の使用時に発生するNullPointerException
を修正しました(#700)。
- セッション:
CommandButton.enabled
のデフォルトをtrue
に変更し、関連するコマンドが使用可能な場合でも、コントローラで値が false のままになるようにします。- カスタム アイコン リソースの代わりに使用される
CommandButton
のアイコン定数を追加しました。 MediaSessionService.isPlaybackOngoing()
を追加して、アプリがonTaskRemoved()
でサービスを停止する必要があるかどうかをクエリできるようにしました(#1219)。MediaSessionService.pauseAllPlayersAndStopSelf()
を追加して、すべてのセッションの再生を一時停止し、stopSelf()
を呼び出してMediaSessionService
のライフサイクルを終了できるようにします。MediaSessionService.onTaskRemoved(Intent)
をオーバーライドして、再生が進行中の場合はサービスをフォアグラウンドで実行し続け、そうでない場合はサービスを停止する安全なデフォルト実装を提供します。- プラットフォーム セッション メタデータに再生時間を設定しないようにして、ライブ配信のメディア通知のシーケンスバーを非表示にしました(#1256)。
MediaMetadata
の変換をMediaDescriptionCompat
に合わせて、media1 と同じ優先順序とロジックを使用してメタデータ プロパティを選択できるようにします。- 致命的でないエラーを Media3 コントローラに送信できるように
MediaSession.sendError()
を追加。通知コントローラを使用する場合(MediaSession.getMediaNotificationControllerInfo()
を参照)、カスタム エラーを使用して、プラットフォーム セッションのPlaybackState
を、指定されたエラー情報を含むエラー状態に更新します(#543)。 MediaSession.Callback.onPlayerInteractionFinished()
を追加して、特定のコントローラからの一連のプレーヤー操作が終了したときにセッションに通知します。SessionError
を追加し、エラーコードの代わりにSessionResult
とLibraryResult
で使用して、エラーの詳細と、可能であればエラーの解決方法を提供します。- メディア セッションを公開するアプリとのインタラクションをテストするために使用できる、media3 コントローラ テストアプリのコードが公開されました。
- media3 の
MediaSession[Builder].setSessionExtras()
に渡されたエクストラを media1 コントローラのPlaybackStateCompat.getExtras()
に伝播します。 - 致命的なエラーと致命的でないエラーをプラットフォーム セッションとの間でマッピングします。
PlaybackException
は、PlaybackStateCompat
の致命的なエラー状態にマッピングされます。MediaSession.sendError(ControllerInfo, SessionError)
とともにメディア通知コントローラに送信されたSessionError
は、PlaybackStateCompat
の非致命的エラーにマッピングされます。つまり、エラーコードとメッセージは設定されますが、プラットフォーム セッションの状態はSTATE_ERROR
とは異なります。 - グローバル セッション アクティビティをオーバーライドするように、セッション アクティビティをコントローラごとに設定できるようにします。セッション アクティビティは、
AcceptedResultBuilder.setSessionActivivty(PendingIntent)
でConnectionResult
を作成することで、接続時にコントローラに定義できます。接続すると、MediaSession.setSessionActivity(ControllerInfo, PendingIntent)
を使用してセッション アクティビティを更新できます。 MediaLibrarySession.Callback
への呼び出しのエラーの複製を改善。エラー レプリケーションを構成するには、MediaLibrarySession.Builder.setLibraryErrorReplicationMode()
を使用してエラータイプを選択するか、デフォルトで有効になっているエラー レプリケーションを無効にします。
- UI:
- ダウンロード:
DownloadHelper
が未公開のRenderer
インスタンスをリークしないようにしました。このリークは、最終的にIllegalStateException: Too many receivers, total of 1000, registered for pid
でアプリがクラッシュする可能性があります(#1224)。
- Cronet 拡張機能:
CronetDataSource
のSocketTimeoutException
を修正しました。Cronet の一部のバージョンでは、コールバックによって提供されるリクエストが常に同じとは限りません。これにより、コールバックが完了せず、リクエストがタイムアウトします(https://issuetracker.google.com/328442628)。
- HLS 拡張機能:
- 不連続を待機している保留中の EMSG サンプルが、誤ったオフセットで
HlsSampleStreamWrapper
に委任され、IndexOutOfBoundsException
またはIllegalArgumentException
が発生するバグを修正しました(#1002)。 - LL-HLS ストリームでメイン以外の再生リストが再読み込みされるバグを修正しました(#1240)。
- 初期化セグメントを使用して HLS の CMCD を有効にすると
Source Error
とIllegalArgumentException
になるバグを修正。 - ライブ再生中に、再生中のプライマリ以外の再生リストが更新されないバグを修正しました(#1240)。
- HLS ライブ ストリームで CMCD を有効にすると
ArrayIndexOutOfBoundsException
が発生するバグを修正しました(#1395)。
- 不連続を待機している保留中の EMSG サンプルが、誤ったオフセットで
- DASH 拡張機能:
- Cast 拡張機能:
MediaQueueItem
のアルバム タイトルが Media3 メディア アイテムのアーティストに変換されるバグを修正しました(#1255)。
- テスト ユーティリティ:
FakeRenderer
にonInit()
とonRelease()
を実装します。- 致命的でないエラー(
AnalyticsListener.onVideoCodecError()
に報告されたエラーなど)で失敗するようにTestPlayerRunHelper.runUntil()/playUntil()
メソッドを変更。この動作を無効にするには、新しいTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
メソッドチェーンを使用します。
- デモアプリ:
- 短い形式のデモアプリで
DefaultPreloadManager
を使用します。 - コマンドラインから
Intent
引数を使用して繰り返しモードを設定できるようにしました(#1266)。 - デバイスでサポートされている場合は、
HttpDataSource
としてHttpEngineDataSource
を使用します。
- 短い形式のデモアプリで
- サポートが終了したシンボルを削除しました。
CronetDataSourceFactory
を削除しました。代わりにCronetDataSource.Factory
を使用してください。- 一部の
DataSpec
コンストラクタを削除しました。代わりにDataSpec.Builder
を使用してください DefaultHttpDataSource
、OkHttpDataSource
、CronetDataSource
からsetContentTypePredicate(Predicate)
メソッドを削除しました。代わりに、各XXXDataSource.Factory
で同等のメソッドを使用してください。OkHttpDataSource
コンストラクタとOkHttpDataSourceFactory
を削除しました。代わりにOkHttpDataSource.Factory
を使用してください。PlayerMessage.setHandler(Handler)
を削除しました。代わりにsetLooper(Looper)
を使用してください。Timeline.Window.isLive
フィールドを削除します。代わりにisLive()
メソッドを使用してください。DefaultHttpDataSource
コンストラクタを削除しました。代わりにDefaultHttpDataSource.Factory
を使用してください。DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
を削除しました。代わりにDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
を使用してください。MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
を削除しました。代わりにMediaCodecInfo.canReuseCodec(Format, Format)
を使用してくださいDrmSessionManager.DUMMY
メソッドとgetDummyDrmSessionManager()
メソッドを削除しました。代わりにDrmSessionManager.DRM_UNSUPPORTED
を使用してください。AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
、AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
、AudioRendererEventListener.onAudioInputFormatChanged(Format)
、VideoRendererEventListener.onVideoInputFormatChanged(Format)
を削除。代わりに、DecoderReuseEvaluation
を受け取るオーバーロードを使用してください。RendererSupport.FormatSupport
IntDef とFORMAT_HANDLED
、FORMAT_EXCEEDS_CAPABILITIES
、FORMAT_UNSUPPORTED_DRM
、FORMAT_UNSUPPORTED_SUBTYPE
、FORMAT_UNSUPPORTED_TYPE
の定数を削除しました。代わりに、androidx.media3.common.C
で同等の IntDef と定数(C.FORMAT_HANDLED
など)を使用してください。Bundleable
インターフェースを削除します。これには、すべてのBundleable.Creator<Foo> CREATOR
定数フィールドの削除が含まれます。呼び出し元は、代わりに各タイプでBundle toBundle()
メソッドとstatic Foo fromBundle(Bundle)
メソッドを使用する必要があります。
バージョン 1.4.0-rc01
2024 年 7 月 10 日
1.4.0 の安定版を使用します。
バージョン 1.4.0-beta01
2024 年 6 月 26 日
1.4.0 の安定版を使用します。
バージョン 1.4.0-alpha02
2024 年 6 月 7 日
1.4.0 の安定版を使用します。
バージョン 1.4.0-alpha01
2024 年 4 月 17 日
1.4.0 の安定版を使用します。
バージョン 1.3.0
バージョン 1.3.1
2024 年 4 月 11 日
androidx.media3:media3-*:1.3.1
がリリースされました。バージョン 1.3.1 には、これらの commit が含まれています。
- 共通ライブラリ:
Format.labels
を追加して、ローカライズされたラベルやその他の代替ラベルを許可します。
- ExoPlayer:
- Transformer:
- API 30 より前の
MediaMuxer
が負の表示タイムスタンプをサポートしていないためにスローされる例外の回避策を追加。
- API 30 より前の
- トラック選択:
DefaultTrackSelector
: フレームレートが低い動画トラックやフレームレートが設定されていない動画トラックよりも、「適度な」フレームレート(10 fps 以上)の動画トラックを優先します。これにより、モーション写真から抽出された MP4 内の「実際の」動画トラックがプレーヤーによって選択されるようになります。この MP4 には、1 つは解像度が高いもののフレーム数が非常に少ない HEVC トラックが 2 つ含まれている場合があります(#1051)。
- エクストラクタ:
- オーディオ:
- オフロード モードでオーディオ トラックの初期化に失敗した場合に、オフロードを無効にしてレンダラ復元を許可。
- 動画:
- テキスト:
- WebVTT: 連続するキューによって
WebvttParser.parse
から不要なCuesWithTiming
インスタンスが追加作成されないようにしました(#1177)。
- WebVTT: 連続するキューによって
- DRM:
- 一部の Android 14 デバイスで、
ResourceBusyException
またはNotProvisionedException
ではなくMediaDrm
フレームワークによってスローされるNoSuchMethodError
を回避(#1145)。
- 一部の Android 14 デバイスで、
- 効果:
- 色空間を変換することで、PQ から SDR へのトーンマッピングを改善しました。
- セッション:
- UI:
Locale
で表示名を特定できない場合は、音声トラックの言語名を含めるようにフォールバックしました(#988)。
- DASH 拡張機能:
- マニフェストからすべての
Label
要素をFormat.labels
に入力しました(#1054)。
- マニフェストからすべての
- RTSP 拡張機能:
- SDP 解析で空のセッション情報値(i-tag)をスキップしました(#1087)。
- デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
- MIDI 拡張機能は、追加の Maven リポジトリを構成する必要があるため、デフォルトでローカル依存関係として無効になっています。ローカル依存関係からこのモジュールが必要なユーザーは、モジュールを再度有効にできます。
バージョン 1.3.0
2024 年 3 月 6 日
androidx.media3:media3-*:1.3.0
がリリースされました。バージョン 1.3.0 に含まれる commit は次のとおりです。
- 共通ライブラリ:
android.resource://package/[type/]name
未加工リソース URI のサポートを実装します。ここで、package
は現在のアプリケーションのパッケージとは異なります。これは動作すると常にドキュメント化されていましたが、これまでは正しく実装されていませんでした。- アプリコードで設定された MIME タイプまたはメディアから読み取られた MIME タイプを、すべて小文字に正規化します。
AdPlaybackState
で 1 つのUri
ではなく、完全なMediaItem
を使用して広告を定義します。minSdk
を 19(Android KitKat)に増やしました。これは、他のすべての AndroidX ライブラリと整合しており、AndroidX 依存関係の最新バージョンにアップグレードするために必要です。artworkUri
とartworkData
の少なくとも 1 つが null でない場合、MediaMetadata.Builder.populate(MediaMetadata)
にartworkUri
とartworkData
の両方を入力します(#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 を使用して
HttpEngineDataSource
を実装します。HttpDataSource
CompositeSequenceableLoader
のサブクラス化を防止。このコンポーネントは以前拡張可能にされていましたが、ライブラリ内でサブクラス化されたことはありませんでした。カスタマイズは、デコレーター パターンを使用してインスタンスをラップし、カスタムCompositeSequenceableLoaderFactory
を実装することで行えます。- 同じ時刻を繰り返すと、そのアイテムのメタデータが消去される問題を修正しました(#1007)。
BundledChunkExtractor.Factory
とDefaultHlsExtractorFactory
のexperimentalSetSubtitleParserFactory
メソッドの名前をsetSubtitleParserFactory
に変更し、null
の渡しを禁止しました。新しいexperimentalParseSubtitlesDuringExtraction(boolean)
メソッドを使用して、解析動作を制御します。- 抽出時に使用される
SubtitleParser.Factory
のカスタマイズをサポートしました。これはMediaSource.Factory.setSubtitleParserFactory()
で実現できます。 MergingMediaSource
から生成されたすべてのFormat.id
フィールドにソース プレフィックスを追加します。これにより、Format
を生成するソースを特定できます(#883)。- ハイフンのみをチェックするように変更して、カスタム共通メディア クライアント データ(CMCD)キー名の検証に使用される正規表現を修正しました(#1028)。
- CMCD クエリ パラメータの二重エンコードを停止しました(#1075)。
- Transformer:
- H.265/HEVC SEF スローモーション動画のフラット化のサポートを追加しました。
- トランスコード速度を向上させました(特に「動画を削除」の編集の場合)。
- 出力ファイルが動画フレームで開始されるようにする API を追加しました。これにより、トリミング オペレーションの出力を、プレゼンテーション タイムスタンプまで最初の動画フレームを表示しないプレーヤー実装との互換性を高めることができます(#829)。
- 単一アセットの MP4 トリム オペレーションの最適化のサポートを追加しました。
- 出力ファイルの動画フレームに最初のタイムスタンプが確実に含まれるようにサポートを追加しました。iOS ベースのプレーヤーで黒いフレームで始まる出力ファイルを修正しました(#829)。
- トラック選択:
DefaultTrackSelector.selectImageTrack
を追加して、画像トラックの選択を有効化。TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
を追加して、画像トラックと動画トラックの両方が使用可能な場合に画像トラックを選択するかどうかを決定します。デフォルト値はfalse
で、動画トラックの選択が優先されます。
- エクストラクタ:
- MP4 エクストラクタに追加の AV1C 解析を追加して、
ColorInfo.colorSpace
、ColorInfo.colorTransfer
、ColorInfo.colorRange
の値を取得しました(#692)。 - MP3:
Info
ヘッダー(Xing
ヘッダーの CBR 相当)を含むファイルに対して、固定ビットレート(CBR)シークを使用します。以前はInfo
ヘッダーのシークト テーブルを使用していましたが、この方法では、ファイルを CBR であると想定して無視した場合よりも正確なシークができません。 - MPEG2-TS: DTS、DTS-LBR、DTS:X Profile2 のサポートを追加しました(#275)。
- TS 記述子から音声タイプを抽出し、ロールフラグにマッピングして、ユーザーがより適切な音声トラックを選択できるようにしました(#973)。
- MP4 エクストラクタに追加の AV1C 解析を追加して、
- オーディオ:
- 動画:
VideoFrameProcessor.Factory
引数を受け取るMediaCodecVideoRenderer
コンストラクタを変更し、VideoSinkProvider
引数を受け取るコンストラクタに置き換えます。カスタムVideoFrameProcessor.Factory
を挿入するアプリは、カスタムVideoFrameProcessor.Factory
を使用するCompositingVideoSinkProvider
をインスタンス化し、動画シンク プロバイダをMediaCodecVideoRenderer
に渡すことができます。
- テキスト:
- ビットマップ キューのシリアル化を修正し、
DefaultExtractorsFactory.setTextTrackTranscodingEnabled
の使用時に発生するTried to marshall a Parcel that contained Binder objects
エラーを解決しました(#836)。 - CEA-708:
rowLock
値を無視します。CEA-708-E S-2023 仕様では、ストリームに存在する値に関係なく、rowLock
とcolumnLock
の両方を true とみなす必要があります(columnLock
のサポートは実装されていないため、事実上常に false とみなされます)。
- ビットマップ キューのシリアル化を修正し、
- 画像:
- DASH サムネイルのサポートを追加しました。グリッド画像は切り抜かれ、個々のサムネイルが
ImageOutput
に提供され、表示時間に近づきます。
- DASH サムネイルのサポートを追加しました。グリッド画像は切り抜かれ、個々のサムネイルが
- DRM:
- 後続の暗号化されたサンプルのキーがまだ準備できていない場合でも、デフォルトでは DRM コンテンツの「クリアリード」の暗号化されていないサンプルをすぐに再生します。再生位置が暗号化されたサンプルに達したときに鍵がまだ準備できていない場合、再生中に停止する可能性があります(ただし、以前は、この時点で再生はまったく開始されていませんでした)。この動作は、
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
またはDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
で無効にできます。
- 後続の暗号化されたサンプルのキーがまだ準備できていない場合でも、デフォルトでは DRM コンテンツの「クリアリード」の暗号化されていないサンプルをすぐに再生します。再生位置が暗号化されたサンプルに達したときに鍵がまだ準備できていない場合、再生中に停止する可能性があります(ただし、以前は、この時点で再生はまったく開始されていませんでした)。この動作は、
- IMA 拡張機能:
- 適切なファイル拡張子のない DASH 広告と HLS 広告を再生できない問題を修正しました。
- セッション:
- テレビアプリのダブルクリック検出を無効にしました(#962)。
- null 以外のエクストラのみを含む
MediaItem.RequestMetadata
がメディア コントローラとセッション間で送信されない問題を修正しました。 MediaLibraryService
ではなくContext
のみを受け取るコンストラクタをMediaLibrarySession.Builder
に追加しました。
- HLS 拡張機能:
HlsMediaPeriod
の公開設定をパッケージ プライベートに変更しました。この型は、HLS パッケージの外部から直接依存すべきではありません。- セグメントの先頭へのシークをより効率的に解決しました(#1031)。
- デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
- MIDI デコーダ: SysEx イベント メッセージを無視(#710)。
- テスト ユーティリティ:
TestPlayerRunHelper.playUntilPosition
で再生を一時停止しないでください。テストは再生を再生状態に保ちますが、テストでアサーションとその他のアクションを追加できるようになるまで進行を停止します。
- デモアプリ:
- ショートフォームのデモ モジュールを追加して、ショート フォーム コンテンツのユースケースで
PreloadMediaSource
の使用方法をデモします。
- ショートフォームのデモ モジュールを追加して、ショート フォーム コンテンツのユースケースで
バージョン 1.3.0-rc01
2024 年 2 月 22 日
1.3.0 安定版を使用します。
バージョン 1.3.0-beta01
2024 年 2 月 7 日
1.3.0 安定版を使用します。
バージョン 1.3.0-alpha01
2024 年 1 月 15 日
1.3.0 安定版を使用します。
バージョン 1.2.0
バージョン 1.2.1
2024 年 1 月 9 日
- ExoPlayer:
LiveConfiguration.min/maxOffset
範囲外の手動シークによってオフセットがmin/maxOffset
に戻り続ける問題を修正しました。- 3、5、6、7、8 チャンネルで OPUS と VORBIS のチャンネル レイアウトが正しくない問題を修正しました(#8396)。
- ライブ配信でゼロにシークした後のトラック選択で、ストリームがデフォルトの位置から誤って開始される問題を修正しました(#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 マニフェストで Dolby のチャンネル数を 5 として「f800」を解析(#688)。
- デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
- Cast 拡張機能:
- キャスト デバイスでメディアの読み込みに失敗したときにアプリがクラッシュしないように、
Timeline
の作成をサニタイズしました(#708)。
- キャスト デバイスでメディアの読み込みに失敗したときにアプリがクラッシュしないように、
バージョン 1.2.0
2023 年 11 月 15 日
- 共通ライブラリ:
Log.Logger
インターフェースのメソッドに@Nullable Throwable
パラメータを追加します。これらのメソッドのmessage
パラメータには、Log.{d,i,w,e}()
メソッドに渡されたThrowable
に関する情報が含まれなくなりました。そのため、必要に応じて、実装でこの情報を手動で追加する必要があります(Logger.appendThrowableString(String, Throwable)
を使用する場合もあります)。- null 値許容の汎用型パラメータと null 値許容の配列要素型が null 値許容として検出されない Kotlin の互換性の問題を修正しました。例:
TrackSelectorResult
メソッド パラメータとSimpleDecoder
メソッド パラメータ(#6792)。 Util.shouldShowPlayButton
でデフォルトの UI と通知の動作を変更し、一時的に再生が抑制されている間(一時的な音声フォーカスの喪失など)に [再生] ボタンを表示するようにしました。以前の動作は、PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
またはMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
を使用して維持できます(#11213)。androidx.annotation:annotation-experimental
を1.3.1
にアップグレードして、https://issuetracker.google.com/251172715 を修正。ExoPlayer.setAudioAttributes
をPlayer
インターフェースに移動しました。
- ExoPlayer:
- デコード専用のサンプルが正しく識別されず、AC4 ストリームでシークの問題が発生する問題を修正しました(#11000)。
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
でこの機能が有効になっている場合に、不適切なオーディオ出力デバイス(Wear OS デバイスの内蔵スピーカーなど)での再生を抑制する機能を追加しました。適切なオーディオ出力が利用できないときに再生が試行された場合、または再生中に適切な出力がすべて切断された場合、再生抑制の理由はPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
として更新されます。適切な出力が接続されると、抑制理由は削除されます。MediaSource.canUpdateMediaItem
とMediaSource.updateMediaItem
を追加して、Player.replaceMediaItem(s)
を介して作成後にMediaItem
の更新を受け入れます。Player.replaceMediaItem(s)
を介してライブラリから提供されるすべてのMediaSource
クラスのMediaItem
更新を許可しました(#33、#9978)。MimeTypes.TEXT_EXOPLAYER_CUES
をMimeTypes.APPLICATION_MEDIA3_CUES
に名前変更します。- 1 つのサンプルとして、PNG ファイル全体を送信して読み取る
PngExtractor
を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)
に拡張しました。- 共通メディア クライアント データ(CMCD)ロギングに、バッファの飢餓(
bs
)、期限(dl
)、再生レート(pr
)、起動(su
)のフィールドを追加しました(#8699)。 ColorInfo
に輝度と色差のビット深度を追加しました(#491)。- 共通メディア クライアント データ(CMCD)ロギングに、次のオブジェクト リクエスト(
nor
)と次の範囲リクエスト(nrr
)のフィールドを追加しました(#8699)。 - クエリ パラメータを使用して共通メディア クライアント データ(CMCD)データを送信する機能を追加しました(#553)。
ExperimentalBandwidthMeter
のConcurrentModificationException
を修正しました(#612)。MediaPeriodId
パラメータをCompositeMediaSource.getMediaTimeForChildMediaTime
に追加しました。ConcatenatingMediaSource2
でClippingMediaSource
(および期間/ウィンドウ時間のオフセットがある他のソース)をサポートしました(#11226)。BaseRenderer.onStreamChanged()
を変更して、MediaPeriodId
引数も受け取るようにします。
- Transformer:
- 画像入力の EXIF 回転データを解析します。
TransformationRequest.HdrMode
アノテーション タイプとそれに関連する定数を削除しました。代わりにComposition.HdrMode
とそれに関連する定数を使用してください。OverlaySettings
を簡素化して、回転に関する問題を修正。SampleConsumer.queueInputBitmap
のframeRate
パラメータとdurationUs
パラメータをTimestampIterator
に変更しました。
- トラック選択:
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
を追加して、シームレス以外の適応を明示的に許可または禁止します。デフォルトは、true
の現在の動作のままです。
- エクストラクタ:
- MPEG-TS: ストリームの最後のアクセス ユニットをサンプルキューに渡すことで、最後のフレームがレンダリングされるようにします(#7909)。
rotationDegrees
の決定時のタイプミスを修正しました。projectionPosePitch
をprojectionPoseRoll
に変更しました(#461)。Extractor
インスタンスをinstanceof
で直接検査できるという前提を削除しました。Extractor
の実装の詳細にランタイムでアクセスするには、まずExtractor.getUnderlyingInstance
を呼び出す必要があります。BmpExtractor
を追加します。WebpExtractor
を追加します。HeifExtractor
を追加します。Mp4Extractor
に QuickTime クラシックのサポートを追加。
- オーディオ:
- MP4 と Matroska で 24 ビット/32 ビットのビッグエンディアン PCM のサポートを追加し、MP4 の
lpcm
の PCM エンコードを解析しました。 - MP4 での Vorbis オーディオの抽出のサポートを追加。
DefaultAudioOffloadSupportProvider
を介してシンクがフォーマットに提供できるオフロード サポートのレベルを取得するAudioSink.getFormatOffloadSupport(Format)
を追加しました。isFormatSupported
、isGaplessSupported
、isSpeedChangeSupported
を含む新しいAudioOffloadSupport
が返されます。- オーディオ シンクのオフロードの構成を構成する
AudioSink.setOffloadMode()
を追加します。デフォルトはAudioSink.OFFLOAD_MODE_DISABLED
です。 - オフロードは、
TrackSelectionParameters
のsetAudioOffloadPreference
で有効にできます。設定された設定が有効で、デバイスがその形式のオフロードをサポートし、トラック選択が単一のオーディオ トラックである場合、オーディオ オフロードが有効になります。 audioOffloadModePreference
がAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
に設定されている場合、DefaultTrackSelector
は、そのトラックの形式がオフロードでサポートされている場合にのみ、音声トラックを選択します。オフロードでサポートされている音声トラックがない場合、トラックは選択されません。- トラックの切り替え後の再生位置の問題により、API レベル 33 より前のオフロードでギャップレス サポートを無効にしました。
DefaultRenderersFactory.buildAudioSink
メソッド シグネチャからパラメータenableOffload
を削除しました。- メソッド
DefaultAudioSink.Builder.setOffloadMode
を削除します。 - intdef 値
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
を削除。 - オフロード再生中の Opus のギャップレス メタデータのサポートを追加しました。
- 最初の書き込みで失敗した場合にオフロードを無効にしてレンダラ復旧を許可(#627)。
- 音声のみのオフロード再生で、デフォルトでオフロード スケジューリングを有効にします。
ExoPlayer.experimentalSetOffloadSchedulingEnabled
とAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
を削除します。onExperimentalSleepingForOffloadChanged
の名前をonSleepingForOffloadChanged
に、onExperimentalOffloadedPlayback
の名前をonOffloadedPlayback
に変更しました。- 音声オフロード モードに関連する
TrackSelectionParameters
インターフェースと定義を内部AudioOffloadPreferences
クラスに移動しました。 onAudioTrackInitialized
コールバックとonAudioTrackReleased
コールバックをAnalyticsListener
、AudioRendererEventListener
、AudioSink.Listener
に追加します。- DTS Express 音声バッファの下り(欠落)の問題を修正しました(#650)。
- E-AC3-JOC の機能チェックで
IllegalArgumentException
がスローされるバグを修正しました(#677)。
- MP4 と Matroska で 24 ビット/32 ビットのビッグエンディアン PCM のサポートを追加し、MP4 の
- 動画:
MediaCodecVideoRenderer
がカスタムVideoFrameProcessor.Factory
を使用できるようにします。- 音声ストリームが負のタイムスタンプで開始された場合に最初のフレームをレンダリングできないバグを修正しました(#291)。
- テキスト:
ExoplayerCuesDecoder
を削除しました。sampleMimeType = application/x-media3-cues
を含むテキスト トラックは、SubtitleDecoder
インスタンスの必要なしにTextRenderer
によって直接処理されるようになりました。
- メタデータ:
- 実装ではいずれにしても null を返す必要があるため、「デコード専用」のサンプルで
MetadataDecoder.decode
が呼び出されなくなります。
- 実装ではいずれにしても null を返す必要があるため、「デコード専用」のサンプルで
- 効果:
- タイムスタンプによるビットマップ入力のキューイング
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
を追加。 VideoFrameProcessor.registerInputStream()
を非ブロッキングに変更。アプリでVideoFrameProcessor.Listener#onInputStreamRegistered()
を実装する必要があります。VideoFrameProcessor.queueInputBitmap
のframeRate
パラメータとdurationUs
パラメータをTimestampIterator
に変更しました。
- タイムスタンプによるビットマップ入力のキューイング
- IMA 拡張機能:
- 再生リストの最初のアイテムではないマルチ期間の DASH ライブ配信で例外がスローされるバグを修正しました(#571)。
AdsLoader.destroy()
を呼び出す前に StreamManager を解放- IMA SDK のバージョンを 3.31.0 に引き上げました。
- セッション:
- 通知のフォアグラウンド サービスの動作を
DefaultMediaNotificationProvider
でFOREGROUND_SERVICE_IMMEDIATE
に設定しました(#167)。 - 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:
- Wear OS デバイスに
Player.Listener
の実装を追加し、Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
による再生の抑制を処理します。システム ダイアログを起動して、ユーザーが適切なオーディオ出力(Bluetooth ヘッドフォンなど)を接続できるようにします。設定可能なタイムアウト(デフォルトは 5 分)内に適切なデバイスが接続されると、リスナーは再生を自動的に再開します。
- Wear OS デバイスに
- ダウンロード:
- Android 14 との互換性を確保するため、
DownloadService
に「データ同期」フォアグラウンド サービス タイプを申告します。このサービスを使用する場合、アプリはマニフェストにdataSync
をforegroundServiceType
として追加し、FOREGROUND_SERVICE_DATA_SYNC
権限を追加する必要があります(#11239)。
- Android 14 との互換性を確保するため、
- HLS 拡張機能:
- 最後に読み込みが完了した時刻ではなく、最後に読み込みが開始された時刻から計算された間隔で HLS ライブ プレイリストを更新(#663)。
- DASH 拡張機能:
- セグメント テンプレートの URL で同じ DASH ID を複数使用できるようにしました。
- 抽出中の字幕の解析の試験運用版サポートを追加しました。これにより、字幕セグメント間の切り替え時のちらつきの解消など、重複する字幕の統合がより適切にサポートされるようになりました。これは
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
の問題を修正しました。 - 共通メディア クライアント データ(CMCD)ロギングに、ストリーミング形式(sf)、ストリームタイプ(st)、バージョン(v)、上限ビットレート(tb)、オブジェクトの長さ(d)、測定スループット(mtp)、オブジェクトタイプ(ot)の追加フィールドを追加しました(#8699)。
- プレイリストの消去後に不要な
- オーディオ:
- 非常に短いファイルを再生するときに
Player.getState()
がSTATE_ENDED
に遷移しないバグを修正しました(#538)。
- 非常に短いファイルを再生するときに
- オーディオ オフロード:
- RFC 7845 に従って、オフロードされた Opus 再生用に Ogg ID ヘッダーとコメント ヘッダー ページをビットストリームに追加します。
- 動画:
- H.265/HEVC: SPS の短期参照画像情報と長期参照画像情報の解析を修正しました。
- テキスト:
- CEA-608: 表示テキストのみを考慮するようにキューの切り捨てロジックを変更。以前は、キューの長さを 32 文字に制限する際に、インデントやタブのオフロードを含めていました(これは仕様上正しいことでした)(#11019)。
- IMA 拡張機能:
- IMA SDK のバージョンを 3.30.3 に引き上げました。
- セッション:
- コントローラの状態にカスタム レイアウトを追加し、それにアクセスするためのゲッターを指定します。カスタム レイアウトが変更されると、
MediaController.Listener.onCustomLayoutChanged
が呼び出されます。異なる Media3 コントローラに異なるカスタム レイアウトを送信するアプリは、MediaSession.Callback.onConnect
でAcceptedResultBuilder
を使用して、接続が完了したときにコントローラでカスタム レイアウトを使用できるようにします。 MediaLibraryServiceLegacyStub
がこれをサポートしていないResult
にエラーを送信し、UnsupportedOperationException
が生成されるケースを修正しました(#78)。- 以前のコマンド(
COMMAND_ADJUST_DEVICE_VOLUME
とCOMMAND_SET_DEVICE_VOLUME
)と新しいコマンド(COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
とCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
)の両方でvolumeControlType
を決定することで、PlayerWrapper
がVolumeProviderCompat
を作成する方法を修正しました(#554)。
- コントローラの状態にカスタム レイアウトを追加し、それにアクセスするためのゲッターを指定します。カスタム レイアウトが変更されると、
バージョン 1.1.0
2023 年 7 月 5 日
- 共通ライブラリ:
- 不適切な音声ルートの抑制理由を追加し、準備ができたら再生する理由を長すぎる抑制理由に変更。(#15)。
- Player にコマンドを追加します。
COMMAND_GET_METADATA
COMMAND_SET_PLAYLIST_METADATA
COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- ユーザーが音量フラグを指定できるように、Player にオーバーロードされたメソッドを追加しました。
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
DeviceInfo
にBuilder
を追加し、既存のコンストラクタを非推奨にしました。DeviceInfo.routingControllerId
を追加して、リモート再生のルーティング コントローラ ID を指定します。- 同じ位置にアイテムを追加または削除するためのショートカットとして
Player.replaceMediaItem(s)
を追加しました(#8046)。
- ExoPlayer:
- 明示的にオプトインした場合にのみ、ExoPlayer にデバイスの音量調整方法を制御することを許可します。
ExoPlayer.Builder.setDeviceVolumeControlEnabled
を使用すると、次の機能にアクセスできます。getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
、setDeviceVolume(int, int)
increaseDeviceVolume(int)
、increaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
、decreaseDeviceVolume(int, int)
MediaSource
から使用可能なトラックタイプをフィルタできるFilteringMediaSource
を追加しました。- アダプティブ ストリーミング形式の DASH、HLS、SmoothStreaming の送信リクエストに 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
に関連付けられるようにしました。- マップ内のキーとして使用される UID を含む期間を含むタイムライン パラメータを追加して、
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
の署名を変更しました。これは、マルチ期間ライブ配信の同時実行の問題を回避するために必要です。 EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
とBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
を非推奨にしました。代わりに、mediaTimeOffsetUs
のないメソッドのバリエーションを呼び出すことができます。非推奨のバリエーションでも、ディスパッチャによってディスパッチされるMediaLoadData
オブジェクトのstartTimeUs
とendTimeUs
にオフセットが追加されなくなりました。ExoTrackSelection.blacklist
の名前をexcludeTrack
に、isBlacklisted
の名前をisTrackExcluded
に変更しました。- 空のプレイリストで呼び出された場合に、
ExoPlayer.setMediaItem(s)
とaddMediaItem(s)
の動作が一致しない問題を修正しました。
- 明示的にオプトインした場合にのみ、ExoPlayer にデバイスの音量調整方法を制御することを許可します。
- Transformer:
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
を削除。代わりにExoPlayerAssetLoader.Factory(MediaSource.Factory)
とTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
を使用してください。Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
を削除しています。- 入力フレームの処理が保留中だったときに動画ストリームの終了が通知された場合、変換が停止する(これにより、muxer のタイムアウトが発生する)バグを修正しました。
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 パッケージの外部から呼び出されることのない
- マルチプレクサー:
- MP4 コンテナ ファイルの作成に使用できる新しい muxer ライブラリを追加しました。
- IMA 拡張機能:
- DAI 用に複数期間のライブ DASH ストリームを有効にします。なお、現在の実装では、ライブ配信でのシークはまだサポートされていません(#10912)。
- 連続するタイムラインで計算されたコンテンツの位置がわずかに異なるため、ライブ配信に新しい広告グループが挿入されるバグを修正。
- セッション:
- ヘルパー メソッド
MediaSession.getControllerForCurrentRequest
を追加して、現在Player
メソッドを呼び出しているコントローラに関する情報を取得します。 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:
- Util メソッド
shouldShowPlayButton
とhandlePlayPauseButtonAction
を追加して、再生/一時停止ボタン付きのカスタム UI 要素を作成します。
- Util メソッド
- RTSP 拡張機能:
- DASH 拡張機能:
- マルチ期間の DASH ストリームの
MediaLoadData.startTimeMs
とMediaLoadData.endTimeMs
からメディア時間オフセットを削除。 - マルチ期間のライブ Dash メディアソースを再準備すると
IndexOutOfBoundsException
が生成されるバグを修正しました(#10838)。
- マルチ期間の DASH ストリームの
- HLS 拡張機能:
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
を追加して、TimestampAdjuster
の初期化を待機する読み込みスレッドのタイムアウトを設定します。タイムアウト前に初期化が完了しなかった場合、PlaybackException
がスローされ、再生が永続的に停止しないようにします。タイムアウトはデフォルトで 0 に設定されています(#323)。
- テスト ユーティリティ:
DataSourceContractTest
で URI スキームの大文字と小文字の区別を確認します。
- サポートが終了したシンボルを削除しました。
DefaultAudioSink
コンストラクタを削除し、代わりにDefaultAudioSink.Builder
を使用しました。HlsMasterPlaylist
を削除し、代わりにHlsMultivariantPlaylist
を使用してください。Player.stop(boolean)
を削除しました。代わりにPlayer.stop()
とPlayer.clearMediaItems()
(reset
がtrue
の場合)を使用してください。- 非推奨の 2 つの
SimpleCache
コンストラクタを削除し、パフォーマンスを向上させるために、代わりにDatabaseProvider
を受け取る非推奨のコンストラクタを使用します。 DefaultBandwidthMeter
コンストラクタを削除し、代わりにDefaultBandwidthMeter.Builder
を使用します。DefaultDrmSessionManager
コンストラクタを削除し、代わりにDefaultDrmSessionManager.Builder
を使用してください。- 非推奨の 2 つの
HttpDataSource.InvalidResponseCodeException
コンストラクタを削除し、追加のフィールド(cause
、responseBody
)を受け入れる非推奨のコンストラクタを使用して、エラー ロギングを強化しました。 DownloadHelper.forProgressive
、DownloadHelper.forHls
、DownloadHelper.forDash
、DownloadHelper.forSmoothStreaming
を削除し、代わりにDownloadHelper.forMediaItem
を使用します。- 非推奨の
DownloadService
コンストラクタを削除し、channelDescriptionResourceId
パラメータを指定するオプションを含む非推奨のコンストラクタを使用します。 - Charsets の非推奨の文字列定数(
ASCII_NAME
、UTF8_NAME
、ISO88591_NAME
、UTF16_NAME
、UTF16LE_NAME
)を削除し、代わりにkotlin.text
パッケージの Kotlin Charsets、java.nio.charset.StandardCharsets
、またはcom.google.common.base.Charsets
を使用します。 - 非推奨の
WorkManagerScheduler
コンストラクタを削除し、代わりにContext
パラメータを指定するオプションを含む非推奨のコンストラクタを使用します。 Format
クラスのインスタンス化に使用されていたサポートが終了したメソッドcreateVideoSampleFormat
、createAudioSampleFormat
、createContainerFormat
、createSampleFormat
を削除しました。代わりに、Format
のインスタンスを作成するにはFormat.Builder
を使用します。- 非推奨のメソッド
copyWithMaxInputSize
、copyWithSubsampleOffsetUs
、copyWithLabel
、copyWithManifestFormatInfo
、copyWithGaplessInfo
、copyWithFrameRate
、copyWithDrmInitData
、copyWithMetadata
、copyWithBitrate
、copyWithVideoSize
を削除し、代わりにFormat.buildUpon()
と setter メソッドを使用します。 - 非推奨の
ExoPlayer.retry()
を削除しました。代わりにprepare()
を使用してください。 - 非推奨のゼロ引数の
DefaultTrackSelector
コンストラクタを削除し、代わりにDefaultTrackSelector(Context)
を使用してください。 - 非推奨の
OfflineLicenseHelper
コンストラクタを削除しました。代わりにOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
を使用してください。 - 非推奨の
DownloadManager
コンストラクタを削除し、代わりにExecutor
を受け取るコンストラクタを使用します。 - 非推奨の
Cue
コンストラクタを削除しました。代わりにCue.Builder
を使用してください。 - 非推奨の
OfflineLicenseHelper
コンストラクタを削除しました。代わりにOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
を使用してください。 - 非推奨の
AnalyticsListener
メソッドを 4 つ削除しました。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
を使用して System 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)。 - 以前の
MediaControllerCompat.Callback.onSessionEvent
に不足しているMediaSession.broadcastCustomCommand
の転送を追加しました(#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
モジュールに置き換えられています。これにより、アダプターやコネクタのクラスを使用する必要なく、プレーヤーとメディア セッションを直接統合できます。