Condividi tramite


Acquisizione video da 360 fotocamere

Windows 10 versione 1803 offre il supporto per l'anteprima, l'acquisizione e il record della fotocamera 360 con le API MediaCapture esistenti. In questo modo la piattaforma può esporre origini fotogrammi sferici (ad esempio, fotogrammi equiretangulari), consentendo alle app di rilevare e gestire 360 flussi della fotocamera video e per offrire un'esperienza di acquisizione di 360.

Nota

L'esempio Cam360 disponibile in GitHub illustra come supportare scenari di anteprima, registrazione video e acquisizione di foto con una fotocamera da 360 in Windows.

Panoramica

Un IHV della fotocamera 360 può fornire plug-in DMFT (con o senza driver UVC personalizzati) che espongono il formato sferico di ogni flusso e tipo di supporto che genera fotogrammi sferici, nonché elaborare l'output del driver della fotocamera e fornire fotogrammi equiretangulari con attributi e metadati appropriati.

La maggior parte delle 360 fotocamere è dotata di 2 sensori back-to-back e copre un FoV 360 con alcune sovrapposizioni. Un IHV in genere acquisisce in modo sincrono con i due sensori fisheye, annulla e combina i fotogrammi all'interno del DMFT per poi restituire fotogrammi equiretangulari.

Questi fotogrammi equiretangulari possono quindi essere acquisiti e utilizzati dalle app tramite le API MediaCapture e MediaPlayer per proiettare un'esperienza di anteprima video 360, sferica e panoramica. I metadati forniti tramite DMFT verranno sfruttati dalla piattaforma per registrare i video in formato MP4 e racchiudere in modo implicito i metadati standardizzati appropriati. Quando viene riprodotto all'interno di un lettore video da 360 riproduzione, ad esempio l'app Movies & TV in Windows 10, il video registrato risultante offrirà l'esperienza di panoramica della visualizzazione sferica prevista.

Utilizzo della fotocamera 360:

  • Per visualizzare in anteprima un frame 360, un'applicazione deve usare in modo esplicito MediaPlayerElement XAML per l'anteprima. Un'applicazione deve anche gestire in modo esplicito l'interazione dell'interfaccia utente per la panoramica, tramite il quaternione MediaPlaybackSphericalVideoProjection.ViewOrientation .

  • Per il record video 360, un'applicazione di acquisizione non deve essere configurata in modo esplicito per 360 contenuti se usa le API WinRT MediaCapture, perché il formato sferico viene passato implicitamente al sink di record e scritto nell'intestazione del file.

  • Per l'acquisizione di foto 360, un'applicazione deve aggiungere in modo esplicito i metadati standardizzati appropriati che specifica il formato sferico usando le API WinRT WiC disponibili.

È fino a 360 fotocamera IHV per implementare un flusso con una vista proiettata ed esporre i controlli Pan/Tilt/Zoom.

L'applicazione può implementare e inserire un effetto per generare una proiezione. L'effetto può sfruttare gli attributi sul tipo di supporto per identificare i fotogrammi equiretangulari.

Architettura

Il diagramma seguente illustra la relazione tra DMFT e lo stack di fotocamere 360:

Stack di telecamere 360.

360 fotocamere IHV pubblicheranno un DMFT che espone 360 flussi video fornendo fotogrammi sferici di un formato definito. Il DMFT può essere installato e associato alla fotocamera specifica tramite l'uso del file INF per l'estensione del driver, come descritto nell'esempio . INF di seguito.

L'unione e la conversione in fotogrammi equiretangulari possono avvenire nell'hardware della fotocamera o all'interno del DMFT. A questo scopo, può essere preferibile sfruttare il DMFT, in quanto consentirà l'uso di risorse hardware come GPU per un'elaborazione efficiente. Il dmft popola anche le proprietà del flusso e del tipo di supporto seguenti (come illustrato nella tabella seguente) per identificarle come 360 flussi di contenuto.

Anche se l'IHV decide di avere la cucitura eseguita nell'hardware della fotocamera, un DMFT è ancora un requisito obbligatorio per popolare le proprietà dell'attributo stream e mediatype per 360 video.

La tabella seguente illustra l'attributo di flusso necessario per identificare un'origine frame sferica:

Nome e GUID della proprietà Value Attributo
MF_SD_VIDEO_SPHERICAL
{A51DA449-3FDC-478C-BCB5-30BE76595F55}
TRUE (1) Stream e MediaType
MF_SD_VIDEO_SPHERICAL_FORMAT
{4A8FC407-6EA1-46C8-B567-6971D4A139C3}
MFVideoSphericalFormat_Equirectangular (1) MediaType

La proprietà precedente esiste già come parte di mfidl.idl.

Per sfruttare le app personalizzate che eseguono anche l'unione, un IHV ha la possibilità di esporre un altro tipo di supporto video 360 non installato con attributi impostati come MF_SD_VIDEO_SPHERICAL_FORMAT a MFVideoSphericalFormat_Unsupported(0). L'applicazione personalizzata deve selezionare il flusso non elaborato e gestirlo.

