次の方法で共有


360 カメラのビデオ キャプチャ

Windows 10 バージョン 1803 では、既存の MediaCapture API を使用した 360 カメラのプレビュー、キャプチャ、および記録がサポートされています。 これにより、プラットフォームは球面フレーム ソース (等距離フレームなど) を公開でき、アプリは 360 のビデオ カメラ ストリームを検出して処理できるだけでなく、360 のキャプチャ エクスペリエンスを提供できます。

GitHub で入手できる Cam360 サンプルは、Windows 上の 360 カメラを使用してプレビュー、ビデオ レコード、写真キャプチャのシナリオをサポートする方法を示しています。

概要

360 カメラ IHV は、(カスタム UVC ドライバーの有無にかかわらず) DMFT プラグインを提供できます。このプラグインは、球面フレームを出力する各ストリームとメディアの種類の球面形式を公開し、カメラ ドライバーの出力を処理し、適切な属性とメタデータを持つ等角フレームを提供します。

ほとんどの360度カメラには、2つのセンサーが背中合わせに搭載されており、一部重なりがある360度の視野角を持っています。 IHV は通常、2 つの魚眼センサーを使用して同期的にキャプチャし、DMFT 内のフレームをアンウォープしてステッチし、等角フレームを出力します。

これらの正距円筒図法のフレームは、MediaCapture および MediaPlayer API を介してアプリによって取得・利用することができ、360度の球面パノラマビデオプレビューを投影します。 DMFT を介して提供されるメタデータは、MP4 形式でビデオを記録し、適切な標準化されたメタデータを暗黙的に囲むプラットフォームによって利用されます。 Windows 10 の 映画 & テレビ アプリなどの 360 再生ビデオ プレーヤー内から再生された場合、結果として記録されたビデオは、期待される球面ビューパン エクスペリエンスを提供します。

360 カメラの使用方法:

  • 360 フレームをプレビューするには、アプリケーションでプレビュー用の XAML MediaPlayerElement を明示的に使用する必要があります。 また、アプリケーションでは、 MediaPlaybackSphericalVideoProjection.ViewOrientation 四元数を使用して、周囲をパンするための UI 操作を明示的に処理する必要があります。

  • 360 ビデオ レコードの場合、キャプチャ アプリケーションは MediaCapture WinRT API を使用している場合、360 コンテンツに対して明示的に構成する必要はありません。球形の形式はレコード シンクに暗黙的に渡され、ファイル ヘッダーに書き込まれます。

  • 360 写真キャプチャの場合、アプリケーションでは、使用可能な WIC WinRT API を使用して球面形式を指定する適切な標準化されたメタデータを明示的に追加する必要があります。

360度カメラのIHVが、プロジェクティッドビュー付きストリームを実装し、パン/チルト/ズームコントロールを提供します。

アプリケーションは、プロジェクションを生成する効果を実装して挿入できます。 この効果は、mediatype の属性を利用して、等角フレームを識別できます。

アーキテクチャ

次の図は、DMFT と 360 カメラ スタックの関係を示しています。

360 カメラ スタック。

360 台のカメラ IHV は、定義された形式の球面フレームを提供する 360 のビデオ ストリームを公開する DMFT を公開します。 DMFT は、以下の例に示されているように、ドライバー拡張のための INF ファイルを使用して、特定のカメラにインストールして関連付けることができます。

ステッチと等角投影フレームへの変換は、カメラハードウェア内またはDMFT内で行うことができます。 効率的な処理のために GPU などのハードウェア リソースを使用できるようになるため、この目的のために DMFT を活用することをお勧めします。 DMFT では、次のストリームとメディアの種類のプロパティ (次の表に示すように) も設定され、360 コンテンツ ストリームとして識別されます。

IHV がカメラハードウェアでステッチを行う場合でも、DMFT は 360 ビデオのストリームおよび mediatype 属性プロパティを設定するために必須要件です。

次の表に、球面フレーム ソースを識別するために必要なストリーム属性を示します。

プロパティ名と GUID 価値 特性
MF_SD_VIDEO_SPHERICAL
{A51DA449-3FDC-478C-BCB5-30BE76595F55}
TRUE (1) Stream と MediaType
MF_SD_VIDEO_SPHERICAL_FORMAT
{4A8FC407-6EA1-46C8-B567-6971D4A139C3}
MFVideoSphericalFormat_Equirectangular (1) メディアタイプ

