Media3
最新の更新 | 安定版リリース | リリース候補版 | ベータ版リリース | アルファ版リリース |
---|---|---|---|---|
2023 年 2 月 16 日 | - | 1.0.0-rc01 | - | - |
依存関係の宣言
Media3 への依存関係を追加するには、Google の Maven リポジトリをプロジェクトに追加する必要があります。詳しくは、Google の Maven リポジトリをご覧ください。
アプリまたはモジュールの build.gradle
ファイルに、必要なアーティファクトの依存関係を追加します。
Groovy
dependencies { def media3_version = "1.0.0-rc01" // 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 RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // 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 media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" }
Kotlin
dependencies { val media3_version = "1.0.0-rc01" // 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 RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // 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 media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") }
依存関係について詳しくは、ビルド依存関係の追加をご覧ください。
フィードバック
お寄せいただいたフィードバックは Jetpack 改善の参考にさせていただきます。Media3 Issue Tracker を使用すると、質問への回答、既知の問題、機能リクエストを見つけたり、新しい問題を報告したりできます。
バージョン 1.0.0
バージョン 1.0.0-rc01
2023 年 2 月 16 日
androidx.media3:media3-*:1.0.0-rc01
がリリースされました。バージョン 1.0.0-rc01 に含まれる commit については、こちらをご覧ください。
このリリースは ExoPlayer 2.18.3 リリースに対応しています。
- コアライブラリ:
- メディアの再生パフォーマンスが低い可能性があるとデコーダが報告する場合でも、レンダラのデコーダの順序付けロジックを調整して
MediaCodecSelector
の設定を維持します。たとえば、デフォルトのセレクタは、その形式を完全にサポートするソフトウェア デコーダよりも、機能サポートのみ組み込まれたハードウェア デコーダを優先します(#10604)。 - 新しい ExoPlayer インスタンス用に既存の再生スレッドを設定する
ExoPlayer.Builder.setPlaybackLooper
を追加しました。 - ダウンロード マネージャー ヘルパーを消去できるようにしました(#10776)。
- シークに使用するコマンドも指定するパラメータを
BasePlayer.seekTo
に追加しました。 - API 21 以上でドローアブルを読み込む際、テーマを使用します(#220)。
- 複数のメディア アイテムを 1 つのウィンドウに結合できる
ConcatenatingMediaSource2
を追加しました(#247)。
- メディアの再生パフォーマンスが低い可能性があるとデコーダが報告する場合でも、レンダラのデコーダの順序付けロジックを調整して
- エクストラクタ:
- トラックアトムの解析時にサンプル テーブル(stbl)に必要なサンプルの説明(stsd)が欠落している場合は、
NullPointerException
ではなくParserException
をスローします。 - fMP4 で同期フレームを直接シークする際、サンプルを正しくスキップします(#10941)。
- トラックアトムの解析時にサンプル テーブル(stbl)に必要なサンプルの説明(stsd)が欠落している場合は、
- オーディオ:
- 直接再生(パススルー)における
AudioTrack
の最小バッファサイズを計算する際、圧縮音声形式のビットレートを使用します。
- 直接再生(パススルー)における
- テキスト:
- 字幕ファイルにキューが含まれていない場合に無効な(負の)インデックスを
Subtitle.getEventTime
に渡すTextRenderer
を修正しました。 - SubRip: バイトオーダー マークで始まる UTF-16 ファイルのサポートを追加しました。
- 字幕ファイルにキューが含まれていない場合に無効な(負の)インデックスを
- メタデータ:
- ID3 v2.4 で許されているように、ID3 フレームから複数の null 区切り値を解析します。
- コンテンツのタイプまたはメタデータで記述されたフォルダのタイプを示す
MediaMetadata.mediaType
を追加しました。 MediaMetadata.isBrowsable
を追加してMediaMetadata.folderType
の代わりとしました。このフォルダタイプは次のリリースで非推奨になります。
- DASH:
- タイル数など、画像適合セットに対する完全な解析を追加しました(#3752)。
- UI:
- セッション:
- カスタム プレーヤーの
Player
インターフェースの実装用に、抽象クラスSimpleBasePlayer
を追加しました。 - プラットフォーム セッション トークンを Media3
SessionToken
に変換するヘルパー メソッドを追加しました(#171)。 onMediaMetadataChanged
を使用して、プラットフォーム メディア セッションの更新をトリガーします(#219)。DefaultMediaNotificationProvider
のgetMediaButtons()
の引数としてメディア セッションを追加し、わかりやすくするために不変リストを使用するようにします(#216)。onSetMediaItems
コールバック リスナーを追加して、Player に設定する前に、セッションごとにMediaItem
リスト、開始インデックス、位置を変更、設定する手段を提供しました(#156)。- Bluetooth 以外のメディアボタン イベントに対するダブルタップの検出を回避しました(#233)。
- 不正なレガシー セッション状態に備えて、
QueueTimeline
の堅牢性を高めました(#241)。
- カスタム プレーヤーの
- メタデータ:
- ID3 v2.4 で許されているように、ID3 フレームから複数の null 区切り値を解析します。
- コンテンツのタイプまたはメタデータで記述されたフォルダのタイプを示す
MediaMetadata.mediaType
を追加しました。 MediaMetadata.isBrowsable
を追加してMediaMetadata.folderType
の代わりとしました。このフォルダタイプは次のリリースで非推奨になります。
- Cast 拡張機能:
- Cast SDK のバージョンを 21.2.0 に引き上げました。
- IMA 拡張機能:
- スレッドに関する問題を回避するために、アプリスレッド上の
ImaServerSideAdInsertionMediaSource
のプレーヤー リスナーを削除しました。 - プロパティ
focusSkipButtonWhenAvailable
をImaServerSideAdInsertionMediaSource.AdsLoader.Builder
に追加して、TV デバイスでスキップボタンのフォーカスをリクエストし、デフォルトで true に設定するようにしました。 focusSkipButton()
メソッドをImaServerSideAdInsertionMediaSource.AdsLoader
に追加して、スキップボタンのフォーカスをプログラムでリクエストできるようにしました。- IMA SDK のバージョンを 3.29.0 に引き上げました。
- スレッドに関する問題を回避するために、アプリスレッド上の
- デモアプリ:
- ランタイムのダウンロード通知用に、通知権限をリクエストします(#10884)。
バージョン 1.0.0-beta03
2022 年 11 月 22 日
androidx.media3:media3-*:1.0.0-beta03
がリリースされました。バージョン 1.0.0-beta03 に含まれる commit については、こちらをご覧ください。
このリリースは ExoPlayer 2.18.2 リリースに対応しています。
- コアライブラリ:
- 現在選択されているトラックでトンネリングが有効になっているかどうかを確認する
ExoPlayer.isTunnelingEnabled
を追加しました(#2518)。 - 単一の
MediaSource
のラップを簡素化するためのWrappingMediaSource
を追加しました(#7279)。 - 使用可能なメモリの不足が原因で再生が止まる前にバックバッファを破棄します。
- オフロードが有効な場合に「doSomeWork」ブロックのトレースを閉じます。
PlaybackStatsListener
での高速シークに関するセッション トラッキングの問題を修正しました(#180)。- 単一のアイテムのプレイリストで
seekToNext
またはseekToPrevious
を呼び出す場合、欠落していたonMediaItemTransition
コールバックを送信します(#10667)。 - 動画がレンダリングされるサーフェスのサイズを返す
Player.getSurfaceSize
を追加しました。 - プレーヤーの解放中にリスナーを削除すると
IllegalStateException
が発生する可能性があるバグを修正しました(#10758)。
- 現在選択されているトラックでトンネリングが有効になっているかどうかを確認する
- ビルド:
- コンパイル エラーを回避するため、最小
compileSdkVersion
を適用しました(#10684)。 - 別の Gradle ビルドに含まれている場合はブロックを公開しません。
- コンパイル エラーを回避するため、最小
- トラック選択:
- ディスプレイがドルビー ビジョンをサポートしていない場合は、他のトラックを優先します(#8944)。
- ダウンロード:
- 動画:
- ディスプレイがドルビー ビジョンをサポートしていない場合は、別のデコーダを試します(#9794)。
- オーディオ:
- 複数のプレーヤーを同時に解放するときに OutOfMemory エラーを回避するため、
AudioTrack
インスタンスを解放するのにSingleThreadExecutor
を使用します(#10057)。 - AudioTrack のオフロード状態の
AudioOffloadListener.onExperimentalOffloadedPlayback
を追加しました(#134)。 AudioTrackBufferSizeProvider
を公開インターフェースにしました。- 優先するオーディオ出力デバイスを設定するために
ExoPlayer.setPreferredAudioDevice
を追加しました(#135)。 androidx.media3.exoplayer.audio.AudioProcessor
からandroidx.media3.common.audio.AudioProcessor
に名前を変更しました。- すべての Android バージョンで、8 チャンネルと 12 チャンネルのオーディオをそれぞれ 7.1 と 7.1.4 のチャンネル マスクにマッピングしました(#10701)。
- 複数のプレーヤーを同時に解放するときに OutOfMemory エラーを回避するため、
- メタデータ:
- メタデータが利用可能になり次第すぐにレンダリングするように
MetadataRenderer
を設定できるようになりました。MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
でインスタンスを作成して、レンダラがメタデータをすぐに出力するか、プレーヤーの位置と同期して出力するかを指定します。
- メタデータが利用可能になり次第すぐにレンダリングするように
- DRM:
- 空ではないが無効なライセンスの URL を返す、Android 13 の ClearKey 実装のバグを回避します。
- プレイリストで DRM スキームを切り替えるときの
setMediaDrmSession failed: session not opened
エラー(例: Widevine から ClearKey)を修正しました。
- テキスト:
- CEA-608: フィールド 2 でサービスの切り替えコマンドが正しく処理されるようにしました(#10666)。
- DASH:
- マニフェストから
EventStream.presentationTimeOffset
を解析しました(#10460)。
- マニフェストから
- UI:
- プレーヤーの現在のオーバーライドを
TrackSelectionDialogBuilder
のプリセットとして使用しました(#10429)。
- プレーヤーの現在のオーバーライドを
- セッション:
- 非同期解決が必要なコマンドであっても、常に正しい順序で実行されるようにしました(#85)。
DefaultMediaNotificationProvider
インスタンスを作成するためのDefaultMediaNotificationProvider.Builder
を追加しましたビルダーは、プロバイダが使用する通知 ID、通知チャンネル ID、通知チャンネル名を設定できます。また、メソッドDefaultMediaNotificationProvider.setSmallIcon(int)
を追加して、通知の小さなアイコンを設定できます(#104)。MediaController.release()
より前に送信されたコマンドがドロップされないようにしました(#99)。SimpleBitmapLoader
は、file://
URI からビットマップを読み込めます(#108)。- ある期間に
MediaController
が広告をシークできないようにするアサーションを修正しました(#122)。 - 再生が終了すると
MediaSessionService
がフォアグラウンドから停止され、最後に再生されたメディア アイテムを再生するための通知が表示されます(#112)。 - 一時停止のペンディング インテントではフォアグラウンド サービスは開始されません(#167)。
- API 26 と API 27 で
DefaultNotificationProvider
が作成した、通知に関連付けられた「バッジ」は手動で非表示にします(API 28 以降ではバッジは自動的に非表示になります)(131)。 - 従来の MediaSession から Media3 MediaController への 2 番目のバインダーの接続で IllegalStateExceptions が発生するバグを修正しました(#49)。
- RTSP:
- IMA:
- FFmpeg 拡張機能:
- FFmpeg ライブラリを NDK 23.1.7779620 以降にリンクするのに必要な新たなフラグを追加しました(#9933)。
- AV1 拡張機能:
- 最新の Android Studio リリースとの非互換性の問題を避けるために CMake バージョンを更新しました(#9933)。
- Cast 拡張機能:
MediaController
を使用して再生を制御するときにCastPlayer
を識別できるようにgetDeviceInfo()
を実装しました(#142)。
- Transformer:
- 出力サンプルの生成が遅すぎる場合に検出できるよう、マルチプレクサのウォッチドッグ タイマーを追加しました。
- サポートが終了したシンボルを削除しました。
Transformer.Builder.setOutputMimeType(String)
を削除しました。この機能は削除されました。デフォルトのマルチプレクサが使用されている場合、MIME タイプは常に MP4 になります。
バージョン 1.0.0-beta02
2022 年 7 月 21 日
androidx.media3:media3-*:1.0.0-beta02
がリリースされました。バージョン 1.0.0-beta02 に含まれる commit については、こちらをご覧ください。
このリリースは ExoPlayer 2.18.1 リリースに対応しています。
- コアライブラリ:
ExoPlayer.setShuffleOrder
でShuffleOrder
を変更すると、reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED
でPlayer.Listener#onTimelineChanged
が呼び出されるようにしました(#9889)。- プログレッシブ メディアの場合、選択したトラックのみがバッファリングされた位置に含まれるようになりました(#10361)。
- すべての ExoPlayer ログ出力に対してカスタムの logger を許可しました(#9752)。
- 特定のケースで機能していなかった、
DefaultMediaSourceFactory
のsetDataSourceFactory
の実装を修正しました(#116)。
- エクストラクタ:
- DASH:
- マニフェストからの ClearKey ライセンス URL を解析しました(#10246)。
- UI:
- TalkBack が再生コントロール メニューの現在アクティブな速度オプションを通知するようにしました(#10298)。
- RTSP:
- VP8 の断片化されたパケットの処理を追加しました(#110)。
- Leanback 拡張機能:
LeanbackAdapter
のplayWhenReady
の変更をリッスンするようになりました(10420)。
- Cast:
バージョン 1.0.0-beta01
2022 年 6 月 16 日
androidx.media3:media3-*:1.0.0-beta01
がリリースされました。バージョン 1.0.0-beta01 に含まれる commit については、こちらをご覧ください。
これは ExoPlayer 2.18.0 リリースに対応しています。
- コアライブラリ:
MediaMetricsManager
による Android プラットフォーム診断のサポートを有効にしました。ExoPlayer では再生イベントとパフォーマンス データがプラットフォームに転送されるため、デバイスのシステム パフォーマンスとデバッグ情報の提供に役立てることができます。このデータは、デバイスのユーザーが使用状況と診断情報の共有を有効にしている場合に、Google によって収集されることもあります。アプリは、ExoPlayer.Builder.setUsePlatformDiagnostics(false)
で ExoPlayer のプラットフォーム診断への貢献を無効にできます。- 字幕をサイドローディングしたり、再生中に選択した字幕を変更したりする場合など、
MergingMediaSource
の使用時にトラックが頻繁にリセットされるバグを修正しました(#10248)。 - API 29 と 30 で 5G-NSA ネットワーク タイプの検出を停止しました。これらの再生は 4G ネットワークを前提としています。
null
をMediaSource.Factory.setDrmSessionManagerProvider
、MediaSource.Factory.setLoadErrorHandlingPolicy
に渡すことを禁止しました。DefaultDrmSessionManagerProvider
とDefaultLoadErrorHandlingPolicy
のインスタンスは、必要に応じて明示的に渡すことができます。- 正確な
LocalConfiguration
が不明の場合に、メディアの再生に必要なメタデータを表すMediaItem.RequestMetadata
を追加しました。また、MediaMetadata.mediaUrl
はRequestMetadata
に含まれるようになったため削除しました。 - プレーヤーが 1 つの項目を設定できるように
Player.Command.COMMAND_SET_MEDIA_ITEM
を追加しました。
- トラック選択:
TrackSelectionOverrides
クラスをTrackSelectionParameters
にフラット化し、TrackSelectionOverride
をトップレベル クラスに昇格しました。TracksInfo
の名前をTracks
に、TracksInfo.TrackGroupInfo
の名前をTracks.Group
に変更しました。Player.getCurrentTracksInfo
とPlayer.Listener.onTracksInfoChanged
の名前もPlayer.getCurrentTracks
とPlayer.Listener.onTracksChanged
に変更されました。これには、Player.Listener.onTracksChanged
メソッド名の「サポート終了解除」も含まれますが、パラメータのタイプが異なります。- サポートが終了した
DefaultTrackSelector.ParametersBuilder
ではなくDefaultTrackSelector.Parameters.Builder
を返すように、DefaultTrackSelector.buildUponParameters
とDefaultTrackSelector.Parameters.buildUpon
を変更しました。 - デフォルトで有効化される
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities
を追加しました。有効にすると、DefaultTrackSelector
は、チャンネル数がデバイスの出力機能を超えないオーディオ トラックを優先します。ハンドヘルド デバイスでは、マルチチャンネル フォーマットを空間化できる(Android 12L 以降)場合か、ドルビー サラウンド音声形式である場合を除き、DefaultTrackSelector
はマルチチャンネル オーディオ フォーマットよりもステレオ / モノラルを優先します。さらに、オーディオ空間化をサポートしているデバイスでは、DefaultTrackSelector
が Spatializer プロパティの変更を監視し、これに応じて新しいトラック選択をトリガーします。television
UI モードのデバイスは、これらの制約から除外され、チャンネル数が最も多い形式が優先されます。この機能を有効にするには、DefaultTrackSelector
インスタンスをContext
で作成する必要があります。
- 動画:
DummySurface
からPlaceholderSurface
に名前を変更しました。MediaCodecVideoRenderer.getCodecMaxInputSize
に AV1 サポートを追加しました。
- オーディオ:
- 非標準の MIME タイプをアドバタイズする LG AC3 オーディオ デコーダーを使用しました。
- API 21 未満の ART 検証の遅延を防ぐため、
AudioAttributes.getAudioAttributesV21()
の戻り値の型をandroid.media.AudioAttributes
から新しいAudioAttributesV21
ラッパークラスに変更しました。 - プラットフォーム(API 29 以上)にクエリするか、フォーマット オーディオ チャンネル数が設定されていない場合に、オーディオ パススルーの音声エンコード チャンネル数を想定しました。これは、HLS チャンクレス準備で発生します(10204)。
- デコーダが 12 チャンネルの PCM オーディオを出力する場合に、
AudioTrack
にチャンネル マスクAudioFormat.CHANNEL_OUT_7POINT1POINT4
を設定しました(#10322)。
- DRM
- 形式変更の直後にシークする場合に、常に DRM セッションが正しく更新されるようにしました(10274)。
- テキスト:
List<Cue>
ではなくCueGroup
を返すようにPlayer.getCurrentCues()
を変更しました。- SSA:
BorderStyle == 3
(OutlineColour
がキューの背景を設定する)の場合のOutlineColour
スタイル設定がサポートされるようになりました(#8435)。 - CEA-708: データを複数のサービス ブロックに解析し、現在選択されているサービス番号に関連付けられないブロックを無視しました。
- Google 内部の字幕形式の処理にのみ使用されていた
RawCcExtractor
を削除しました。
- エクストラクタ:
- UI:
useController=false
の場合に、PlayerView
に設定されたOnClickListener
へのイベントの配信を修正しました(#9605)。また、すべてのビュー構成でイベントのOnLongClickListener
への配信を修正しました。ACTION_UP
の前のPlayerView
の境界を越えるタッチイベント シーケンスをクリックとして誤って扱う問題を修正しました(#9861)。- タップ操作でコントロールが非表示にならずに、再生が切り替えられる
PlayerView
のアクセシビリティの問題を修正しました(#8627)。 ExoPlayer
ではなくPlayer
インターフェースと連携するようにTrackSelectionView
とTrackSelectionDialogBuilder
を書き換えました。これにより、ビューを他のPlayer
実装で使用できるようになり、UI モジュールから ExoPlayer モジュールへの依存関係が削除されます。これは互換性を破る変更です。PlayerView
トラック セレクタに強制テキスト トラックを表示せずに、「なし」が選択されている場合は、適切な強制テキスト トラックが選択されるようにしました(#9432)。
- DASH:
- DTS
AudioChannelConfiguration
要素からチャンネル数を解析しました。これにより、DTS ストリームの音声パススルーが再度有効になります(#10159)。 null
をDashMediaSource.Factory.setCompositeSequenceableLoaderFactory
に渡すことを禁止しました。DefaultCompositeSequenceableLoaderFactory
のインスタンスは、必要に応じて明示的に渡すことができます。
- DTS
- HLS:
- プレイリストの CODECS 属性にオーディオ コーデックが含まれていない場合、チャンクフルの準備にフォールバックしました(#10065)。
null
をHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
、HlsMediaSource.Factory.setPlaylistParserFactory
、HlsMediaSource.Factory.setPlaylistTrackerFactory
に渡すことを禁止しました。DefaultCompositeSequenceableLoaderFactory
やDefaultHlsPlaylistParserFactory
のインスタンス、またはDefaultHlsPlaylistTracker.FACTORY
への参照は、必要に応じて明示的に渡すことができます。
- スムーズなストリーミング:
null
をSsMediaSource.Factory.setCompositeSequenceableLoaderFactory
に渡すことを禁止しました。DefaultCompositeSequenceableLoaderFactory
のインスタンスは、必要に応じて明示的に渡すことができます。
- RTSP:
- H263 用の RTP リーダーを追加しました(#63)。
- MPEG4 用の RTP リーダーを追加しました(#35)。
- HEVC 用の RTP リーダーを追加しました(#36)。
- AMR 用の RTP リーダーを追加しました。現在、モノチャンネルの非インターリーブ AMR ストリームのみがサポートされます。複合 AMR RTP ペイロードはサポートされません(#46)。
- VP8 用の RTP リーダーを追加しました(#47)。
- WAV 用の RTP リーダーを追加しました(#56)。
- RTSP 基本認証ヘッダーを修正しました(#9544)。
- 必須の SDP フィールドの確認は、ExoPlayer では不要なため停止しました(#10049)。
- RTSP タイミングを解析するときにチェック済み例外をスローしました(#10165)。
- VP9 用の RTP リーダーを追加しました(#47)。
- OPUS 用の RTP リーダーを追加しました(#53)。
- データソース:
DummyDataSource
からPlaceholderDataSource
に名前を変更しました。- OkHttp 割り込み処理の回避策
- セッション:
- リクエストを非同期で解決できるように
MediaSession.MediaItemFiller
をMediaSession.Callback.onAddMediaItems
に置き換えました。 MediaController
が従来のメディア セッションに接続する場合のsetMediaItems(s)
メソッドをサポートしました。MediaController.setMediaUri
とMediaSession.Callback.onSetMediaUri
を削除しました。MediaController.setMediaItem
とMediaSession.Callback.onAddMediaItems
を使用して同じ機能を実現できます。- メディアを再生するための従来の
MediaController
呼び出しをonSetMediaUri
ではなくMediaSession.Callback.onAddMediaItems
に転送しました。 - 通知のカスタマイズを行うための
MediaNotification.Provider
とDefaultMediaNotificationProvider
を追加しました。 - アートワークの画像をダウンロードするための
BitmapLoader
とSimpleBitmapLoader
を追加しました。 - 以前のセッションとの下位互換性を維持するための
MediaSession.setCustomLayout()
を追加しました。 - 以前のセッションと同等の機能を提供するための
MediaSession.setSessionExtras()
を追加しました。 MediaSession.MediaSessionCallback
の名前をMediaSession.Callback
に、MediaLibrarySession.MediaLibrarySessionCallback
の名前をMediaLibrarySession.Callback
に、MediaSession.Builder.setSessionCallback
の名前をsetCallback
に変更しました。MediaControllerImplLegacy
の NPE を修正しました(#59)。- タイムラインの変更に関するセッション位置情報を更新しました(#51)。
- コントローラをリリースした後の
MediaControllerImplBase
の NPE を修正しました(#74)。
- リクエストを非同期で解決できるように
- 広告の再生 / IMA:
- Media Rating Council(MRC)の推奨事項に合わせて、広告ポーリング レートを 100 ミリ秒ごとから 200 ミリ秒ごとに引き下げました。
- FFmpeg 拡張機能:
- CMake バージョンを
3.21.0+
に更新し、CMake のバグにより AndroidStudio の Gradle 同期が失敗するのを回避しました(#9933)。
- CMake バージョンを
- サポートが終了したシンボルを削除しました。
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
を削除しました。代わりにPlayer.Listener.onTracksChanged(Tracks)
を使用してください。Player.getCurrentTrackGroups
とPlayer.getCurrentTrackSelections
を削除しました。代わりにPlayer.getCurrentTracks
を使用してください。ExoPlayer.getCurrentTrackGroups
とExoPlayer.getCurrentTrackSelections
を引き続き使用することもできますが、これらのメソッドは非推奨のままです。DownloadHelper
、DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
、DEFAULT_TRACK_SELECTOR_PARAMETERS
の定数を削除しました。可能であればgetDefaultTrackSelectorParameters(Context)
を使用し、それ以外の場合はDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
を使用します。- コンストラクタ
DefaultTrackSelector(ExoTrackSelection.Factory)
を削除しました。代わりにDefaultTrackSelector(Context, ExoTrackSelection.Factory)
を使用してください。 Transformer.Builder.setContext
を削除しました。代わりに、Context
をTransformer.Builder
コンストラクタに渡す必要があります。
バージョン 1.0.0-alpha03
2022 年 3 月 14 日
androidx.media3:media3-*:1.0.0-alpha03
がリリースされました。バージョン 1.0.0-alpha03 に含まれる commit については、こちらをご覧ください。
これは ExoPlayer 2.17.1 リリースに対応しています。
- オーディオ:
- HLS でのドルビー アトモス(E-AC3-JOC)の音声機能に関するエラーを修正しました。
- エクストラクタ:
- FMP4: v0 と v1 の両方の emsg アトムスを含むストリームに対して、emsg サンプル メタデータが誤った順序で出力される問題を修正しました(#9996)。
- テキスト:
SubtitleConfiguration
フィールドの優先順位を設定し、Factory
値が設定されていない場合はその値に戻すために、SingleSampleMediaSource.Factory.setTrackId
とMediaItem.SubtitleConfiguration.Builder.setId
のインタラクションを修正しました(#10016)。
- 広告再生:
- ライブ HLS SSAI ストリームの広告期間における音声アンダーランを修正しました。
バージョン 1.0.0-alpha02
2022 年 3 月 2 日
androidx.media3:media3-*:1.0.0-alpha02
がリリースされました。バージョン 1.0.0-alpha02 に含まれる commit については、こちらをご覧ください。
これは ExoPlayer 2.17.0 リリースに対応しています。
- コアライブラリ:
- 保護されたメソッド
DefaultRenderersFactory.getCodecAdapterFactory()
を追加し、buildVideoRenderers()
またはbuildAudioRenderers()
をオーバーライドするDefaultRenderersFactory
のサブクラスが、コーデック アダプター ファクトリにアクセスしてMediaCodecRenderer
インスタンスに渡せるようにしました。 - ICY ヘッダー フィールド
name
とgenre
をそれぞれMediaMetadata.station
とMediaMetadata.genre
に反映し、Player.Listener.onMediaMetadataChanged()
を介してアプリに到達できるようにしました(#9677)。 DefaultHttpDataSource#getResponseHeaders
から null のキーを削除しました。MediaCodec
インスタンスの作成に失敗した場合、スリープと再試行を行います。これにより、サーフェスを安全なコーデックから別のコーデックに切り替えたときに一部のデバイスで発生する問題を回避できます(#8696)。MediaCodecAdapter.getMetrics()
を追加して、ユーザーがMediaCodec
から指標データを取得できるようにしました(#9766)。- Maven の依存関係の解決を修正しました(#8353)。
- 低レイテンシ機能がないライブ ストリームや、速度設定のユーザー リクエストがないライブ ストリームについて、自動速度調整を無効にしました(#9329)。
DecoderCounters#inputBufferCount
からqueuedInputBufferCount
に名前を変更しました。SimpleExoPlayer.renderers
を非公開にしました。レンダラにはExoPlayer.getRenderer
を介してアクセスできます。Player.EventFlags
の値と一致するように、一部のAnalyticsListener.EventFlags
定数値を更新しました。AnalyticsCollector
をインターフェースとデフォルトの実装に分割し、アプリで必要ない場合は R8 によって削除されるようにしました。
- 保護されたメソッド
- トラック選択:
- トラック選択での優先動画ロールフラグをサポートしました(#9402)。
- 複数の動画トラックを選択する際に優先する MIME タイプとロールフラグが考慮されるように、動画トラック選択ロジックを更新しました(#9519)。
- デコーダとハードウェアのサポートレベルが同じである自動選択形式のみを選択するように、動画と音声のトラック選択ロジックを更新しました(#9565)。
- プライマリのハードウェア アクセラレーテッド デコーダで複数のコーデックがサポートされている場合は、より効率的なコーデックを優先するように、動画トラック選択ロジックを更新しました(#4835)。
- 技術的なトラック選択の制約(優先 MIME タイプ、最大チャンネル数など)よりも、音声コンテンツの設定(「デフォルト」の音声トラック、システム ロケール言語に一致するトラックなど)を優先します。
- あるトラック グループをオーバーライドしても同じタイプの他のトラック グループが無効にならないという、トラック選択の問題を修正しました(#9675)。
- 空でないトラックと空のトラックのオーバーライドが混在していると正しく適用されないという、トラック選択の問題を修正しました(#9649)。
TrackGroupArray
内のTrackGroup
の重複を禁止しました。TrackGroup
コンストラクタでid
を設定することで、TrackGroup
が常に区別できるようになります。これにより、アクティブなトラックのオーバーライドでアプリをバックグラウンド化した後に再生を再開するとクラッシュする問題が修正されます(#9718)。- 再生がライブエッジに非常に近い場合でも、十分なネットワーク帯域幅があれば品質を向上させられるように、
AdaptiveTrackSelection
のロジックを修正しました(#9784)。
- 動画:
- 必要に応じて互換性のある H264/H265 デコーダを使用するように、ドルビー ビジョンのデコーダ フォールバック ロジックを修正しました。
- オーディオ:
- 必要に応じて互換性のある E-AC3 デコーダを使用するように、ドルビー アトモス(E-AC3-JOC)のデコーダ フォールバック ロジックを修正しました。
null
ではなくAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
を明示的に渡すことが必須になるように、AudioCapabilities
API を変更しました。AudioTrackBufferSizeProvider
をDefaultAudioSink
に挿入することで、AudioTrack
バッファサイズの計算をカスタマイズできるようにしました(#8891)。- リクエストされたバッファサイズが 1 MB を超える場合は、
AudioTrack
の作成を再試行します(#9712)。
- エクストラクタ:
- テキスト:
- DRM:
DrmSessionManager.(pre)acquireSession
からplaybackLooper
を削除しました。カスタムのMediaSource
でアプリがDrmSessionManager
を使用している場合は、代わりにplaybackLooper
をDrmSessionManager.setPlayer
に渡す必要があります。
- 広告の再生 / IMA:
- IMA ダイナミック広告挿入(DAI)のサポートを追加しました(#8213)。
- 広告グループをリセットしてもう一度再生できるように、
AdPlaybackState
にメソッドを追加しました(#9615)。 - 広告の再生時、再生速度 1.0 を強制適用します(#9018)。
- 広告グループの読み込みに失敗するとすぐに再生がリセットされる問題を修正しました(#9929)。
- UI:
- DASH:
- HLS:
- RTSP:
- Transformer:
- 必要な最小 API バージョンを 21 に増やしました。
TransformationException
は、変換中に発生するエラーの記述に使用されるようになりました。- 変換オプションを指定するための
TransformationRequest
を追加しました。 - 複数のリスナーを登録できるようになりました。
- コーデック出力が部分的に読み取られたときに Transformer が停止する問題を修正しました。
- muxer スローを解放するときに
Transformer.getProgress
で発生する可能性がある NPE を修正しました。 - 変換を適用するためのデモアプリを追加しました。
- MediaSession 拡張機能:
- デフォルトで、停止時に
MediaSessionConnector
がプレイリストを消去するようになりました。プレイリストを保持する必要があるアプリは、コネクタでsetClearMediaItemsOnStop(false)
を呼び出すことができます。
- デフォルトで、停止時に
- Cast 拡張機能:
- FFmpeg 拡張機能:
build_ffmpeg.sh
が GNU ではなく LLVM の bin utils に依存するようになりました(#9933)。
- Android 12 の互換性:
com.google.android.gms:play-services-cast-framework:20.1.0
に依存するように Cast 拡張機能をアップグレードしました。以前のバージョンのplay-services-cast-framework
は Android 12 をターゲットとするアプリに対応しておらず、PendingIntent
の作成時にIllegalArgumentException
でクラッシュします(#9528)。
- サポートが終了したシンボルを削除しました。
Player.EventListener
を削除しました。代わりにPlayer.Listener
を使用してください。MediaSourceFactory#setDrmSessionManager
、MediaSourceFactory#setDrmHttpDataSourceFactory
、MediaSourceFactory#setDrmUserAgent
を削除しました。代わりにMediaSourceFactory#setDrmSessionManagerProvider
を使用してください。MediaSourceFactory#setStreamKeys
を削除しました。代わりにMediaItem.Builder#setStreamKeys
を使用してください。MediaSourceFactory#createMediaSource(Uri)
を削除しました。代わりにMediaSourceFactory#createMediaSource(MediaItem)
を使用してください。DashMediaSource
、HlsMediaSource
、SsMediaSource
からsetTag
を削除しました。代わりにMediaItem.Builder#setTag
を使用してください。DashMediaSource#setLivePresentationDelayMs(long, boolean)
を削除しました。MediaItem.Builder#setLiveConfiguration
とMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
を使用してマニフェストをオーバーライドするか、DashMediaSource#setFallbackTargetLiveOffsetMs
を使用してフォールバック値を提供してください。(Simple)ExoPlayer.setThrowsWhenUsingWrongThread
を削除しました。スレッドの強制適用をオプトアウトすることはできなくなりました。ActionFile
とActionFileUpgradeUtil
を削除しました。ExoPlayer 2.16.1 以前でActionFileUpgradeUtil
を使用して、以前のアクション ファイルをDefaultDownloadIndex
に統合してください。ProgressiveMediaSource#setExtractorsFactory
を削除しました。代わりにProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
コンストラクタを使用してください。ProgressiveMediaSource.Factory#setTag
とProgressiveMediaSource.Factory#setCustomCacheKey
を削除しました。代わりにMediaItem.Builder#setTag
とMediaItem.Builder#setCustomCacheKey
を使用してください。DefaultRenderersFactory(Context, @ExtensionRendererMode int)
コンストラクタとDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
コンストラクタを削除しました。代わりにDefaultRenderersFactory(Context)
コンストラクタ、DefaultRenderersFactory#setExtensionRendererMode
、DefaultRenderersFactory#setAllowedVideoJoiningTimeMs
を使用してください。- すべてのパブリック
CronetDataSource
コンストラクタを削除しました。代わりにCronetDataSource.Factory
を使用してください。
- 次の
IntDefs
を@Target(TYPE_USE)
のみに変更しました。Kotlin での使用のコンパイルが失敗するおそれがありますが、アノテーションを移動して型(Int
)にアノテーションを付けることで修正できます。@AacAudioObjectType
@Ac3Util.SyncFrameInfo.StreamType
@AdLoadException.Type
@AdtsExtractor.Flags
@AmrExtractor.Flags
@AspectRatioFrameLayout.ResizeMode
@AudioFocusManager.PlayerCommand
@AudioSink.SinkFormatSupport
@BinarySearchSeeker.TimestampSearchResult.Type
@BufferReplacementMode
@C.BufferFlags
@C.ColorRange
@C.ColorSpace
@C.ColorTransfer
@C.CryptoMode
@C.Encoding
@C.PcmEncoding
@C.Projection
@C.SelectionReason
@C.StereoMode
@C.VideoOutputMode
@CacheDataSource.Flags
@CaptionStyleCompat.EdgeType
@DataSpec.Flags
@DataSpec.HttpMethods
@DecoderDiscardReasons
@DecoderReuseResult
@DefaultAudioSink.OutputMode
@DefaultDrmSessionManager.Mode
@DefaultTrackSelector.SelectionEligibility
@DefaultTsPayloadReaderFactory.Flags
@EGLSurfaceTexture.SecureMode
@EbmlProcessor.ElementType
@ExoMediaDrm.KeyRequest.RequestType
@ExtensionRendererMode
@Extractor.ReadResult
@FileTypes.Type
@FlacExtractor.Flags
(com.google.android.exoplayer2.ext.flac
パッケージ)@FlacExtractor.Flags
(com.google.android.exoplayer2.extractor.flac
パッケージ)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
バージョン 1.0.0-alpha01
2021 年 10 月 27 日
androidx.media3:media3-*:1.0.0-alpha01
がリリースされました。バージョン 1.0.0-alpha01 に含まれる commit については、こちらをご覧ください。
新機能
Media3 は、ExoPlayer を含むメディア サポート ライブラリの新しいホームです。最初のアルファ版には、メディアのユースケースを実装するためのライブラリの機能の初期実装が含まれています。
- カスタマイズと拡張が簡単な Android 用のアプリレベルのメディア プレーヤーである ExoPlayer。
- 再生を公開して制御するためのメディア セッション機能。この新しいセッション モジュールは、ExoPlayer と同じ
Player
インターフェースを使用します。 - メディア再生のユーザー インターフェースを作成するための UI コンポーネント。
- IMA SDK による広告の挿入など、ExoPlayer で使用する他のライブラリの機能をラップするモジュール。
詳しくは、Media3 GitHub プロジェクトをご覧ください。
ExoPlayer は、以前は別の ExoPlayer GitHub プロジェクトでホストされていました。Media3 のパッケージ名は androidx.media3.exoplayer
です。しばらくの間、ExoPlayer GitHub プロジェクトの維持とリリースを続け、アプリが Media3 に移行できるようにする予定です。Media3 には、ExoPlayer のすべてのモジュールの置き換えが用意されています。ただし、以前の media2 と mediasession 拡張機能は新しい media3-session
モジュールに置き換えられています。これにより、アダプターやコネクタのクラスを使用する必要なく、プレーヤーとメディア セッションを直接統合できます。