видеосъемка с камерой 360°

Windows 10 версии 1803 предоставляет поддержку предварительного просмотра, захвата и записи с камерами 360 с использованием существующих API MediaCapture. Это позволяет платформе предоставлять сферические источники кадров (например, эквиректангулярные кадры), позволяя приложениям обнаруживать и обрабатывать потоки с видеокамер 360, а также обеспечивать возможности 360-градусной съёмки.

Замечание

Пример Cam360 , доступный на сайте GitHub, показывает, как поддерживать сценарии предварительной версии, записи видео и фотозаписи с 360 камерой в Windows.

Обзор

IHV 360-камеры может предоставлять плагины DMFT (с или без пользовательских драйверов UVC), которые будут раскрывать сферический формат каждого потока и типа мультимедиа, содержащего сферические кадры, а также обрабатывать выходные данные драйвера камеры и предоставлять эквирекангулярные кадры с соответствующими атрибутами и метаданными.

Большинство 360 камер поставляются с 2 датчиками, расположенными обратной стороной друг к другу, и охватывают угол обзора 360 градусов с некоторым перекрытием. IHV обычно будет захватывать изображения синхронно с двумя сенсорами fisheye, разворачивать и сшивать кадры внутри DMFT, чтобы затем выводить эквиректангулярные кадры.

Затем эти эквидистантные кадры можно получить и использовать приложениями через API MediaCapture и MediaPlayer для проецирования 360 и сферического панорамного видео предварительного просмотра. Метаданные, предоставляемые через DMFT, будут использоваться платформой для записи видео в формате MP4 и автоматически включать соответствующие стандартизированные метаданные. При воспроизведении в видеопроигрывателе для 360-градусного видео, таком как приложение "Фильмы и ТВ" на Windows 10, записанное видео будет давать ожидаемый опыт панорамирования сферического вида.

Использование камеры 360:

  • Для предварительного просмотра кадра 360 приложению необходимо явно использовать XAML MediaPlayerElement для отображения предварительной версии. Кроме того, приложению необходимо явно обрабатывать взаимодействие пользовательского интерфейса для сдвига вокруг с помощью кватерниона MediaPlaybackSphericalVideoProjection.ViewOrientation .

  • Для записи видео 360 приложение для записи не требуется явно настраивать для 360 содержимого, если оно использует API MediaCapture WinRT, так как сферический формат неявно передается в записывающий приемник и записывается в заголовок файла.

  • Для записи фотографий 360 приложение должно явно добавить соответствующие стандартизированные метаданные, указывающие его сферический формат с помощью доступных API WinRT WIC.

Задача 360 камеры IHV - реализовать поток с проецируемым обзором и обеспечить элементы управления Pan/Tilt/Zoom.

Приложение может реализовать и вставить эффект для создания проекции. Эффект может использовать атрибуты тип носителя для идентификации эквиректангулярных кадров.

Архитектура

На следующей схеме показана связь DMFT с стеком камеры 360:

Стек камеры 360.

360 камеры IHV будет публиковать DMFT, который будет предоставлять 360 видеопотоков, предоставляющих сферические кадры определенного формата. DMFT можно установить и связать с конкретной камерой с помощью INF-файла для расширения драйвера, как описано в примере. INF ниже.

Сшивка и преобразование в эквиректангуларные кадры могут происходить в оборудовании камеры или внутри DMFT. Это может быть предпочтительнее использовать DMFT для этой цели, так как это позволит использовать аппаратные ресурсы, такие как GPU для эффективной обработки. DMFT также заполняет следующие свойства потока и типа мультимедиа (как показано в таблице ниже), чтобы определить их как 360 потоков содержимого.

Даже если IHV решит выполнить сшивание в аппаратном обеспечении камеры, DMFT по-прежнему обязательно для заполнения свойств потока и медиатипа для видео 360.

В следующей таблице показан обязательный атрибут потока для идентификации источника сферического кадра:

Имя свойства и GUID Ценность Свойство
MF_SD_VIDEO_SPHERICAL
{A51DA449-3FDC-478C-BCB5-30BE76595F55}
ИСТИНА (1) Stream и MediaType
MF_SD_VIDEO_SPHERICAL_FORMAT
{4A8FC407-6EA1-46C8-B567-6971D4A139C3}
MFVideoSphericalFormat_Equirectangular (1) Тип мультимедиа

