Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Windows 10, 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 de trames sphériques (par exemple, des images équirectangulaires), ce qui permet aux applications de détecter et de gérer des flux vidéo à 360 degrés, ainsi que de fournir une expérience de capture à 360 degrés.
Remarque
L’exemple Cam360 disponible sur GitHub montre comment prendre en charge les scénarios d’aperçu, d’enregistrement vidéo et de capture de photos avec une caméra 360 sur Windows.
Aperçu
Un IHV de caméra 360 peut fournir des plug-ins DMFT (avec ou sans pilotes UVC personnalisés) qui exposeront 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 un attribut et des métadonnées appropriés.
La plupart des caméras 360 sont fournies avec 2 capteurs placés dos à dos et couvrent un champ de vision de 360 degrés avec un certain chevauchement. Un IHV capturerait généralement de manière synchrone avec les deux capteurs fisheye, rectifierait et assemblerait les cadres à l'intérieur du DMFT pour ensuite produire des cadres équirectangulaires.
Ces images équirectangulaires peuvent ensuite être acquises et consommées par des applications via les API MediaCapture et MediaPlayer pour projeter une expérience d’aperçu vidéo à 360 degrés, 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 placer implicitement les métadonnées normalisées appropriées. Lorsqu’elle est jouée à partir d’un lecteur vidéo de lecture 360, comme l’application Films &TV sur Windows 10, la vidéo enregistrée résultante offre l’expérience de panoramique de vue sphérique attendue.
Utilisation de la caméra 360 :
Pour afficher un aperçu d’une trame 360, une application doit utiliser explicitement xaml MediaPlayerElement pour la préversion. Une application doit également gérer explicitement l’interaction de l’interface utilisateur pour le déplacement panoramique, via le quaternion MediaPlaybackSphericalVideoProjection.ViewOrientation.
Pour l’enregistrement vidéo 360, une application de capture n’a pas besoin d’être configurée explicitement pour le contenu 360 s’il utilise des API WinRT MediaCapture, car le format sphérique est implicitement transmis au récepteur d’enregistrement et écrit dans l’en-tête de fichier.
Pour la capture de photos 360, une application doit ajouter explicitement les métadonnées normalisées appropriées qui spécifient son format sphérique à l’aide des API WinRT WIC disponibles.
Il incombe à la caméra 360 de l'IHV de créer un flux avec vue projetée et d'exposer des contrôles de 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 type de média pour identifier les images équirectangulaires.
Architecture
Le diagramme suivant illustre la relation entre le DMFT et la pile de caméras 360 :
Les fournisseurs de matériel indépendants (IHV) de caméras 360 publieront une DMFT qui présentera des flux vidéo à 360°, fournissant des images sphériques dans 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 cadres équirectangulaires peuvent se produire dans le matériel de caméra ou à l'intérieur du DMFT. Il peut être préférable de tirer parti du DMFT à cet effet, car il permettra l’utilisation de ressources matérielles telles que GPU pour un traitement efficace. Le DMFT remplit également les propriétés de type de flux et de média suivantes (comme indiqué dans le tableau ci-dessous) pour les identifier en tant que flux de contenu 360.
Même si l’IHV décide d’avoir l’assemblage effectué dans le matériel de la caméra, une DMFT est toujours une exigence obligatoire pour remplir les propriétés des attributs de flux et de type média pour les vidéos 360.
Le tableau suivant présente l’attribut de flux requis pour identifier une source de trame sphérique :
| Nom de la propriété et GUID | Valeur | Caractéristique |
|---|---|---|
| MF_SD_VIDEO_SPHERICAL {A51DA449-3FDC-478C-BCB5-30BE76595F55} |
VRAI (1) | Stream et MediaType |
| MF_SD_VIDEO_SPHERICAL_FORMAT {4A8FC407-6EA1-46C8-B567-6971D4A139C3} |
MFVideoSphericalFormat_Equirectangular (1) | Type de Média |
La propriété ci-dessus existe déjà dans le cadre de mfidl.idl.
Pour tirer parti des applications personnalisées qui effectuent également de la fusion vidéo, un IHV peut exposer un autre format de médias vidéo 360 non fusionné avec des attributs définis comme MF_SD_VIDEO_SPHERICAL_FORMAT à 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 peuvent être recherchés afin de trouver 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 seront gérées implicitement par la plateforme. Les propriétés peuvent être interrogées par l’application spécifiquement pour implémenter des fonctionnalités supplémentaires que le développeur de l’application peut souhaiter mettre en œuvre, 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 (si ajouté) lorsqu’elle détecte la valeur de propriété d’attribut de flux indiquant une source de trame sphérique.
La plateforme configure implicitement l’élément du lecteur multimédia connecté pour un aperçu de l'expérience de projection vidéo à 360 degrés. L’application doit appeler les API de plateforme appropriées pour sélectionner l’élément lecteur multimédia pour la 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 de SphericalVideoFrameFormat | Interprétation |
|---|---|---|
| Propriété trouvée dans les attributs de type multimédia défini sur la valeur MFVideoSphericalFormat_Equirectangular (1) | SphericalVideoFrameFormat. Équirectangulaire | Le flux fournit des trames sphériques au format équirectangulaire visible par le biais de l’élément MediaPlayer. |
| Propriété trouvée dans les attributs de type de média définie sur la 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. (Peut être un format personnalisé pris en charge par certaines applications) |
| La propriété est absente des attributs de type multimédia. | SphericalVideoFrameFormat. Aucun | Le flux fournit régulièrement des trames non sphériques. (non-360) |
Conseils sur 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 rendues 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 d’images via ses Propriétés 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 des éléments de la plateforme, telles que l'aperçu du lecteur multimédia et le périphérique d'enregistrement, sont configurées implicitement par la plateforme lors de la détection des propriétés de la vidéo sphérique exposées par le DMFT de la caméra sur les attributs de flux et de type 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 d’images avec un appareil UVC
(1) Cadre combiné non cousu en sortie de USBVideo.sys:
(2) Frame non déformé, cousu et transformé en équirectangulaire dans un DMFT envoyé à l'élément de rendu de l'application pour aperçu, vers un point de terminaison vidéo ou photo à stocker dans un 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, ainsi que fournir un panoramique de rotation de la fenêtre d’affichage et un champ d’interaction de vue :