Udostępnij przez


Przechwytywanie wideo z kamery 360

System Windows 10 w wersji 1803 zapewnia obsługę podglądu, przechwytywania i rejestrowania za pomocą kamer 360 z użyciem istniejących interfejsów API MediaCapture. Dzięki temu platforma może uwidaczniać źródła klatek sferycznych (na przykład klatki równokątne), umożliwiając aplikacjom wykrywanie i obsługę strumieni wideo z kamer 360, a także zapewnienie doświadczenia przechwytywania w 360 stopniach.

Uwaga / Notatka

Przykład Cam360 dostępny w witrynie GitHub pokazuje, jak obsługiwać scenariusze podglądu, nagrywania wideo i przechwytywania zdjęć z aparatem 360 w systemie Windows.

Przegląd

Aparat IHV 360 może zapewnić wtyczki DMFT (z niestandardowymi sterownikami UVC lub bez nich), które uwidocznią format sferyczny każdego strumienia oraz typu nośnika, który emituje ramki sferyczne. Dodatkowo, przetwarzają one dane wyjściowe sterownika aparatu i dostarczają ramki równokątne z odpowiednimi atrybutami oraz metadanymi.

Większość kamer 360 jest wyposażona w 2 czujniki ustawione tyłem do siebie i obejmują 360-stopniowe pole widzenia z pewnym nakładaniem się. IHV zazwyczaj przechwytuje synchronicznie za pomocą dwóch czujników typu fisheye, przetwarza i zszywa ramki wewnątrz DMFT, aby następnie wyprowadzić równokątne ramki.

Te ramki równokątne można następnie uzyskać i wykorzystywać przez aplikacje za pośrednictwem interfejsów API MediaCapture i MediaPlayer, aby zapewnić projekcję 360, sferycznego, przewijanego wideo w wersji zapoznawczej. Metadane udostępniane za pośrednictwem narzędzia DMFT będą wykorzystywane przez platformę do rejestrowania filmów wideo w formacie MP4 i automatycznego uwzględniania odpowiednich ustandaryzowanych metadanych. W przypadku odtwarzania w odtwarzaczu wideo obsługującym 360-stopniowy widok, takim jak aplikacja Filmy i TV w systemie Windows 10, nagrany film będzie oferować oczekiwane wrażenia przesuwania widoku sferycznego.

Użycie aparatu 360:

  • Aby wyświetlić podgląd klatki 360-stopniowej, aplikacja musi jawnie używać do tego celu elementu XAML MediaPlayerElement. Aplikacja musi również jawnie obsługiwać interakcję interfejsu użytkownika w celu przesuwania wokół za pomocą kwaternionu MediaPlaybackSphericalVideoProjection.ViewOrientation.

  • W przypadku nagrywania wideo 360 aplikacja przechwytywania nie musi być skonfigurowana jawnie do treści 360, jeśli używa interfejsów API MediaCapture WinRT, ponieważ format sferyczny jest niejawnie przekazywany do miejsca docelowego nagrywania i zapisywany w nagłówku pliku.

  • W przypadku przechwytywania zdjęć 360 aplikacja musi jawnie dodać odpowiednie ustandaryzowane metadane określające jego format sfericzny przy użyciu dostępnych interfejsów API WinRT WIC.

To producent 360 kamer IHV jest odpowiedzialny za wdrożenie strumienia z rzutowanym widokiem i udostępnienie kontroli Pan/Tilt/Zoom.

Aplikacja może zaimplementować i wstawić efekt w celu wygenerowania projekcji. Efekt może wykorzystać atrybuty w typie nośnika w celu zidentyfikowania równoczesnych ramek.

Architektura

Na poniższym diagramie przedstawiono relację DMFT z modułem kamery 360.

Układ kamer 360 stopni.

Wytwórcy sprzętu dla kamer 360 opublikują DMFT, który będzie umożliwiał przesyłanie strumieni wideo 360, zapewniających kuliste klatki zdefiniowanego formatu. Narzędzie DMFT można zainstalować i skojarzyć z konkretnym aparatem za pomocą pliku INF dla rozszerzenia sterownika, zgodnie z opisem w przykładzie . InF poniżej.

Szwy i konwersja na równokątne ramki mogą odbywać się w sprzęcie aparatu lub wewnątrz DMFT. W tym celu może być preferowane wykorzystanie dmFT, ponieważ umożliwi korzystanie z zasobów sprzętowych, takich jak procesor GPU do wydajnego przetwarzania. DmFT wypełni również następujące właściwości strumienia i typu nośnika (jak pokazano w poniższej tabeli), aby zidentyfikować je jako 360 strumieni zawartości.

Nawet jeśli IHV zdecyduje się na wykonanie łączenia w sprzęcie kamery, DMFT jest nadal konieczny do wypełnienia właściwości atrybutu strumienia i typu_mediów dla wideo 360 stopni.

W poniższej tabeli przedstawiono wymagany atrybut strumienia, aby zidentyfikować źródło ramki sferycznej.

Nazwa właściwości i Globalnie Unikalny Identyfikator (GUID) Wartość Attribute
MF_SD_VIDEO_SFERYCZNY
{A51DA449-3FDC-478C-BCB5-30BE76595F55}
TRUE (1) Stream i MediaType
MF_SD_VIDEO_SPHERICAL_FORMAT
{4A8FC407-6EA1-46C8-B567-6971D4A139C3}
MFVideoSphericalFormat_Equirectangular (1) Typ nośnika

Powyższa właściwość już istnieje w ramach pliku mfidl.idl.

