能登 要

札幌在住のiOSアプリ開発者。SwiftUI により分割されたデバイス間を縦横にやりとりできる考え方に転換しています。

iOSアプリ開発者。2009年のiPhoneアプリ開発開始時期から活動。開発言語のアップデートの中でSwiftUIおよび周辺技術に着目中。

[プレゼン資料] UVC(USB video class)と マルチプラットフォーム - UVC support by Apple multiplatform

2023年12月9日に行われた札幌iPhone開発勉強会でのプレゼンテーション資料。

iPadOS17以降でiPadでUVC(USB Video Class)がサポートされたので実際にハードウェアを接続して動作を確認した旨のプレゼンテーション。

iPadで動くだけでは面白みがないのでSwiftUI を使ってMultiplatform 対応としiPadOS、macOS で動作するサンプルコードも用意している。

GitHub - notoroid/SimpleGameMonitor: external video device preview sample code for apple multiplatform(iPadOS, macOS)

サンプルコードはUVCから取り込んだ映像をプレビューするだけとなっている。接続されるデバイスはコンソールゲーム機をターゲットとしている。

UVCデバイスを扱うコードを作成する上でつまづいた点はUVCからビデオ映像を取り込む際に使用するフレームワークであるAVFoundationの基本設定はビデオ会議やセルフィー向けのカメラ設定がデフォルトとなっている点である。

ビデオ会議やセルフィー向けのカメラ設定がデフォルト、とは何の話かというと映像のミラーリング(Mirroring)設定がデフォルトで有効でかつ自動ミラーリング属性が用意されている点、ミラーリングを解除する場合は自動ミラーリング設定を無効としてからミラー設定を無効とする必要がある。

マルチプラットフォームに関してはUVCから取り込んだ映像のプレビューを表示する画面に関してはSwiftUIでiPadOSとmacOSで共通化できない箇所であるためそれぞれ別のコードを記述する必要がある。

iPasOSとmacOSではプレビュー表示用オブジェクト自体は共通なのだが表示の処理は違いがあるのでiOS/iPadOS に慣れ親しんだプログラマーには違和感があるコードかもしれない。