Media3 1.11 がリリースされました。このリリースでは、Android のトップ メディアアプリの大部分を支える、再生、編集、UI コンポーネントにわたる新機能、バグの修正、改善が導入されています。カスタマイズ可能な Player スロット、使いやすいデフォルト、インタラクティブなジェスチャー、状態オブザーバー、PlayerPool を使用したショート動画のプリロードを備えた Jetpack Compose UI モジュールを拡張しています。また、SystemUI 出力スイッチャーのサポートにより Media3 Cast 統合を最新化し、新しい Ktor HTTP クライアント ネットワーク拡張機能を導入し、Ogg ファイルと WAV ファイル用の新しい多重化ユーティリティを追加しました。
主なハイライトについては以下をご覧ください。変更点の完全なリストについては、リリースノートをご覧ください。
再生 UI と Compose
Android が Compose ファーストになったことで、media3-ui-compose モジュールと media3-ui-compose-material3 モジュールの拡張が続いています。今回のアップデートでは、プレーヤーのレイアウトをより細かく制御できるようになり、インタラクション パターンが豊富になり、Material3 との統合が深まります。
カスタマイズ可能なプレーヤー レイアウト
マテリアル 3 のプレーヤー コンポーザブルが、topControls、centerControls、bottomControls、errorOverlay 専用のコンテンツ スロットをサポートするようになりました。独自のコンポーザブルをドロップインすることも、PlayerDefaults で公開されている既製のデフォルトを使用することもできます。
Player( player = player, topControls = { PlayerDefaults.TopControls(player) }, centerControls = { PlayerDefaults.CenterControls(player) }, bottomControls = { PlayerDefaults.BottomControls(player) }, )
また、Player コンポーザブルは FocusRequester のサポートも統合しており、Android TV、折りたたみ式デバイス、パソコン環境で D-pad とキーボードのナビゲーションをシームレスに行うことができます。
ジェスチャーと再生速度の制御
PlaybackSpeedState が早送り/スローモーション API を提供するようになりました。demo-compose app は、長押しジェスチャーで再生を早送りし、ダブルタップでシークする例を示しています。1.10 で導入された ProgressSlider と組み合わせることで、Compose プレーヤー UI は、すぐに使える豊富なタッチ操作とジェスチャー操作を提供します。
PlayerPool を使用したショート動画のプリロード
スライディング ウィンドウ メディア フィード(ショート動画など)を使用するアプリでは、複数の ExoPlayer インスタンスを効率的に管理することが一般的な課題です。Media3 1.11 では、プレーヤーのリサイクルとプリロードを自動的に処理するために、PlayerPool(common-ktx 内)と rememberPooledPlayer(ui-compose 内)が導入されています。
demo-compose の新しい ShortFormPlayerScreen は、この動作を実際に示しています。垂直方向にページングするフィードで、プレーヤーがプールされ、プリロードされ、ユーザーがスクロールするとシームレスに再利用されます。
MiniController
media3-ui-compose-material3 の新しい MiniController コンポーザブルは、現在のアイテムのタイトル、アーティスト、アートワーク、進行状況を再生/一時停止コントロールとともに表示するコンパクトな再生バーを提供します。media3-ui-compose-material3 のすべてのデフォルトのコンポーザブルと同様に、MiniController は Material3 ダイナミック カラー統合をサポートしており、ユーザーの壁紙のテーマに自動的に適応できます。これは、ユーザーがコンテンツを閲覧しているときや、アクティブな Cast セッション中など、永続的なボトムシートやミニプレーヤーのアフォーダンスに最適です。
メタデータとエラーの拡張状態ホルダー
media3-ui-compose にいくつかの新しいリアクティブ状態ホルダーを追加しました。
rememberCurrentMediaItemState- 現在再生中のアイテムに関するメタデータを取得するrememberPlaylistState- 再生リスト全体とアクティブなインデックスを観察します。rememberErrorState- 再生エラーを追跡します。Material3 には、対応するErrorTextコンポーザブルとデフォルトのErrorOverlayがあります。
今後のリリースでは、引き続き新しい機能の追加とカスタマイズ オプションの拡充に取り組んでまいります。ご意見は、プロジェクトの Issue Tracker からお寄せください。
最新の Cast 統合
Media3 1.11 では、プログラムによる構成オプションと OS レベルのルーティングのサポートにより、Cast 拡張機能が更新されています。
CastParams と SystemUI 出力切り替え
CastParams を使用して Cast 拡張機能を構成できるようになりました。
val castParams = CastParams.Builder() .setShowSystemOutputSwitcherOnCastButtonClick(true) .build() Cast.getSingletonInstance(context).initialize(castParams)
setShowSystemOutputSwitcherOnCastIconClick(true) を設定すると、サポートされているプラットフォーム バージョンで MediaRouteButton が Android のネイティブ SystemUI 出力スイッチャーを開き、統一された出力ピッカー エクスペリエンスが提供されます。
Compose のリアクティブな MediaRouteButton の状態
Jetpack Compose を使用するアプリで、メディア ルーティング ボタン(キャスト アイコンとも呼ばれます)を簡単に追加できるようになりました。このボタンは、ダイアログの状態を自動的に監視し、それに応じて更新します。Media3 の CastPlayer と併用する場合、追加のロジックは必要ありません。
@Composable fun TopAppBarWithCast() { Row { Text(text = "App Title") MediaRouteButton() } }
コアの再生とセッションの機能強化
Eclipsa Video - HAGC ダイナミック HDR メタデータ(API 37 以降)
Eclipsa Video は、デバイス間でより一貫した HDR エクスペリエンスを提供します。一貫したベースライン HDR ホワイト、画面と周囲の環境に応じたアダプティブ ヘッドルームにより、すべてのデバイスでクリエイティブな意図が維持されます。
ExoPlayer で、プログレッシブ メディア(MP4、Matroska)に必要な HAGC(ST 2094-50)のタイムド メタデータの再生がサポートされるようになりました。プレーヤーは、HAGC メタデータ トラックを関連する動画トラックと自動的に統合し、API 37 以降のデバイスのデコーダに帯域外でメタデータを配信します。古いデバイスでは、ExoPlayer は調整なしで標準の HDR 再生エクスペリエンスを提供するようにシームレスにフォールバックします。
新しい Ktor HTTP クライアント拡張機能
新しい media3-datasource-ktor 拡張機能モジュールは、Ktor HTTP スタックを基盤とする KtorDataSource を提供します。これは、既存の Cronet および OkHttp データソース モジュールに代わる、Kotlin ファーストでコルーチン対応の代替手段を提供します。
非同期 MediaSession 接続
MediaSession.Callback に onConnectAsync() が含まれるようになりました。これにより、コントローラの接続試行を非同期で処理できます(接続を承認する前に認証を確認するなど)。既存の onConnect と同じ動作にするには、Futures.immediateFuture(ConnectionResult) を使用して Future をすぐに返すことができます。
override fun onConnectAsync( session: MediaSession, controller: MediaSession.ControllerInfo ): ListenableFuture<MediaSession.ConnectionResult> { return authenticateControllerAsync(controller) }
より安全な MediaSession のデフォルト
MediaSession.Callback で onConnect または onConnectAsync をオーバーライドしないアプリの場合、ライブラリはデフォルトでより安全な構成になります。具体的には、セッション データはデフォルトで信頼できないコントローラと共有されなくなります。つまり、通知アクセス権のないサードパーティ製アプリやシステム以外のアプリは、接続を承認するためにこれらのコールバック メソッドを明示的に実装しない限り、セッション データにアクセスできなくなります。
新しい Muxer の実装とコンテナの解析
OggMuxer と WavMuxer
OPUS ストリームと VORBIS ストリームを標準の .ogg ファイルに多重化する OggMuxer と、非圧縮の浮動小数点 PCM .wav 音声ファイルを生成する WavMuxer の 2 つの新しい専用の多重化ツールを追加しました。
コンテナの解析と参照の追跡
- MP4 トラック参照(
tref):Mp4Muxer.addTrackReferenceを使用すると、依存するメタデータまたは補助トラックをプライマリ動画ストリームにリンクできます。 - チャプターの抽出: MP4 ファイル(
.m4a、.m4b)の QuickTime と Nero のチャプター、および Matroska のチャプターが、オーディオブックとポッドキャストのナビゲーション用のChapterメタデータ エントリとして抽出されるようになりました。
バグを報告する場合や、質問や機能リクエストがある場合は、Issue Tracker を使用してください。皆様からのフィードバックをお待ちしております。
-
ハウツー「インテリジェントな Android アプリを構築する」ブログ投稿シリーズにようこそ。このシリーズでは、基本的な Android アプリをパーソナライズされたインテリジェントなエージェント エクスペリエンスに変換します。前回の投稿では、このシリーズ全体で使用するデモアプリである Jetpacker を紹介しました。
Caren Chang • 所要時間: 6 分 -
ハウツーJetpacker は、今年の Google I/O 向けにチームがゼロから構築した技術デモアプリです(Antigravity を使用して構築)。Jetpacker は、ユーザーが次の大きな冒険を計画、探索、楽しむためのアプリです。
Jolanda Verhoef • 所要時間: 4 分 -
ハウツー「インテリジェントな Android アプリを構築する」ブログ投稿シリーズにようこそ。このシリーズでは、基本的な Android アプリをパーソナライズされたインテリジェントなエージェント エクスペリエンスに変換します。前回の投稿では、Firebase AI Logic を活用してクラウドホスト型とハイブリッド型の AI 機能を構築する方法について説明しました。
Ben Weiss • 所要時間: 6 分
Android 開発に関する最新の分析情報を毎週メールでお届けします。