360 камеры видеосъемки
Windows 10 версии 1803 обеспечивает поддержку предварительного просмотра, захвата и записи камеры 360 с помощью существующих API MediaCapture. Это позволяет платформе предоставлять сферические источники кадров (например, электронные кадры), позволяя приложениям обнаруживать и обрабатывать 360 потоков видеокамер, а также обеспечивать возможность захвата 360.
Примечание
В примере Cam360 , доступном на GitHub, показано, как поддерживать сценарии предварительного просмотра, записи видео и фотосъемки с камерой 360 в Windows.
Общие сведения
IHV камеры 360 может предоставлять подключаемые модули DMFT (с пользовательскими драйверами UVC или без них), которые будут предоставлять сферический формат каждого потока и типа мультимедиа, которые выдают сферические кадры, а также обрабатывать выходные данные драйвера камеры и предоставлять электронные кадры с соответствующим атрибутом и метаданными.
Большинство 360 камер поставляются с 2 датчиками спины к спине и охватывают 360 FoV с некоторым перекрытием. IHV обычно захватывает синхронно с двумя датчиками fisheye, отключая и сшив кадры внутри DMFT, чтобы затем выводить электронные кадры.
Затем эти equirectangular кадры могут быть получены и использованы приложениями с помощью API MediaCapture и MediaPlayer, чтобы проецировать 360 сферический интерфейс предварительного просмотра видео. Метаданные, предоставляемые через DMFT, будут использоваться платформой для записи видео в формате MP4 и неявно заключать соответствующие стандартизированные метаданные. При воспроизведении из 360-воспроизводимого видеопроигрыватель, например приложения "Фильмы & ТВ" на Windows 10, полученное записанное видео будет предлагать ожидаемый сдвиг сферического представления.
Использование 360 камер:
Для предварительного просмотра кадра 360 приложению необходимо явно использовать XAML MediaPlayerElement для предварительного просмотра. Приложение также должно явно обрабатывать взаимодействие с пользовательским интерфейсом для сдвига с помощью кватерниона MediaPlaybackSphericalVideoProjection.ViewOrientation .
Для записей 360 видео приложение записи не нужно явно настраивать для 360 содержимого, если оно использует API-интерфейсы WinRT MediaCapture, так как сферический формат неявно передается в приемник записей и записывается в заголовок файла.
Для 360 фотозахвата приложение должно явно добавить соответствующие стандартизированные метаданные, определяющие сферический формат с помощью доступных API WinRT WIC.
Это до 360 камеры IHV для реализации потока с проецируемым представлением и предоставления элементов управления сдвига, наклона и масштабирования.
Приложение может реализовать и вставить эффект для создания проекции. Эффект может использовать атрибуты mediatype для идентификации электронных кадров.
Архитектура
На следующей схеме показана связь DMFT с стеком камеры 360:
360 камеры IHV опубликуют DMFT, который будет предоставлять 360 видеопотоков, предоставляющих сферические кадры определенного формата. DMFT можно установить и связать с конкретной камерой с помощью INF-файла для расширения драйвера, как описано в примере . Inf ниже.
Сшивание и преобразование в электронные кадры могут выполняться в оборудовании камеры или внутри DMFT. Для этой цели может быть предпочтительнее использовать DMFT, так как это позволит использовать аппаратные ресурсы, такие как GPU, для эффективной обработки. DmFT также заполнит следующие свойства потока и типа мультимедиа (как показано в таблице ниже), чтобы определить их как 360 потоков контента.
Даже если IHV решит выполнить стежку в оборудовании камеры, DMFT по-прежнему является обязательным требованием для заполнения свойств атрибута stream и mediatype для видео 360.
В следующей таблице показан обязательный атрибут потока для идентификации сферического источника кадра:
Имя свойства и GUID | Значение | Атрибут |
---|---|---|
MF_SD_VIDEO_SPHERICAL {A51DA449-3FDC-478C-BCB5-30BE76595F55} |
TRUE (1) | Stream и MediaType |
MF_SD_VIDEO_SPHERICAL_FORMAT {4A8FC407-6EA1-46C8-B567-6971D4A139C3} |
MFVideoSphericalFormat_Equirectangular (1) | MediaType |
Указанное выше свойство уже существует как часть mfidl.idl.
Чтобы использовать пользовательские приложения, которые также выполняют сшивание, IHV имеет возможность предоставить другой незашитый тип видео 360 с атрибутами, заданными как MF_SD_VIDEO_SPHERICAL_FORMAT для MFVideoSphericalFormat_Unsupported(0). Пользовательскому приложению придется выбрать необработанные потоки и обработать его.
Руководство по платформе
Платформа уже предоставляет все атрибуты потока на уровне WinRT для приложений с помощью MediaFrameSourceInfo.Properties, в котором можно найти MF_SD_VIDEO_SPHERICAL GUID, определенный в таблице выше. Однако большинство сферических конфигураций элементов платформы будет неявно управляться платформой. Свойства могут запрашиваться приложением только для любых дополнительных функций, которые разработчик приложения может реализовать, например, любые настраиваемые эффекты, которые необходимо вставить или удалить в зависимости от сферичности видео.
Платформа обходит такие эффекты, как обнаружение лиц, анализатор сцены и стабилизация видео (если они добавлены), при обнаружении значения свойства атрибута потока, указывающего на сферический источник кадра.
Платформа неявно настраивает элемент проигрывателя мультимедиа, подключенный для предварительного просмотра для видеопроецирования 360. Приложению необходимо вызвать СООТВЕТСТВУЮЩИЕ API платформы, чтобы выбрать элемент проигрывателя мультимедиа для предварительного просмотра. Приложению также необходимо реализовать пользовательский интерфейс для управления направлением и углом проекции проигрывателя мультимедиа. Если приложение выбирает элемент захвата для предварительной версии, то использовать сферическую проекцию нельзя.
Платформа также неявно настраивает приемник MP4 для записи видео 360 (передайте соответствующий сферический формат видео и связанные метаданные, если они доступны и поддерживаются), если поток, используемый содержит свойство (определенное в следующей таблице), чтобы предоставить необходимый атрибут потока для идентификации сферического источника кадра.
значение MF_SD_VIDEO_SPHERICAL_FORMAT (MFVideoSphericalFormat) | Значение SphericalVideoFrameFormat | Толкование |
---|---|---|
Свойство, найденное в атрибутах типа носителя, имеет значение MFVideoSphericalFormat_Equirectangular (1) | СферическийVideoFrameFormat. Equirectangular | Поток предоставляет сферические кадры в формате equirectangular, который можно просмотреть с помощью элемента MediaPlayer. |
Свойство, найденное в атрибутах типа мультимедиа, имеет значение MFVideoSphericalFormat_Unsupported (0) | СферическийVideoFrameFormat. Не поддерживается | Поток предоставляет сферические кадры в другом формате, несовместимом с элементом MediaPlayer. (Может быть настраиваемым форматом, поддерживаемым некоторыми приложениями) |
Свойство отсутствует в атрибутах типа мультимедиа. | СферическийVideoFrameFormat. Нет | Поток предоставляет обычные несферические кадры. (не 360) |
Руководство по приложениям
Приложение может использовать элемент управления Xaml MediaPlayerElement , чтобы использовать интерфейс сферической проекции видео 360.
Если свойство MF_SD_VIDEO_SPHERICAL_FORMAT существует в типе носителя и имеет значение MFVideoSphericalFormat_Equirectangular, то кадры должны быть сферическими и соответствующим образом отрисовываться с помощью элемента управления MediaPlayerElement XAML. Приложение может запрашивать сферический формат, обнаруженный проигрывателем мультимедиа, проверив свойства MediaPlaybackSphericalVideoProjection, полученные из сеанса воспроизведения проигрывателя мультимедиа (objMediaPlayer.PlaybackSession.SphericalVideoProjection). Чтобы начать сферическую проекцию, приложению необходимо присвоить свойству isEnabledзначение TRUE .
Если приложение реализует собственный пользовательский компонент сферической проекции, оно может запрашивать источник кадра с помощью mediaFrameSourceInfo.Properties для получения свойств видео на уровне сферического потока, как описано в таблице выше. Однако вся конфигурация элементов платформы, например предварительный просмотр проигрывателя мультимедиа и приемник записей, будет неявно настроена платформой при обнаружении сферических свойств видео, предоставляемых DMFT камеры в атрибутах потоков и типов мультимедиа.
. Пример INF-файла для публикации 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
Пример потока кадров с устройством UVC
(1) Незашитый комбинированный кадр выходит из USBVideo.sys:
(2) Кадр не оторван, сшит и преобразован в equirectangular внутри DMFT, отправляемый в элемент отрисовки приложения для предварительного просмотра, в приемник видео или приемник фотографий, который будет сохранен в файле:
(3) Отображаемое окно просмотра в приложении с помощью элемента пользовательского интерфейса, который применяет сферическую проекцию, а также обеспечивает сдвиг поворота окна просмотра и поле взаимодействия с представлением: