重构后的内容如下:

## 360 相机视频捕获

Windows 10,版本 1803 支持使用现有 MediaCapture API 进行 360 相机预览、捕获和录制。这使平台能够公开球面帧源 (例如,等量角框) ,使应用能够检测和处理 360 个视频相机流,并提供 360 个捕获体验。

### 概述

360 相机 IHV 可以提供 DMFT 插件,无论是否具有自定义 UVC 驱动程序。 这将公开发出球形帧的每种流和媒体类型的球形格式,并处理相机驱动程序输出并提供具有相应属性和元数据的等距矩形框架。大多数 360 相机都带有 2 个传感器,并覆盖 360 FoV,并具有一些重叠。 IHV 通常会与两个鱼眼传感器同步捕获,取消捕获并缝合 DMFT 中的帧,然后输出等量矩形框架。然后,应用可以通过 MediaCapture 和 MediaPlayer API 获取和使用这些等值矩形框架,以投影 360 个球面平移视频预览体验。平台将利用通过 DMFT 提供的元数据以 MP4 格式录制视频,并隐式包含适当的标准化元数据。从 360 个播放的视频播放器(如 Windows 10 上的电影 & 电视应用)中播放时,生成的录制视频将提供预期的球面视图平移体验。

### 360 相机的使用情况

它由 360 相机 IHV 来实现具有投影视图的流并公开平移/倾斜/缩放控件。应用程序可以实现并插入效果以生成投影。该效果可以利用 mediatype 上的属性来识别等距的矩形框架。

### 体系结构

下图演示了 DMFT 与 360 相机堆栈的关系:360 相机 IHV 将发布 DMFT,该 DMFT 将公开 360 个视频流,提供已定义格式的球面帧。可以通过将 INF 文件用于驱动程序扩展来安装 DMFT 并将其与特定相机相关联。下面的 INF 在相机硬件或 DMFT 内部可以进行等距棱镜框的拼接和转换。最好利用 DMFT 实现此目的,因为它允许使用 GPU 等硬件资源进行高效处理。DMFT 还

以下是重构后的文本:

属性:MF_SD_VIDEO_SPHERICAL

值:{A51DA449-3FDC-478C-BCB5-30BE76595F55}

类型:TRUE (1)

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)。自定义应用程序必须选择未处理的流并进行处理。

平台指南:平台已通过MediaFrameSourceInfo.Properties向应用程序的WinRT层公开所有流属性,可搜索上表中定义的MF_SD_VIDEO_SPHERICAL GUID。但是,平台元素的大多数球形配置将由平台隐式管理。应用程序只能针对应用程序开发人员可能想要实现的任何额外功能(例如,需要插入或删除的任何自定义效果,具体取决于视频的球面性)查询属性。当平台检测到指示球面帧源的流属性值时,如果添加),则平台绕过收件箱效果,如人脸检测、场景分析器和视频防抖动。平台隐式配置连接的媒体播放器元素,以便预览360视频投影体验。应用程序必须调用相应的平台API来选择媒体播放器元素进行预览。应用程序还必须实现UI来控制媒体播放器的投影方向和角度。如果应用程序选择捕获元素进行预览,则无法利用球面投影体验。当使用的流包含下表中定义的属性()时,平台还隐式配置MP4接收器以录制360视频())提供标识球面帧源所需的流属性。MF_SD_VIDEO_SPHERICAL_FORMAT值()SphericalVideoFrameFormat值解释

在媒体类型属性中,可以找到以下几种设置:

1. MFVideoSphericalFormat_Equirectangular (1):该流提供可通过 MediaPlayer 元素查看的等值矩形框架。

2. MFVideoSphericalFormat_Unsupported (0):该流以另一种格式提供与 MediaPlayer 元素不兼容的球面帧。这可能是某些应用支持的自定义格式。

3. 无:该流提供常规的非球形帧。这些帧不是 360 度的。

应用程序准则如下:

应用程序可以使用 MediaPlayerElement XAML 控件来利用 360 视频球面投影体验。如果媒体类型上存在 MF_SD_VIDEO_SPHERICAL_FORMAT 属性,并且设置为 MFVideoSphericalFormat_Equirectangular,则帧应为球形,并且可以通过 MediaPlayerElement XAML 控件正确呈现。应用程序可以通过检查从媒体播放器播放会话获取的 MediaPlaybackSpherVideoProjection (objMediaPlayer.PlaybackSession.SphericalVideoProjection) 来查询媒体播放器检测到的球形格式。应用程序必须将 isEnabled 属性设置为 TRUE 才能启动球面投影。

如果应用程序实现其自己的自定义球面投影组件,则它可以通过其 MediaFrameSourceInfo.Properties 查询帧源的球形流级别视频属性,如上表所述。但是,所有平台元素配置(如媒体播放器预览和录制接收器)都将在检测摄像机 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设备(USB Video Class Device)进行视频流传输和处理:

1. USBVideo.sys的未加密组合帧:这是视频流的第一部分,它包含了未经加密的原始视频数据。这些数据在传输过程中会被加密保护,以防止未经授权的访问。

2. 帧未经修改、缝合并转换为DMFT中的等距矩形:这一步是对原始帧进行预处理,包括去除不需要的信息、调整分辨率、添加时间戳等。然后,将处理后的帧转换为等距矩形,以便在DMFT中进行进一步的处理和分析。

3. 发送到应用程序的呈现元素以供预览:经过前两步处理的视频流可以被发送到应用程序,作为用户的实时预览画面。这样用户可以在不离开当前工作的情况下查看视频内容。

4. 到要存储到文件的视频接收器或照片接收器:如果用户需要将视频保存到本地文件或照片库中,可以将处理后的视频流发送到相应的接收器。这些接收器可以根据用户的需求进行格式转换,如将H.264编码的视频转换为MP4格式,或者直接保存为JPEG图片。

5. 使用UI元素在应用程序中呈现的视区:为了提供更丰富的用户体验,可以使用UI元素对视频进行可视化处理。例如,可以创建一个球面投影视图,根据用户的操作旋转和平移视角;还可以添加一些交互功能,如缩放、拖动等。

总之,通过以上步骤,我们可以使用UVC设备实现视频流的实时传输和处理,并将其呈现给用户。同时,还可以利用各种技术和工具对视频数据进行分析和优化,提高视频质量和性能。