Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Windows 10, versione 1803 offre supporto per l'anteprima, l'acquisizione e il record della fotocamera 360 con le API MediaCapture esistenti. Ciò consente alla piattaforma di esporre sorgenti di fotogrammi sferici (ad esempio, fotogrammi equirettangolari), consentendo alle app di rilevare e gestire flussi video della fotocamera a 360 gradi, nonché di offrire un'esperienza di acquisizione a 360 gradi.
Annotazioni
L'esempio Cam360 disponibile in GitHub illustra come supportare scenari di anteprima, registrazione video e acquisizione di foto con una fotocamera 360 in Windows.
Informazioni generali
Una fotocamera IHV 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 fotocamere 360 sono dotate di 2 sensori schiena contro schiena e coprono un campo visivo di 360 gradi con alcune sovrapposizioni. Un IHV in genere acquisisce in modo sincrono con i due sensori fisheye, corregge la distorsione e ricuce i fotogrammi all'interno del DMFT per poi restituire fotogrammi equirettangolari.
Questi fotogrammi equiretangulari possono quindi essere acquisiti e usati 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. Se riprodotto da un lettore video per la riproduzione a 360 gradi, ad esempio l'app
Utilizzo della fotocamera a 360 gradi
Per visualizzare in anteprima un frame 360, un'applicazione deve usare in modo esplicito xaml MediaPlayerElement 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 la registrazione video a 360 gradi, un'applicazione di acquisizione non deve essere configurata in modo esplicito per contenuti a 360 gradi se utilizza le API WinRT MediaCapture, poiché il formato sferico viene passato in modo implicito al sink di registrazione e scritto nell'intestazione del file.
Per l'acquisizione di foto 360, un'applicazione deve aggiungere in modo esplicito i metadati standardizzati appropriati che specificano il formato sferico usando le API WinRT WiC disponibili.
Spetta al produttore di hardware indipendente (IHV) della fotocamera a 360 gradi implementare un flusso con una visualizzazione 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 mediatype per identificare fotogrammi equirettangolari.
Architettura
Il diagramma seguente illustra la relazione tra DMFT e lo stack di fotocamere 360:
Gli IHV delle fotocamere a 360 gradi pubblicheranno un DMFT che esporrà flussi video a 360 gradi, 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 equirettangolari 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 popolerà anche le seguenti proprietà del flusso e del tipo di media (come illustrato nella tabella seguente) per identificarle come flussi di contenuto 360.
Anche se l'IHV decide di effettuare la cucitura nell'hardware della fotocamera, un DMFT è comunque un requisito obbligatorio per popolare le proprietà degli attributi stream e mediatype per i video a 360 gradi.
La tabella seguente mostra l'attributo di flusso necessario per identificare un'origine frame sferica:
| Nome e GUID della proprietà | Valore | 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) | Tipo di media |
La proprietà precedente esiste già come parte di mfidl.idl.
Per sfruttare anche le app personalizzate che eseguono lo stitching, un IHV ha la possibilità di esporre un altro tipo di media video non cucito da 360 con gli attributi impostati su MF_SD_VIDEO_SPHERICAL_FORMAT a MFVideoSphericalFormat_Unsupported(0). L'applicazione personalizzata dovrà 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, in cui è possibile cercare il GUID MF_SD_VIDEO_SPHERICAL 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 come il rilevamento dei volti, l'analisi della scena e la stabilizzazione video (se aggiunti) quando rileva che il valore della proprietà dell'attributo del flusso indica un'origine di fotogrammi 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 implicitamente il sink MP4 per registrare un video a 360° (passando il formato video sferico appropriato e i metadati correlati, se disponibili e supportati) quando il flusso utilizzato contiene la proprietà (definita nella tabella seguente) per fornire l'attributo necessario allo stream per identificare una fonte del fotogramma sferica.
| valore MF_SD_VIDEO_SPHERICAL_FORMAT (MFVideoSphericalFormat) | Valore SphericalVideoFrameFormat | Interpretazione |
|---|---|---|
| Proprietà trovata negli attributi del tipo di media con valore impostato a MFVideoSphericalFormat_Equirectangular (1) | SphericalVideoFrameFormat. Equirettangolare | Il flusso fornisce frame sferici in formato equirettangolare visualizzabile tramite MediaPlayer Element. |
| Proprietà trovata negli attributi del tipo di formato multimediale impostati sul valore MFVideoSphericalFormat_Unsupported (0) | SphericalVideoFrameFormat. Non supportato | Il stream fornisce fotogrammi sferici in un altro formato che non è compatibile con Element MediaPlayer. (Può essere un formato personalizzato supportato da alcune app) |
| La proprietà manca negli attributi del tipo di media. | SphericalVideoFrameFormat. Nessuno | Il flusso fornisce regolari fotogrammi 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 una 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 personalizzata, 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, come l'anteprima del player multimediale e il sink di registrazione, verranno configurate in modo implicito dalla piattaforma con il rilevamento delle proprietà dei video sferici esposte dalla DMFT della fotocamera negli attributi del tipo di flusso e dei supporti.
. 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 non cucito combinato che esce da USBVideo.sys:
(2) Frame non salvato, cucito e trasformato in equirectangulare all'interno di un DMFT inviato all'elemento di rendering dell'applicazione per l'anteprima, a un sink video o un sink di foto da archiviare nel file:
(3) Rendering del riquadro di visualizzazione all'interno di un'applicazione utilizzando un elemento dell'interfaccia utente che applica una proiezione sferica, oltre a fornire panoramica e rotazione del riquadro di visualizzazione e interazione del campo visivo.