Delen via


Videoopname van 360 camera

Windows 10, versie 1803 biedt ondersteuning voor 360 cameravoorbeelden, vastleggen en opnemen met bestaande MediaCapture-API's. Hierdoor kan het platform sferische framebronnen (bijvoorbeeld equirectangular frames) beschikbaar maken, zodat apps 360 videocamerastreams kunnen detecteren en verwerken en een 360-opname-ervaring kunnen bieden.

Opmerking

Het Cam360-voorbeeld dat beschikbaar is op GitHub laat zien hoe u preview-, video-opname- en fotoopnamescenario's kunt ondersteunen met een 360 camera in Windows.

Overzicht

Een 360 camera IHV kan DMFT-invoegtoepassingen (met of zonder aangepaste UVC-stuurprogramma's) leveren die de sferische indeling van elke stream en elk mediatype dat sferische frames uitzendt, blootleggen, de camerastuurprogramma-uitvoer verwerken en equirectangulaire frames met de juiste kenmerken en metadata bieden.

De meeste 360-camera's zijn uitgerust met 2 sensoren tegenover elkaar en bedekken een gezichtsveld van 360 graden met enige overlap. Een IHV legt doorgaans synchroon vast met de twee fisheye-sensoren, ontwoind en naait de frames aan elkaar binnen de DMFT om vervolgens equirectangulaire frames uit te voeren.

Deze equirectangular frames kunnen vervolgens worden verkregen en gebruikt door de apps via MediaCapture- en MediaPlayer-API's om een 360 graden, sferische, panbewegende video preview-ervaring te projecteren. De metagegevens die via de DMFT worden geleverd, worden door het platform gebruikt om de video's op te nemen in MP4-indeling en impliciet de juiste gestandaardiseerde metagegevens in te sluiten. Wanneer het wordt afgespeeld in een 360-gradenvideospeler, zoals de Films & TV-app op Windows 10, zorgt de resulterende opgenomen video voor de verwachte sferische pan-ervaring.

360-camera gebruik

  • Voor het bekijken van een 360-frame moet een toepassing expliciet gebruikmaken van het XAML MediaPlayerElement voor preview. Een toepassing moet ook expliciet de interactie van de gebruikersinterface afhandelen voor rondkijken door middel van de MediaPlaybackSphericalVideoProjection.ViewOrientation quaternion.

  • Voor 360 videorecords hoeft een opnametoepassing niet expliciet te worden geconfigureerd voor 360 inhoud als deze Gebruikmaakt van MediaCapture WinRT-API's, omdat de sferische indeling impliciet wordt doorgegeven aan de recordsink en naar de bestandskoptekst wordt geschreven.

  • Voor het vastleggen van 360 foto's moet een toepassing expliciet de juiste gestandaardiseerde metagegevens toevoegen die de bolvormige indeling specificeert met behulp van beschikbare WIC WinRT-API's.

Het is aan de 360 camera IHV om een stream te implementeren met een geprojecteerde weergave en pan/tilt/zoombesturingselementen beschikbaar te stellen.

De toepassing kan een effect implementeren en invoegen om een projectie te genereren. Het effect kan gebruikmaken van de kenmerken van het mediatype om equirectangular frames te identificeren.

Architectuur

In het volgende diagram ziet u de relatie tussen de DMFT en de 360 camerastack:

360 camera stack.

360 camera IHVs zullen een DMFT publiceren die 360 videostreams blootlegt en sferische frames van een gedefinieerde indeling levert. De DMFT kan worden geïnstalleerd en gekoppeld aan de specifieke camera via het gebruik van het INF-bestand voor stuurprogramma-extensie zoals beschreven in het onderstaande voorbeeld .INF.

De hechting en conversie naar equirectangular frames kunnen plaatsvinden in de camerahardware of in de DMFT. Het kan de voorkeur hebben om de DMFT voor dit doel te gebruiken, omdat het gebruik van hardwarebronnen zoals GPU toestaat voor efficiënte verwerking. De DMFT vult ook de volgende stream- en mediatype-eigenschappen in (zoals weergegeven in de onderstaande tabel) om deze als 360-contentstreams te identificeren.

Zelfs als de IHV besluit om de samenvoeging in de camerahardware te laten uitvoeren, is een DMFT nog steeds vereist om de eigenschappen van het stream- en mediatypeattribuut voor 360-video's in te vullen.

In de volgende tabel ziet u het vereiste stroomkenmerk om een bolvormige framebron te identificeren:

Eigenschapsnaam en GUID Waarde Eigenschap
MF_SD_VIDEO_SPHERICAL
{A51DA449-3FDC-478C-BCB5-30BE76595F55}
WAAR (1) Stream en MediaType
MF_SD_VIDEO_SPHERICAL_FORMAT
{4A8FC407-6EA1-46C8-B567-6971D4A139C3}
MFVideoSphericalFormat_Equirectangular (1) Mediasoort

De bovenstaande eigenschap bestaat al als onderdeel van mfidl.idl.

Om gebruik te maken van aangepaste apps die ook stiksels uitvoeren, heeft een IHV de mogelijkheid om een ander niet-gestikt 360 videomediatype te exposeren met kenmerken die zijn ingesteld op MF_SD_VIDEO_SPHERICAL_FORMAT tot MFVideoSphericalFormat_Unsupported(0). De aangepaste toepassing moet de niet-verwerkte stream selecteren en afhandelen.

Platformrichtlijnen

Het platform maakt al alle streamkenmerken beschikbaar voor de WinRT-laag voor toepassingen via MediaFrameSourceInfo.Properties, die kunnen worden gezocht naar de MF_SD_VIDEO_SPHERICAL GUID die in de bovenstaande tabel is gedefinieerd. De meeste sferische configuraties van platformelementen worden echter impliciet beheerd door het platform. De eigenschappen kunnen alleen door de toepassing worden opgevraagd voor extra functionaliteit die de ontwikkelaar van de toepassing kan implementeren, bijvoorbeeld aangepaste effecten die moeten worden ingevoegd of verwijderd, afhankelijk van de sfericalheid van de video.

Het platform omzeilt inbox-achtige effecten zoals gezichtsdetectie, scèneanalyse en videostabilisatie (indien toegevoegd) wanneer het een eigenschapswaarde van het stroomkenmerk detecteert die een bolvormige framebron aangeeft.

Het platform configureert impliciet het mediaplayers-element dat is verbonden voor de voorvertoning van 360-graden videoprojectie. De toepassing moet de juiste platform-API's aanroepen om media player-element te selecteren voor preview. De toepassing moet ook de gebruikersinterface implementeren om de projectierichting en hoek van de mediaspeler te beheren. Als de toepassing een capture-element voor preview kiest, kan de sferische projectie-ervaring niet worden gebruikt.

Het platform configureert ook impliciet de MP4-sink om een 360-video op te nemen (geef de juiste sferische indeling en gerelateerde metagegevens door indien beschikbaar en ondersteund) wanneer de stream die wordt gebruikt de eigenschap bevat (gedefinieerd in de volgende tabel) om het vereiste streamkenmerk op te geven om een sferische framebron te identificeren.

Waarde van MF_SD_VIDEO_SPHERICAL_FORMAT (MFVideoSphericalFormat) SphericalVideoFrameFormat-waarde Interpretatie
Eigenschap gevonden in kenmerken van het mediatype ingesteld op waarde MFVideoSphericalFormat_Equirectangular (1) SphericalVideoFrameFormat. Equirectangulaire De stroom biedt sferische frames in equirectangular-indeling die kunnen worden weergegeven via MediaPlayer Element.
Eigenschap gevonden in mediatypekenmerken die zijn ingesteld op waarde MFVideoSphericalFormat_Unsupported (0) SphericalVideoFrameFormat. Niet ondersteund De stream biedt bolvormige frames in een andere indeling die niet compatibel is met het MediaPlayer-element. (Dit kan een aangepaste indeling zijn die door sommige apps wordt ondersteund)
Eigenschap is afwezig in kenmerken bij het mediatype. SphericalVideoFrameFormat. Geen De stroom biedt regelmatige niet-bolvormige frames. (niet-360)

Toepassingsrichtlijnen

De toepassing kan het besturingselement MediaPlayerElement XAML gebruiken om gebruik te maken van de 360 videoferische projectie-ervaring.

Als de eigenschap MF_SD_VIDEO_SPHERICAL_FORMAT bestaat op het mediatype en is ingesteld op MFVideoSphericalFormat_Equirectangular, worden de frames naar verwachting sferisch en kunnen ze correct worden weergegeven via het besturingselement MediaPlayerElement XAML. De toepassing kan een query uitvoeren op de bolvormige indeling die is gedetecteerd door de mediaspeler door de eigenschappen van MediaPlaybackSphericalVideoProjection te controleren die is verkregen via de afspeelsessie van de mediaspeler (objMediaPlayer.PlaybackSession.SphericalVideoProjection). De toepassing moet de eigenschap isEnabled instellen op TRUE om de bolvormige projectie te starten.

Als de toepassing een eigen aangepast sferisch projectieonderdeel implementeert, kan deze een query uitvoeren op de framebron via de MediaFrameSourceInfo.Properties voor de sferische video-eigenschappen op stroomniveau, zoals beschreven in de bovenstaande tabel. Alle configuratie van platformelementen, zoals de preview van de mediaspeler en recordsink, zal echter door het platform impliciet worden uitgevoerd zodra de sferische video-eigenschappen, die door de camera DMFT aan de stream- en mediatypekenmerken worden blootgelegd, worden gedetecteerd.

. Voorbeeld van INF-bestand voor het publiceren van een 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

Voorbeeldframeverloop met een UVC-apparaat

(1) Ongestikt gecombineerd frame komt uit USBVideo.sys:

Ongestikt gecombineerd frame.

(2) Frame ongewarseerd, gestikt en getransformeerd naar equirectangular in een DMFT die is verzonden naar het rendering-element van de toepassing voor preview, naar een video-sink of fotosink die in het bestand moet worden opgeslagen:

Frame ontwrongen, samengevoegd en getransformeerd.

(3) Gerenderde viewport in een toepassing met behulp van een UI-element dat een bolvormige projectie toepast, en weergave-rotatie, panning en veld van zichtinteractie biedt.

Weergegeven viewport.