ハウツー

Media3 1.11 - 新機能

所要時間: 3 分
Toni Heidenreich のプロフィールを表示
Toni Heidenreich ソフトウェア エンジニア、Android

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 のプレーヤー コンポーザブルが、topControlscenterControlsbottomControlserrorOverlay 専用のコンテンツ スロットをサポートするようになりました。独自のコンポーザブルをドロップインすることも、PlayerDefaults で公開されている既製のデフォルトを使用することもできます。

Player(
  player = player,
  topControls = { PlayerDefaults.TopControls(player) },
  centerControls = { PlayerDefaults.CenterControls(player) },
  bottomControls = { PlayerDefaults.BottomControls(player) },
)

また、Player コンポーザブルは FocusRequester のサポートも統合しており、Android TV、折りたたみ式デバイス、パソコン環境で D-pad とキーボードのナビゲーションをシームレスに行うことができます。

player_video.png
カスタマイズされたコントロールを備えたコンポーザブル プレーヤーの例

ジェスチャーと再生速度の制御

PlaybackSpeedState が早送り/スローモーション API を提供するようになりました。demo-compose app は、長押しジェスチャーで再生を早送りし、ダブルタップでシークする例を示しています。1.10 で導入された ProgressSlider と組み合わせることで、Compose プレーヤー UI は、すぐに使える豊富なタッチ操作とジェスチャー操作を提供します。

PlayerPool を使用したショート動画のプリロード

スライディング ウィンドウ メディア フィード(ショート動画など)を使用するアプリでは、複数の ExoPlayer インスタンスを効率的に管理することが一般的な課題です。Media3 1.11 では、プレーヤーのリサイクルとプリロードを自動的に処理するために、PlayerPoolcommon-ktx 内)と rememberPooledPlayerui-compose 内)が導入されています。

demo-compose の新しい ShortFormPlayerScreen は、この動作を実際に示しています。垂直方向にページングするフィードで、プレーヤーがプールされ、プリロードされ、ユーザーがスクロールするとシームレスに再利用されます。

MiniController

media3-ui-compose-material3 の新しい MiniController コンポーザブルは、現在のアイテムのタイトル、アーティスト、アートワーク、進行状況を再生/一時停止コントロールとともに表示するコンパクトな再生バーを提供します。media3-ui-compose-material3 のすべてのデフォルトのコンポーザブルと同様に、MiniController は Material3 ダイナミック カラー統合をサポートしており、ユーザーの壁紙のテーマに自動的に適応できます。これは、ユーザーがコンテンツを閲覧しているときや、アクティブな Cast セッション中など、永続的なボトムシートやミニプレーヤーのアフォーダンスに最適です。

mini_player.png
アルバム アート、メディア メタデータ、基本コントロールを表示する Media3 MiniController

メタデータとエラーの拡張状態ホルダー

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()
  }
}
cast_button_2.png
デフォルトの出力の切り替えダイアログを起動するアプリの Media3 メディア ルートボタン

コアの再生とセッションの機能強化

Eclipsa Video - HAGC ダイナミック HDR メタデータ(API 37 以降)

Eclipsa Video は、デバイス間でより一貫した HDR エクスペリエンスを提供します。一貫したベースライン HDR ホワイト、画面と周囲の環境に応じたアダプティブ ヘッドルームにより、すべてのデバイスでクリエイティブな意図が維持されます。

ExoPlayer で、プログレッシブ メディア(MP4、Matroska)に必要な HAGC(ST 2094-50)のタイムド メタデータの再生がサポートされるようになりました。プレーヤーは、HAGC メタデータ トラックを関連する動画トラックと自動的に統合し、API 37 以降のデバイスのデコーダに帯域外でメタデータを配信します。古いデバイスでは、ExoPlayer は調整なしで標準の HDR 再生エクスペリエンスを提供するようにシームレスにフォールバックします。  

eclipsa.png
Eclipsa Video HDR のメリット(色のコントラストの一貫性の向上など)を示すイラスト

新しい Ktor HTTP クライアント拡張機能

新しい media3-datasource-ktor 拡張機能モジュールは、Ktor HTTP スタックを基盤とする KtorDataSource を提供します。これは、既存の Cronet および OkHttp データソース モジュールに代わる、Kotlin ファーストでコルーチン対応の代替手段を提供します。

非同期 MediaSession 接続

MediaSession.CallbackonConnectAsync() が含まれるようになりました。これにより、コントローラの接続試行を非同期で処理できます(接続を承認する前に認証を確認するなど)。既存の onConnect と同じ動作にするには、Futures.immediateFuture(ConnectionResult) を使用して Future をすぐに返すことができます。 

override fun onConnectAsync(
  session: MediaSession,
  controller: MediaSession.ControllerInfo
): ListenableFuture<MediaSession.ConnectionResult> {
  return authenticateControllerAsync(controller)
}

より安全な MediaSession のデフォルト

MediaSession.CallbackonConnect または 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 を使用してください。皆様からのフィードバックをお待ちしております。

作成者:
続きを読む