Aby korzystać z niestandardowych aplikacji, które również wykonują łączenie, IHV ma możliwość udostępnienia innego niezszywanego typu wideo 360 z atrybutami ustawionymi jako MF_SD_VIDEO_SPHERICAL_FORMAT na MFVideoSphericalFormat_Unsupported(0). Aplikacja niestandardowa musiałaby wybrać nieprzetworzony strumień i obsłużyć go.

Wskazówki dotyczące platformy

Platforma udostępnia już wszystkie atrybuty strumienia w warstwie WinRT dla aplikacji za pośrednictwem elementu MediaFrameSourceInfo.Properties, w której można wyszukać identyfikator GUID MF_SD_VIDEO_SPHERICAL zdefiniowany w powyższej tabeli. Jednak większość sferycznych konfiguracji elementów platformy będzie zarządzana niejawnie przez platformę. Właściwości mogą być odpytywane przez aplikację wyłącznie w celu uzyskania dodatkowej funkcjonalności, którą twórca aplikacji może zechcieć zaimplementować, na przykład dla wszelkich niestandardowych efektów, które należy wstawić lub usunąć w zależności od kulistości wideo.

Platforma pomija efekty skrzynki odbiorczej, takie jak wykrywanie twarzy, analizator sceny i stabilizacja wideo (jeśli dodano), gdy wykryje wartość właściwości atrybutu strumienia wskazującą źródło ramki spherical.

Platforma niejawnie konfiguruje element odtwarzacza multimediów połączony na potrzeby wersji zapoznawczej dla środowiska projekcji wideo 360. Aplikacja musi wywołać odpowiednie interfejsy API platformy, aby wybrać element odtwarzacza multimediów w wersji zapoznawczej. Aplikacja musi również zaimplementować interfejs użytkownika w celu kontrolowania kierunku i kąta projekcji odtwarzacza multimediów. Jeśli aplikacja wybierze element przechwytywania w wersji zapoznawczej, nie można wykorzystać środowiska projekcji sfericznej.

Platforma również niejawnie konfiguruje zapis do pliku MP4, aby zarejestrować wideo 360° (przekaż odpowiedni format wideo sferycznego i powiązane metadane, jeśli są dostępne i obsługiwane), gdy używany strumień zawiera właściwość (zdefiniowaną w poniższej tabeli), aby zapewnić wymagany atrybut strumienia do zidentyfikowania źródła metryk sferycznych.

Wartość MF_SD_VIDEO_SPHERICAL_FORMAT (MFVideoSphericalFormat) Wartość SphericalVideoFrameFormat Interpretacja
Właściwość znaleziona w atrybutach typu nośnika ustawiona na wartość MFVideoSphericalFormat_Equirectangular (1) SphericalVideoFrameFormat. Równokątna Strumień dostarcza ramki kulistych w formacie equirektangularnym, które można oglądać za pomocą elementu MediaPlayer.
Właściwość znaleziona w atrybutach typu nośnika ustawiona na wartość MFVideoSphericalFormat_Unsupported (0) Format Sferycznego Obrazu Wideo. Nieobsługiwane Strumień zapewnia sferyczne ramki w innym formacie, który nie jest zgodny z elementem MediaPlayer. (Może być formatem niestandardowym obsługiwanym przez niektóre aplikacje)
Właściwość jest nieobecna w atrybutach typu nośnika. SphericalVideoFrameFormat. Żaden Strumień zapewnia regularne niesferyczne klatki. (inne niż 360)

Wskazówki dotyczące aplikacji

Aplikacja może używać kontrolki XAML MediaPlayerElement, by korzystać z doświadczenia projekcji wideo w 360 stopniach.

Jeśli właściwość MF_SD_VIDEO_SPHERICAL_FORMAT istnieje w typie nośnika i jest ustawiona na MFVideoSphericalFormat_Equirectangular, klatki powinny następnie być sferyczne i mogą być wyświetlane odpowiednio za pośrednictwem kontrolki MediaPlayerElement XAML. Aplikacja może wysyłać zapytania dotyczące formatu sferycznego wykrytego przez odtwarzacz multimedialny, sprawdzając właściwości MediaPlaybackSphericalVideoProjection otrzymane z sesji odtwarzania odtwarzacza multimedialiów (objMediaPlayer.PlaybackSession.SphericalVideoProjection). Aplikacja musi ustawić właściwość isEnabled na TRUE, aby uruchomić projekcję sferyczną.

Jeśli aplikacja implementuje własny niestandardowy składnik sferycznej projekcji, może wysyłać zapytania do źródła klatki za pośrednictwem MediaFrameSourceInfo.Properties dla właściwości wideo sferycznego strumienia zgodnie z opisem w powyższej tabeli. Jednak wszystkie konfiguracje elementów platformy, takie jak podgląd odtwarzacza multimediów i wyjście nagrywania, będą konfigurowane automatycznie przez platformę w momencie wykrycia właściwości wideo sferycznego uwidocznionych przez kamerę DMFT na podstawie atrybutów typu strumienia i nośnika.

Przykładowy plik INF do publikowania 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

Przykładowy przepływ ramki danych z urządzeniem UVC

(1) Nieprzeszyta łączona ramka wychodząca z USBVideo.sys:

Niepołączona ramka.

(2) Ramka niewykrzywiona, zszyta i przekształcona w równokątne odwzorowanie przesłana wewnątrz DMFT do elementu renderującego aplikacji na potrzeby podglądu, do odbiornika wideo lub zdjęciowego, które mają być przechowywane w pliku.

Ramka niewypaczona, zszyta i przekształcona.

(3) Renderowany widok wewnątrz aplikacji z wykorzystaniem elementu interfejsu, który stosuje projekcję sferyczną, a także zapewnia przesuwanie oraz obrót widoku oraz możliwość interakcji z polem widzenia.

Renderowane okienko wyświetlania.