上記のプロパティは、 mfidl.idl の一部として既に存在します。

IHV は、ステッチを実行するカスタム アプリを利用するために、属性が MF_SD_VIDEO_SPHERICAL_FORMAT として MFVideoSphericalFormat_Unsupported(0) に設定された、別のスティッチされていない 360 ビデオ メディア タイプを公開することができます。 カスタム アプリケーションでは、未処理のストリームを選択して処理する必要があります。

プラットフォーム ガイダンス

プラットフォームでは、 MediaFrameSourceInfo.Properties を使用してアプリケーションの WinRT レイヤーにすべてのストリーム属性が既に公開されています。これは、上記の表で定義されているMF_SD_VIDEO_SPHERICAL GUID を検索できます。 ただし、プラットフォーム要素の球面構成のほとんどは、プラットフォームによって暗黙的に管理されます。 プロパティは、アプリケーション開発者が実装する可能性のある追加機能 (ビデオの球面性に応じて挿入または削除する必要があるカスタム効果など) についてのみ、アプリケーションによってクエリを実行できます。

プラットフォームは、ストリーム属性プロパティ値が球面フレームソースを示すことを検出した場合、顔検出、シーンアナライザー、ビデオ安定化などの受信ボックス効果をバイパスします。

プラットフォームは、360 ビデオ プロジェクション エクスペリエンスのプレビュー用に接続されたメディア プレーヤー要素を暗黙的に構成します。 アプリケーションは、プレビュー用のメディア プレーヤー要素を選択するために、適切なプラットフォーム API を呼び出す必要があります。 アプリケーションでは、メディア プレーヤーの投影方向と角度を制御する UI も実装する必要があります。 アプリケーションでプレビュー用のキャプチャ要素を選択した場合、球面投影エクスペリエンスを利用することはできません。

プラットフォームは、使用されるストリームに球面フレーム ソースを識別するために必要なストリーム属性を提供するプロパティ (次の表で定義) が含まれている場合に、360 ビデオを記録するように MP4 シンクを暗黙的に構成します (使用可能でサポートされている場合は、適切なビデオ球形形式と関連メタデータを渡します)。

MF_SD_VIDEO_SPHERICAL_FORMAT値 (MFVideoSphericalFormat) SphericalVideoFrameFormat 値 解釈
メディアの種類の属性において、MFVideoSphericalFormat_Equirectangular (1) に設定された値のプロパティが見つかりました。 SphericalVideoFrameFormat。 Equirectangular このストリームは、MediaPlayer 要素を介して表示可能な等距離形式の球面フレームを提供します。
値MFVideoSphericalFormat_Unsupportedに設定されたメディアの種類の属性で見つかったプロパティ (0) SphericalVideoFrameFormat。 サポートされていない ストリームは、MediaPlayer 要素と互換性のない別の形式の球面フレームを提供します。 (一部のアプリでサポートされているカスタム形式の場合があります)
メディアの種類の属性にプロパティはありません。 SphericalVideoFrameFormat。 無し ストリームは、定期的に非球面フレームを提供します。 (360 以外)

アプリケーション ガイダンス

アプリケーションでは 、MediaPlayerElement XAML コントロールを使用して、360 ビデオの球面投影エクスペリエンスを活用できます。

MF_SD_VIDEO_SPHERICAL_FORMAT プロパティがメディアの種類に存在し、MFVideoSphericalFormat_Equirectangularに設定されている場合、フレームは球面であることが想定され、 MediaPlayerElement XAML コントロールを使用して適切にレンダリングできます。 アプリケーションは、メディア プレーヤー再生セッション (objMediaPlayer.PlaybackSession.SphericalVideoProjection) から取得した MediaPlaybackSphericalVideoProjection のプロパティを確認することで、メディア プレーヤーによって検出された球面形式を照会できます。 アプリケーションは、球面投影を開始するには 、isEnabled プロパティを TRUE に設定する必要があります。

アプリケーションが独自のカスタム球面投影コンポーネントを実装している場合は、上の表で説明したように、 MediaFrameSourceInfo.Properties を使用してフレーム ソースに対して、球面ストリーム レベルのビデオ プロパティのクエリを実行できます。 ただし、メディア プレーヤーのプレビューやレコード シンクなどのプラットフォーム要素の構成はすべて、ストリームおよびメディアの種類の属性でカメラ DMFT によって公開される球面ビデオ プロパティの検出に関して、プラットフォームによって暗黙的に構成されます。