Linee guida per la piattaforma

La piattaforma espone già tutti gli attributi del flusso al livello WinRT per le applicazioni tramite MediaFrameSourceInfo.Properties, che può essere cercato il MF_SD_VIDEO_SPHERICAL GUID definito nella tabella precedente. Tuttavia, la maggior parte delle configurazioni sferiche degli elementi della piattaforma verrà gestita in modo implicito dalla piattaforma. Le proprietà possono essere sottoposte a query dall'applicazione solo per eventuali funzionalità aggiuntive che lo sviluppatore dell'applicazione potrebbe voler implementare, ad esempio, eventuali effetti personalizzati che devono essere inseriti o rimossi a seconda della sfericazza del video.

La piattaforma ignora gli effetti della posta in arrivo, ad esempio il rilevamento dei volti, l'analizzatore della scena e la stabilizzazione video (se aggiunto) quando rileva il valore della proprietà dell'attributo del flusso che indica un'origine frame sferica.

La piattaforma configura in modo implicito l'elemento lettore multimediale connesso per l'anteprima per l'esperienza di proiezione video 360. L'applicazione deve chiamare le API della piattaforma appropriate per selezionare l'elemento lettore multimediale per l'anteprima. L'applicazione deve anche implementare l'interfaccia utente per controllare la direzione e l'angolo di proiezione del lettore multimediale. Se l'applicazione sceglie l'elemento capture per l'anteprima, non è possibile sfruttare l'esperienza di proiezione sferica.

La piattaforma configura anche in modo implicito il sink MP4 per registrare un video 360 (passare il formato sferico video appropriato e i metadati correlati, se disponibili e supportati) quando il flusso usato contiene la proprietà (definita nella tabella seguente) per fornire l'attributo di flusso necessario per identificare un'origine frame sferica.

MF_SD_VIDEO_SPHERICAL_FORMAT valore (MFVideoSphericalFormat) Valore SphericalVideoFrameFormat Interpretazione
Proprietà trovata negli attributi del tipo di supporto impostati sul valore MFVideoSphericalFormat_Equirectangular (1) SphericalVideoFrameFormat. Equirectangulare Il flusso fornisce fotogrammi sferici in formato equiretangulare visualizzabile tramite l'elemento MediaPlayer.
Proprietà trovata negli attributi del tipo di supporto impostati sul valore MFVideoSphericalFormat_Unsupported (0) SphericalVideoFrameFormat. Non supportato Il flusso fornisce fotogrammi sferici in un altro formato che non è compatibile con l'elemento MediaPlayer. (Può essere un formato personalizzato supportato da alcune app)
La proprietà è assente dagli attributi del tipo di supporto. SphericalVideoFrameFormat. Nessuno Il flusso fornisce normali frame non sferici. (non 360)

Linee guida per le applicazioni

L'applicazione può usare il controllo XAML MediaPlayerElement per sfruttare l'esperienza di proiezione video 360.

Se la proprietà MF_SD_VIDEO_SPHERICAL_FORMAT esiste nel tipo di supporto ed è impostata su MFVideoSphericalFormat_Equirectangular, i fotogrammi devono essere sferici e possono essere visualizzati in modo appropriato tramite il controllo XAML MediaPlayerElement . L'applicazione può eseguire query sul formato sferico rilevato dal lettore multimediale controllando le proprietà di MediaPlaybackSphericalVideoProjection ottenute dalla sessione di riproduzione del lettore multimediale (objMediaPlayer.PlaybackSession.SphericalVideoProjection). L'applicazione deve impostare la proprietà isEnabled su TRUE per avviare la proiezione sferica.

Se l'applicazione implementa il proprio componente di proiezione sferica personalizzato, può eseguire una query sull'origine dei fotogrammi tramite mediaFrameSourceInfo.Properties per le proprietà video a livello di flusso sferico, come descritto nella tabella precedente. Tuttavia, tutte le configurazioni degli elementi della piattaforma, ad esempio l'anteprima del lettore multimediale e il sink di record, verranno configurati in modo implicito dalla piattaforma al rilevamento delle proprietà video sferiche esposte dalla dmft della fotocamera negli attributi del tipo di flusso e del tipo di supporto.

. Esempio di file INF per pubblicare un DMFT

;=================================================================================
; 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

Flusso di fotogrammi di esempio con un dispositivo UVC

(1) Frame combinato non installato in uscita da USBVideo.sys:

Frame combinato non installato.

(2) Frame non salvato, cucito e trasformato in equiretangulare all'interno di un DMFT inviato all'elemento di rendering dell'applicazione per l'anteprima, a un sink video o a un sink di foto da archiviare nel file:

Cornice senza sciame, cucito e trasformato.

(3) Visualizzare il viewport all'interno di un'applicazione usando un elemento dell'interfaccia utente che applica una proiezione sferica, nonché fornire la panoramica della rotazione del riquadro di visualizzazione e il campo dell'interazione tra visualizzazioni:

Riquadro di visualizzazione di cui è stato eseguito il rendering.