WWDC22:Apple、カメラ用の新しいmacOSシステム拡張機能「Core Media I/O」を紹介(将来DALプラグインサポート終了)
※本サイトは、アフィリエイト広告および広告による収益を得て運営しています。購入により売上の一部が本サイトに還元されることがあります。
Appleが、WWDC22において、カメラ用の新しいmacOSシステム拡張機能に関する「Create camera extensions with Core Media IO」を公開しています。
ソフトウェアカメラ、ハードウェアカメラ、クリエイティブカメラを使用する場合、これまではDALプラグインが使用されてきましたが、macOS Monterey 12.3以降から、安全で高速、かつカメラ入力を使用するすべてのアプリケーションと完全に互換性のある拡張機能「Core Media I/O」が利用可能になりました。
DALプラグインは、macOS Lion 10.7以来、非常に長い間存在し、macOSをリッチメディアプラットフォームとして拡張する力を提供し、優れたサードパーティ製カメラ製品のサポートを、プロにもコンシューマにももたらします。
しかし、DALプラグインにはいくつかの問題があり、信頼できないコードをアプリケーションのプロセスに直接読み込むため、プラグインにバグがあった場合にクラッシュしたり、マルウェアの攻撃を受けたりする危険性があるのです。
このため、FaceTime、QuickTime Player、PhotoBoothなどのApple製アプリでは動作せず、また、多くのサードパーティ製カメラアプリでも、ライブラリ検証を意図的に無効にするか、ユーザーがシステム整合性保護をオフにしない限り、動作しません。
どちらも、システムの安全性と安定性を低下させるため、推奨される方法ではありません。また、開発するのも大変です。
macOS Monterey 12.3以降から、DALプラグインに代わる「Camera Extensions」と呼ぶ最新のアーキテクチャが導入されます。
Camera extensions(別名CoreMedia IOエクステンション)は、Macアプリにカメラドライバをパッケージングして提供する新しい方法です。
拡張機能のコードは、サンドボックス化された独自のデーモンプロセスとしてコード化され、ロールユーザとして実行されます。
既存のAVFoundationキャプチャAPIと100%下位互換性があり、App Storeにアプリとして配信することもできます。
カメラ拡張機能は、Appleアプリを含むすべてのカメラアプリで、内蔵カメラと同じように表示されます。
用途として、ソフトウェアのみのカメラの場合、例えば、カラーバー、固有のテストパターン、様々なフレームレートや解像度でプログラムにより生成された画像を表示するカメラや、A/V 同期をテストするために映画のフレームなどのプリレンダーコンテンツをストリーミングするカメラなどが利用できます。
Macに物理的に接続したり、ワイヤレスで検出する予定のカメラ用のドライバとして利用可能で、ホットプラグやアンプラグを完全にサポートしています。
ハードウェアに対応するためには、いくつかの選択肢があり、望ましい方法は「DriverKit Extension」(DEXT)を使用することです。
DEXTは完全にユーザースペースで実行され、カーネルレベルでハードウェアに対応する必要がある場合は、従来の IOVideoFamily kext パスを使用することができます。
Apple は、USB ビデオクラス (UVC) カメラのためのクラス準拠の拡張機能を提供しています。これは UVC 仕様に準拠したカメラでは非常に有効です。
しかし、非標準のプロトコルを使用し、UVC仕様外の追加機能を持つUSBカメラをサポートする必要がある場合、AppleのUVC拡張機能を上書きするカメラ拡張機能を作成し、特定の製品およびベンダーIDを主張できるようにすることができます。
詳しくは「Overriding the default USB video class extension」を参照して下さい。
ソフトウェアとハードウェアのハイブリッドであるクリエイティブカメラも利用可能で、この拡張機能は、Macに接続されている別の物理的なカメラからビデオストリームにアクセスし、それらのバッファにエフェクトを適用して、新しいカメラストリームとしてクライアントに送信します。
または、複数のカメラからのビデオストリームにアクセスし、それらを合成してアプリに送信するクリエイティブなカメラなど、設定アプリを使用して、合成を制御したり、フィルタをパラメータ化したりすることができます。
CMIOExtensionのアーキテクチャでは、DALコントロールの代替となるものは提供しません。その代わり、すべてがプロパティとなります。
AVFoundationはカスタムプロパティを扱うことができないので、設定アプリがカスタムプロパティを扱う必要がある場合は、CoreMedia IO C APIに固執する必要があります。
macOS Monterey 12.3では、DALプラグインは廃止となり、非推奨となっており、ビルド時にコンパイルの警告が表示されます。
macOS Venturaの次のメジャーリリースでは、DALプラグインを完全に無効にする予定です。