Videoaufnahme mit 360 Kameras
Windows 10 bietet Version 1803 Unterstützung für 360 Kameravorschauen, Aufzeichnungen und Aufzeichnungen mit vorhandenen MediaCapture-APIs. Dies ermöglicht es der Plattform, sphärische Framequellen (z. B. equirektangulare Frames) verfügbar zu machen, sodass Apps 360 Videokamerastreams erkennen und verarbeiten sowie eine 360-Aufnahmeerfahrung bereitstellen können.
Hinweis
Das Cam360-Beispiel auf GitHub zeigt, wie Sie Vorschau-, Videoaufzeichnungs- und Fotoaufnahmeszenarien mit einer 360-Kamera unter Windows unterstützen.
Überblick
Eine 360-Kamera-IHV kann DMFT-Plug-Ins (mit oder ohne benutzerdefinierte UVC-Treiber) bereitstellen, die das sphärische Format jedes Datenstroms und Medientyps verfügbar machen, der sphärische Frames ausgibt, sowie die Kameratreiberausgabe verarbeiten und equirectangulare Frames mit den entsprechenden Attributen und Metadaten bereitstellen.
Die meisten 360 Kameras verfügen über 2 Sensoren und decken einen 360 FoV mit einigen Überlappungen ab. Ein IHV erfasst in der Regel synchron mit den beiden Fisheye-Sensoren, entwärft und heftet die Frames innerhalb des DMFT, um dann äquirectangulare Frames auszugeben.
Diese equirektangularen Frames können dann von den Apps über MediaCapture- und MediaPlayer-APIs abgerufen und genutzt werden, um eine 360-, sphärische, schwenkende Videovorschauumgebung zu projizieren. Die über dmft bereitgestellten Metadaten werden von der Plattform genutzt, um die Videos im MP4-Format aufzuzeichnen und implizit die richtigen standardisierten Metadaten einzuschließen. Wenn es in einem 360-Wiedergabe-Videoplayer wie der Filme & TV-App auf Windows 10 wiedergegeben wird, bietet das resultierende aufgezeichnete Video die erwartete kugelförmige Ansichtsverschiebungserfahrung.
360 Kameranutzung:
Für die Vorschau eines 360-Frames muss eine Anwendung explizit das XAML MediaPlayerElement für die Vorschau verwenden. Eine Anwendung muss auch die Benutzeroberflächeninteraktion explizit verarbeiten, um die Verschiebung über die MediaPlaybackSphericalVideoProjection.ViewOrientation-Quaternion durchzuführen.
Bei 360-Videodatensätzen muss eine Aufnahmeanwendung nicht explizit für 360-Inhalte konfiguriert werden, wenn sie MediaCapture WinRT-APIs verwendet, da das sphärische Format implizit an die Datensatzsenke übergeben und in den Dateiheader geschrieben wird.
Für 360-Fotoaufnahmen muss eine Anwendung explizit die entsprechenden standardisierten Metadaten hinzufügen, die das sphärische Format mithilfe der verfügbaren WIC WinRT-APIs angeben.
Es ist bis zur 360 Kamera IHV, einen Stream mit einer projizierten Ansicht zu implementieren und Pan/Tilt/Zoom-Steuerelemente verfügbar zu machen.
Die Anwendung kann einen Effekt implementieren und einfügen, um eine Projektion zu generieren. Der Effekt kann die Attribute für den Medientyp nutzen, um equirectangulare Frames zu identifizieren.
Aufbau
Das folgende Diagramm veranschaulicht die Beziehung des DMFT zum 360-Kamerastapel:
360 Kamera-IHVs veröffentlichen eine DMFT, die 360 Videostreams verfügbar macht, die sphärische Frames eines definierten Formats bereitstellen. Das DMFT kann installiert und der jeweiligen Kamera zugeordnet werden, über die Verwendung der INF-Datei für die Treibererweiterung, wie im Beispiel beschrieben. INF unten.
Die Heftung und Konvertierung in equirectangular frames kann in der Kamerahardware oder innerhalb des DMFT erfolgen. Es kann besser sein, die DMFT für diesen Zweck zu nutzen, da es die Verwendung von Hardwareressourcen wie GPU für eine effiziente Verarbeitung ermöglicht. Das DMFT füllt auch die folgenden Datenstrom- und Medientypeigenschaften (wie in der folgenden Tabelle gezeigt) auf, um sie als 360 Inhaltsdatenströme zu identifizieren.
Selbst wenn die IHV entscheidet, das Heften in der Kamerahardware durchzuführen, ist ein DMFT immer noch eine obligatorische Anforderung zum Auffüllen der Stream- und Mediatype-Attributeigenschaften für 360-Videos.
Die folgende Tabelle zeigt das erforderliche Stream-Attribut, um eine sphärische Framequelle zu identifizieren:
Eigenschaftenname und GUID | Wert | attribute |
---|---|---|
MF_SD_VIDEO_SPHERICAL {A51DA449-3FDC-478C-BCB5-30BE76595F55} |
TRUE (1) | Stream und MediaType |
MF_SD_VIDEO_SPHERICAL_FORMAT {4A8FC407-6EA1-46C8-B567-6971D4A139C3} |
MFVideoSphericalFormat_Equirectangular (1) | MediaType |
Die oben genannte Eigenschaft ist bereits als Teil von mfidl.idl vorhanden.
Um benutzerdefinierte Apps zu nutzen, die auch Stitching ausführen, hat ein IHV die Möglichkeit, einen anderen nicht entfernten 360-Videomedientyp mit Attributen verfügbar zu machen, die als MF_SD_VIDEO_SPHERICAL_FORMAT auf MFVideoSphericalFormat_Unsupported(0) festgelegt sind. Die benutzerdefinierte Anwendung müsste den nicht verarbeiteten Stream auswählen und verarbeiten.
Plattformleitfaden
Die Plattform macht bereits alle Streamattribute für Anwendungen über MediaFrameSourceInfo.Properties für die WinRT-Ebene verfügbar, die nach der in der obigen Tabelle definierten MF_SD_VIDEO_SPHERICAL GUID gesucht werden kann. Die meisten sphärischen Konfigurationen von Plattformelementen werden jedoch implizit von der Plattform verwaltet. Die Eigenschaften können von der Anwendung nur für zusätzliche Funktionen abgefragt werden, die der Anwendungsentwickler möglicherweise implementieren möchte, z. B. alle benutzerdefinierten Effekte, die je nach Sphärigkeit des Videos eingefügt oder entfernt werden müssen.
Die Plattform umgeht die Posteingangseffekte wie Gesichtserkennung, Szenenanalyse und Videostabilisierung (falls hinzugefügt), wenn sie den Wert der Stream-Attributeigenschaft erkennt, der eine sphärische Framequelle angibt.
Die Plattform konfiguriert implizit das media player-Element, das für die Vorschau für die 360-Videoprojektion verbunden ist. Die Anwendung muss geeignete Plattform-APIs aufrufen, um das Media Player-Element für die Vorschau auszuwählen. Die Anwendung muss auch die Benutzeroberfläche implementieren, um die Projektionsrichtung und den Winkel des Media Players zu steuern. Wenn die Anwendung das Erfassungselement für die Vorschau auswäht, kann die sphärische Projektionsoberfläche nicht genutzt werden.
Die Plattform konfiguriert auch implizit die MP4-Senke, um ein 360-Video aufzuzeichnen (übergeben Sie das entsprechende sphärische Videoformat und die zugehörigen Metadaten, falls verfügbar und unterstützt), wenn der verwendete Stream die -Eigenschaft (in der folgenden Tabelle definiert) enthält, um das erforderliche Stream-Attribut zum Identifizieren einer sphärischen Framequelle bereitzustellen.
MF_SD_VIDEO_SPHERICAL_FORMAT Wert (MFVideoSphericalFormat) | SphericalVideoFrameFormat-Wert | Auslegung |
---|---|---|
Eigenschaft in Medientypattributen gefunden, die auf Wert MFVideoSphericalFormat_Equirectangular (1) festgelegt sind | SphericalVideoFrameFormat. Equirectangular | Der Stream stellt kugelförmige Frames im equirectangular-Format bereit, die über das MediaPlayer-Element angezeigt werden können. |
Eigenschaft in Medientypattributen gefunden, die auf Wert MFVideoSphericalFormat_Unsupported (0) festgelegt sind | SphericalVideoFrameFormat. Nicht unterstützt | Der Stream stellt kugelförmige Frames in einem anderen Format bereit, das nicht mit dem MediaPlayer-Element kompatibel ist. (Kann ein benutzerdefiniertes Format sein, das von einigen Apps unterstützt wird) |
Die Eigenschaft fehlt in den Medientypattributen. | SphericalVideoFrameFormat. Keine | Der Stream stellt reguläre nicht kugelförmige Frames bereit. (nicht 360) |
Anwendungsleitfaden
Die Anwendung kann das MediaPlayerElement-XAML-Steuerelement verwenden, um die 360-Videoprojektion zu nutzen.
Wenn die MF_SD_VIDEO_SPHERICAL_FORMAT-Eigenschaft für den Medientyp vorhanden ist und auf MFVideoSphericalFormat_Equirectangular festgelegt ist, wird erwartet, dass die Frames kugelförmig sind und entsprechend über das MediaPlayerElement-XAML-Steuerelement gerendert werden können. Die Anwendung kann das vom Media Player erkannte sphärische Format abfragen, indem sie die Eigenschaften von MediaPlaybackSphericalVideoProjection aus der Media Player-Wiedergabesitzung (objMediaPlayer.PlaybackSession.SphericalVideoProjection) überprüft. Die Anwendung muss die isEnabled-Eigenschaft auf TRUE festlegen, um die sphärische Projektion zu starten.
Wenn die Anwendung eine eigene benutzerdefinierte sphärische Projektionskomponente implementiert, kann sie die Framequelle über ihre MediaFrameSourceInfo.Properties für die Videoeigenschaften auf sphärische Streamebene abfragen, wie in der obigen Tabelle beschrieben. Alle Plattformelementkonfigurationen wie Media Player-Vorschau und Datensatzsenke werden jedoch implizit von der Plattform konfiguriert, wenn die sphärischen Videoeigenschaften erkannt werden, die vom Kamera-DMFT für Stream- und Medientypattribute verfügbar gemacht werden.
. INF-Dateibeispiel zum Veröffentlichen einer 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
Beispielrahmenfluss mit einem UVC-Gerät
(1) Untitched combined frame coming out of USBVideo.sys:
(2) Rahmen unwared, zusammengefügt und transformiert in equirectangular innerhalb einer DMFT, die an das Renderingelement der Anwendung zur Vorschau gesendet wird, in eine Videosenke oder Fotosenke, die in einer Datei gespeichert werden soll:
(3) Gerenderter Viewport in einer Anwendung mithilfe eines UI-Elements, das eine sphärische Projektion anwendet sowie viewport-Drehung und Interaktion im Sichtfeld bereitstellt: