Media3
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
2024 年 7 月 10 日 | 1.3.1 | 1.4.0-rc01 | 1.4.0-beta01 | 1.4.0-alpha02 |
依存関係の宣言
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.4.0
バージョン 1.4.0-rc01
2024 年 7 月 10 日
androidx.media3:media3-*:1.4.0-rc01
がリリースされました。バージョン 1.4.0-rc01 に含まれる commit については、こちらをご覧ください。
- 共通ライブラリ:
Format.customData
を追加して、Format
インスタンスに関するアプリから提供されるカスタム情報を保存します。
- ExoPlayer:
- 一部の音声フォーカスの不整合を修正しました(たとえば、プレーヤーの一時停止中に完全または一時的なフォーカス喪失がレポートされない問題を解決しました)。(#1436)。
- 最初の準備ステップの後にエクストラクタが追加トラックを報告することが原因で発生する可能性のある
IndexOutOfBoundsException
を修正しました(#1476)。 ExoPlayer.setVideoEffect()
のEffects
は、レンダラ オフセットを削除したタイムスタンプを受け取ります(#1098)。- 別の再生リスト アイテムを読み上げる際に発生したプレーヤー エラーを処理する際に
IllegalArgumentException
が発生する可能性を修正しました(#1483)。
- テキスト:
- WebVTT サブタイトル サンプルにキューが含まれていない場合(DASH ストリームの一部など)の
LegacySubtitleUtil
からのIllegalArgumentException
を修正しました(#1516)。
- WebVTT サブタイトル サンプルにキューが含まれていない場合(DASH ストリームの一部など)の
- セッション:
- コントローラごとにセッション アクティビティを設定して、グローバル セッション アクティビティをオーバーライドできるようにします。セッション アクティビティは、
AcceptedResultBuilder.setSessionActivivty(PendingIntent)
でConnectionResult
を作成することで、接続時にコントローラに定義できます。接続されると、セッション アクティビティはMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
で更新できます。 MediaLibrarySession.Callback
呼び出しのエラー レプリケーションを改善。MediaLibrarySession.Builder.setLibraryErrorReplicationMode()
を使用してエラータイプを選択するか、デフォルトで有効になっているエラー レプリケーションをオプトアウトすることで、エラー レプリケーションを構成できるようになりました。
- コントローラごとにセッション アクティビティを設定して、グローバル セッション アクティビティをオーバーライドできるようにします。セッション アクティビティは、
- UI:
- API 34 で Compose
AndroidView
内でSurfaceView
を使用すると、動画が引き伸ばされたり切り抜かれたりすることになる、プラットフォームのバグを回避しました(#1237)。
- API 34 で Compose
- デモアプリ:
- デバイスでサポートされている場合は、
HttpEngineDataSource
をHttpDataSource
として使用します。
- デバイスでサポートされている場合は、
バージョン 1.4.0-beta01
2024 年 6 月 26 日
androidx.media3:media3-*:1.4.0-beta01
がリリースされました。バージョン 1.4.0-beta01 に含まれる commit については、こちらをご覧ください。
- ExoPlayer:
ExoPlayer.isReleased()
を追加して、Exoplayer.release()
が呼び出されたかどうかを確認します。ExoPlayer.Builder.setMaxSeekToPreviousPositionMs
を追加して、seekToPrevious()
が前のアイテムまでシークする最大位置を設定します(#1425)。
- Transformer:
ExportResult.processedInputs
フィールドを削除します。このフィールドをコーデックの詳細に使用する場合は、代わりにDefaultDecoderFactory.listener
を使用してください。コーデックの例外が発生した場合、コーデックの詳細はExportException.codecInfo
で確認できます。
- エクストラクタ:
- AVI コンテナでの PCM オーディオ形式の抽出を修正
- 画像:
ExoPlayer.setImageOutput
のパラメータとしてnull
が以前に設定されたImageOutput
を消去することを許可。
- 効果:
- オーバーレイとフレームのダイナミック レンジが一致する必要があるため、未使用の
OverlaySettings.useHdr
を削除しました。 TextOverlay
の HDR サポートを追加しました。テキスト オーバーレイの輝度は、OverlaySettings.setHdrLuminanceMultiplier
で調整できます。
- オーバーレイとフレームのダイナミック レンジが一致する必要があるため、未使用の
- セッション:
MediaSession.Callback.onPlayerInteractionFinished
を追加して、特定のコントローラからの一連のプレーヤー操作が終了したときにセッションを通知します。- エラーコードの代わりに
SessionError
を追加し、SessionResult
とLibraryResult
で使用して、エラーの詳細とエラーの解決方法(可能な場合)を提供します。 - メディア セッションを公開するアプリとのやり取りのテストに使用できる media3 コントローラ テストアプリのコードを公開します。
- media3 の
MediaSession[Builder].setSessionExtras()
に渡されたエクストラを media1 コントローラのPlaybackStateCompat.getExtras()
に伝播する。 - 致命的なエラーと非致命的なエラーをプラットフォーム セッションとの間でマッピングします。
PlaybackException
は、PlaybackStateCompat
の致命的なエラー状態にマッピングされます。MediaSession.sendError(ControllerInfo, SessionError)
でメディア通知コントローラに送信されたSessionError
は、PlaybackStateCompat
の致命的でないエラーにマッピングされます。つまり、エラーコードとメッセージは設定されますが、プラットフォーム セッションの状態がSTATE_ERROR
のままになります。
- UI:
- HLS 拡張機能:
- プライマリ以外の再生プレイリストがライブ再生中に更新されないバグを修正しました(#1240)。
- サポートが終了したシンボルを削除しました。
Bundleable
インターフェースを削除。これには、すべてのBundleable.Creator<Foo> CREATOR
定数フィールドの削除も含まれます。呼び出し元は、代わりに各型でBundle toBundle()
メソッドとstatic Foo fromBundle(Bundle)
メソッドを使用する必要があります。
バージョン 1.4.0-alpha02
2024 年 6 月 7 日
androidx.media3:media3-*:1.4.0-alpha02
がリリースされました。バージョン 1.4.0-alpha02 に含まれる commit については、こちらをご覧ください。
- 共通ライブラリ:
- 保護された
BasePlayer.seekTo
メソッドとSimpleBasePlayer.handleSeek
メソッドに対する、前方推定 no-op シーク呼び出しを無視する代わりに、これらのメソッドをカスタム プレーヤーに実装する場合は、mediaItemIndex == C.INDEX_UNSET
で追加の呼び出しを処理する必要があります。 - 拡張された Java 8 の desugar に対するコンパイル依存関係を削除しました(#1312)。
- ドキュメントに記載されているように、非イメージ
MediaItem
でMediaItem.Builder.setImageDurationMs
に渡される期間が無視されるようにします。
- 保護された
- ExoPlayer:
reset
をBasePreloadManager
に追加して、プリロード マネージャー インスタンスを維持しながら、すべての保持ソースを解放します。ExoPlayer.setPriority
(およびBuilder.setPriority
)を追加して、PriorityTaskManager
で使用される優先度値と、API 35 からの MediaCodec のインポートに使用する優先度の値を定義します。- 最後の再バッファ時間を更新すると、CMCD の
bs
(バッファ不足)キーが不正確になる問題を修正しました(#1124)。 PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
を追加して、ソースが最後まで読み込まれたことを示します。これにより、DefaultPreloadManager
とカスタムPreloadMediaSource.PreloadControl
の実装で、次のソースのプリロードやその他のアクションの実行が可能になります。- アイテムの末尾で無音をスキップすると再生例外がトリガーされるバグを修正。
clear
をPreloadMediaSource
に追加して、プリロード期間を破棄します。- 優先度の高いタスクでコーデック リソースが再利用されるときに使用される新しいエラーコード
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
を追加しました。 - 最初のコンテンツ メディアの準備が完了する前に
AdsMediaSource
でプレロール広告が読み込まれるようにしました(#1358)。 - マニフェストから元の期間がすでに削除された後に、複数期間の DASH ライブ ストリームを再準備するときに再生が
STATE_ENDED
に移動するバグを修正しました。 PreloadMediaSource.PreloadControl
で、onTimelineRefreshed
の名前をonSourcePrepared
に、onPrepared
の名前をonTracksSelected
に変更します。また、それに応じてDefaultPreloadManager.Stage
の IntDef の名前を変更します。- 動的スケジューリングに対する試験運用版のサポートを追加し、処理を CPU の復帰サイクルに合わせて調整し、レンダラが処理できる時点まで復帰を遅らせるようにしました。これは、ExoPlayer インスタンスの設定時に
experimentalSetDynamicSchedulingEnabled
を使用して有効にできます。 Renderer.getDurationToProgressMs
を追加しました。Renderer
はこのメソッドを実装して、レンダラが進行するために再生する必要がある時間を ExoPlayer に返すことができます。ExoPlayer
にexperimentalSetDynamicSchedulingEnabled
が設定されている場合、ExoPlayer
は、処理タスクをスケジュールする時間を計算するときにこのメソッドを呼び出します。MediaCodecAdapter#OnBufferAvailableListener
を追加して、入力バッファと出力バッファがMediaCodecRenderer
で使用できる場合にアラートを発します。MediaCodecRenderer
は、これらのコールバックを受信したときにExoPlayer
に通知します。ExoPlayer
がexperimentalSetDynamicSchedulingEnabled
に設定されている場合、ExoPlayer
はレンダラが処理を進められるようにワークループをスケジュールします。LoadControl
メソッドでは、個々のパラメータではなくデータクラスを使用します。
- Transformer:
- PCM 入力の処理時にオーディオ チャンネルの数がステレオで制限されていたデコーダのバグを回避しました。
ExoPlayerAssetLoader
でトラックを選択する際、オーディオ チャンネル数の制約は再生にのみ適用されるため、無視します。androidx.media3.transformer.Muxer
インターフェースをandroidx.media3.muxer.Muxer
に置き換え、androidx.media3.transformer.Muxer
を削除します。- コンテンツ URI スキームからの HEIC 画像の読み込みを修正。(#1373)。
- AV 同期を改善するため、
AudioGraphInput
で音声トラックの長さを調整。
- エクストラクタ:
- MPEG-TS: 変更をロール フォワードし、ストリームの最後のアクセス ユニットをサンプルキューに渡すことで、最後のフレームがレンダリングされるようにします(#7909)。I フレームのみの HLS ストリーム(#1150)と H.262 HLS ストリーム(#1126)で発生した問題を解決するための修正を組み込みました。
- MP3: 基盤となるストリームによってレポートされるサイズ(ファイルサイズ、HTTP
Content-Length
ヘッダーなど)よりも、Info
フレームのデータサイズを優先します。これにより、再生できない予告編データ(アルバム アートワークなど)が固定ビットレートのシーク計算から除外され、シークの精度が向上します(#1376)。 - MP3:
Info
フレーム(例:PCUT
フレーム)の後のフレームのビットレートから推定するのではなく、Info
フレーム(存在する場合)内のフレーム数とその他のデータを使用して、固定ビットレート シークの平均ビットレートを計算します(例:PCUT
フレーム(#1376)。)
- オーディオ:
- パススルー再生の DTS:X プロファイル 2 のエンコード属性を修正しました(#1299)。
- オフロード再生の場合、
AudioTrack.stop()
を呼び出す前にDefaultAudioSink
でストリーム完了のトラッキング フィールドをリセットし、保留中のすべてのデータが再生されたことをAudioTrack.StreamEventCallback#onPresentationEnded
が正しく識別できるようにします。 - 異なる音声形式の切り替え(ステレオからモノラルなど)により、プロセッサが例外をスローする可能性がある
SilenceSkippingAudioProcessor
のバグを修正しました(#1352)。 MediaCodecAudioRenderer.getDurationToProgressUs
を実装して、MediaCodecAudioRenderer が進行できるタイミングに ExoPlayer がメイン ワークループを動的にスケジュールできるようにします。
- 動画:
- 必要に応じて互換性のある 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 サムネイル グリッドのサポートを追加しました(#1300)。
- API 34 以降向けの AVIF のサポートを追加しました。
- データソース:
ByteArrayDataSource
で、構築時にハードコードする代わりに、open()
の最中に URI をバイト配列に解決できるようになりました(#1405)。
- DRM:
DefaultDrmSessionManagerProvider
でのLoadErrorHandlingPolicy
の設定を許可する(#1271)。
- 効果:
TimestampWrapper
をExoPlayer#setVideoEffects
とともに使用するとクラッシュするバグを修正しました(#821)。- デフォルトの SDR カラー作業空間をリニアカラーから電気 BT 709 SDR 動画に変更します。また、元の色空間を保持する 3 つ目のオプションも指定します。
- EditedMediaItemSequences の不確定の Z オーダーを定義できるようになりました(#1055)。
- さまざまな HDR コンテンツの間で一貫した輝度範囲を維持する(HLG 範囲を使用)。
- HDR コンテンツでのウルトラ HDR(ビットマップ)オーバーレイのサポートを追加しました。
- API 26 より前のバージョンで
SeparableConvolution
エフェクトの使用を許可。
- IMA 拡張機能:
- アプリで DAI 広告ストリームを再生するために必要な API を安定版に昇格させました。
replaceAdTagParameters(Map <String, String>)
をImaServerSideAdInsertionMediaSource.AdLoader
に追加して、広告タグのパラメータを実行時に置換できるようにします。- 広告の再生中にプレーヤー エラーが発生した場合に
VideoAdPlayer.VideoAdPlayerCallback.onError
が呼び出されないバグを修正しました(#1334)。 data://
広告タグ URI を使用する場合のNullPointerException
を修正するために、IMA SDK バージョンを 3.33.0 にバンプしました(#700)。
- セッション:
- プラットフォーム セッション メタデータに継続時間を設定しないことで、ライブ配信のメディア通知でシークバーを非表示にしました(#1256)。
- メタデータ プロパティを選択する際に media1 と同じ優先順序とロジックが使用されるように、
MediaMetadata
の変換をMediaDescriptionCompat
に調整します。 - Media3 コントローラへの非致命的エラーの送信を許可する
MediaSession.sendError()
を追加しました。通知コントローラを使用する場合(MediaSession.getMediaNotificationControllerInfo()
を参照)、カスタムエラーを使用してプラットフォーム セッションのPlaybackState
が、指定されたエラー情報を含むエラー状態に更新されます(#543)。
- Cronet 拡張機能:
CronetDataSource
のSocketTimeoutException
を修正。Cronet の一部のバージョンでは、コールバックによって提供されるリクエストが常に同じとは限りません。これにより、コールバックが完了せず、リクエストがタイムアウトになります(https://issuetracker.google.com/328442628)。
- HLS 拡張機能:
- DASH 拡張機能:
- Cast 拡張機能:
MediaQueueItem
のアルバム タイトルを Media3 メディア アイテム内のアーティストに変換していたバグを修正しました(#1255)。
- デモアプリ:
- コマンドラインから
Intent
引数を使用した繰り返しモードを設定できるようになりました(#1266)。
- コマンドラインから
- サポートが終了したシンボルを削除しました。
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
など)を使用してください。
バージョン 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()
の到着が早すぎる問題を修正しました。
- 再生中にサーフェスを切り替えるときに
- データソース:
package
が現在のアプリのパッケージと異なる場合のandroid.resource://package/id
未加工リソース URI のサポートを実装します。これまではこれが機能することが確認されていませんでしたが、別のパッケージ内のリソースにアクセスする場合、名前を指定するよりも効率的な方法です。DataSpec
コンストラクタでurl
が null ではないことを慎重に確認します。このパラメータには、すでに非 null となるアノテーションが付けられています。
- 効果:
SpeedChangeEffect
の同じEditedMediaItem
またはComposition
内で複数の速度変更をサポートします。- ウルトラ HDR ビットマップ入力からの HLG 出力と PQ 出力のサポート。
- EGL_GL_COLORSPACE_BT2020_HLG_EXT のサポートを追加しました。これにより、ExoPlayer.setVideoEffect の HLG サーフェス出力と Transformer の Debug SurfaceView が改善されます。
setOverlayFrameAnchor()
に適用されている x 値と y 値を反転することで、ドキュメントと一致するようにオーバーレイ マトリックスの実装を更新します。OverlaySettings.Builder.setOverlayFrameAnchor()
を使用する場合は、x 値と y 値に-1
を掛けて反転させます。
- セッション:
CommandButton.enabled
のデフォルトをtrue
に変更し、関連するコマンドが使用可能な場合でも、コントローラの値が false のままになるようにします。- カスタム アイコン リソースの代わりに使用する
CommandButton
のアイコン定数を追加します。 MediaSessionService.isPlaybackOngoing()
を追加して、onTaskRemoved()
でサービスを停止する必要があるかどうかをアプリが照会できるようにしました(#1219)。- すべてのセッションの再生を一時停止し、
stopSelf
を呼び出してMediaSessionService
のライフサイクルを終了できる便利なMediaSessionService.pauseAllPlayersAndStopSelf()
を追加します。 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:
- API 30 より前の
MediaMuxer
が負の表示タイムスタンプをサポートしていないためにスローされる例外の回避策を追加しました。
- API 30 より前の
- トラックの選択:
DefaultTrackSelector
: フレームレートが低すぎる、または設定されていない動画トラックよりも、適切なフレームレート(10 fps 以上)の動画トラックを優先します。これにより、プレーヤーは、モーション フォトから抽出された MP4 形式の「本物」の動画トラックを選択します。2 つの HEVC トラック(1 つは高解像度でフレーム数が非常に少ないもの)を含めることができます(#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 タグ)をスキップしました(#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 タイプやメディアから読み取った MIME タイプを完全に小文字に正規化します。
AdPlaybackState
で 1 つのUri
ではなく、完全なMediaItem
を使用して広告を定義します。minSdk
を 19 に増やしました(Android KitKat)。これは、他のすべての AndroidX ライブラリと一致しており、AndroidX 依存関係を最新バージョンにアップグレードするために必要です。- 少なくとも 1 つが null でない場合、
artworkUri
とartworkData
の両方をMediaMetadata.Builder.populate(MediaMetadata)
に入力します(#964)。
- ExoPlayer:
PreloadMediaSource
とPreloadMediaPeriod
を追加して、アプリが再生前に特定の開始位置でコンテンツ メディアソースをプリロードできるようにします。PreloadMediaSource
は、Timeline
を受け取るコンテンツ メディアソースの準備、指定された開始位置での期間の準備とキャッシュ、トラックの選択、その期間のメディアデータの読み込みを行います。アプリは、PreloadMediaSource.PreloadControl
を実装してプリロードの進行状況を制御し、プリロードされたソースを再生用のプレーヤーに設定します。- アプリで
ImageRenderer.ImageOutput
を設定できるようにするExoPlayer.setImageOutput
を追加しました。 DefaultRenderersFactory
がデフォルトでImageRenderer
を null のImageOutput
とImageDecoder.Factory.DEFAULT
とともにプレーヤーに提供するようになりました。- 無音がスキップされたときに
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)。- カスタム Common Media Client Data(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 広告が再生できない問題を修正。
- セッション:
- 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
に戻される問題を修正しました。- OPUS と VORBIS のチャンネル レイアウトが 3、5、6、7、8 チャンネルで正しくない問題を修正しました(#8396)。
- ライブ ストリームで 0 までシークした後にトラック選択を行うと、ストリームがデフォルトの位置から誤って開始される問題を修正しました(#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 マニフェストで、ドルビーのチャンネル数 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
として更新されます。適切な出力が接続されると、抑制の理由は削除されます。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
を追加します。Mp4Extractor
に QuickTime Classic のサポートを追加しました。
- オーディオ:
- 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:
- ユーザーが適切なオーディオ出力(Bluetooth ヘッドフォンなど)に接続できるシステム ダイアログを起動して、
Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
による再生抑制を処理する Wear OS デバイス用のPlayer.Listener
実装を追加します。構成可能なタイムアウト(デフォルトは 5 分)内に適切なデバイスが接続されると、リスナーが自動的に再生を再開します。
- ユーザーが適切なオーディオ出力(Bluetooth ヘッドフォンなど)に接続できるシステム ダイアログを起動して、
- ダウンロード:
- 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)。
- 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
と関連付けるようにします。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
を追加しました。 - 新しい整数値
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 コンテナ ファイルの作成に使用できる新しいマルチプレクサ ライブラリを追加します。
- IMA 拡張機能:
- DAI で複数期間のライブ DASH ストリームを有効にするなお、現在の実装ではライブ配信でのシークをまだサポートしていません(#10912)。
- 連続するタイムラインで計算されるコンテンツの位置が若干異なるため、ライブ配信に新しい広告グループが挿入されるバグを修正します。
- セッション:
- ヘルパー メソッド
MediaSession.getControllerForCurrentRequest
を追加して、現在Player
メソッドを呼び出しているコントローラに関する情報を取得します。 androidx.media3.session.MediaButtonReceiver
を追加して、Bluetooth ヘッドセットなどから送信されるメディアボタン イベントで再生再開を実装できるようにしました(#167)。MediaSession.Callback.onAddMediaItems
にデフォルトの実装を追加して、リクエストされたMediaItems
にLocalConfiguration
(URI など)がある場合にPlayer
に渡せるようにしました(#282)。- Android 12 以前で、コンパクト メディア通知ビューに「前に移動」コマンドボタンと「次のページに移動」コマンドボタンをデフォルトで追加しました(#410)。
MediaSession.Callback.onAddMediaItems
にデフォルトの実装を追加して、リクエストされたMediaItems
にLocalConfiguration
(URI など)がある場合にPlayer
に渡せるようにしました(#282)。- Android 12 以前で、コンパクト メディア通知ビューに「前に移動」コマンドボタンと「次のページに移動」コマンドボタンをデフォルトで追加しました(#410)。
- ヘルパー メソッド
- UI:
- Util メソッド
shouldShowPlayButton
とhandlePlayPauseButtonAction
を追加して、再生/一時停止ボタンのあるカスタム UI 要素を記述します。
- Util メソッド
- RTSP 拡張機能:
- DASH 拡張機能:
- 複数期間の DASH ストリームの
MediaLoadData.startTimeMs
とMediaLoadData.endTimeMs
からメディア時間オフセットを削除しました。 - 複数期間のライブ Dash メディアソースを再準備すると
IndexOutOfBoundsException
が生成されるバグを修正しました(#10838)。
- 複数期間の DASH ストリームの
- HLS 拡張機能:
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
を追加して、読み込みスレッドがTimestampAdjuster
が初期化されるまで待機するタイムアウトを設定します。タイムアウトまでに初期化が完了しない場合は、再生の終わりのないストールを避けるため、PlaybackException
がスローされます。タイムアウトはデフォルトでゼロに設定されています(#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
のインスタンスを作成するにはFormat.Builder
を使用してください。- 非推奨のメソッド
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
を使用できるようにする必要がある問題を修正しました。 MediaSessionService
で使用すると、バックグラウンド スレッドのMediaSession
インスタンスがクラッシュする問題を修正しました(#318)。- メディアボタン レシーバがライブラリによって宣言されるのに、アプリが想定していない問題を修正しました(#314)。
- 以前の
- DASH:
- 空のセグメント タイムラインの処理を修正しました(#11014)。
- RTSP:
- UDP を使用した RTSP セットアップが RTSP エラー 461 UnsupportedTransport(#11069)で失敗した場合は、TCP で再試行します。
バージョン 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
モジュールに置き換えられています。これにより、アダプターやコネクタのクラスを使用する必要なく、プレーヤーとメディア セッションを直接統合できます。