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

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

Note

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

概要

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

ほとんどの 360 度カメラには、2 つのセンサーが背中合わせに搭載されており、360 FoV が重なってカバーされています。 通常、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 の属性を利用して、等角フレームを識別できます。

Architecture

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

360 camera stack.

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

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

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

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

プロパティ名と GUID Value Attribute
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) MediaType

上記のプロパティは既に 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_Equirectangular に設定されたメディアの種類の属性で見つかったプロパティ (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 から出力される組み合わされていない結合フレーム:

Unstitched combined frame.

(2) プレビューのためにアプリケーションのレンダリング要素に送信された DMFT 内で、ファイルに格納されるビデオ シンクまたはフォト シンクに送信される、固定されていないフレーム、ステッチ済み、変換済みのフレーム。

Frame unwarped, stitched and transformed.

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

Rendered viewport.