Приведенное выше свойство уже существует как часть mfidl.idl.idl.

Для использования пользовательских приложений, которые также выполняют объединение, у IHV есть возможность предоставить другой тип несобранного 360-градусного видеопотока с атрибутами, установленными как MF_SD_VIDEO_SPHERICAL_FORMAT на MFVideoSphericalFormat_Unsupported(0). Пользовательское приложение должно выбрать необработанный поток и обработать его.

Руководство по платформе

Платформа уже раскрывает все атрибуты потока для слоя WinRT приложений через MediaFrameSourceInfo.Properties, в которых можно искать GUID MF_SD_VIDEO_SPHERICAL, определенный в таблице выше. Однако большинство сферических конфигураций элементов платформы будут управляться неявно платформой. Свойства могут запрашиваться приложением только для любых дополнительных функций, которые разработчик приложения может реализовать, например, любые настраиваемые эффекты, которые необходимо вставить или удалить в зависимости от сферичности видео.

Платформа обходит эффекты, такие как распознавание лиц, анализ сцен и стабилизацию видео (если добавлено), когда обнаруживает значение атрибута потока, указывающее на источник сферического кадра.

Платформа неявно настраивает элемент медиаплеера, подключенный для предварительного просмотра 360-градусного видео. Приложению необходимо вызвать соответствующие API платформы, чтобы выбрать элемент проигрывателя мультимедиа для предварительной версии. Приложение также должен реализовать пользовательский интерфейс для управления направлением проекции проигрывателя мультимедиа и углом. Если приложение выбирает элемент записи для предварительной версии, то не удается использовать интерфейс с сферической проекцией.

Платформа также неявно настраивает приемник MP4 для записи 360-градусного видео (передайте соответствующий формат сферического видео и связанные метаданные, если они доступны и поддерживаются), когда используемый поток содержит свойство (определенное в следующей таблице), чтобы предоставить необходимый атрибут потока для идентификации источника кадра сферического видео.

значение MF_SD_VIDEO_SPHERICAL_FORMAT (MFVideoSphericalFormat) Значение SphericalVideoFrameFormat Интерпретация
Свойство, найденное в атрибутах типа мультимедиа, равное значению MFVideoSphericalFormat_Equirectangular (1) SphericalVideoFrameFormat. Эквиректангулярный Поток предоставляет сферические кадры в эквиректангулярном формате, доступные для просмотра с помощью элемента MediaPlayer.
В атрибутах типа носителя обнаружено свойство, имеющее значение MFVideoSphericalFormat_Unsupported (0) SphericalVideoFrameFormat. Не поддерживается Поток предоставляет сферические кадры в другом формате, который несовместим с элементом MediaPlayer. (Может быть настраиваемым форматом, поддерживаемым некоторыми приложениями)
Свойство отсутствует в атрибутах типа мультимедиа. SphericalVideoFrameFormat. Отсутствует Поток предоставляет регулярные несферические кадры. (не 360)

Руководство по приложению

Приложение может использовать элемент управления MediaPlayerElement XAML для задействования сферической видеопроекции 360.

Если свойство MF_SD_VIDEO_SPHERICAL_FORMAT существует в типе мультимедиа и имеет значение MFVideoSphericalFormat_Equirectangular, то кадры должны быть сферическими и могут быть отрисованы соответствующим образом с помощью элемента управления XAML MediaPlayerElement . Приложение может запрашивать сферический формат, обнаруженный проигрывателем мультимедиа, проверяя свойства MediaPlaybackSphericalVideoProjection, полученные из сеанса воспроизведения проигрывателя мультимедиа (objMediaPlayer.Playsion.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) Кадр развернутый, сшитый и преобразованный в эквиректангулярный формат внутри DMFT, отправленный в элемент отрисовки приложения для предварительного просмотра, в видеоприемник или фотоприемник для хранения в файле.

Кадр неустрачен, сшит и преобразован.

(3) Отображаемое окно просмотра внутри приложения с использованием элемента пользовательского интерфейса, который применяет сферическую проекцию, а также обеспечивает панорамирование и вращение окна просмотра и взаимодействие с полем обзора.

Визуализированная область просмотра.