.DMFT を発行する INF ファイルの例

;=================================================================================
; Microsoft Sample Extension INF for USB Camera SampleDeviceMFT installation
; Copyright (C) Microsoft Corporation. All rights reserved.
;=================================================================================

[Version]
Signature="$WINDOWS NT$"
Class=Extension
ClassGUID={e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider=%CONTOSO%
ExtensionId = {E4FE3A00-68CF-45A3-83C8-8347A6A38069} ; replace with your own GUID
CatalogFile.NT = SampleExtensionInfForDmftInstallation.cat
DriverVer=03/28/2024,10.0.25326.2000
PnpLockdown=1

[Manufacturer]
%CONTOSO% = ContosoSampleDeviceMFT,ntamd64.10.0...25326

[ContosoSampleDeviceMFT.ntamd64.10.0...25326]
%ContosoCamera.DeviceDesc% = ContosoSampleDeviceMFT_Install, usb\vid_xxxx&pid_xxxx&mi_xx  ; replace with your camera device VID PID

[ContosoSampleDeviceMFT_Install]
CopyFiles=ContosoSampleDeviceMFTCopy
AddReg=ContosoSampleDeviceMFT_COM.AddReg

;-----------------------------------------------------------------------------------
;
; Registers Device MFT COM object
;
;-----------------------------------------------------------------------------------

[ContosoSampleDeviceMFT_COM.AddReg]
HKR,Classes\CLSID\%SampleDeviceMFT.CLSID%,,,%SampleDeviceMFT.FriendlyName%
HKR,Classes\CLSID\%SampleDeviceMFT.CLSID%\InProcServer32\,,%REG_EXPAND_SZ%,"%13%\ContosoSampleDeviceMFT.dll"
HKR,Classes\CLSID\%SampleDeviceMFT.CLSID%\InProcServer32\,ThreadingModel,,"Both"

[ContosoSampleDeviceMFT_Install.Interfaces]
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,,ContosoSampleDeviceMFT.Interfaces,

[ContosoSampleDeviceMFT.Interfaces]
AddReg=ContosoSampleDeviceMFT.AddReg

;-----------------------------------------------------------------------------------
;
; Add DeviceMFT CLSID to device interface instance registry key
;
;-----------------------------------------------------------------------------------

[ContosoSampleDeviceMFT.AddReg]
HKR,,CameraDeviceMftClsid,,%SampleDeviceMFT.CLSID%

;-----------------------------------------------------------------------------------
;
; File copy sections
;
;-----------------------------------------------------------------------------------

[SourceDisksFiles]
ContosoSampleDeviceMFT.dll=1

[SourceDisksNames]
1 = %MediaDescription%

[DestinationDirs]
ContosoSampleDeviceMFTCopy=13
DefaultDestDir = 13

[ContosoSampleDeviceMFTCopy]
ContosoSampleDeviceMFT.dll

[Strings]
CONTOSO = "Contoso Inc."
ContosoCamera.DeviceDesc = "Contoso Camera Extension"
MediaDescription="Contoso Camera Sample Device MFT Installation Media"
SampleDeviceMFT.CLSID = "{zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz}" ; replace with your Device MFT COM object's CoClass ID
SampleDeviceMFT.FriendlyName = "Contoso Camera Device MFT"
KSCATEGORY_VIDEO_CAMERA="{E5323777-F976-4f5b-9B55-B94699C46E44}"
REG_EXPAND_SZ=0x00020000

UVC デバイスを使用したフレーム フローの例

(1) USBVideo.sysから取り出される未結合の合成フレーム:

縫われていない組み合わせフレーム。

(2) フレームをゆがみ補正し、ステッチして正距円筒図法に変換した後、これをDMFT内でプレビュー用にアプリケーションのレンダリング要素に送信するか、ビデオシンクまたはフォトシンクに送信してファイルに格納します。

フレームは歪みが補正され、ステッチされ、変換されました。

(3) 球面投影を適用する UI 要素を使用してアプリケーション内のビューポートをレンダリングし、ビューポートの回転パンと視野の相互作用を提供します。

レンダリングされたビューポート。