Freigeben über


360 Kamera-Videoaufnahme

Windows 10, Version 1803, bietet Unterstützung für 360 Kameravorschau, Aufnahme und Aufzeichnung mit vorhandenen MediaCapture-APIs. Auf diese Weise kann die Plattform sphärische Framequellen (z. B. äquirectangulare Frames) verfügbar machen, sodass Apps 360 Videokamerastreams erkennen und verarbeiten sowie eine 360 Aufnahmeerfahrung bieten können.

Hinweis

Das auf GitHub verfügbare Cam360-Beispiel zeigt, wie Sie Vorschau-, Videoaufzeichnungs- und Fotoaufnahmeszenarien mit einer 360 Kamera unter Windows unterstützen.

Überblick

Ein 360 Kamera-IHV kann DMFT-Plug-Ins (mit oder ohne benutzerdefinierte UVC-Treiber) bereitstellen, die das sphärische Format der einzelnen Datenstrom- und Medientypen verfügbar machen, die sphärische Bildrahmen ausgeben, sowie die Ausgabe des Kameratreibers verarbeiten und äquirektanguläre Frames mit entsprechenden Attributen und Metadaten bereitstellen.

Die meisten 360-Grad-Kameras verfügen über 2 Sensoren, die rückseitig zueinander angebracht sind, und decken ein 360-Grad-Sichtfeld mit einiger Überlappung ab. Ein IHV würde in der Regel synchron mit den beiden Fisheye-Sensoren erfassen, die Bilder entzerren und innerhalb der DMFT zusammenfügen, um dann equirektangulare Bilder auszugeben.

Diese äquirectangularen Frames können dann von den Apps über MediaCapture- und MediaPlayer-APIs erworben und genutzt werden, um eine 360-, sphärische, schwenkende Videovorschau-Erfahrung 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 sie von einem 360-Wiedergabe-Videoplayer wie der Filme & TV-App unter Windows 10 wiedergegeben wird, bietet das resultierende aufgezeichnete Video die erwartete sphärische Ansichtsverschiebung.

360-Kamera-Nutzung

  • Für die Vorschau eines 360-Frames muss eine Anwendung das XAML MediaPlayerElement explizit für die Vorschau verwenden. Eine Anwendung muss auch explizit die UI-Interaktion zum Schwenken über das MediaPlaybackSphericalVideoProjection.ViewOrientation-Quaternion behandeln.

  • Bei 360 Videoaufzeichnungen 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 ihr sphärisches Format mit verfügbaren WIC WinRT-APIs angeben.

Es liegt bei der 360 Kamera-IHV, einen Datenstrom 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 auf dem Mediatyp nutzen, um äquirectangulare Frames zu identifizieren.

Architektur

Das folgende Diagramm veranschaulicht die Beziehung des DMFT zum 360-Kamerastapel:

360 Kamera-Setup.

360 Kamera-IHVs veröffentlichen einen DMFT, der 360 Videostreams verfügbar macht, die sphärische Frames eines definierten Formats bereitstellen. Die DMFT kann über die Verwendung der INF-Datei für die Treibererweiterung installiert und mit der jeweiligen Kamera verknüpft werden, wie im Beispiel beschrieben. INF unten.

Das Stitching und die Konvertierung in equirektangulare Rahmen können in der Kamerahardware oder innerhalb der DMFT stattfinden. Es kann vorzuziehen sein, den 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 dargestellt) auf, um sie als 360 Inhaltsdatenströme zu identifizieren.

Selbst wenn der unabhängige Hardwareanbieter (IHV) entscheidet, dass das Stitching in der Kamerahardware erfolgt, ist ein DMFT weiterhin eine obligatorische Anforderung, um die Stream- und Medientyp-Attribut-Eigenschaften für 360-Grad-Video festzulegen.

Die folgende Tabelle zeigt das erforderliche Stream-Attribut, um eine sphärische Framequelle zu identifizieren:

Eigenschaftsname und GUID Wert Merkmal
MF_SD_VIDEO_SPHERICAL
{A51DA449-3FDC-478C-BCB5-30BE76595F55}
WAHR (1) Stream und MediaType
MF_SD_VIDEO_SPHERICAL_FORMAT
{4A8FC407-6EA1-46C8-B567-6971D4A139C3}
MFVideoSphericalFormat_Equirectangular (1) Medientyp

Die oben genannte Eigenschaft ist bereits als Teil von mfidl.idl vorhanden.

