共用方式為


360 相機視訊擷取

Windows 10 版本 1803 提供 360 相機預覽、擷取和錄製與現有 MediaCapture API 的支援。 這可讓平台公開球面畫面來源 (例如等方框) ,讓 app 能夠偵測及處理 360 部視訊相機串流,以及提供 360 個擷取體驗。

注意

GitHub 上提供的 Cam360 範例示範如何在 Windows 上使用 360 相機支援預覽、視訊錄製和相片擷取案例。

概觀

360 相機 IHV 可以提供 DMFT 外掛程式 (搭配或不使用自定義 UVC 驅動程式) ,這會公開發出球面畫面的每個數據流和媒體類型的球面格式,以及處理相機驅動程序輸出,並提供適當的屬性和元數據的等框。

大部分的 360 相機都隨附 2 個感測器來回傳,並涵蓋一些重疊的 360 FoV。 IHV 通常會與兩個 fisheye 感測器同步擷取,而不需要的,並將 DMFT 內的框架結合在一起,然後輸出相等的框架。

然後,應用程式可以透過 MediaCapture 和 MediaPlayer API 取得和取用這些等價畫面,以投影 360、球面、移動瀏覽視訊預覽體驗。 平臺會利用透過 DMFT 提供的元數據,以 MP4 格式錄製影片,並以隱含方式括住適當的標準化元數據。 從 360 播放的視訊播放程式內播放時,例如 Windows 10 上的 Movies & TV 應用程式,產生的錄製視訊將會提供預期的球面檢視行動瀏覽體驗。

360 相機使用方式:

  • 若要預覽 360 框架,應用程式必須明確使用 XAML MediaPlayerElement 進行預覽。 應用程式也需要透過 MediaPlaybackSphericalVideoProjection.ViewOrientation 四元數明確處理行動流覽的 UI 互動。

  • 針對 360 個視訊錄製,如果擷取應用程式使用 MediaCapture WinRT API,則不需要針對 360 內容明確設定擷取應用程式,因為球面格式會隱含地傳遞至記錄接收並寫入檔案標頭。

  • 針對 360 相片擷取,應用程式必須明確新增適當的標準化元數據,以使用可用的 WIC WinRT API 指定其球面格式。

最多可以有 360 部相機 IHV 來實作投影檢視的串流,並公開行動瀏覽/傾斜/縮放控件。

應用程式可以實作並插入效果來產生投影。 效果可以利用 mediatype 上的屬性來識別等方框。

架構

下圖說明 DMFT 與 360 相機堆疊的關聯性:

360 相機堆疊。

360 相機 IHV 會發佈 DMFT,以公開 360 個視訊串流,以提供已定義格式的球面畫面。 DMFT 可以透過使用 INF 檔案進行驅動程式擴充功能,與特定相機相關聯,如範例 中所述。下方的 INF。

在相機硬體或 DMFT 內,可以進行對等框架的結合和轉換。 最好將此用途運用 DMFT,因為它會允許使用 GPU 之類的硬體資源,以有效率地處理。 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) MediaType

上述屬性已存在於 mfidl.idl 的一部分。

若要利用執行結合的自定義應用程式,IHV 可以選擇公開另一個未中斷的 360 視訊媒體類型,並將屬性設定為 MF_SD_VIDEO_SPHERICAL_FORMAT MFVideoSphericalFormat_Unsupported (0) 。 自定義應用程式必須選取未處理的數據流並加以處理。

平臺指引

平台已經透過 MediaFrameSourceInfo.Properties 向 WinRT 層公開應用程式的所有資料流屬性,可搜尋上表中定義的MF_SD_VIDEO_SPHERICAL GUID。 不過,平臺元素的大部分球面組態都會由平臺隱含管理。 應用程式只能針對應用程式開發人員可能想要實作的任何額外功能來查詢屬性,例如,視訊的球面性而需要插入或移除的任何自定義效果。

如果平臺偵測到指出球面畫面來源的數據流屬性值,) 則平臺會略過收件匣效果,例如臉部偵測、場景分析器和視訊防震 (。

平臺會針對 360 視訊投影體驗,隱含地設定連線以進行預覽的媒體播放程序元素。 應用程式必須呼叫適當的平臺 API,以選取媒體播放器元素以供預覽。 應用程式也必須實作UI,以控制媒體播放機的投影方向和角度。 如果應用程式選擇預覽的擷取元素,就無法利用球面投影體驗。

平臺也會隱含地設定 MP4 接收,以錄製 360 視訊 (傳遞適當的視訊球面格式和相關元數據,如果有任何可用且) 支援的元數據,則當使用的數據流包含下表中所定義的屬性 () ,以提供必要的數據流屬性來識別球面畫面來源。

MF_SD_VIDEO_SPHERICAL_FORMAT值 (MFVideoSphericalFormat) SphericalVideoFrameFormat 值 解譯
在媒體類型屬性中找到的屬性設定為值 MFVideoSphericalFormat_Equirectangular (1) SphericalVideoFrameFormat。 等方方塊 數據流會以可透過 MediaPlayer 元素檢視的等方格式提供球面框架。
在媒體類型屬性中找到的屬性設定為值 MFVideoSphericalFormat_Unsupported (0) SphericalVideoFrameFormat。 不支援 數據流會以與 MediaPlayer 元素不相容的另一種格式提供球面畫面。 (可能是某些應用程式支援的自定義格式)
屬性不存在於媒體類型屬性中。 SphericalVideoFrameFormat。 無 數據流提供一般非球面框架。 (非 360)

應用程式指引

應用程式可以使用 MediaPlayerElement XAML 控制件,利用 360 視訊球面投影體驗。

如果媒體類型上有MF_SD_VIDEO_SPHERICAL_FORMAT屬性,而且設定為 MFVideoSphericalFormat_Equirectangular,則畫面會預期為球面,而且可以透過 MediaPlayerElement XAML 控件適當地轉譯。 應用程式可以查詢媒體播放器偵測到的球面格式,方法是檢查從媒體播放機播放會話取得的 MediaPlaybackSphericalVideoProjection 屬性, (objMediaPlayer.PlaybackSession.SphericalVideoProjection) 。 應用程式必須將 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 元素在應用程式中轉譯檢視區,並提供檢視區旋轉移動瀏覽和檢視互動的欄位:

轉譯的檢視區。