共用方式為


360 度攝影機影片捕捉

Windows 10 版本 1803 支援使用現有的 MediaCapture API 進行 360 度相機預覽、擷取和錄製。 這可讓平台公開球形影格來源 (例如等距柱狀投影格),讓應用程式能夠偵測及處理 360 度攝影機串流,以及提供 360 度擷取體驗。

備註

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

概觀

360 度相機的 IHV 可以提供 DMFT 插件(搭配或不搭配自定義的 UVC 驅動程式),以揭示每個資料流和能輸出球形畫面的媒體類型的球形格式,並處理相機驅動程式生成的輸出,提供包含適當屬性和元數據的等距矩形畫面。

大多數 360 度全景相機背靠背配備 2 個感測器,並覆蓋 360 度全景圖,但有一些重疊。 IHV 通常會與兩個魚眼感應器同步擷取,然後在 DMFT 中取消扭曲並縫合影格,最後輸出等距長方形影格。

然後,應用程式可以透過 MediaCapture 和 MediaPlayer API 取得和取用這些等距柱狀框架,以投影 360 度球形平移視訊預覽體驗。 平台將利用透過 DMFT 提供的元資料以 MP4 格式錄製視頻,並隱含適當的標準化元資料。 從 360 度播放影片播放器 (例如 Windows 10 上的 電影和電視 應用程式) 中播放時,產生的錄製影片將提供預期的球面視圖平移體驗。

360度全景相機使用情況:

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

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

  • 針對 360 度相片擷取,應用程式必須明確新增適當的標準化中繼資料,以使用可用的 WIC WinRT API 指定其球形格式。

360 度相機 IHV 可以決定是否實作一個具有投影檢視的串流,並提供平移/傾斜/縮放控制。

應用程式可以實作並插入效果來產生投影。 此效果可以利用媒體類型上的屬性來識別等距矩形框架。

建築

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

360 度相機堆疊。

360 度相機硬體廠商將會發佈 DMFT,來展示 360 度視頻流,提供具體格式的球形畫面。 DMFT 可以透過使用 INF 檔案作為驅動程式延伸模組來安裝並與特定相機相關聯,如以下範例 .INF 中所述。

拼接和轉換為等距柱狀框架可以在相機硬體或 DMFT 內部進行。 為此目的,最好利用 DMFT,因為它將允許使用 GPU 等硬體資源進行高效處理。 DMFT 也會填入下列資料流和媒體類型屬性(如下表所示),以將它們識別為 360 內容流。

即使 IHV 決定在相機硬體中完成拼接,DMFT 仍然是填寫 360 度視訊流和媒體類型屬性資料的必要要求。

下表顯示識別球形框架來源所需的串流屬性:

屬性名稱和 GUID 價值觀 屬性
MF_SD_VIDEO_SPHERICAL
{A51DA449-3FDC-478C-BCB5-30BE76595F55}
正確 (1) Stream 和 MediaType
MF_SD_VIDEO_SPHERICAL_FORMAT
{4A8FC407-6EA1-46C8-B567-6971D4A139C3}
MFVideoSphericalFormat_Equirectangular (1) 媒體類型

上述屬性已作為 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 元素在應用程序內渲染視口,並提供視口旋轉平移和視野交互:

渲染的視埠。