Um benutzerdefinierte Apps zu nutzen, die auch das Zusammensetzen ausführen, hat ein IHV die Möglichkeit, einen anderen unzusammengesetzten 360-Grad-Videodateityp bereitzustellen, dessen Attribute als MF_SD_VIDEO_SPHERICAL_FORMAT auf MFVideoSphericalFormat_Unsupported(0) festgelegt werden. Die benutzerdefinierte Anwendung muss den unverarbeiteten Datenstrom auswählen und ihn behandeln.

Plattformleitfaden

Die Plattform stellt bereits alle Stream-Attribute für Anwendungen auf der WinRT-Ebene über MediaFrameSourceInfo.Properties zur Verfügung, über die in der obigen Tabelle definierte 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 implementieren möchte, z. B. alle benutzerdefinierten Effekte, die je nach Sphärische des Videos eingefügt oder entfernt werden müssen.

Die Plattform umgeht die Posteingangseffekte wie Gesichtserkennung, Szenenanalyse und Videostabilisierung (sofern hinzugefügt), wenn der Stream-Attributeigenschaftswert erkannt wird, der eine sphärische Framequelle angibt.

Die Plattform konfiguriert implizit das Media-Player-Element, das zur Vorschau für ein 360-Grad-Videoprojektionserlebnis 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 Aufnahmeelement für die Vorschau auswählt, kann die sphärische Projektionserfahrung nicht genutzt werden.

Die Plattform konfiguriert außerdem implizit die MP4-Ausgabe, um ein 360-Video aufzuzeichnen (übergeben Sie das entsprechende sphärische Format und zugehörige 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 bereitzustellen, durch das eine sphärische Framequelle identifiziert werden kann.

MF_SD_VIDEO_SPHERICAL_FORMAT Wert (MFVideoSphericalFormat) SphericalVideoFrameFormat-Wert Interpretation
Eigenschaft in Medientypattributen, die auf Wert MFVideoSphericalFormat_Equirectangular festgelegt sind (1) Sphärisches Videoformat für Bildrahmen. Äquirectangular Der Stream stellt sphärische Frames im equirectangularen Format bereit, die über MediaPlayer-Element angezeigt werden können.
Eigenschaften in Medientypattributen, die auf den Wert MFVideoSphericalFormat_Unsupported (0) festgelegt sind SphericalVideoFrameFormat. Nicht unterstützt Der Datenstrom stellt sphärische Frames in einem anderen Format bereit, das nicht mit Dem MediaPlayer-Element kompatibel ist. (Es kann sich um ein benutzerdefiniertes Format handeln, das von einigen Apps unterstützt wird)
Die Eigenschaft fehlt in den Medientyp-Attributen. SphärischesVideoFrameFormat. Nichts Der Datenstrom stellt normale, nicht sphärische 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 spärisch sind und über das MediaPlayerElement-XAML-Steuerelement entsprechend gerendert werden können. Die Anwendung kann das vom Media Player erkannte sphärische Format abfragen, indem die Eigenschaften von MediaPlaybackSphericalVideoProjection überprüft werden, die von der Media Player-Wiedergabesitzung abgerufen werden (objMediaPlayer.PlaybackSession.SphericalVideoProjection). 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 Rahmenquelle über MediaFrameSourceInfo.Properties abfragen, um die Videoeigenschaften der sphärischen Ebene des Datenstroms zu erhalten, wie in der obigen Tabelle beschrieben. Alle Plattformelementkonfigurationen, wie Medien-Player-Vorschau und Aufnahmespeicher, werden jedoch von der Plattform automatisch konfiguriert, basierend auf der Erkennung der von der Kamera-DMFT im Stream und den Medientypeigenschaften offengelegten sphärischen Videoeigenschaften.

.INF-Dateibeispiel zum Veröffentlichen eines 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

Ein ungenähter kombinierter Rahmen kommt aus USBVideo.sysheraus.

Ungehefteter kombinierter Rahmen.

(2) Frame unverzerrt, gestitcht und in "equirectangular" in ein DMFT umgewandelt, das an das Renderingelement der Anwendung zur Vorschau gesendet wird, an eine Videosenke oder eine Fotosenke, um in der Datei gespeichert zu werden.

Rahmen entzerrt, genäht und transformiert.

(3) Gerenderter Viewport in einer Anwendung mithilfe eines UI-Elements, das eine sphärische Projektion anwendet, sowie Drehung und Schwenken des Viewports und Sichtfeldinteraktion bereitstellt.

Gerenderter Viewport.