Media3
| 最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
|---|---|---|---|---|
| 2025 年 10 月 22 日 | 1.8.0 | - | - | 1.9.0-alpha01 |
依存関係の宣言
Media3 への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。
アプリまたはモジュールの build.gradle ファイルに、必要なアーティファクトの依存関係を追加します。
Groovy
dependencies { def media3_version = "1.8.0" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs using Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Views implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.8.0" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$media3_version") }
依存関係について詳しくは、ビルド依存関係の追加をご覧ください。
フィードバック
お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。Media3 Issue Tracker を使用すると、質問への回答、既知の問題、機能リクエストを見つけたり、新しい問題を報告したりできます。
バージョン 1.9.0
バージョン 1.9.0-alpha01
2025 年 10 月 22 日
androidx.media3:media3-*:1.9.0-alpha01 がリリースされました。バージョン 1.9.0-alpha01 にはこれらの commit が含まれています。
- 共通ライブラリ:
- 他の AndroidX ライブラリに合わせて
minSdkを23に更新しました。 PlayerTransferStateを追加しました。これにより、Playerインスタンス間で再生状態を簡単に転送できます。- Player に
void mute()メソッドとvoid unmute()メソッドを追加します。これにより、Player の音量をゼロに設定する前後に Player の音量を保持して復元します。 - 以前は
ExoPlayerが内部で使用していたユーティリティ クラスWakeLockManager、WifiLockManager、AudioFocusManager、AudioBecomingNoisyManager、StuckPlayerDetectorを公開し、他のプレーヤーが再利用できるようにしました(#1893)。 - 基盤となるデリゲート プレーヤーがリスナー インスタンスの比較に参照の等価性を使用する場合の
ForwardingPlayerリスナーの処理を修正しました(#2675)。 media3-common-ktxライブラリに、処理対象の特定のPlayer.Eventsを指定するPlayer.listenTo拡張関数を追加します。- 報告されたバッファリングされた位置が報告された再生時間よりも大幅に大きい場合に、整数オーバーフローが原因で
BasePlayer.getBufferedPercentageでクラッシュする問題を修正(#2750)。
- 他の AndroidX ライブラリに合わせて
- ExoPlayer:
- プレーヤーが動かなくなった場合に
StuckPlayerExceptionプレーヤー エラーをトリガーする、動かなくなったプレーヤーの検出を追加します。これは次のケースで発生します。各デフォルト タイムアウトは、必要に応じてExoPlayer.Builderで構成できます。- 再生を試みている間、
STATE_BUFFERINGが 10 分間続き、バッファリングが進まない場合。 - 再生を試みている間、
STATE_READYが 10 秒間経過しても再生が進まない場合。 - アイテムの終了に達することなく、宣言された期間を超えて 1 分間
STATE_READYが続いた場合。 - 再生を試みているときに、再生抑制の理由が 10 分間続いた場合。
- 再生を試みている間、
- バックグラウンド再生中のバッファリングに関する問題を修正するため、ウェイクロック処理をデフォルトで有効化。これは、
ExoPlayer.Builder.setWakeModeをC.WAKE_MODE_LOCALに設定するのと同じです。 ExoPlayer.Builderに最初に渡されたContextに変更が報告されたときに、仮想デバイス ID を自動的に更新するリスニング ロジックを追加します。ExoPlayer.setVirtualDeviceIdを追加して、ExoPlayer.Builderに渡されたContextから取得した仮想デバイス ID を手動で更新します。- レンダラが、現在のアイテムの終了 10 秒以上前に次のプレイリスト アイテムのデータを消費しないようにします。
setSeekBackIncrementMs、setSeekForwardIncrementMs、setMaxSeekToPreviousPositionMsをExoPlayerに追加して、構築後にこれらの設定を更新します(#2736)。DefaultPreloadManagerにプリキャッシュ機能を追加します。アプリは、TargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)を介してDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)またはDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)を返すことで、メディア アイテムをプリキャッシュする必要があることを示すことができるようになりました。- ショートフォーム デモアプリで
DefaultPreloadManagerのプリキャッシュ機能を使用します。 - ローカル再生用の
DefaultLoadControl.Builderセッターを追加し、幅広いローカル ファイルで適切に動作するようにDefaultLoadControlのデフォルト値を調整しました。 - 空のプレイリストを設定するとプレーヤーが
STATE_READYまたはSTATE_BUFFERINGの状態になるバグを修正 - プリロード マネージャー API を強化:
- メディア アイテムまたはメディアソースを一括で追加し、その後
invalidate()を自動的に呼び出すaddMediaItems(List<MediaItem>, List<T>)とaddMediaSources(List<MediaSource>, List<T>)を追加します。 - メディア アイテムまたはメディアソースを一括で削除する
removeMediaItems((List<MediaItem>)とremoveMediaSources(List<MediaSource>)を追加し、削除後にプリロード マネージャーがそれらのプリロードを開始または継続しないようにします。 DefaultPreloadManager.setCurrentPlayingIndex(int)が自動的に無効になるようにします。現在の再生インデックスを更新した後、アプリがinvalidate()を明示的に呼び出す必要はなくなりました。
- メディア アイテムまたはメディアソースを一括で追加し、その後
- スクラブ モードで、同じ写真グループ内の前方シークでキーフレームのリセットをスキップする機能を追加。
- アプリが指定された
playerNameを持つプレーヤーのターゲット バッファ バイトの値を設定するためのDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)を追加しました。DefaultLoadControlは、割り当てられたバイト数とターゲット バッファ バイト数に基づいて、各プレーヤーの決定を個別に行うことができるようになりました。 AdPlaybackState.AdGroupにSkipInfoを追加して、広告グループ内の各広告のスキップ情報を伝えます。- ポストロールの再生中に
removeMediaItems(List)を呼び出すとクラッシュが発生するバグを修正しました(#2746)。 - フレームが常に最後のサンプルとして設定され、レンダリングされていたため、プレイリストの再生で発生していたスタッタリングを修正
- プレーヤーがオーディオ セッション ID を生成できない場合に再試行パスを有効化(#2382、#2678)。
DefaultPreloadManagerのソースの合計バッファ バイト数を制御するサポートを追加して、プリロードの合計バッファ バイト数が任意に増加しないようにします。デフォルトの制御ロジックを使用するには、アプリはPlayerId.Preload.name(「preload」)のplayerNameのDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)を介してプリロードのターゲット バッファ バイトを設定し、作成されたDefaultLoadControlをDefaultPreloadManager.Builder.setLoadControl(LoadControl)を介して挿入できます。
- プレーヤーが動かなくなった場合に
- CompositionPlayer:
CompositionPlayerを新しい@ExperimentalApiアノテーションで公開し、テストには使用できるものの、まだ開発中であることを示します。一部の API は今後のリリースで大幅に変更される可能性があり、一部のユースケース(一部はドキュメント化されていません)には既知の問題と制限事項があります。CompositionPlayerでCOMMAND_SET_AUDIO_ATTRIBUTESと音声フォーカス処理のサポートを追加CompositionPlayerのセカンダリ シーケンスでの速度変更のサポートを追加。
- Transformer:
- デフォルトの muxer として
InAppMp4Muxerを使用します。 EditedMediaItem.Builder#setSpeed()を追加し、Effects#createExperimentalSpeedChangingEffects()を非推奨にします。EditedMediaItemSequenceでforceAudioTrackとforceVideoTrackをtrackTypesに置き換えます。
- デフォルトの muxer として
- トラックの選択:
TrackSelectionParameters.selectTextByDefaultを追加して、他のより具体的な設定を指定せずに、任意のテキスト トラックの選択を優先します。TrackSelectionParametersにpreferredVideoLabels、preferredAudioLabels、preferredTextLabelsを追加して、特定のラベルが付いたトラックの優先順位を指定します。たとえば、HLS NAME タグから読み取られたトラックなどです(#1666)。
- エクストラクタ:
- FLAC: ヘッダー検出を厳密化し、エンコードされた FLAC データでスプリアス ヘッダーが検出される可能性を減らして、デコード エラーを回避(#558)。
- MP3: MP3 ファイルの先頭にある ID3 タグの間(および前)にギャップを許可(#811、#5718)。
- MP4: エクストラクタからトラック形式を出力する前に、最初のサンプルのレイヤ値を覗き見することで、
audio/mpeg(MP3)、audio/mpeg-L1、audio/mpeg-L2の MIME タイプの区別を行います(#2683)。 - MP4: 1 MB を超える
stblボックスはファイルがフラグメント化されていないことを意味すると仮定することで、非常に大きなファイルのスニッフィング効率を改善(#2650)。 - Matroska: DTS-HD 検出のサポートを追加しました(#6225)。
- 複数のトラックを含むファイルでシークが不正確になる可能性がある
MatroskaExtractorの問題を修正しました。キューポイントがそれぞれのトラックに正しく関連付けられるようになり、より正確なシークが可能になりました。 - MP4:
©mvn(ムーブメント名)と©mvi(ムーブメント インデックス)のメタデータのサポートを追加しました。これらは、Format.metadataのTextInformationFrameオブジェクトとして、それぞれMVNMとMVINの ID で出力されるようになりました(#2754)。 - MPEG-TS: タイムスタンプのない PES パケットが原因で
ReorderingBufferQueueからIllegalArgumentExceptionが発生する問題を修正しました(#2764)。 - MP4:
stsdボックスがないトラックを無視します(ファイル全体の解析に失敗する代わりに)。 - HEIC モーション フォトの抽出のサポートを追加。
HeifExtractorで、埋め込みの動画トラックと音声トラックを含む HEIC ファイルを解析できるようになりました。 - MP3:
FLAG_ENABLE_INDEX_SEEKINGを変更して、メタデータ ヘッダー(Xing や VBRI など)から情報を取得することを優先し、他のシーク情報がない場合はインデックス ベースのシークにフォールバックするようにしました。これにより、シーク メタデータを含むファイルのパフォーマンスが向上します(#2839)。
- 検査官:
- メディア検査ユーティリティ専用のホームとして機能する新しい
:media3-inspectorモジュールが導入されました。このモジュールには、メタデータとフレーム抽出の両方に統一された API を提供する新しいandroidx.media3.inspector.MetadataRetrieverが含まれています。既存のandroidx.media3.exoplayer.MetadataRetrieverは非推奨となり、この新しいバージョンに置き換えられました。 - フレーム抽出用の新しい公開 API である
androidx.media3.inspector.FrameExtractorを導入しました。このAutoCloseableクラスは、HDR 動画、動画エフェクト、カスタム デコーダ選択をサポートするフレームを抽出する方法を提供します。特定のMediaItemのBuilderを介して作成する必要があります。 - FrameExtractor: 特定のタイムスタンプを必要とせずにメディア ファイルから代表的なサムネイル フレームを抽出する
getThumbnail()を追加
- メディア検査ユーティリティ専用のホームとして機能する新しい
- オーディオ:
AudioProcessorインスタンスにシークを認識させます。- カスタム オーディオ出力パスをサポートするため、新しい
AudioOutputProviderインターフェースをDefaultAudioSink.Builderに挿入できるようにします。デフォルトはAudioTrackAudioOutputProviderです。 GainProcessorでシークを処理します。- トラック形式のサポート評価で AC-4 デコーダのプロファイルとレベルの機能を利用します(#2580)。
- 再生の開始時にルーティング変更コールバックを処理することによる遅延の可能性を回避(#2646)。
- EAC3、EAC3-JOC、AC-4 形式のコーデックの再利用を許可(#1346)。
Sonicでの浮動小数点 PCM サンプルのサポートを追加。ToFloatPcmAudioProcessorで 16 ビット PCM サンプルのサポートを追加。
- 動画:
- プロファイルが異なる Dolby-Vision コンテンツのコーデックの再利用を無効化。
- テキスト:
- ドルビー ビジョン コンテンツの CEA-6/708 字幕の解析を修正しました(#2775)。
- 画像:
- DASH サムネイル トラックのスクラブ中にプレーヤーが停止する ScrubbingMode の問題を修正しました(#2815)。
- DRM:
MediaDrmCallbackメソッドの戻り値の型をbyte[]から新しいMediaDrmCallback.Response型に変更し、追加のオプション情報を返せるようにしました。これはソースの互換性を破る変更ですが、以前のbyte[]の戻り値をnew Responseでラップしてから返すことで、簡単に解決できます。- URL やレイテンシなどのキーリクエスト情報を
AnalyticsListener.onDrmKeysLoadedに追加しました(#1001)。 - プロビジョニング リクエスト データを URL パラメータから POST 本文に移動します。
- Muxer:
- フレームワーク
MediaMuxerのドロップイン代替としてMediaMuxerCompatを追加しました。 - モーション フォトの作成を許可する
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()を追加しました。 WebmMuxerを追加して、OPUS、VORBIS、VP8、VP9のメディア ストリームをwebmファイル形式に多重化できるようにします。
- フレームワーク
- IMA 拡張機能:
- カスタム ProGuard ルールを削除し、アプリが IMA Android アーカイブでリリースされたルールを使用できるようにしました。
- IMA SDK が Google アド マネージャーの設定で指定された広告識別子を処理するための Google アド マネージャーのネットワーク コードを設定する新しい API
ImaServerSideAdInsertionUriBuilder.setNetworkCodeを追加しました。ネットワーク コードは省略可能ですが、フルサービス ストリーム リクエストでは指定することをおすすめします。ネットワーク コードを確認するには、こちらの記事をご覧ください。 - IMA の依存関係を 3.37.0 に引き上げました。これにはコア ライブラリの逆糖衣処理を有効にする必要があります。これは、依存アプリでも有効にする必要があります。IMA の構成に関する注意事項をご覧ください。
- SSAI URI ビルダーで IMA DAI カスタム UI オプションをサポート。サーバーサイド広告挿入のカスタム UI オプションには、「スキップ可能」と「この広告について」のレンダリング サポートが含まれます。この機能は現在、許可リストに登録されている一部のパブリッシャー様のみご利用いただけます。この変更により、カスタム UI オプション API にアクセスするために、IMA SDK のバージョンも 3.38.0(リリースノート)にアップグレードされます。
- セッション:
MediaSession.Callback.onPlaybackResumptionに新しいパラメータを追加して、呼び出しが情報の収集のみを目的とするのか、再生の開始を目的とするのかを示すようにしました(#1764)。MediaSession.ControllerInfo.isTrustedを更新して、独自のアプリのコントローラも信頼できるものとして宣言するようにしました(#2542)。- 通知の更新を手動でトリガーする
MediaSessionService.triggerNotificationUpdateを追加しました(#1833)。 - カスタム コマンド メソッドに
ProgressListenerを追加します。 MediaLibrarySession.Builder.setLibraryErrorReplicationModeのデフォルト値を非致命的に変更します。MediaButtonReceiver.onForegroundServiceStartNotAllowedExceptionにContextパラメータを追加(#2625)。- バインダ経由で取得するのではなく、プラットフォーム
PlaybackInfoから音量コントロール ID を読み取ります。これにより、再生タイプと音量制御 ID がアトミックに読み取られ、互いに一致します。 ACTION_UPキーイベントがフィルタリングされ、カスタム処理のコールバックに渡されないバグを修正しました。これにより、media1 の動作とプラットフォームの動作が同等になります(#2637)。- コマンドが使用できない場合でも
PlayerWrapperによってgetCurrentTimeline()が呼び出されるバグを修正しました(#2665)。 - サービス終了後にメモリリークを引き起こすメッセージがメインのルーパーのメッセージ キューに残るバグを修正しました(#2692)。
MediaBrowserを使用して以前のセッション アプリに接続している場合、カスタム コマンドは、カスタム アクションが以前のセッションのPlaybackStateCompatでカスタム アクションとしてアドバタイズされている場合にのみセッションに送信されます。他のすべてのカスタム アクションはサービスに送信されます。- セッションによってオーディオ セッション ID が設定されたときにメディア コントローラに通知する
onAudioSessionIdChangedを実装しました(#244)。 onStartCommand()にメディアキー イベントIntentが届いたときにKEYCODE_HEADSETHOOKがプレーヤーを起動しないバグを修正しました。これは、KEYCODE_MEDIA_PLAY_PAUSE(#2816)と同様に「KEYCODE_HEADSETHOOK」を処理することで修正されます。- セッションとコントローラの間でサーフェスのサイズが伝達されず、デモセッションで動画エフェクトを適用できないバグを修正コントローラを使用している場合、プレーヤーが
setVideoSurfaceHolder呼び出しを処理できないと、互換性が損なわれる可能性があります。 - span スタイルの文字列(#2853)など、
String以外のCharSequenceメタデータ値の伝播を修正しました。
- UI:
ProgressStateWithTickIntervalクラスと対応するrememberProgressStateWithTickIntervalコンポーザブルをmedia3-ui-composeモジュールに追加します。この状態ホルダーは、demo-composeで現在の位置と再生時間をテキスト形式で表示するために使用されます。Player音量のミュートを処理するui-composeにMuteButtonStateを追加します。この状態ホルダーは、demo-composeでミュート/ミュート解除の切り替えボタンを表示するために使用されます。ProgressStateWithTickCountクラスと対応するrememberProgressStateWithTickCountコンポーザブルをmedia3-ui-composeモジュールに追加します。この状態ホルダーは、demo-composeで進行状況を水平方向の読み取り専用の進行状況バーとして表示するために使用されます。PlayerSurfaceの管理と、シャッターによるアスペクト比のサイズ変更とカバーを組み合わせたContentFrameコンポーザブルをmedia3-ui-composeに追加します。- Compose
AndroidView内でSurfaceViewを使用すると、動画が引き伸ばされたり切り取られたりする API 34 プラットフォームの既知のバグを回避します。これにより、SURFACE_TYPE_SURFACE_VIEWを含むContentFrameとPlayerSurfaceコンポーザブルに影響します(#1237、#2811)。 - 新しい
media3-ui-compose-material3モジュールを作成し、Material3 テーマのコンポーザブル(PlayPauseButton、NextButton、PreviousButton、SeekBackButton、SeekForwardButton、RepeatButton、ShuffleButton、MuteButton)を追加します。 PlayerViewにメディアルート ボタンを配置するためのサポートを追加しました。
- HLS 拡張機能:
- DASH 拡張機能:
- RTSP 拡張機能:
- H264 および H265 の断片化された NAL ユニットを処理する際に、RTP パケットの欠落エラーを処理します(#2613)。
- デコーダ拡張機能(FFmpeg、VP9、AV1 など):
- AV1 拡張機能: AV1 ソフトウェア デコーダで、以前の
libgav1実装に代わって、高性能のdav1dライブラリが使用されるようになりました。これにより、デコード速度が向上します。
- AV1 拡張機能: AV1 ソフトウェア デコーダで、以前の
- Cast 拡張機能:
CastPlayer.Builderを追加します。これにより、CastPlayerでローカル再生とキャスト再生の両方が可能になります。以前のCastPlayerの動作(Cast 再生のみをサポート)を維持するには、RemoteCastPlayerを使用します。既存のCastPlayerコンストラクタは以前の動作を維持しますが、代わりにCastPlayerまたはRemoteCastPlayerビルダーを使用することが推奨されます。DefaultMediaItemConverterで null 以外の MIME タイプの適用を停止します。- 利用可能な場合は、
MediaItem.mediaMetadata.mediaTypeを使用して、DefaultCastOptionsProvider#toMediaQueueItemで使用する Cast の MEDIA_TYPE を推測します。 DefaultCastOptionsProviderでリモートからローカルへの転送を有効にします。- セッション デモで Cast のサポートを追加。
- コンポーザブル UI にメディアルート ボタンを表示するためのサポートを追加。
- アクションバー メニューにメディアルート ボタンを表示するためのサポートを追加。
- メディアルート ボタンを View UI として表示するためのサポートを追加します。
- テスト ユーティリティ:
FakeClockの自動進行動作の最大時間差を追加。デフォルトは 1 秒ですが、FakeClock.Builderで構成できます。RobolectricUtil.runMainLooperUntil(およびrunLooperUntil)のメッセージ間の最大時間差を追加。デフォルトは 1 秒ですが、これらのメソッドの新しいオーバーロードで構成できます。CapturingRenderersFactoryをtest-utilsからtest-utils-robolectricに移動しました。
- サポートが終了したシンボルを削除しました。
- 非推奨の
DefaultPreloadManagerコンストラクタを削除しました。代わりにDefaultPreloadManager.Builderを使用してください。 - 非推奨の
EditedMediaItemSequenceコンストラクタを削除しました。代わりにEditedMediaItemSequence.Builderを使用してください。
- 非推奨の
バージョン 1.8.0
バージョン 1.8.0
2025 年 7 月 30 日
バージョン 1.8.0 にはこれらの commit が含まれています。
- 共通ライブラリ:
ForwardingSimpleBasePlayerでのプレーヤーの置き換えのサポートを追加しました。
- ExoPlayer:
- シャッフル モードのゲッターを
ExoPlayerインターフェースに追加しました(#2522)。 - 複数のスレッドから
DefaultAudioSinkにアクセスした場合に、例外をより明確にスローします。プレーヤーの外部でRendererCapabilities.getFormatSupportを呼び出したことが原因でこのエラーが発生した場合は、ExoPlayer の再生スレッドと同じスレッドでこのメソッドを呼び出すか、再生に使用したインスタンスとは別のインスタンスを使用してください(#1191)。 - テレビの非ステレオ オーディオ形式が
DefaultTrackSelectorでサポート対象外としてマークされる可能性があるバグを修正しました。 - MediaCodec の
DECODE_ONLYフラグ(スクラビング モードではデフォルトで有効)を使用する際に、最後のフレームが正しくレンダリングされるようにします。 ExoPlayer.Builderに渡されたContextから仮想デバイス ID を使用するためのサポートを追加しました。- スクラブモードで動的スケジューリングをデフォルトで有効にします。
- アイテムの末尾にシークするときに、不要なソースの再読み込みを回避。
- スクラブ モードでは、デフォルトで
MediaCodec.BUFFER_FLAG_DECODE_ONLYを使用します。 - プリロード スレッドとは異なる再生スレッドを持つ
ExoPlayerによってPreloadMediaSourceが再生されるときにIllegalStateExceptionをスローします(#2495)。 - デフォルト実装で
cloneAndMoveをShuffleModeに追加しました(#2226)。 renderの呼び出しが必要ない場合に、より大きな値を返すようにRenderer.getMinDurationToProgressUsのデフォルトの動作を変更。- 一時停止中にシークバーを最後まで移動すると、内部スケジューリングによって最後のフレームが遅延するバグを修正現時点では、このバグ修正は
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledが有効になっている場合にのみ有効になります。 ExoPlayer.setScrubbingModeEnabled(boolean)メソッドを追加します。これにより、頻繁なシーク(ユーザーがスクラバーバーをドラッグするなど)に対してプレーヤーが最適化されます。スクラブ モードの動作は、ExoPlayerとExoPlayer.BuilderのsetScrubbingModeParameters(..)でカスタマイズできます。- スクラビング モードで分数シーク許容値をカスタマイズできるようにします。
- スクラビング モードでコーデックの動作レートを上げます。
AdsMediaSourceのコンテンツの準備エラーが報告されないことがあるバグを修正しました(#2337)。- 字幕をサイドローディングする際などに使用される
MergingMediaSourceのメモリリークを修正しました(#2338)。 CmcdConfiguration.Factoryがnullを返して、特定のメディア アイテムの CMCD ロギングを無効にできるようにします(#2386)。- デフォルトの画像バッファサイズを 128 KB(テキスト トラックからのコピー&ペーストの誤り)から 26 MB に増やしました。これは 50 MP のウルトラ HDR 画像に十分な大きさです(#2417)。
- アプリが指定された開始位置と再生時間で単一のメディアをプリキャッシュできるようにする
PreCacheHelperを追加 DefaultPreloadManagerの指定された位置からのプリロードのサポートを追加。
- シャッフル モードのゲッターを
- Transformer:
- 動画エンコード設定のチップセット固有の最適化を可能にする
CodecDbLiteを追加 DefaultEncoderFactoryにsetEnableCodecDbLiteフラグを追加して、CodecDB Lite 設定の最適化を有効化デフォルトでは、このフラグは false に設定されています。- (
addGap()で追加された)最初のギャップを無音音声で埋めるには、EditedMediaItemSequence.BuilderでexperimentalSetForceAudioTrack(true)を明示的に設定する必要があります。ギャップがシーケンスの中間にある場合、このフラグは必要ありません。 Muxerインターフェースをmedia3-transformerからmedia3-muxerに移動します。- メディア アイテムを画像としてインポートする際に
MediaItem.Builder().setImageDuration(long)設定を必須にします。 - トリミング時に MP4 編集リストを含む
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean)を追加して、トリミング開始点の前のキーフレームとトリミング開始点の間のサンプルを無視するようプレーヤーに指示します。 - Kotlin と Jetpack Compose を使用するように Composition Demo アプリを更新し、シーケンスを 2x2 または PiP レイアウトに配置するカスタム
VideoCompositorSettingsを追加しました。
- 動画エンコード設定のチップセット固有の最適化を可能にする
- エクストラクタ:
- 断片化された MP4 ファイルからメタデータを解析します(#2084)。
- JPEG: 先頭に Exif セグメントがないモーション フォトをサポート(#2552)。
- 複数の
sidxアトムを含むフラグメント化された MP4 でのシークのサポートを追加します。この動作は、FragmentedMp4ExtractorのFLAG_MERGE_FRAGMENTED_SIDXフラグを使用して有効にできます(#9373)。 - FLAC ファイル内の空のシークテーブル(プレースホルダ シークポイントのみを含むものを含む)を無視し、ファイルの再生時間がわかっている場合はバイナリ検索シークにフォールバックします(#2327)。
- H.265 SEI ユニットの解析を修正し、認識されない SEI タイプを完全にスキップするようにしました(#2456)。
WAVE_FORMAT_EXTENSIBLEタイプのファイルを解析する際に、ヘッダー拡張機能の SubFormat データを使用して音声形式を取得するようにWavExtractorを更新- MP4: 未加工の PCM オーディオ トラックを定義する
ipcmボックスとfpcmボックスのサポートを追加しました(64 ビット浮動小数点 PCM はサポートされていません)。 - MP4: 動画を回転および反転する
tkhd変換行列の回転部分を処理します。これにより、iPhone の前面カメラで撮影された反射動画が正しい向きで表示されますが、y 軸で正しく反射されません(#2012)。 - MP3:
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194)により固定ビットレート シークにフォールバックする際に、シークできない Xing、VBRI、同様の可変ビットレート メタデータから再生時間とデータサイズを使用します。
- オーディオ:
- メディアの終了間際に音声再生が開始されると
AnalyticsListener.onAudioPositionAdvancingが呼び出されないバグを修正しました。 ChannelMappingAudioProcessorとTrimmingAudioProcessorで、すべてのリニア PCM サンプル形式のサポートを追加。CompositionPlayerでの音声ギャップのサポートを追加。BaseAudioProcessor#reset()からBaseAudioProcessor#flush()への不要な呼び出しを削除。- DefaultAudioMixer で一定のパワー アップミキシング/ダウンミキシングを許可。
ChannelMappingAudioProcessor、TrimmingAudioProcessor、ToFloatPcmAudioProcessorを公開しました(#2339)。AudioTrackPositionTrackerのAudioTrack#getUnderrunCount()を使用して、ベスト エフォート推定ではなくDefaultAudioSinkのアンダーランを検出します。- オーディオ出力デバイスからの予期しない位置のずれに対するオーディオ タイムスタンプの平滑化を改善。
- Bluetooth デバイスに接続しているときに、一時停止から再開してから最初の 10 秒間、音声と映像の同期が崩れるバグを修正
AnalyticsListener.onAudioPositionAdvancingが、音声の進行開始時刻ではなく、最初の測定時刻を報告していたバグを修正しました。- 一部のデバイスでステレオ オーディオにフォールバックした後、マルチチャンネル オーディオに復元する問題を修正しました(#2258)。
- メディアの終了間際に音声再生が開始されると
- 動画:
- 切り離されたサーフェスの回避策を「lenovo」デバイスと「motorola」デバイスに拡張(#2059)。
- 音声サンプルがリクエストされた位置で正確に開始されない場合に、起動時のスムーズな動画フレームのリリースを改善
- 取り外したサーフェスの回避策を「realme」デバイスに拡張(#2059)。
- デコード専用の入力バッファをキューに入れるときに
MediaCodec.BUFFER_FLAG_DECODE_ONLYフラグを含めるための試験運用版ExoPlayerAPI を追加しました。このフラグは、デコード専用バッファをスキップするようデコーダに指示し、シークを高速化します。DefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlagで有効にします。 - ソフトウェア動画コーデックのコーデック パフォーマンス チェックを改善。これにより、一部のトラックが
EXCEEDS_CAPABILITIESとしてマークされることがあります。 - 一部のデバイスで VP9 Widevine の再生エラーを修正(#2408)。
- テキスト:
- MP4 ファイルの VobSub トラックのサポートを追加しました(#2510)。
- 字幕セグメントの読み込みに最初に失敗し、その後正常に読み込まれ、その後に空の字幕セグメントが続く場合に再生が停止する問題を修正しました(#2517)。
- 字幕を有効にしたときに進行中のキューを表示するよう SSA と SubRip を修正しました(#2309)。
- 字幕エラーのあるストリームから字幕トラックが空のライブ ストリームに切り替えると再生が停止する問題を修正しました(#2328)。
- B フレームを含む H.262 ストリームを再生する際に CEA-608 字幕が文字化けする問題を修正しました(#2372)。
- Matroska ファイルで
CodecId = S_TEXT/SSAを使用した SSA 字幕のサポートを追加しました。以前は、MatroskaExtractorは SubStation Alpha 字幕の「高度な」(v4 以降)バリアントを表すCodecId = S_TEXT/ASSのみをサポートしていました(ただし、ExoPlayer の解析ロジックは両方のバリアントで同じです)(#2384)。 - SubStation Alpha(SSA)字幕ファイルで
layerプロパティのサポートを追加しました。このプロパティは、複数のキューが同時に画面に表示される場合に、キューの z オーダーを定義するために使用されます(#2124)。
- メタデータ:
- メディアの再生時間と
Timelineの取得のサポートをMetadataRetrieverに追加し、インスタンス ベースのAutoCloseableAPI に移行しました。新しいBuilderを使用してMediaItemのインスタンスを作成し、retrieveTrackGroups()、retrieveTimeline()、retrieveDurationUs()を呼び出してメタデータのListenableFutureを取得します。以前の静的メソッドは非推奨になりました(#2462)。
- メディアの再生時間と
- 画像:
BitmapFactoryImageDecoderの表示サイズにデコードされたビットマップを制限し、非常に大きな(50 メガピクセルなど)画像を表示しようとしたときにPlayerViewからのCanvas: trying to draw too large bitmap.でアプリがクラッシュしないようにします。Contextパラメータを受け取るようにDefaultRenderersFactory.getImageDecoderFactory()のシグネチャを変更します。CompositionPlayerで使用されるビットマップの最大出力サイズを、Transformerで使用されるサイズと一致させます(つまり、CompositionPlayerはExoPlayerとは異なり、ビットマップをデコードする際にディスプレイ サイズを考慮しません)。
- DRM:
MediaItem.DrmConfigurationを受け入れるOfflineLicenseHelper.newWidevineInstanceの新しいオーバーロードを追加し、HTTP リクエスト ヘッダーを正しく適用できるようにしました(#2169)。
- 効果:
- 入力の向きに関係なく、短い辺が常に指定された値と一致するようにする
Presentationを作成するPresentation.createForShortSide(int)を追加します。
- 入力の向きに関係なく、短い辺が常に指定された値と一致するようにする
- Muxer:
- フラグメント化された MP4 の音声サンプルに正しいサンプル フラグが設定されないバグを修正しました。
writeSampleData()API がMediaCodec.BufferInfoではなく、muxer 固有のBufferInfoクラスを使用するようになりました。- デフォルトで false になる
Muxer.Factory#supportsWritingNegativeTimestampsInEditListを追加します。
- IMA 拡張機能:
- 1 つの広告の読み込みエラーが原因で、別の広告グループが誤って無効になるバグを修正しました。
- VOD ウィンドウの終了後に広告グループが再生を停止するバグを修正しました。期間後に開始する広告グループは、
MediaPeriodQueueにエンキューされなくなりました(#2215)。
- セッション:
- 特権のないサードパーティの Media3 コントローラからの接続が無視されるバグを修正しました。
- 以前の
MediaBrowserServiceCompatにカスタム コマンドを送信する際に、使用可能なコマンドのチェックを削除します。これは、レガシーアプリに接続された場合のレガシー コントローラ/ブラウザの動作と同じです。 - プレーヤーの最初の再生エラーが永続的なカスタム例外として誤って処理されるバグを修正これにより、アプリケーションが復元されなくなります。
- セッションで処理されない一部のコントローラ変更が
IllegalStateExceptionsを引き起こすバグを修正しました。 - セッションで処理されないコントローラ アクションによってコントローラが無効な状態になる可能性があるバグを修正
- StrictMode の安全でない起動違反の警告を修正しました(#2330)。
- メインスレッドとは異なるアプリケーション スレッドからプレーヤーを実行しているときに、メインスレッドから
setSessionExtrasを呼び出すとIllegalStateExceptionが発生するバグを修正しました(#2265)。 - メディア アイテムを準備または再生せずに設定した場合、通知を自動的に表示しない(#2423 https://github.com/androidx/media/issues/2423)。この動作は
MediaSessionService.setShowNotificationForIdlePlayerで構成できます。 - すべてのコントローラまたは選択したコントローラにカスタム
PlaybackExceptionを追加します。 MediaControllerでライブ ストリームをシークするとIllegalArgumentExceptionが発生するバグを修正しました。- ライブ配信の場合、Android Auto UI(およびプラットフォーム メディア セッションからこの情報を使用する他のコントローラ)で位置のアーティファクトが発生しないように、プラットフォーム メディア コントローラでの再生位置の公開と現在のアイテムでのシーク機能を停止します(#1758)。
- 従来の
MediaBrowserServiceCompatに接続されたMediaBrowserのgetLibraryRootに null を渡すとNullPointerExceptionが生成されるバグを修正しました。 - カスタム アクション、検索結果、getItem リクエストを送信すると、レガシー セッション アプリが
ClassNotFoundExceptionでクラッシュするバグを修正しました。 MediaItem.LocalConfiguration.uriがプラットフォーム セッションのMediaMetadataに共有されるバグを修正。コントローラがメディアを再リクエストできるように URI を意図的に共有するには、代わりにMediaItem.RequestMetadata.mediaUriを設定します。
- UI:
LazyColumnなどの再利用可能なコンポーネント内のPlayerSurfaceが正しく機能しないバグを修正しました(#2493)。- 初期ボタンの状態の設定と状態の変化(アイコンの形状や有効 / 無効など)の監視の間にギャップが生じる Compose のバグを修正しました。観測期間外に Player に加えられた変更が取得されるようになりました(#2313)。
SeekBackButtonStateとSeekForwardButtonStateの状態ホルダーとコンポーザブルをmedia3-ui-composeモジュールに追加します。- ExoPlayer のスクラブ モードのサポートを
PlayerControlViewに追加します。有効にすると、ユーザーがスクラバーバーのドラッグを開始したときにプレーヤーがスクラビング モードになり、すべての移動に対してplayer.seekTo呼び出しが発行され、画面からタッチが離れるとスクラビング モードが終了します。この統合は、XML のtime_bar_scrubbing_enabled = trueまたは Java/Kotlin のsetTimeBarScrubbingEnabled(boolean)メソッドで有効にできます。 PlayerSurfaceが null 可能なPlayer引数を受け入れるようにします。
- ダウンロード:
- プログレッシブ ストリームの部分的なダウンロードのサポートを追加しました。アプリは
DownloadHelperでプログレッシブ ストリームを準備し、ダウンロードでカバーする時間ベースのメディアの開始位置と終了位置を指定して、ヘルパーにDownloadRequestをリクエストできます。返されたDownloadRequestには解決済みのバイト範囲が含まれており、それを使用してProgressiveDownloaderを作成し、対応するコンテンツをダウンロードできます。 - 静的
DownloadHelper.forMediaItem()メソッドを置き換えるDownloadHelper.Factoryを追加します。 SegmentDownloader実装にFactoryを追加- アダプティブ ストリームの部分的なダウンロードのサポートを追加しました。アプリは
DownloadHelperでアダプティブ ストリームを準備し、ダウンロードでカバーする時間ベースのメディアの開始位置と終了位置を指定して、ヘルパーからDownloadRequestをリクエストできます。返されたDownloadRequestには解決された時間範囲が含まれており、それを使用して具体的なSegmentDownloaderを作成し、対応するコンテンツをダウンロードできます。
- プログレッシブ ストリームの部分的なダウンロードのサポートを追加しました。アプリは
- Cronet 拡張機能:
- Cookie の自動処理を追加しました(#5975)。
- HLS 拡張機能:
- バッファにチャンクがない場合に
HlsSampleStreamWrapperがバッファ内でシークしようとするバグを修正しました。#2598。 - 低遅延部分とプリロード ヒントの読み込み後にトラック選択を変更すると、再生が停止またはフリーズするバグを修正しました(#2299)。
- サーバーで
CAN-BLOCK-RELOAD=YESが尊重されない場合、目標期間の半分だけ待機することで、過剰な再読み込みを防ぎます(#2317)。 - ミッドロールの前にインタースティシャル ストリームを開始したときに再生が停止し、アセットリストの解決が誤った広告に対して試行されるバグを修正しました(#2558)。
- 引用符付き文字列属性値で
\f(フォームフィード)を受け入れるように、再生リストの解析を修正しました(#2420)。 - 同じ ID のインタースティシャルを更新できるようになりました(#2427)。
- ライブ ストリームで読み込むセグメントがなくなると、再生リストの読み込みエラーが伝播されないことがあるバグを修正しました(#2401 https://github.com/androidx/media/issues/2401)。
- 音声レンディションがすでにグループ化されているのと同様に、字幕レンディションを NAME タグでグループ化します(#1666)。
- X-ASSET-LIST と
HlsInterstitialsAdsLoaderを使用したライブ ストリームをサポートします。
- バッファにチャンクがない場合に
- DASH 拡張機能:
- RTSP 拡張機能:
- デコーダ拡張機能(FFmpeg、VP9、AV1 など):
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangeがオーディオ デコーダ拡張機能に影響しないバグを修正しました(#2258)。
- Cast 拡張機能:
- テスト ユーティリティ:
- 指定した位置に達するまでプレーヤーを進めるために、
TestPlayerRunHelperにadvance(player).untilPositionAtLeastとuntilMediaItemIndexを追加します。ほとんどの場合、これらのメソッドは既存のuntilPositionメソッドとuntilStartOfMediaItemメソッドよりも信頼性が高くなります。 - 他のテストで再利用できるように
FakeDownloaderをtest-utils-robolectricモジュールに移動 transformer.TestUtil.addAudioDecoders(String...)、transformer.TestUtil.addAudioEncoders(String...)、transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)を削除しました。代わりにShadowMediaCodecConfigを使用してシャドー エンコーダとデコーダを構成します。ShadowMediaCodecConfigによって報告されるコーデック名で、「exotest」接頭辞を「media3」に置き換えました。
- 指定した位置に達するまでプレーヤーを進めるために、
- サポートが終了したシンボルを削除しました。
- 非推奨の
SegmentDownloaderコンストラクタSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)と、そのサブクラスDashDownloader、HlsDownloader、SsDownloaderの対応するコンストラクタを削除しました。 - 非推奨の
Player.hasNext()、Player.hasNextWindow()を削除しました。代わりにPlayer.hasNextMediaItem()を使用してください。 - サポートが終了した
Player.next()を削除しました。代わりにPlayer.seekToNextMediaItem()を使用してください。 - サポートが終了した
Player.seekToPreviousWindow()を削除しました。代わりにPlayer.seekToPreviousMediaItem()を使用してください。 - サポートが終了した
Player.seekToNextWindow()を削除しました。代わりにPlayer.seekToNextMediaItem()を使用してください。 exoplayerモジュールでサポートが終了したBaseAudioProcessorを削除しました。commonモジュールのBaseAudioProcessorを使用します。- 非推奨の
MediaCodecVideoRendererコンストラクタMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider)を削除しました。
- 非推奨の
バージョン 1.8.0-rc02
2025 年 7 月 24 日
1.8.0 の安定版を使用します。
バージョン 1.8.0-rc01
2025 年 7 月 16 日
1.8.0 の安定版を使用します。
バージョン 1.8.0-beta01
2025 年 7 月 2 日
1.8.0 の安定版を使用します。
バージョン 1.8.0-alpha01
2025 年 5 月 19 日
1.8.0 の安定版を使用します。
バージョン 1.7.0
バージョン 1.7.1
2025 年 5 月 16 日
このリリースには 1.6.1 と同じコードが含まれています。これは、1.7.0 より「新しい」リリースとして表示されるようにするためにリリースされています。1.7.0 は、誤って安定版としてタグ付けされたアルファ版リリースでした(下記を参照)。
バージョン 1.7.0
2025 年 5 月 16 日
このリリースは 1.7.0-alpha01 であるべきでしたが、maven.google.com で誤って 1.7.0(安定版)としてタグ付けされました。使用しないでください。1.6.1 のままにするか、1.7.1(1.6.1 と同じコード)にアップグレードします。
バージョン 1.6.0
1.6.1
2025 年 4 月 14 日
androidx.media3:media3-*:1.6.1 がリリースされました。バージョン 1.6.1 にはこれらの commit が含まれています。
- 共通ライブラリ:
- 新しい
pitch値でPlaybackParametersを簡単にコピーするためのPlaybackParameters.withPitch(float)メソッドを追加しました(#2257)。
- 新しい
- ExoPlayer:
- 次のメディア アイテムの初期化中に復元可能なレンダラー エラーが発生し、メディア アイテムの切り替えに失敗する問題を修正しました(#2229)。
PreloadMediaSourceが準備される前にgetBufferedDurationUs()を呼び出そうとすると、ProgressiveMediaPeriodがIllegalStateExceptionをスローする問題を修正(#2315)。- DASH、HLS、SmoothStreaming のマニフェスト リクエストで
CmcdDataを送信する問題を修正しました(#2253)。 - 広告グループの削除後も
AdPlaybackState.withAdDurationsUs(long[][])を使用できることを確認します。ユーザーは、削除された広告グループの期間の配列を渡す必要があります。この配列は空または null にできます(#2267)。
- エクストラクタ:
- MP4:
tkhdボックスからalternate_groupを解析し、各トラックのFormat.metadataのMp4AlternateGroupDataエントリとして公開します(#2242)。
- MP4:
- オーディオ:
- 短いコンテンツのプレイリストを再生するときに位置が動かなくなる可能性があるオフロードの問題を修正しました(#1920)。
- セッション:
- プラットフォーム
MediaSessionコールバックの集計タイムアウトを 500 ミリ秒から 100 ミリ秒に短縮し、アプリがこの値を設定できるように試験運用版のセッターを追加 - ユーザーが通知を閉じた後、通知が再び表示される問題を修正(#2302)。
- ラップされたプレーヤーが実際には空の場合に、セッションが単一アイテムのタイムラインを返すバグを修正しました。これは、ラップされたプレーヤーに
COMMAND_GET_TIMELINEがなく、COMMAND_GET_CURRENT_MEDIA_ITEMがあり、ラップされたプレーヤーが空の場合に発生しました(#2320)。 setForegroundServiceTimeoutMsなどのサービスとの他のインタラクションの後にMediaSessionService.setMediaNotificationProviderの呼び出しが無視されるバグを修正しました(#2305)。
- プラットフォーム
- UI:
PlayerSurfaceがExoPlayer.setVideoEffectsおよびCompositionPlayerと連携できるようにします。- 新しい
PlayerでPlayerSurfaceを再コンポーズできないバグを修正
- HLS 拡張機能:
- HLS メディアの
CmcdDataでチャンクの長さが設定されず、暗号化されたメディア セグメントの処理時にアサーション エラーが発生する問題を修正しました(#2312)。
- HLS メディアの
- RTSP 拡張機能:
- RTSP セッションで TCP を使用するように構成する方法として、RTSPT スキームの URI のサポートを追加しました(#1484)。
- Cast 拡張機能:
- プレイリスト メタデータのサポートを追加しました(#2235)。
1.6.0
2025 年 3 月 26 日
androidx.media3:media3-*:1.6.0 がリリースされました。バージョン 1.6.0 には、これらの commit が含まれています。
- 共通ライブラリ:
androidx.mediaの同等のクラスを置き換えるために、AudioManagerCompatとAudioFocusRequestCompatを追加しました。- Kotlin を 1.9.20 から 2.0.20 にアップグレードし、Compose Compiler Gradle プラグインを使用します。KotlinX コルーチン ライブラリを 1.8.1 から 1.9.0 にアップグレード。
Format.toBundle(boolean excludeMetadata)メソッドを削除し、代わりにFormat.toBundle()を使用SimpleBasePlayerで、nullMediaMetadataを使用してsetPlaylistの後にStateで新しいcurrentMediaItemIndexを設定しても、メタデータが再評価されないバグを修正しました(#1940)。SimpleBasePlayer.Stateのアクセスを保護から公開に変更し、他のクラスでの更新を処理しやすくします(#2128)。
- ExoPlayer:
- プラットフォームの
MediaExtractorと同等の機能を提供する新しいクラスMediaExtractorCompatを追加します。 MediaCodecVideoRendererを使用した再生用に、試験運用版の「ExoPlayer」事前ウォーミングのサポートを追加しました。DefaultRenderersFactoryからexperimentalSetEnableMediaCodecVideoRendererPrewarmingを構成して、セカンダリMediaCodecVideoRendererをExoPlayerに提供できます。有効にすると、ExoPlayerは再生中に連続するメディア アイテムの動画を前処理して、メディア アイテムの切り替えのレイテンシを短縮します。DefaultLoadControlのbufferForPlaybackMsとbufferForPlaybackAfterRebufferMsのデフォルト値をそれぞれ 1,000 ミリ秒と 2,000 ミリ秒に減らしました。DeviceInfoとデバイスの音量を非同期で初期化します(setDeviceVolumeControlEnabledを使用して有効になっている場合)。これらの値はExoPlayer.Builder.build()の直後には使用できません。Player.ListenerはonDeviceInfoChangedとonDeviceVolumeChangedを介して変更を通知します。- プレーヤーの作成後、初期オーディオ セッション ID がすぐに利用できなくなりました。必要に応じて、
AnalyticsListener.onAudioSessionIdChangedを使用して初期更新をリッスンできます。 - 動画トラックを選択する際は、言語を考慮してください。デフォルトでは、選択した音声トラックの言語と一致する「メイン」の動画トラックが選択されます(利用可能な場合)。動画の言語設定は
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)で明示的に指定できます。 DefaultTrackSelector.selectVideoTrack()メソッドにselectedAudioLanguageパラメータを追加します。retryCountパラメータをMediaSourceEventListener.onLoadStartedと対応するMediaSourceEventListener.EventDispatcherメソッドに追加します。- 実際のコンテンツと一致しない再生リスト アイテムまたは期間を含むマルチ期間 DASH ストリームで、アイテムの最後にフレームがフリーズするバグを修正しました(#1698)。
BasePreloadManager.ListenerをトップレベルのPreloadManagerListenerに移動します。RenderersFactory.createSecondaryRendererを実装して、事前ウォーミング用のセカンダリ レンダラを提供できます。プリウォーミングにより、再生中のメディア アイテムの切り替えが速くなります。- アダプティブ ストリーミング形式の DASH、HLS、SmoothStreaming でマニフェスト リクエストの
CmcdDataを送信できるようにしました(#1951)。 MediaCodecRenderer.onReadyToInitializeCodecで初期化されるコーデックのMediaCodecInfoを提供します(#1963)。AdsMediaSourceを変更して、広告グループを追加することでAdPlaybackStatesを拡張できるようにします。無効な変更が検出され、例外がスローされます。- ミッドロール広告の後にコンテンツ メディアに移行する際に、デコード専用の追加フレームが連続して表示される問題を修正しました。
DefaultRenderersFactoryで 2 つのMetadataRendererインスタンスを追加し、アプリがデフォルトで 2 つの異なるメタデータ スキーマを受信できるようにします。- 再生が一時停止されたときに、チャンクの進行中の読み込みをキャンセルするかどうかを再評価します(#1785)。
- シークできないメディアでのクリップを許可するオプションを
ClippingMediaSourceに追加。 - プリウォーミングによるシークで次のメディア アイテムへの切り替えがブロックされるバグを修正
ExoPlayer.isLoading()がSTATE_IDLEまたはSTATE_ENDEDに移行した後もtrueのままになるバグを修正しました(#2133)。LoadControl.ParameterにlastRebufferRealtimeMsを追加します(#2113)。
- プラットフォームの
- Transformer:
- 下位互換性のある代替形式へのトランスミュークシングのサポートを追加します。
- ドルビー ビジョン(プロファイル 8)形式のトランスコーディングとトランスミュークシングのサポートを追加。
Formatを使用するようにVideoFrameProcessor.registerInputStreamとVideoFrameProcessor.Listener.onInputStreamRegisteredのパラメータを更新します。DefaultEncoderFactoryを使用する際に HDR 静的メタデータを生成します。MediaMetricsManagerを使用した Android プラットフォーム診断のサポートを有効にしました。Transformer では編集イベントとパフォーマンス データがプラットフォームに転送されるため、デバイスのシステム パフォーマンスとデバッグ情報の提供に役立てることができます。このデータは、デバイスのユーザーが使用状況と診断情報の共有を有効にしている場合に、Google によって収集されることもあります。アプリは、Transformer.Builder.setUsePlatformDiagnostics(false)で Transformer のプラットフォーム診断への貢献を無効にできます。InAppMuxerをInAppMp4MuxerとInAppFragmentedMp4Muxerに分割します。InAppMp4Muxerはフラグメント化されていない MP4 ファイルを生成するために使用され、InAppFragmentedMp4Muxerはフラグメント化された MP4 ファイルを生成するために使用されます。Muxerインターフェースをmedia3-muxerからmedia3-transformerに移動します。- 画面録画用の
MediaProjectionからメディアを提供するMediaProjectionAssetLoaderを追加し、Transformer デモアプリに画面録画のサポートを追加 Codecインターフェースに#getInputFormat()を追加します。- 可能であれば、
DefaultVideoFrameProcessorとDefaultVideoCompositorの呼び出し元にGlObjectsProviderを解放する責任を移します。
- エクストラクタ:
- AVI: ストリーム ヘッダーにチャンク数ではなくバイト数が格納されている、一定ビットレートの圧縮音声を含むファイルの処理を修正
- 長さが 1 バイトまたは 2 バイト(4 バイトではない)で表される NAL ユニットの処理を修正。
- 編集リストが同期フレーム以外のフレームで始まり、その前に同期フレームがない場合、MP4 編集リストの
ArrayIndexOutOfBoundsExceptionを修正(#2062)。 - 一部のデバイスで TS ストリームが停止する問題を修正しました(#2069)。
- FLAC: 32 ビット FLAC ファイルのサポートを追加しました。以前は、
IllegalStateException: Playback stuck buffering and not loadingで再生できませんでした(#2197)。
- オーディオ:
- 再生が再開されたときに
onAudioPositionAdvancingが呼び出されるように修正しました(以前は再生が一時停止されたときに呼び出されていました)。 SpeedChangingAudioProcessorがデフォルトのパラメータで構成されている場合は、SonicAudioProcessorをバイパスしないでください。DefaultAudioSinkが停止する原因となる可能性があるSonic#getOutputSize()のアンダーフローを修正- シークで指定された時間が正しくリセットされるように
MediaCodecAudioRenderer.getDurationToProgressUs()とDecoderAudioRenderer.getDurationToProgressUs()を修正しました。 androidx.media3.common.audio.SonicAudioProcessorを final にします。ChannelMappingAudioProcessorとTrimmingAudioProcessorに浮動小数点 PCM のサポートを追加します。
- 再生が再開されたときに
- 動画:
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceを protected に変更して、プレースホルダ サーフェスの使用をブロックするためにアプリケーションがオーバーライドできるようにします(#1905)。- シークを高速化するために、試験運用版の
ExoPlayerAV1 サンプル依存関係の解析を追加しました。新しいDefaultRenderersFactory.experimentalSetParseAv1SampleDependenciesAPI で有効にします。 - 依存関係のない遅延
MediaCodecVideoRendererデコーダ入力バッファをドロップする試験運用版ExoPlayerAPI を追加しました。DefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUsで有効にします。 - サーフェスがないプレーヤーがすぐに準備完了となり、保留中のフレームのデコードが非常に遅くなる問題を修正しました(#1973)。
- 画面のちらつきを避けるため、Xiaomi と OPPO のデバイスを分離型サーフェス モードから除外(#2059)。
- テキスト:
- VobSub 字幕のサポートを追加しました(#8260)。
MediaItem.Builder.setSubtitleConfigurationsで構成されたすべての字幕ファイルを積極的に読み込むのを停止し、代わりにトラック選択で選択された場合のみ 1 つを読み込むようにします(#1721)。- TTML:
styleを使用したtts:originとtts:extentの参照のサポートを追加しました(#2953)。 - WebVTT と SubRip のタイムスタンプを小数点以下 3 桁に制限します。以前は、小数点以下の桁数を誤って解析し、常に値がミリ秒単位であると想定していたため、タイムスタンプが正しくありませんでした(#1997)。
- プレイリストに CEA-608 または CEA-708 の字幕を含むクリップされたアイテムが含まれている場合に再生がハングする問題を修正しました。
- SSA ファイルに継続時間ゼロのキュー(開始時間と終了時間が同じ)が含まれている場合の
IllegalStateExceptionを修正(#2052)。 - 字幕が音声や動画と同じコンテナに多重化されている場合、字幕の解析エラーを抑制(およびログ記録)します(#2052)。
- CR 行末文字を使用する WebVTT ファイルでのマルチバイト UTF-8 文字の処理を修正しました(#2167)。
- DRM:
- API レベル 27 未満のデバイスで ClearKey コンテンツを再生する際の
MediaCodec$CryptoException: Operation not supported in this configurationエラーを修正しました(#1732)。
- API レベル 27 未満のデバイスで ClearKey コンテンツを再生する際の
- 効果:
OverlaySettingsの機能をStaticOverlaySettingsに移動しました。OverlaySettingsは、動的オーバーレイ設定を可能にするためにサブクラス化できます。
- Muxer:
- 完全修飾名が長くなりすぎるのを避けるため、
MuxerExceptionをMuxerインターフェースから移動しました。 Mp4Muxer.BuilderとFragmentedMp4Muxer.Builderの両方でsetSampleCopyEnabled()メソッドの名前をsetSampleCopyingEnabled()に変更しました。Mp4Muxer.addTrack()とFragmentedMp4Muxer.addTrack()がTrackTokenではなくintトラック ID を返すようになりました。Mp4MuxerとFragmentedMp4MuxerはMuxerインターフェースを実装しなくなりました。Mp4Muxerサンプルのバッチ処理とコピーをデフォルトで無効にします。- 音声トラックのみが書き込まれた場合に大量のフラグメントを作成する
FragmentedMp4Muxerのバグを修正
- 完全修飾名が長くなりすぎるのを避けるため、
- セッション:
- 再生が一時停止、停止、または失敗した場合、フォアグラウンド サービスの状態をさらに 10 分間保持します。これにより、さまざまなデバイスでフォアグラウンド サービスの制限を受けることなく、このタイムアウト内で再生を再開できます。
onTaskRemovedをオーバーライドするときにstopSelf()の前にフォアグラウンド サービスを停止するためにplayer.pause()を呼び出すことはできなくなりました。代わりにMediaSessionService.pauseAllPlayersAndStopSelf()を使用してください。 - 再生がエラー状態または停止状態になったときに、通知を表示したままにします。通知は、プレイリストがクリアされるか、プレーヤーがリリースされた場合にのみ削除されます。
- 利用可能なコマンドに応じて ACTION_PLAY と ACTION_PAUSE のいずれか 1 つのみを設定し、いずれか 1 つのみが設定されている場合も受け入れるように、Android プラットフォームの MediaSession アクション ACTION_PLAY と ACTION_PAUSE の処理を改善。
MediaButtonReceiver.shouldStartForegroundServiceにパラメータとしてContextを追加します(#1887)。- レガシー セッションに接続された
MediaControllerでPlayerメソッドを呼び出すと、保留中の更新から変更が削除されるバグを修正しました。 MediaSession.setSessionActivity(PendingIntent)が null を受け入れるようにしました(#2109)。- プレイリストがクリアされたときに古い通知が引き続き表示されるバグを修正しました(#2211)。
- 再生が一時停止、停止、または失敗した場合、フォアグラウンド サービスの状態をさらに 10 分間保持します。これにより、さまざまなデバイスでフォアグラウンド サービスの制限を受けることなく、このタイムアウト内で再生を再開できます。
- UI:
PlayerSurface、PresentationState、PlayPauseButtonState、NextButtonState、PreviousButtonState、RepeatButtonState、ShuffleButtonState、PlaybackSpeedStateの状態ホルダーとコンポーザブルをmedia3-ui-composeモジュールに追加します。
- ダウンロード:
- データソースが
IOException以外のExceptionをスローした場合に、データソースが開いたままになり、キャッシュ領域がロックされるCacheWriterのバグを修正しました(#9760)。
- データソースが
- HLS 拡張機能:
HlsInterstitialsAdsLoaderの最初のバージョンを追加します。広告ローダーは、HLS メディア プレイリストの HLS インタースティシャルを読み取り、AdsMediaSourceに渡されるAdPlaybackStateにマッピングします。この初期バージョンでは、X-ASSET-URI属性を持つ HLS VOD ストリームのみがサポートされています。HlsInterstitialsAdsLoader.AdsMediaSourceFactoryを追加しました。アプリはこれを使用して、HlsInterstitialsAdsLoaderを便利かつ安全に使用するAdsMediaSourceインスタンスを作成できます。- HLS 再生リストから
SUPPLEMENTAL-CODECSタグを解析して Dolby Vision 形式を検出(#1785)。 - HLS ストリームでシークして位置を同期する条件を緩和しました(#2209)。
- DASH 拡張機能:
- DASH 向けに AC-4 レベル 4 形式のサポートを追加しました(#1898)。
- マルチピリオドのライブ配信で広告挿入の更新間隔を計算する際の問題を修正しました(#1698)。
- DASH マニフェストから
scte214:supplementalCodecs属性を解析して、ドルビー ビジョン形式を検出します(#1785)。 - 期間に宣言された期間を超えるメディア サンプルが含まれているライブ ストリームでの期間の切り替えの処理を改善(#1698)。
adaptation-set-switchingでマークされているが、言語またはロールフラグが異なる適応セットが統合される問題を修正しました(#2222)。
- デコーダ拡張機能(FFmpeg、VP9、AV1 など):
- 組み込みの MPEG-H デコーダを使用して MPEG-H 音声をデコードする MPEG-H デコーダ モジュールを追加(#1826)。
- MIDI 拡張機能:
- カスタムの
AudioSinkインスタンスとAudioRendererEventListenerインスタンスをMidiRendererに接続します。
- カスタムの
- Cast 拡張機能:
play-services-cast-framework依存関係を 21.5.0 に引き上げて、Google Play 開発者サービスがインストールされているが有効になっていないデバイスで API 34 以上をターゲットとするアプリのFLAG_MUTABLEクラッシュを修正しました(#2178)。
- デモアプリ:
- 追加のボタンで
demo-composeを拡張し、スケーリングとシャッターのサポートでPlayerSurfaceの統合を強化。
- 追加のボタンで
- サポートが終了したシンボルを削除しました。
- 非推奨になった
AudioMixer.create()メソッドを削除しました。代わりにDefaultAudioMixer.Factory().create()を使用してください。 - サポートが終了した次の
Transformer.Builderメソッドを削除します。setTransformationRequest()、代わりにsetAudioMimeType()、setVideoMimeType()、setHdrMode()を使用してください。setAudioProcessors()でオーディオ プロセッサをEditedMediaItem.Builder.setEffects()に設定し、代わりにTransformer.start()に渡します。setVideoEffects()は、EditedMediaItem.Builder.setEffects()で動画エフェクトを設定し、代わりにTransformer.start()に渡します。setRemoveAudio()、代わりにEditedMediaItem.Builder.setRemoveAudio()を使用して、Transformer.start()に渡されたEditedMediaItemから音声を削除してください。setRemoveVideo()、代わりにEditedMediaItem.Builder.setRemoveVideo()を使用して、Transformer.start()に渡されたEditedMediaItemから動画を削除します。setFlattenForSlowMotion()、代わりにEditedMediaItem.Builder.setFlattenForSlowMotion()を使用して、Transformer.start()に渡されるEditedMediaItemをフラット化します。setListener()、代わりにaddListener()、removeListener()、またはremoveAllListeners()を使用してください。
- サポートが終了した次の
Transformer.Listenerメソッドを削除します。onTransformationCompleted(MediaItem)、代わりにonCompleted(Composition, ExportResult)を使用してください。onTransformationCompleted(MediaItem, TransformationResult)、代わりにonCompleted(Composition, ExportResult)を使用してください。onTransformationError(MediaItem, Exception)、代わりにonError(Composition, ExportResult, ExportException)を使用してください。onTransformationError(MediaItem, TransformationException)、代わりにonError(Composition, ExportResult, ExportException)を使用してください。onTransformationError(MediaItem, TransformationResult, TransformationException)、代わりにonError(Composition, ExportResult, ExportException)を使用してください。onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)、代わりにonFallbackApplied(Composition, TransformationRequest, TransformationRequest)を使用してください。
- 非推奨の
TransformationResultクラスを削除します。代わりにExportResultを使用してください。 - 非推奨の
TransformationExceptionクラスを削除します。代わりにExportExceptionを使用してください。 - サポートが終了した
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONを削除しました。代わりにTransformer.PROGRESS_STATE_NOT_STARTEDを使用してください。 - サポートが終了した
Transformer.setListener()を削除しました。代わりにTransformer.addListener()、Transformer.removeListener()、Transformer.removeAllListeners()を使用してください。 - サポートが終了した
Transformer.startTransformation()を削除しました。代わりにTransformer.start(MediaItem, String)を使用してください。 - サポートが終了した
SingleFrameGlShaderProgramを削除しました。代わりにBaseGlShaderProgramを使用してください。 Transformer.flattenForSlowMotionを削除しました。代わりにEditedMediaItem.flattenForSlowMotionを使用してください。ExoPlayer.VideoComponent、ExoPlayer.AudioComponent、ExoPlayer.TextComponent、ExoPlayer.DeviceComponentを削除しました。androidx.media3.exoplayer.audio.SonicAudioProcessorを削除しました。- サポートが終了した次の
DownloadHelperメソッドを削除しました。- コンストラクタ
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[])。代わりにDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList)を使用してください。 getRendererCapabilities(RenderersFactory)の場合、RenderersFactoryを使用してDefaultRendererCapabilitiesListを作成し、DefaultRendererCapabilitiesList.getRendererCapabilities()を呼び出すことで、同等の機能を実現できます。
- コンストラクタ
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat)メソッドを削除しました。代わりにPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)を使用して(MediaSession.Token) compatToken.getToken()を渡してください。
- 非推奨になった
1.6.0-rc02
2025 年 3 月 19 日
1.6.0 の安定版を使用します。
1.6.0-rc01
2025 年 3 月 12 日
1.6.0 の安定版を使用します。
1.6.0-beta01
2025 年 2 月 26 日
1.6.0 の安定版を使用します。
バージョン 1.6.0-alpha03
2025 年 2 月 6 日
1.6.0 の安定版を使用します。
バージョン 1.6.0-alpha02
2025 年 1 月 30 日
1.6.0 の安定版を使用します。
バージョン 1.6.0-alpha01
2024 年 12 月 20 日
1.6.0 の安定版を使用します。
バージョン 1.5
バージョン 1.5.1
2024 年 12 月 19 日
androidx.media3:media3-*:1.5.1 がリリースされました。バージョン 1.5.1 にはこれらの commit が含まれています。
- ExoPlayer:
- このプラットフォーム API で報告されたコーデック タイムアウトの問題を回避するため、MediaCodec での非同期復号の使用を無効化(#1641)。
- エクストラクタ:
- MP3:
VBRIフレームの目次がファイル内のすべての MP3 データをカバーしていない場合、再生を途中で停止しない(#1904)。
- MP3:
- 動画:
onOutputFormatChangedの処理中に提供されたMediaCodecAdapterのピクセル アスペクト比の値の使用をロールバック(#1371)。
- テキスト:
ReplacingCuesResolver.discardCuesBeforeTimeUsのバグを修正しました。このバグでは、timeUsでアクティブなキュー(開始済みだがまだ終了していない)が誤って破棄されていました(#1939)。
- メタデータ:
- Vorbis コメントからディスク/トラック番号とジャンルを抽出し、
MediaMetadataに格納します(#1958)。
- Vorbis コメントからディスク/トラック番号とジャンルを抽出し、
バージョン 1.5.0
2024 年 11 月 27 日
androidx.media3:media3-*:1.5.0 がリリースされました。バージョン 1.5.0 にはこれらの commit が含まれています。
- 共通ライブラリ:
- 完全な整合性とリスナーの処理を確保しながら、別のプレーヤーに転送できる
ForwardingSimpleBasePlayerを追加しました(#1183)。 SimpleBasePlayer.State.playlistをgetPlaylist()メソッドに置き換えます。- プレイリスト構造を構築する代わりに、
Timelineと現在のTracksおよびMetadataを直接指定するために、SimpleBasePlayer.State.Builder.setPlaylist()のオーバーライドを追加します。 minSdkを 21(Android Lollipop)に引き上げました。これは他のすべての AndroidX ライブラリと一致しています。- Common ライブラリの上に構築された Kotlin 固有の機能を提供する
androidx.media3:media3-common-ktxアーティファクトを追加 media3-common-ktxライブラリに、Player.EventsをリッスンするコルーチンをスピンするPlayer.listensuspend 拡張関数を追加。- ランタイム クラス検証の失敗を回避するために設計された、手動でアウトライン化された内部クラスから
@DoNotInlineアノテーションを削除します。最近のバージョンの R8 では、このようなインライン呼び出しが自動的にアウトライン化されるため、実行時のエラーを回避できます(手動でのアウトライン化は不要になりました)。ライブラリのすべての Gradle ユーザーは、compileSdk = 35により、この処理を行う R8 のバージョンを使用する Android Gradle プラグインのバージョンをすでに使用している必要があります。Gradle 以外のビルドシステムを使用するライブラリのユーザーは、ランタイム クラス検証の失敗を回避するために、R8 相当のシュリンク/難読化ステップで同様の自動アウトライン化プロセスが行われるようにする必要があります。この変更は、他の AndroidX ライブラリですでに実施されています。
- 完全な整合性とリスナーの処理を確保しながら、別のプレーヤーに転送できる
- ExoPlayer:
MediaCodecRenderer.onProcessedStreamChange()をすべてのメディア アイテムで呼び出せるようになりました。以前は、最初のものは呼び出されませんでした。これを有効にするには、MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()を使用します。PreloadMediaSource.PreloadControl.onPreloadErrorを追加して、エラー発生時にPreloadMediaSource.PreloadControl実装がアクションを実行できるようにしました。- プリロード イベントをアプリに伝播するよう
BasePreloadManager.Listenerを追加します。 - SNTP クライアントのタイムアウトと、タイムアウト時の再試行の代替アドレスの変更を許可(#1540)。
- フィールドは常にゼロであったため、
MediaCodecAdapter.Configuration.flagsを削除しました。 - Wear OS API 35 以降(デバイスがこのサポートをアドバタイズしている場合)で、ユーザーが再生用の内蔵スピーカーを選択できるようにします。
- 音声フォーカスの処理が有効になるまで、ブロッキング呼び出しを
Context.getSystemService(Context.AUDIO_SERVICE)に延期します。これにより、音声フォーカス処理が有効になっていない場合、ブロッキング呼び出しは行われません(#1616)。 - 読み込みに失敗した場合、バッファリングされた期間に関係なく再生を許可します(#1571)。
- 個々のレンダラーで再生の準備が整ったことを通知するために、
AnalyticsListener.onRendererReadyChanged()を追加します。 MediaCodecが非同期モードで動作している場合(API 31 以降のデフォルトの動作)、MediaCodec.CryptoExceptionが「予期しないランタイム エラー」として報告されることがある問題を修正。PreloadMediaSource.PreloadControl.onContinueLoadingRequested()でbufferedPositionUsではなくbufferedDurationUsを渡します。また、DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_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:
Surfaceを介して Transformer に動画データをキューに登録することをサポートするSurfaceAssetLoaderを追加します。ImageAssetLoaderは、IllegalStateExceptionをスローする代わりにAssetLoader.onError経由でサポートされていない入力を報告します。- イメージのエクスポートで
MediaItem.Builder.setImageDurationMsを使用したイメージの再生時間を必須にします。 - オーディオの EditedMediaItem のシーケンスのギャップのエクスポートのサポートを追加。
- トラックの選択:
DefaultTrackSelector: 他の要素が同じ場合は、チャンネルベースの音声よりもオブジェクトベースの音声を優先します。
- エクストラクタ:
Mp4ExtractorとFragmentedMp4Extractorを使用して、後続のサンプルで参照として使用されない H264 サンプルを特定できるようにします。AmrExtractorでインデックス ベースのシークを有効にするオプションを追加。- 有効なフレーム間のサイズが 128 KB を超える MP3 ファイルは、無効ではなく切り捨てられたものとして扱います。つまり、MP3 バイトの長さを示すメタデータがなく、末尾に MP3 以外のデータがあるファイルは、
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563)で失敗するのではなく、MP3 データの末尾で再生を停止するようになりました。 - MP4 ファイルの編集リストを処理する際に、キーフレーム以外のメディア開始位置のプリロール サンプルの処理を修正しました(#1659)。
Mp4ExtractorとFragmentedMp4Extractorのmdhdボックスのメディアの再生時間を使用して、フレームレートの計算を改善(#1531)。- MP4 編集リストでの
media_timeの誤ったスケーリングを修正。segment_durationはムービーのタイムスケールを使用してすでに正しくスケーリングされていましたが、MP4 形式の標準で指定されているとおり、media_timeはトラックのタイムスケールを使用して適切にスケーリングされるようになりました(#1792)。 - 編集リストを含む MP4 の
endIndices計算で順序が異なるフレームを処理(#1797)。 - MP4 ファイルの
mdhdボックスでのメディア再生時間の解析を修正し、-1値を処理するようにしました(#1819)。 - H.263 動画の MP4 ファイルで
h263ボックスを識別するサポートを追加しました(#1821)。 - AC-4 Level-4 ISO ベース メディア ファイル形式のサポートを追加(#1265)。
- DataSource:
HttpEngineDataSourceを更新し、API レベル 34 ではなくバージョン S 拡張機能 7 から使用できるようにします(#1262)。DataSourceContractTest:DataSource.getUri()が(ドキュメントに記載されているとおり)解決済みの URI を返すことをアサートします。リクエストされた URI と異なる場合、テストは新しいDataSourceContractTest.TestResource.Builder.setResolvedUri()メソッドを使用してこれを示すことができます。DataSourceContractTest:open()の呼び出しが失敗した後(リソースが見つからないため)、後続のclose()呼び出しの前に、DataSource.getUri()とgetResponseHeaders()が「open」値を返すことをアサートします。DataSourceContractTest.getNotFoundResources()をオーバーライドすると、テスト サブクラスで複数の「見つからない」リソースを指定したり、任意のヘッダーを指定したりできます。これにより、HTTP 404(ヘッダーあり)と「サーバーが見つかりません」(ヘッダーなし)を区別できます。
- オーディオ:
- メディアに存在する場合、コーデックで CTA-2075 ラウドネス メタデータを自動的に構成します。
- シーク時に音量がスムーズに下がるようにします。
- シーク中に発生する可能性のあるポップ音を修正しました。
- Sonic のタイムストレッチ/ピッチシフト アルゴリズムの切り捨てエラーの蓄積を修正。
- 出力フレームがドロップされる原因となっていた
SpeedChangingAudioProcessorのバグを修正しました。
- 動画:
MediaCodecVideoRendererは、レンダリングも他のサンプルの参照としても使用されないサンプルをデコードしません。- API 35 以降では、
MediaCodecAdapterはconfigureでnullSurfaceを受け取ることができ、コーデックがこれをサポートしている場合(MediaCodecInfo.detachedSurfaceSupported)、新しいメソッドdetachOutputSurfaceを呼び出して、以前に設定されたSurfaceを削除できます。 onOutputFormatChangedの処理時に指定された場合は、MediaCodecAdapterで指定されたピクセル アスペクト比の値を使用します(#1371)。- 60fps の安全な H264 ストリームがサポート対象外としてマークされる Galaxy Tab S7 FE のデバイスの問題に対する回避策を追加(#1619)。
- 最後のサンプル後にストリーム終了シグナルを返さずにスタックするコーデックの回避策を追加。
- テキスト:
- カスタム
VoiceSpanを追加し、WebVTT 音声スパン(#1632)用に値を設定します。 - 非常に大きな字幕タイムスタンプ(マイクロ秒で表され、
90,000MPEG タイムベースを乗算すると 64 ビットのlongをオーバーフローする)を含む HLS の WebVTT が表示されることを確認します(#1763)。 - ドルビー ビジョン コンテンツで CEA-608 字幕をサポートします(#1820)。
- CEA-608 字幕が有効になっている場合に、DASH マルチピリオド ストリームで再生がハングする問題を修正しました(#1863)。
- カスタム
- メタデータ:
- icy または vnd.dvb.ait コンテンツを含むトラックに
C.TRACK_TYPE_METADATAタイプを割り当てます。
- icy または vnd.dvb.ait コンテンツを含むトラックに
- 画像:
- Glide や Coil などの外部画像読み込みライブラリとの統合を簡素化するために、
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)。 - メディア アイテムのコマンドボタンを追加します。これにより、
MediaBrowserCompatを含むレガシー ライブラリでCustom browse actionsとして知られていた Media3 API が追加されます。Media3 コマンドボタンは、MediaBrowserとMediaControllerの両方で利用できます。カスタム ブラウズ アクションを実装するをご覧ください。 play()をリクエストした後、Media3 コントローラがセッション アプリにフォアグラウンド サービスの開始を許可できないことがあるバグを修正しました。CommandButton.Builder.setIconUriをコンテンツ URI のみを受け入れるように制限します。- 従来の
MediaBrowserCompatに接続するときに、Media3 ブラウザの接続ヒントを初期MediaBrowserCompatに渡します。サービスは、onGetRoot()の最初の呼び出しでルートヒントとして渡された接続ヒントを受け取ることができます。 - レガシー ブラウザ サービスに接続された
MediaBrowserが、ブラウザがparentidに登録された後にサービスから送信されたエラーを受信しないバグを修正しました。 - 相互運用性の動作を改善し、レガシー
MediaBrowserServiceに接続されている Media3 ブラウザが、親をサブスクライブするときにparentIdの子を 2 回リクエストしないようにします。
- UI:
- XML ベースの共有トランジションに関する問題のため、
PlayerView-in-Compose-AndroidViewの回避策で動画が引き伸ばされたり切り取られたりする問題をオプトインにします。AndroidView内でPlayerViewを使用するアプリは、オプトインするためにPlayerView.setEnableComposeSurfaceSyncWorkaroundを呼び出す必要があります(#1237、#1594)。 PlayerViewにsetFullscreenButtonStateを追加し、クリック操作に反応するのではなく、帯域外でオンデマンドで全画面ボタンのアイコンを更新できるようにしました(#1590、#184)。- アプリ定義のテキスト トラック選択設定がある場合に、テキスト選択の [なし] が機能しないバグを修正
- XML ベースの共有トランジションに関する問題のため、
- DASH 拡張機能:
- セグメントの途中から始まる期間のサポートを追加しました(#1440)。
- スムーズなストリーミング拡張機能:
- テキスト トラックを含む 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 にはこれらのコミットが含まれています。
- 共通ライブラリ:
- no-op と推定されるシーク呼び出しを無視するのではなく、保護された
BasePlayer.seekTo()メソッドとSimpleBasePlayer.handleSeek()メソッドに転送します。カスタム プレーヤーでこれらのメソッドを実装する場合は、mediaItemIndex == C.INDEX_UNSETでこれらの追加の呼び出しを処理する必要がある場合があります。 - 拡張された Java 8 の脱糖化のコンパイル依存関係を削除しました(#1312)。
- イメージ以外の
MediaItemでは、MediaItem.Builder.setImageDurationMs()に渡された期間が無視されることを確認します(ドキュメントに記載されています)。 Format.customDataを追加して、Formatインスタンスに関するアプリ提供のカスタム情報を保存します。
- no-op と推定されるシーク呼び出しを無視するのではなく、保護された
- ExoPlayer:
- 複数のソースのプリロードを、それぞれの
rankingDataで定義された優先度に基づいて調整するBasePreloadManagerを追加します。このクラスを拡張することでカスタマイズできます。PreloadMediaSourceを使用してソースのメディア サンプルをメモリにプリロードし、UI 上のアイテムのインデックスを示す整数rankingDataを使用するDefaultPreloadManagerを追加します。 LoadControlのほとんどのメソッドにPlayerIdを追加して、LoadControlの実装で複数のプレーヤーをサポートできるようにしました。Buffer.isDecodeOnly()とC.BUFFER_FLAG_DECODE_ONLYを削除しました。レンダラとデコーダがタイムスタンプに基づいてバッファをスキップするかどうかを判断するため、このフラグを設定する必要はありません。カスタムRenderer実装では、バッファ時間がBaseRenderer.getLastResetPositionUs()以上かどうかを確認して、サンプルを表示するかどうかを決定する必要があります。カスタムSimpleDecoder実装では、必要に応じてisAtLeastOutputStartTimeUs()をチェックしたり、他のバッファにDecoderOutputBuffer.shouldBeSkippedをマークしてスキップしたりできます。TargetPreloadStatusControl.getTargetPreloadStatus(T)が null 値を返すことを許可し、指定されたrankingDataでMediaSourceをプリロードしないことを示します。remove(MediaSource)をBasePreloadManagerに追加します。BasePreloadManagerにreset()を追加して、プリロード マネージャー インスタンスを保持しながら、すべての保持ソースを解放します。- API 35 以降で
PriorityTaskManagerと MediaCodec の重要度で使用される優先度値を定義するために、ExoPlayer.setPriority()(およびBuilder.setPriority())を追加しました。 - 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.release()が呼び出されたかどうかを確認するExoPlayer.isReleased()を追加します。ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()を追加して、seekToPrevious()が前のアイテムをシークする最大位置を設定します(#1425)。- 音声フォーカスの不整合(プレーヤーが一時停止中にフル フォーカスまたは一時フォーカスの喪失をレポートしないなど)を修正(#1436)。
- 抽出ツールが最初の準備ステップの後にトラックを追加で報告することによって発生する可能性のある
IndexOutOfBoundsExceptionを修正しました(#1476)。 ExoPlayer.setVideoEffect()のEffectsは、レンダラ オフセットが削除されたタイムスタンプを受け取ります(#1098)。- 別のプレイリスト アイテムを先読みしている間に発生したプレーヤー エラーを処理する際の潜在的な
IllegalArgumentExceptionを修正(#1483)。
- 複数のソースのプリロードを、それぞれの
- Transformer:
ExportResultにaudioConversionProcessとvideoConversionProcessを追加して、出力ファイルの各トラックがどのように作成されたかを示します。- トリム最適化の H.264 レベルチェックを緩和。
- シーケンス内の SDR と HDR の入力メディアの切り替えのサポートを追加。
- コンポジション レベルの音声効果のサポートを追加。
- ウルトラ HDR 画像を HDR 動画にトランスコードするサポートを追加。
- リセットして再利用した後に
DefaultAudioMixerが正しいバイト数を出力しない問題を修正しました。 - PCM 入力の処理時にオーディオ チャンネル数がステレオに制限されるデコーダのバグを回避。
ExoPlayerAssetLoaderでトラックを選択する際は、音声チャンネル数のルールは再生にのみ適用されるため、無視してください。androidx.media3.transformer.Muxerインターフェースをandroidx.media3.muxer.Muxerに置き換え、androidx.media3.transformer.Muxerを削除します。- コンテンツ URI スキームからの HEIC 画像の読み込みを修正します。(#1373)。
AudioGraphInputで音声トラックの長さを調整して、AV 同期を改善。ExportResult.processedInputsフィールドを削除します。コーデックの詳細にこのフィールドを使用する場合は、代わりにDefaultDecoderFactory.listenerを使用します。コーデック例外が発生した場合、コーデックの詳細はExportException.codecInfoで確認できます。
- エクストラクタ:
- MPEG-TS: ストリームの最後のアクセス ユニットをサンプルキューに渡すことで、最後のフレームがレンダリングされるように変更をロールフォワードします(#7909)。I フレームのみの HLS ストリーム(#1150)と H.262 HLS ストリーム(#1126)で発生した問題を解決するための修正を組み込みました。
- MP3: 基盤となるストリーム(ファイルサイズや HTTP
Content-Lengthヘッダーなど)によって報告されるサイズよりも、Infoフレームのデータサイズを優先します。これにより、再生できない予告編データ(アルバム アートワークなど)を一定ビットレートのシーク計算から除外して、シークの精度を高めることができます(#1376)。 - MP3:
Infoフレーム(存在する場合)のフレーム数などのデータを使用して、一定ビットレートのシークの平均ビットレートを計算します。Infoフレーム後のフレームのビットレートから外挿するのではなく、PCUTフレーム(#1376)など、人工的に小さくなる可能性があります。 - AVI コンテナでの PCM 音声形式の抽出を修正
- オーディオ:
- パススルー再生用の DTS:X Profile 2 エンコード属性を修正しました(#1299)。
- オフロード再生の場合、保留中のすべてのデータが再生されたタイミングを
AudioTrack.StreamEventCallback#onPresentationEndedが正しく識別できるように、AudioTrack.stop()を呼び出す前にDefaultAudioSinkでストリーム完了のトラッキング フィールドをリセットします。 SilenceSkippingAudioProcessorで、異なる音声形式(ステレオからモノラルなど)間の切り替えでプロセッサが例外をスローする可能性があるバグを修正しました(#1352)。MediaCodecAudioRenderer.getDurationToProgressUs()を実装して、MediaCodecAudioRenderer が進行できるときに ExoPlayer がメインのワークループを動的にスケジュールできるようにします。
- 動画:
- 再生中にサーフェスを切り替えると
Listener.onRenderedFirstFrame()が早すぎるタイミングで届く問題を修正 - 必要に応じて互換性のある AV1 デコーダを使用するように、ドルビー ビジョンのデコーダ フォールバック ロジックを修正しました(#1389)。
- 再生中に動画レンダラを有効にすると発生する可能性のあるコーデック例外を修正
- 再生中にサーフェスを切り替えると
- テキスト:
- シーク位置より前に開始する字幕がスキップされる問題を修正しました。この問題は Media3 1.4.0-alpha01 でのみ発生します。
- デフォルトの字幕解析の動作を変更し、レンダリング時ではなく抽出時に実行されるようにします(抽出とレンダリングの違いについては、ExoPlayer のアーキテクチャ図を参照)。
- この変更は、
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)とTextRenderer.experimentalSetLegacyDecodingEnabled(true)の両方を呼び出すことでオーバーライドできます。これらのコンポーネントをExoPlayerインスタンスに接続する方法については、カスタマイズに関するドキュメントをご覧ください。これらのメソッド(および以前の字幕デコードのサポートすべて)は、今後のリリースで削除される予定です。 - カスタムの
SubtitleDecoder実装を含むアプリは、SubtitleParser(およびSubtitleDecoderFactoryの代わりにSubtitleParser.Factory)を実装するように更新する必要があります。
- この変更は、
- PGS: ランレングス デコードを修正し、リテラル カラー値ではなくカラー インデックスとして
0を解決(#1367)。 - CEA-708:
rowLock値を無視します。CEA-708-E S-2023 仕様では、ストリーム内の値に関係なく、rowLockとcolumnLockの両方が true であると想定する必要があると規定されています(columnLockのサポートは実装されていないため、実際には常に false であると想定されます)。- この変更は元々
1.3.0-alpha01のリリースノートに含まれていましたが、1.3.0-rc01のリリース前に誤って元に戻されました。この問題は修正され、変更が再び表示されるようになりました。
- この変更は元々
- CEA-708: ExoPlayer の「ペンの位置を設定」コマンドの単純な処理によって重複した改行が追加されるのを回避(#1315)。
- WebVTT 字幕サンプルにキューが含まれていない場合(DASH ストリームの一部など)に
LegacySubtitleUtilからIllegalArgumentExceptionが発生する問題を修正しました(#1516)。
- メタデータ:
- 画像:
- 正方形以外の DASH サムネイル グリッドのサポートを追加しました(#1300)。
- API 34 以降で AVIF のサポートを追加。
ExoPlayer.setImageOutput()のパラメータとしてnullを使用して、以前に設定されたImageOutputをクリアできるようにしました。
- DataSource:
packageが現在のアプリのパッケージと異なるandroid.resource://package/id生リソース URI のサポートを実装します。これは、以前は動作が文書化されていませんでしたが、名前でアクセスするよりも効率的に別のパッケージのリソースにアクセスする方法です。DataSpecコンストラクタでurlが null でないことを積極的にチェックします。このパラメータはすでに非 null としてアノテーションされています。ByteArrayDataSourceが、構築時にハードコードされるのではなく、open()中に URI をバイト配列に解決できるようにします(#1405)。
- DRM:
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で乗算して反転させます。TimestampWrapperをExoPlayer#setVideoEffectsとともに使用するとクラッシュするバグを修正しました(#821)。- デフォルトの SDR カラー作業スペースを線形色から電気的 BT 709 SDR 動画に変更。元のカラースペースを保持する 3 つ目のオプションも提供します。
- EditedMediaItemSequences の不定の z オーダーを定義できるようになりました(#1055)。
- さまざまな HDR コンテンツで一貫した輝度範囲を維持します(HLG 範囲を使用)。
- HDR コンテンツに対するウルトラ HDR(ビットマップ)オーバーレイのサポートを追加。
- API 26 より前の
SeparableConvolution効果の使用を許可します。 - オーバーレイとフレームのダイナミック レンジが一致する必要があるため、未使用の
OverlaySettings.useHdrを削除します。 TextOverlayの HDR サポートを追加します。テキスト オーバーレイの輝度はOverlaySettings.Builder.setHdrLuminanceMultiplier()で調整できます。
- IMA 拡張機能:
- アプリが DAI 広告ストリームを再生するために必要な API を安定版に昇格しました。
- 実行時に広告タグ パラメータを置き換えることができる
ImaServerSideAdInsertionMediaSource.AdLoaderにreplaceAdTagParameters(Map <String, String>)を追加します。 - 広告の再生中にプレーヤー エラーが発生したときに
VideoAdPlayer.VideoAdPlayerCallback.onError()が呼び出されないバグを修正しました(#1334)。 data://広告タグ URI(#700)を使用する際のNullPointerExceptionを修正するため、IMA SDK のバージョンを 3.33.0 に引き上げました。
- セッション:
CommandButton.enabledのデフォルトをtrueに変更し、関連するコマンドが利用可能な場合でも、コントローラの値を false のままにできることを確認します。- カスタム アイコン リソースの代わりに使用する
CommandButtonのアイコン定数を追加 MediaSessionService.isPlaybackOngoing()を追加して、アプリがonTaskRemoved()でサービスを停止する必要があるかどうかをクエリできるようにしました(#1219)。- すべてのセッションの再生を一時停止し、
stopSelf()を呼び出してMediaSessionServiceのライフサイクルを終了できるMediaSessionService.pauseAllPlayersAndStopSelf()を追加します。 MediaSessionService.onTaskRemoved(Intent)をオーバーライドして、再生が進行中の場合はサービスをフォアグラウンドで実行し、それ以外の場合はサービスを停止する安全なデフォルト実装を提供します。- プラットフォーム セッション メタデータに再生時間を設定しないことで、ライブ配信のメディア通知でシークバーを非表示にしました(#1256)。
- メタデータ プロパティを選択する際に、media1 と同じ優先順位とロジックを使用するように、
MediaMetadataからMediaDescriptionCompatへの変換を調整します。 - 致命的でないエラーを Media3 コントローラに送信できるようにする
MediaSession.sendError()を追加します。通知コントローラ(MediaSession.getMediaNotificationControllerInfo()を参照)を使用する場合、カスタム エラーは、指定されたエラー情報(#543)でプラットフォーム セッションのPlaybackStateをエラー状態に更新するために使用されます。 - 特定のコントローラからのプレーヤー操作の一連の処理が終了したときにセッションに通知するために、
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()を実装します。TestPlayerRunHelper.runUntil()/playUntil()メソッドを変更して、致命的でないエラー(AnalyticsListener.onVideoCodecError()に報告されたエラーなど)で失敗するようにします。新しい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.FormatSupportIntDef と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 で、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-tag)をスキップ(#1087)。
- デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
- MIDI 拡張機能は、追加の Maven リポジトリの設定が必要なため、デフォルトでローカル依存関係として無効になっています。ローカル依存関係からこのモジュールが必要なユーザーは、再度有効にできます。
バージョン 1.3.0
2024 年 3 月 6 日
androidx.media3:media3-*:1.3.0 がリリースされました。バージョン 1.3.0 にはこれらの commit が含まれています。
- 共通ライブラリ:
packageが現在のアプリのパッケージと異なるandroid.resource://package/[type/]name生リソース URI のサポートを実装します。これは常に動作するようにドキュメント化されていましたが、これまで正しく実装されていませんでした。- アプリコードで設定された MIME タイプ、またはメディアから読み取られた MIME タイプを正規化して、完全に小文字にします。
AdPlaybackStateで、単一のUriではなく、完全なMediaItemを使用して広告を定義します。minSdkを 19(Android KitKat)に増やします。これは他のすべての AndroidX ライブラリと整合しており、AndroidX 依存関係の最新バージョンにアップグレードするために必要です。artworkUriとartworkDataの少なくとも一方が null 以外の場合、MediaMetadata.Builder.populate(MediaMetadata)の両方を入力します(#964)。
- ExoPlayer:
- アプリが再生前に特定の開始位置でコンテンツ メディアソースをプリロードできるようにする
PreloadMediaSourceとPreloadMediaPeriodを追加しました。PreloadMediaSourceは、Timelineを受信するためのコンテンツ メディアソースの準備、指定された開始位置での期間の準備とキャッシュ保存、トラックの選択、期間のメディアデータの読み込みを行います。アプリはPreloadMediaSource.PreloadControlを実装してプリロードの進行状況を制御し、プリロードされたソースを再生用にプレーヤーに設定します。 - アプリが
ImageRenderer.ImageOutputを設定できるようにするExoPlayer.setImageOutputを追加。 DefaultRenderersFactoryは、デフォルトで null のImageOutputとImageDecoder.Factory.DEFAULTを含むImageRendererをプレーヤーに提供します。- 無音部分がスキップされたときに
Player.Listener.onPositionDiscontinuityイベントを発行します(#765)。 - 抽出時の字幕解析の試験運用版サポートを追加しました。これは
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()を使用して有効にできます。 PreloadMediaSourceでアダプティブ メディアソースをサポートします。- HttpEngine API を使用して
HttpDataSourceを使用するHttpEngineDataSourceを実装します。 CompositeSequenceableLoaderのサブクラス化を防止します。このコンポーネントは以前に拡張可能にされましたが、ライブラリ内でサブクラス化されたことはありません。カスタマイズは、デコレータ パターンを使用してインスタンスをラップし、カスタムCompositeSequenceableLoaderFactoryを実装することで行えます。- 同じ時間を繰り返すと、このアイテムのメタデータがクリアされる問題を修正しました(#1007)。
BundledChunkExtractor.FactoryとDefaultHlsExtractorFactoryのexperimentalSetSubtitleParserFactoryメソッドの名前をsetSubtitleParserFactoryに変更し、nullの受け渡しを禁止します。新しいexperimentalParseSubtitlesDuringExtraction(boolean)メソッドを使用して、解析の動作を制御します。- 抽出時に使用される
SubtitleParser.Factoryのカスタマイズのサポートを追加しました。これはMediaSource.Factory.setSubtitleParserFactory()で実現できます。 MergingMediaSourceから生成されたすべてのFormat.idフィールドにソース接頭辞を追加します。これにより、どのソースがFormatを生成したかを特定できます(#883)。- ハイフンのみをチェックするように変更することで、カスタムの共通メディア クライアント データ(CMCD)キー名の検証に使用される正規表現を修正しました(#1028)。
- CMCD クエリ パラメータの二重エンコードを停止しました(#1075)。
- アプリが再生前に特定の開始位置でコンテンツ メディアソースをプリロードできるようにする
- Transformer:
- H.265/HEVC SEF スローモーション動画のフラット化のサポートを追加。
- 特に「動画を削除」する編集で、トランスミュークシングの速度を向上させました。
- 出力ファイルが動画フレームで始まるようにする API を追加しました。これにより、プレゼンテーション タイムスタンプ(#829)まで最初の動画フレームを表示しないプレーヤー実装との互換性が高まります。
- 単一アセットの MP4 トリミング処理の最適化のサポートを追加しました。
- 動画フレームの最初のタイムスタンプが出力ファイルに含まれるようにサポートを追加。iOS ベースのプレーヤーで出力ファイルが黒いフレームで始まる問題を修正(#829)。
- トラックの選択:
DefaultTrackSelector.selectImageTrackを追加して、画像トラックの選択を有効にします。- 画像トラックと動画トラックの両方が利用可能な場合に画像トラックを選択するかどうかを決定するために、
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledを追加します。デフォルト値はfalseで、動画トラックの選択が優先されることを意味します。
- エクストラクタ:
ColorInfo.colorSpace、ColorInfo.colorTransfer、ColorInfo.colorRangeの値を取得するために、MP4 エクストラクタに AV1C の解析を追加しました(#692)。- MP3:
Infoヘッダー(Xingヘッダーの CBR 相当)を持つファイルに対して固定ビットレート(CBR)シークを使用します。以前はInfoヘッダーのシーク テーブルを使用していましたが、これを無視してファイルが CBR であると仮定した場合よりもシークの精度が低くなります。 - MPEG2-TS: DTS、DTS-LBR、DTS:X Profile2 のサポートを追加(#275)。
- TS 記述子から音声タイプを抽出し、ロールフラグにマッピングすることで、ユーザーがより多くの情報に基づいて音声トラックを選択できるようになりました(#973)。
- オーディオ:
- 動画:
VideoFrameProcessor.Factory引数を取るMediaCodecVideoRendererコンストラクタを変更し、VideoSinkProvider引数を取るコンストラクタに置き換えます。カスタムVideoFrameProcessor.Factoryを挿入したいアプリは、カスタムVideoFrameProcessor.Factoryを使用するCompositingVideoSinkProviderをインスタンス化し、動画シンク プロバイダをMediaCodecVideoRendererに渡すことができます。
- テキスト:
DefaultExtractorsFactory.setTextTrackTranscodingEnabledを使用する際にTried to marshall a Parcel that contained Binder objectsエラーを解決するため、ビットマップ キューのシリアル化を修正しました(#836)。- CEA-708:
rowLock値を無視します。CEA-708-E S-2023 仕様では、ストリーム内の値に関係なく、rowLockとcolumnLockの両方が true であると想定されるべきであると規定されています(columnLockのサポートは実装されていないため、常に false であると想定されます)。
- 画像:
- DASH サムネイルのサポートを追加しました。グリッド画像は切り抜かれ、個々のサムネイルはプレゼンテーションの時刻の直前に提供されます。
ImageOutput
- DASH サムネイルのサポートを追加しました。グリッド画像は切り抜かれ、個々のサムネイルはプレゼンテーションの時刻の直前に提供されます。
- DRM:
- 後続の暗号化されたサンプルのキーがまだ準備できていない場合でも、デフォルトで DRM コンテンツ内の暗号化されていない「クリアリード」サンプルをすぐに再生します。これにより、再生位置が暗号化されたサンプルに達したときに鍵がまだ準備できていない場合、再生中に停止することがあります(ただし、以前はこの時点で再生がまったく開始されませんでした)。この動作は、
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyまたはDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeysで無効にできます。
- 後続の暗号化されたサンプルのキーがまだ準備できていない場合でも、デフォルトで DRM コンテンツ内の暗号化されていない「クリアリード」サンプルをすぐに再生します。これにより、再生位置が暗号化されたサンプルに達したときに鍵がまだ準備できていない場合、再生中に停止することがあります(ただし、以前はこの時点で再生がまったく開始されませんでした)。この動作は、
- IMA 拡張機能:
- 適切なファイル拡張子がない DASH 広告と HLS 広告を再生できない問題を修正
- セッション:
- テレビアプリのダブルクリック検出を無効化しました(#962)。
- null 以外のエクストラのみを含む
MediaItem.RequestMetadataがメディア コントローラとセッション間で送信されない問題を修正しました。 MediaLibraryServiceではなくContextのみを受け取るコンストラクタをMediaLibrarySession.Builderに追加します。
- HLS 拡張機能:
HlsMediaPeriodの公開設定をパッケージ プライベートに縮小。この型は、HLS パッケージの外部から直接依存すべきではありません。- セグメントの先頭へのシークをより効率的に解決します(#1031)。
- デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
- MIDI デコーダ: SysEx イベント メッセージを無視(#710)。
- テスト ユーティリティ:
TestPlayerRunHelper.playUntilPositionでの再生を一時停止しません。テストでは、再生は再生状態のままですが、テストでアサーションと追加のアクションを追加できるようになるまで進行が一時停止されます。
- デモアプリ:
- ショート フォーム コンテンツのユースケースで
PreloadMediaSourceの使用方法をデモするショート フォーム デモ モジュールを追加します。
- ショート フォーム コンテンツのユースケースで
バージョン 1.3.0-rc01
2024 年 2 月 22 日
1.3.0 安定版を使用します。
バージョン 1.3.0-beta01
2024 年 2 月 7 日
1.3.0 安定版を使用します。
バージョン 1.3.0-alpha01
2024 年 1 月 15 日
1.3.0 安定版を使用します。
バージョン 1.2.0
バージョン 1.2.1
2024 年 1 月 9 日
- ExoPlayer:
LiveConfiguration.min/maxOffset範囲外の手動シークでオフセットがmin/maxOffsetに戻り続ける問題を修正- 3、5、6、7、8 チャンネルで OPUS と VORBIS のチャンネル レイアウトが間違っている問題を修正しました(#8396)。
- ライブ配信でシークを 0 に行った後のトラック選択で、ストリームがデフォルトの位置から開始される問題を修正しました(#9347)。
CmcdData.Factoryの新しいインスタンスがチャンクソースからbufferedDurationUsの負の値を受け取り、IllegalArgumentExceptionが発生する問題を修正しました(#888)。
- Transformer:
- 高い動作レートを設定したためにエンコーダが構成時に例外をスローする問題を回避しました。
- エクストラクタ:
- オーディオ:
- 複数回呼び出された場合の
SilenceSkippingAudioProcessorの EOS の処理を修正しました(#712)。
- 複数回呼び出された場合の
- 動画:
- Galaxy Tab S7 FE、Chromecast with Google TV、Lenovo M10 FHD Plus で、60fps AVC ストリームがサポート対象外とマークされるデバイスの問題の回避策を追加(#693)。
- メタデータ:
MediaMetadataが大文字のキーを含む Vorbis コメントからのみ入力されるバグを修正しました(#876)。- 非常に大きな ID3 フレームを解析する際に
OutOfMemoryErrorをキャッチします。これにより、再生が完全に失敗するのではなく、タグ情報なしで再生を続行できます。
- DRM:
- 偽の ClearKey
https://default.urlライセンス URL の回避策を API 33 以降に拡張(以前は、回避策は API 33 にのみ適用されていました)(#837)。 - プレーヤーにサーフェスがアタッチされていない状態で、暗号化されたコンテンツからクリア コンテンツに切り替える際の
ERROR_DRM_SESSION_NOT_OPENEDを修正このエラーは、クリア コンテンツの再生にセキュア デコーダを誤って使用したことが原因です。
- 偽の ClearKey
- セッション:
- カスタムキーと値を
MediaMetadataCompatからMediaMetadata.extrasに、MediaMetadata.extrasからMediaMetadataCompatに入れ替えました(#756、#802)。 - レガシー コントローラの
notifyChildrenChangedのブロードキャストを修正しました(#644)。 - 通知の無効な
setWhenタイマーに負の時間を設定すると、一部のデバイスでクラッシュが発生するバグを修正しました(#903)。 - 最初の通知更新がリクエストされたときにメディア通知コントローラが接続を完了していない場合の
IllegalStateExceptionを修正しました(#917)。
- カスタムキーと値を
- UI:
- DASH 拡張機能:
- DASH マニフェストで Dolby のチャンネル数として「f800」を 5 として解析(#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)。- https://issuetracker.google.com/251172715 を修正するため、
androidx.annotation:annotation-experimentalを1.3.1にアップグレードします。 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に名前変更します。- PNG ファイル全体を
TrackOutputに送信して読み取るPngExtractorを 1 つのサンプルとして追加します。 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)。CompositeMediaSource.getMediaTimeForChildMediaTimeにMediaPeriodIdパラメータを追加します。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 内の
MediaSessionService.onStartCommand()で受信したメディアボタン イベントを、プラットフォーム セッションにルーティングして Media3 に戻すのではなく、変換します。これにより、呼び出し元コントローラは常にメディア通知コントローラとなり、アプリはサポートされているすべての API レベルで、通知からの呼び出しを同じ方法で簡単に認識できます。 - レガシー
MediaSessionCompatに接続されているときにMediaController.getCurrentPosition()が進まないバグを修正しました。 - 便宜上、
MediaLibrarySession.getSubscribedControllers(mediaId)を追加します。 MediaLibrarySession.Callback.onSubscribe()をオーバーライドして、コントローラが登録する親 ID の可用性をアサートします。成功すると、定期購入が承認され、ブラウザに通知するためにnotifyChildrenChanged()が直ちに呼び出されます(#561)。- Automotive OS 用のセッション デモ モジュールを追加し、Android Auto 用のセッション デモを有効化
- メディア通知コントローラで
COMMAND_GET_TIMELINEが利用できない場合は、フレームワーク セッションのキューを設定しないでください。Android Auto がフレームワーク セッションから読み取るクライアント コントローラであるため、Android Auto の UI のqueueボタンが表示されなくなります(#339)。 - デフォルトで
SimpleBitmapLoaderではなくDataSourceBitmapLoaderを使用します(#271、#327)。 - アプリがデフォルトのメディアボタン イベント処理をオーバーライドできるようにする
MediaSession.Callback.onMediaButtonEvent(Intent)を追加しました。
- UI:
Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTによる再生抑制を処理する Wear OS デバイス用のPlayer.Listener実装を追加します。この実装では、システム ダイアログを起動して、ユーザーが適切な音声出力(Bluetooth ヘッドフォンなど)を接続できるようにします。リスナーは、構成可能なタイムアウト(デフォルトは 5 分)内に適切なデバイスが接続されると、再生を自動的に再開します。
- ダウンロード:
- Android 14 との互換性のために、
DownloadServiceの「データ同期」フォアグラウンド サービス タイプを宣言します。このサービスを使用する場合、アプリはマニフェストでdataSyncをforegroundServiceTypeとして追加し、FOREGROUND_SERVICE_DATA_SYNC権限(#11239)を追加する必要があります。
- Android 14 との互換性のために、
- HLS 拡張機能:
- HLS ライブ プレイリストを、最後の読み込み完了時間ではなく、最後の読み込み開始時間から計算された間隔で更新します(#663)。
- DASH 拡張機能:
- セグメント テンプレート URL で同じ DASH 識別子を複数許可します。
- 抽出時の字幕解析の試験運用版サポートを追加しました。これにより、字幕セグメント間の切り替え時にちらつきを解消するなど、重複する字幕の統合がより適切にサポートされます。これは
DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction()(#288)を使用して有効にできます。
- RTSP 拡張機能:
- デコーダ拡張機能(FFmpeg、VP9、AV1、MIDI など):
- Jsyn ライブラリを使用してオーディオを合成し、標準 MIDI ファイルの再生をサポートする 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)。PlayerWrapperがVolumeProviderCompatを作成する方法を修正します。レガシー コマンド(COMMAND_ADJUST_DEVICE_VOLUMEとCOMMAND_SET_DEVICE_VOLUME)と新しいコマンド(COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSとCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS)の両方でvolumeControlTypeを決定します(#554)。
- コントローラの状態にカスタム レイアウトを追加し、それにアクセスするためのゲッターを提供します。カスタム レイアウトが変更されると、
バージョン 1.1.0
2023 年 7 月 5 日
- 共通ライブラリ:
- 不適切な音声ルートの抑制理由を追加し、準備ができたら再生します。 抑制時間が長すぎる理由を変更します。(#15)。
- Player にコマンドを追加します。
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- ユーザーが音量フラグを指定できるようにするオーバーロード メソッドを Player に追加します。
void setDeviceVolume(int, int)void increaseDeviceVolume(int)void decreaseDeviceVolume(int)void setDeviceMuted(boolean, int)
DeviceInfoにBuilderを追加し、既存のコンストラクタを非推奨にしました。- リモート再生のルーティング コントローラ ID を指定するために
DeviceInfo.routingControllerIdを追加しました。 - 同じ位置でアイテムを追加および削除するためのショートカットとして
Player.replaceMediaItem(s)を追加しました(#8046)。
- ExoPlayer:
- 明示的にオプトインした場合にのみ、ExoPlayer がデバイスの音量メソッドを制御できるようにします。
ExoPlayer.Builder.setDeviceVolumeControlEnabledを使用すると、次のものにアクセスできます。getDeviceVolume()isDeviceMuted()setDeviceVolume(int)、setDeviceVolume(int, int)increaseDeviceVolume(int)、increaseDeviceVolume(int, int)decreaseDeviceVolume(int)、decreaseDeviceVolume(int, int)
MediaSourceから利用可能なトラックタイプをフィルタできるFilteringMediaSourceを追加- アダプティブ ストリーミング形式の DASH、HLS、SmoothStreaming の送信リクエストに Common Media Client Data(CMCD)を含めるサポートを追加しました。
br、bl、cid、rtp、sidの各フィールドが組み込まれました(#8699)。API の構造と API メソッド:- CMCD ロギングはデフォルトで無効になっています。有効にするには
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)を使用します。 - デフォルトではすべてのキーが有効になっています。ログに記録するキーをフィルタするには、
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)をオーバーライドします。 CmcdConfiguration.RequestConfig.getCustomData()をオーバーライドして、カスタムキーのロギングを有効にします。
- CMCD ロギングはデフォルトで無効になっています。有効にするには
- メインのデモのマニフェストにアクションを追加して、カスタム
*.exolist.jsonファイルでデモアプリを起動しやすくしました(#439)。 - 動画再生中に
Effectを使用するためのExoPlayer.setVideoEffects()を追加。 intではなくlongとしてsourceIdを保存するように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)を削除しています。- 入力フレームの処理が保留されているときに動画ストリームの終了が通知されると、変換が停止し(多重化ツールのタイムアウトにつながる)、変換が停止するバグを修正しました。
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が呼び出されます。この変更により、MediaCodecVideoRendererを使用する ExoPlayer の動画サイズは、Player.getCurrentTracksが動画をサポートしていない場合、またはサポートされている動画トラックのサイズがまだ決定されていない場合、幅と高さが 0 になります。
- レンダラが無効になっている場合、
- DRM:
- DRM パッケージの外部から呼び出されることが想定されていない
DefaultDrmSessionの内部専用メソッドの可視性を低減します。void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- DRM パッケージの外部から呼び出されることが想定されていない
- Muxer:
- MP4 コンテナ ファイルの作成に使用できる新しい muxer ライブラリを追加。
- IMA 拡張機能:
- DAI で複数期間のライブ DASH ストリームを有効にします。現在の実装では、ライブ ストリームでのシークはまだサポートされていません(#10912)。
- 連続するタイムラインで計算されたコンテンツの位置がわずかに異なるため、ライブ ストリームに新しい広告グループが挿入されるバグを修正しました。
- セッション:
- 現在
Playerメソッドを呼び出しているコントローラの情報を取得するヘルパー メソッドMediaSession.getControllerForCurrentRequestを追加します。 androidx.media3.session.MediaButtonReceiverを追加して、アプリが Bluetooth ヘッドセットなどから送信されたメディア ボタン イベントで再生再開を実装できるようにしました(#167)。- リクエストされた
MediaItemsがLocalConfiguration(URI など)を持っている場合、Playerに渡せるように、MediaSession.Callback.onAddMediaItemsにデフォルトの実装を追加(#282)。 - Android 12 以前では、コンパクト メディア通知ビューに「前の位置にシーク」と「次の位置にシーク」のコマンドボタンをデフォルトで追加(#410)。
- リクエストされた
MediaItemsがLocalConfiguration(URI など)を持っている場合、Playerに渡せるように、MediaSession.Callback.onAddMediaItemsにデフォルトの実装を追加(#282)。 - Android 12 以前では、コンパクト メディア通知ビューに「前の位置にシーク」と「次の位置にシーク」のコマンドボタンをデフォルトで追加(#410)。
- 現在
- UI:
- 再生/一時停止ボタン付きのカスタム 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パラメータを指定するオプションを含む非推奨のコンストラクタを使用します。 - 非推奨の Charset の String 定数(
ASCII_NAME、UTF8_NAME、ISO88591_NAME、UTF16_NAME、UTF16LE_NAME)を削除し、代わりにkotlin.textパッケージ、java.nio.charset.StandardCharsets、またはcom.google.common.base.Charsetsの Kotlin Charset を使用します。 - 非推奨の
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を削除し、代わりにDISCONTINUITY_REASON_SEEKとonPositionDiscontinuityを使用します。 ExoPlayer.setHandleWakeLock(boolean)を削除し、代わりにsetWakeMode(int)を使用します。- サポートが終了した
DefaultLoadControl.Builder.createDefaultLoadControl()を削除しました。代わりにbuild()を使用してください。 - サポートが終了した
MediaItem.PlaybackPropertiesを削除しました。代わりにMediaItem.LocalConfigurationを使用してください。非推奨のフィールドMediaItem.playbackPropertiesの型がMediaItem.LocalConfigurationになりました。
バージョン 1.1.0-rc01
2023 年 6 月 21 日
1.1.0 安定版を使用します。
バージョン 1.1.0-beta01
2023 年 6 月 7 日
1.1.0 安定版を使用します。
バージョン 1.1.0-alpha01
2023 年 5 月 10 日
1.1.0 安定版を使用します。
バージョン 1.0.0
バージョン 1.0.2
2023 年 5 月 18 日
androidx.media3:media3-*:1.0.2 がリリースされました。バージョン 1.0.2 に含まれる commit については、こちらをご覧ください。
このリリースは ExoPlayer 2.18.7 リリースに対応しています。
このリリースには、1.0.1 リリース以降の次の変更が含まれています。
- コアライブラリ:
BufferにフラグC.BUFFER_FLAG_LAST_SAMPLEが含まれているかどうかを示すBuffer.isLastSample()を追加します。- フレームを含む最後のサンプルが「ストリームの終了」サンプルを読み取らずにデキューされると、最後のフレームがレンダリングされない可能性がある問題を修正します。(#11079)。
- エクストラクタ:
- RTSP および MP4 エクストラクタですでに使用されている解析ロジックを再利用することで、MPEG-TS ファイル内の H.265 SPS の解析を修正しました(#303)。
- テキスト:
- SSA: バイトオーダー マークで始まる UTF-16 ファイルのサポートを追加しました(#319)。
- セッション:
- アクションを更新する以前の
MediaSessionCompatに接続されている場合、MediaControllerが利用可能なコマンドを更新しない問題を修正しました。 - API 30 で、
params.isRecent == trueを使用して System UI からCallback.onGetLibraryRootへの呼び出しでMediaLibraryServiceが null を返さないバグを修正しました(#355)。 MediaSessionServiceまたはMediaLibraryServiceのメモリリークを修正しました(#346)。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を呼び出しても使用可能なコマンドが更新されないバグを修正しました。Format.metadataを含むグループを参照している場合、MediaControllerから送信されたTrackSelectionOverrideインスタンスが無視される問題を修正しました(#296)。- 以前の
MediaSessionCompatを介してメタデータにアクセスするには、Player.COMMAND_GET_CURRENT_MEDIA_ITEMを使用可能にする必要がある問題を修正しました。 - バックグラウンド スレッドの
MediaSessionインスタンスがMediaSessionServiceで使用されるとクラッシュする問題を修正しました(#318)。 - アプリが意図していないにもかかわらず、ライブラリによってメディア ボタン レシーバが宣言される問題を修正しました(#314)。
- 以前の
- DASH:
- 空のセグメント タイムラインの処理を修正しました(#11014)。
- RTSP:
- UDP での RTSP セットアップが RTSP エラー 461 UnsupportedTransport で失敗した場合、TCP で再試行します(#11069)。
バージョン 1.0.0
2023 年 3 月 22 日
androidx.media3:media3-*:1.0.0 がリリースされました。バージョン 1.0.0 に含まれる commit については、こちらをご覧ください。
このリリースは ExoPlayer 2.18.5 リリースに対応しています。
1.0.0-rc02 からの変更はありません。
バージョン 1.0.0-rc02
2023 年 3 月 2 日
androidx.media3:media3-*:1.0.0-rc02 がリリースされました。バージョン 1.0.0-rc02 に含まれる commit については、こちらをご覧ください。
このリリースは ExoPlayer 2.18.4 リリースに対応しています。
- コアライブラリ:
- ダウンロード:
- マージする 2 つのセグメントの開始時刻の最大差を
SegmentDownloaderとサブクラス(#248)で構成可能にします。
- マージする 2 つのセグメントの開始時刻の最大差を
- オーディオ:
- 動画:
- HEVC HDR10 形式を
HEVCProfileMain10ではなくHEVCProfileMain10HDR10にマッピングします。 - Chromecast with Google TV と Lenovo M10 FHD Plus で、60fps の AVC ストリームがサポート対象外とマークされるデバイスの問題の回避策を追加(#10898)。
- 画面のリフレッシュ レートよりもはるかに高いフレームレートでメディアを再生する際のフレーム リリース パフォーマンスの問題を修正しました。
- HEVC HDR10 形式を
- Cast:
- メディア アイテム間の切り替え時に
STATE_IDLEが一時的に発生する問題を修正(#245)。
- メディア アイテム間の切り替え時に
- RTSP:
- 無効な RTSP Describe レスポンス メッセージの解析でスローされる IllegalArgumentException をキャッチしました(#10971)。
- セッション:
- 通知の再生/一時停止ボタンがプレーヤーの状態に合わせて更新されないバグを修正しました(#192)。
- IMA 拡張機能:
- 広告のない DAI ストリームが開始されないバグを修正しました。これは、最初の(広告のない場合は唯一の)
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 プロパティの変更を監視し、これに応じて新しいトラック選択をトリガーします。televisionUI モードのデバイスは、これらの制約から除外され、チャンネル数が最も多い形式が優先されます。この機能を有効にするには、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を明示的に渡すことが必須になるように、AudioCapabilitiesAPI を変更しました。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 モジュールに置き換えられています。これにより、アダプターやコネクタのクラスを使用する必要なく、プレーヤーとメディア セッションを直接統合できます。