Capture vidéo à 360 caméras
Windows 10, la version 1803 prend en charge la préversion, la capture et l’enregistrement de la caméra 360 avec les API MediaCapture existantes. Cela permet à la plateforme d’exposer des sources d’images sphériques (par exemple, des images équirectangulaires), ce qui permet aux applications de détecter et de gérer 360 flux de caméra vidéo, ainsi que de fournir une expérience de capture 360.
Notes
L’exemple Cam360 disponible sur GitHub montre comment prendre en charge les scénarios de préversion, d’enregistrement vidéo et de capture photo avec un appareil photo 360 sur Windows.
Vue d’ensemble
Un IHV caméra 360 peut fournir des plug-ins DMFT (avec ou sans pilotes UVC personnalisés) qui exposent le format sphérique de chaque flux et type de média qui émet des images sphériques, ainsi que traiter la sortie du pilote de caméra et fournir des images équirectangulaires avec l’attribut et les métadonnées appropriés.
La plupart des 360 caméras sont fournies avec 2 capteurs dos à dos et couvrent un 360 FoV avec un certain chevauchement. Un IHV capture généralement de façon synchrone avec les deux capteurs fisheye, déjoue et assemble les cadres à l’intérieur du DMFT pour ensuite générer des images équirectangulaires.
Ces images équirectangulaires peuvent ensuite être acquises et consommées par les applications via les API MediaCapture et MediaPlayer pour projeter une expérience d’aperçu vidéo 360, sphérique et panoramique. Les métadonnées fournies via le DMFT seront exploitées par la plateforme pour enregistrer les vidéos au format MP4 et inclure implicitement les métadonnées standardisées appropriées. Lorsqu’elle est lue à partir d’un lecteur vidéo à 360 lecture, tel que l’application Films & TV sur Windows 10, la vidéo enregistrée obtenue offre l’expérience de panoramique sphérique attendue.
Utilisation de la caméra 360 :
Pour afficher un aperçu d’une trame 360, une application doit utiliser explicitement l’élément MediaPlayerElement XAML pour la préversion. Une application doit également gérer explicitement l’interaction de l’interface utilisateur pour le panoramique, via le quaternion MediaPlaybackSphericalVideoProjection.ViewOrientation .
Pour un enregistrement vidéo 360, une application de capture n’a pas besoin d’être configurée explicitement pour le contenu 360 si elle utilise des API WinRT MediaCapture, car le format sphérique est implicitement transmis au récepteur d’enregistrements et écrit dans l’en-tête de fichier.
Pour la capture de photos 360, une application doit ajouter explicitement les métadonnées standardisées appropriées qui spécifient son format sphérique à l’aide des API WinRT WIC disponibles.
C’est à l’IHV 360 caméra d’implémenter un flux avec une vue projetée et d’exposer les contrôles Panoramique/Inclinaison/Zoom.
L’application peut implémenter et insérer un effet pour générer une projection. L’effet peut tirer parti des attributs sur le mediatype pour identifier les trames équirectangulaires.
Architecture
Le diagramme suivant illustre la relation entre le DMFT et la pile de caméras 360 :
360 IHD de caméra publieront un DMFT qui exposera 360 flux vidéo fournissant des images sphériques d’un format défini. Le DMFT peut être installé et associé à la caméra particulière via l’utilisation du fichier INF pour l’extension de pilote, comme décrit dans l’exemple . INF ci-dessous.
L’assemblage et la conversion en trames équirectangulaires peuvent avoir lieu dans le matériel de la caméra ou à l’intérieur du DMFT. Il peut être préférable de tirer parti du DMFT à cet effet, car il permettra d’utiliser des ressources matérielles telles que le GPU pour un traitement efficace. Le DMFT remplit également les propriétés de flux et de type de média suivantes (comme indiqué dans le tableau ci-dessous) pour les identifier en tant que 360 flux de contenu.
Même si l’IHV décide d’effectuer l’assemblage dans le matériel de la caméra, un DMFT est toujours obligatoire pour remplir les propriétés d’attribut stream et mediatype pour la vidéo 360.
Le tableau suivant montre l’attribut de flux requis pour identifier une source de trame sphérique :
Nom et GUID de la propriété | Valeur | Attribut |
---|---|---|
MF_SD_VIDEO_SPHERICAL {A51DA449-3FDC-478C-BCB5-30BE76595F55} |
TRUE (1) | Stream et MediaType |
MF_SD_VIDEO_SPHERICAL_FORMAT {4A8FC407-6EA1-46C8-B567-6971D4A139C3} |
MFVideoSphericalFormat_Equirectangular (1) | MediaType |
La propriété ci-dessus existe déjà dans le cadre de mfidl.idl.
Pour tirer parti des applications personnalisées qui effectuent également l’assemblage, un IHV a la possibilité d’exposer un autre type de média vidéo 360 non mis en échec avec des attributs définis comme MF_SD_VIDEO_SPHERICAL_FORMAT sur MFVideoSphericalFormat_Unsupported(0). L’application personnalisée doit sélectionner le flux non traité et le gérer.
Conseils sur la plateforme
La plateforme expose déjà tous les attributs de flux à la couche WinRT pour les applications via MediaFrameSourceInfo.Properties, qui peut être recherché pour le GUID MF_SD_VIDEO_SPHERICAL défini dans le tableau ci-dessus. Toutefois, la plupart des configurations sphériques des éléments de plateforme sont gérées implicitement par la plateforme. Les propriétés peuvent être interrogées par l’application uniquement pour toute fonctionnalité supplémentaire que le développeur d’application peut souhaiter implémenter, par exemple, les effets personnalisés qui doivent être insérés ou supprimés en fonction du caractère sphérique de la vidéo.
La plateforme contourne les effets de boîte de réception tels que la détection des visages, l’analyseur de scène et la stabilisation vidéo (s’il est ajouté) lorsqu’elle détecte la valeur de la propriété d’attribut de flux indiquant une source de trame sphérique.
La plateforme configure implicitement l’élément de lecteur multimédia connecté pour la préversion pour une expérience de projection vidéo 360. L’application doit appeler les API de plateforme appropriées pour sélectionner l’élément de lecteur multimédia en préversion. L’application doit également implémenter l’interface utilisateur pour contrôler la direction et l’angle de projection du lecteur multimédia. Si l’application choisit l’élément de capture pour la préversion, l’expérience de projection sphérique ne peut pas être exploitée.
La plateforme configure également implicitement le récepteur MP4 pour enregistrer une vidéo 360 (transmettez le format sphérique vidéo approprié et les métadonnées associées, le cas échéant) lorsque le flux utilisé contient la propriété (définie dans le tableau suivant) pour fournir l’attribut de flux requis pour identifier une source de trame sphérique.
valeur MF_SD_VIDEO_SPHERICAL_FORMAT (MFVideoSphericalFormat) | Valeur SphericalVideoFrameFormat | Interprétation |
---|---|---|
Propriété trouvée dans les attributs de type de média définis sur valeur MFVideoSphericalFormat_Equirectangular (1) | SphericalVideoFrameFormat. Équirectangulaire | Le flux fournit des trames sphériques au format équirectangulaire visibles via l’élément MediaPlayer. |
Propriété trouvée dans les attributs de type de média définis sur valeur MFVideoSphericalFormat_Unsupported (0) | SphericalVideoFrameFormat. Non pris en charge | Le flux fournit des images sphériques dans un autre format qui n’est pas compatible avec l’élément MediaPlayer. (Il peut s’agir d’un format personnalisé pris en charge par certaines applications) |
La propriété est absente des attributs de type de média. | SphericalVideoFrameFormat. None | Le flux fournit des trames non sphériques régulières. (non-360) |
Aide de l’application
L’application peut utiliser le contrôle XAML MediaPlayerElement pour tirer parti de l’expérience de projection sphérique vidéo 360.
Si la propriété MF_SD_VIDEO_SPHERICAL_FORMAT existe sur le type de média et est définie sur MFVideoSphericalFormat_Equirectangular, les images sont alors censées être sphériques et peuvent être restituées de manière appropriée via le contrôle XAML MediaPlayerElement . L’application peut interroger le format sphérique détecté par le lecteur multimédia en vérifiant les propriétés de MediaPlaybackSphericalVideoProjection obtenues à partir de la session de lecture du lecteur multimédia (objMediaPlayer.PlaybackSession.SphericalVideoProjection). L’application doit définir la propriété isEnabled sur TRUE pour démarrer la projection sphérique.
Si l’application implémente son propre composant de projection sphérique personnalisé, elle peut interroger la source de trame via son MediaFrameSourceInfo.Properties pour les propriétés vidéo au niveau du flux sphérique, comme décrit dans le tableau ci-dessus. Toutefois, toutes les configurations d’éléments de plateforme, comme la préversion du lecteur multimédia et le récepteur d’enregistrements, seront configurées implicitement par la plateforme lors de la détection des propriétés vidéo sphériques exposées par la caméra DMFT sur les attributs de type de flux et de média.
. Exemple de fichier INF pour publier 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
Exemple de flux de trame avec un appareil UVC
(1) Trame combinée non enchurée sortant de USBVideo.sys :
(2) Cadre non bloqué, cousu et transformé en équirectangulaire à l’intérieur d’un DMFT envoyé à l’élément de rendu de l’application pour la préversion, à un récepteur vidéo ou à un récepteur photo à stocker dans le fichier :
(3) Rendu de la fenêtre d’affichage à l’intérieur d’une application à l’aide d’un élément d’interface utilisateur qui applique une projection sphérique et fournit un panoramique de rotation de la fenêtre d’affichage et une interaction de champ de vue :