Partilhar via


Captura de vídeo da câmera 360

O Windows 10, versão 1803 oferece suporte para visualização, captura e gravação de câmera 360 com APIs MediaCapture existentes. Isso permite que a plataforma exponha fontes de quadros esféricos (por exemplo, quadros equiretangulares), permitindo que os aplicativos detetem e manipulem fluxos de câmeras de vídeo 360, bem como forneçam uma experiência de captura 360.

Observação

O exemplo Cam360 disponível no GitHub mostra como suportar cenários de visualização, gravação de vídeo e captura de fotos com uma câmera 360 no Windows.

Visão geral

Um IHV de câmeras 360 pode fornecer plugins DMFT (com ou sem drivers UVC personalizados) que irão expor o formato esférico de cada fluxo e tipo de mídia que emite quadros esféricos, além de processar a saída do driver da câmera e fornecer quadros equirectangulares com os atributos e metadados adequados.

A maioria das câmaras 360 vêm com 2 sensores de costas e cobrem um campo de visão de 360° com uma ligeira sobreposição. Um IHV normalmente capturaria de forma síncrona usando os dois sensores olho de peixe, corrigiria a distorção e juntaria os quadros dentro do DMFT para então produzir quadros equiretangulares.

Esses quadros equiretangulares podem ser adquiridos e consumidos pelas aplicações por meio das APIs MediaCapture e MediaPlayer para projetar uma experiência de pré-visualização de vídeo panorâmica esférica em 360 graus. Os metadados fornecidos através do DMFT serão aproveitados pela plataforma para gravar os vídeos em formato MP4 e incluir implicitamente os metadados padronizados adequados. Quando reproduzido a partir de um leitor de vídeo de reprodução 360, como a aplicação Filmes e TV no Windows 10, o vídeo gravado resultante oferecerá a experiência de panorâmica de vista esférica esperada.

Uso da câmera 360:

  • Para visualizar um quadro 360, um aplicativo precisa usar explicitamente o MediaPlayerElement XAML para visualização. Um aplicativo também precisa lidar explicitamente com a interação da interface do usuário para movimento panorâmico, por meio do quaternião MediaPlaybackSphericalVideoProjection.ViewOrientation .

  • Para gravação de vídeo 360, um aplicativo de captura não precisa ser configurado explicitamente para conteúdo 360 se estiver usando APIs do MediaCapture WinRT, pois o formato esférico é implicitamente passado para o coletor de registro e gravado no cabeçalho do arquivo.

  • Para a captura de fotos 360, um aplicativo precisa adicionar explicitamente os metadados padronizados apropriados que especificam seu formato esférico usando APIs WIC WinRT disponíveis.

Cabe à câmera 360 IHV implementar um fluxo com uma visão projetada e expor controles Pan / Tilt / Zoom.

O aplicativo pode implementar e inserir um efeito para gerar uma projeção. O efeito pode aproveitar os atributos no tipo de media para identificar fotogramas equiretangulares.

Arquitetura

O diagrama a seguir ilustra a relação do DMFT com a pilha de câmeras 360:

Sistema de câmaras 360.

IHVs de câmeras 360 publicarão um DMFT que irá revelar fluxos de vídeo 360 graus fornecendo quadros esféricos num formato definido. O DMFT pode ser instalado e associado com a câmera particular através do uso do arquivo INF para extensão de driver como descrito no exemplo. INF abaixo.

A costura e conversão para quadros equiretangulares pode ocorrer no hardware da câmera ou dentro do DMFT. Pode ser preferível aproveitar o DMFT para este fim, pois permitirá o uso de recursos de hardware como GPU para processamento eficiente. O DMFT também preencherá as seguintes propriedades de fluxo e tipo de mídia (conforme mostrado na tabela abaixo) para identificá-las como fluxos de conteúdo 360.

Mesmo que o IHV decida fazer a costura no hardware da câmara, um DMFT ainda é um requisito obrigatório para preencher as propriedades dos atributos de fluxo e tipo de mídia para vídeo 360.

A tabela a seguir mostra o atributo de fluxo necessário para identificar uma fonte de quadro esférico:

Nome da propriedade e GUID Valor Atributo
MF_SD_VIDEO_SPHERICAL
{A51DA449-3FDC-478C-BCB5-30BE76595F55}
VERDADEIRO (1) Stream e MediaType
MF_SD_VIDEO_SPHERICAL_FORMAT
{4A8FC407-6EA1-46C8-B567-6971D4A139C3}
MFVideoSphericalFormat_Equirectangular (1) TipoDeMídia

A propriedade acima já existe como parte do mfidl.idl.

Para aproveitar aplicativos personalizados que também executam costuras, um IHV tem a opção de expor outro tipo de mídia de vídeo 360 sem costura com atributos definidos como MF_SD_VIDEO_SPHERICAL_FORMAT a MFVideoSphericalFormat_Unsupported(0). O aplicativo personalizado teria que selecionar o fluxo não processado e manipulá-lo.

Orientação da plataforma

A plataforma já expõe todos os atributos de fluxo à camada WinRT para aplicações através de MediaFrameSourceInfo.Properties, que podem ser pesquisados pelo GUID do MF_SD_VIDEO_SPHERICAL definido na tabela acima. No entanto, a maioria das configurações esféricas dos elementos da plataforma serão gerenciadas implicitamente pela plataforma. As propriedades podem ser consultadas pelo aplicativo apenas para qualquer funcionalidade extra que o desenvolvedor do aplicativo queira implementar, por exemplo, quaisquer efeitos personalizados que precisem ser inseridos ou removidos dependendo da esférica do vídeo.

A plataforma ignora os efeitos da caixa de entrada, como deteção de rosto, analisador de cena e estabilização de vídeo (se adicionada) quando deteta o valor da propriedade do atributo de fluxo indicando uma fonte de quadro esférica.

A plataforma configura implicitamente o elemento leitor de mídia conectado para pré-visualização para uma experiência de projeção de vídeo em 360 graus. O aplicativo tem que chamar APIs de plataforma apropriadas para selecionar o elemento media player para visualização. O aplicativo também tem que implementar a interface do usuário para controlar a direção e o ângulo de projeção do media player. Se o aplicativo escolher o elemento de captura para visualização, a experiência de projeção esférica não poderá ser aproveitada.

A plataforma também configura implicitamente o coletor de MP4 para gravar um vídeo 360 (passe o formato esférico de vídeo apropriado e metadados relacionados, se houver disponível e suportado) quando o fluxo usado contém a propriedade (definida na tabela a seguir) para fornecer o atributo de fluxo necessário para identificar uma fonte de quadro esférico.

Valor MF_SD_VIDEO_SPHERICAL_FORMAT (MFVideoSphericalFormat) Valor SphericalVideoFrameFormat Interpretação
Propriedade encontrada nos atributos do tipo de mídia definidos para o valor MFVideoSphericalFormat_Equirectangular (1) SphericalVideoFrameFormat. Equirectangular O fluxo fornece quadros esféricos em formato equirectangular visíveis através do MediaPlayer Element.
Propriedade encontrada em atributos de tipo de mídia definidos como valor MFVideoSphericalFormat_Unsupported (0) SphericalVideoFrameFormat. Sem suporte O fluxo fornece quadros esféricos em outro formato que não é compatível com MediaPlayer Element. (Pode ser um formato personalizado suportado por algumas aplicações)
A propriedade está ausente dos atributos de tipo de mídia. SphericalVideoFrameFormat. Nenhum O fluxo fornece quadros regulares não esféricos. (não-360)

Orientações para a aplicação

O aplicativo pode usar o controle MediaPlayerElement XAML para aproveitar a experiência de projeção esférica de vídeo 360.

Se a propriedade MF_SD_VIDEO_SPHERICAL_FORMAT existir no tipo de mídia e estiver definida como MFVideoSphericalFormat_Equirectangular, espera-se que os quadros sejam esféricos e possam ser renderizados adequadamente por meio do controle MediaPlayerElement XAML. O aplicativo pode consultar o formato esférico detetado pelo media player, verificando as propriedades de MediaPlaybackSphericalVideoProjection obtido a partir da sessão de reprodução do media player (objMediaPlayer.PlaybackSession.SphericalVideoProjection). O aplicativo tem que definir a propriedade isEnabled como TRUE para iniciar a projeção esférica.

Se o aplicativo implementa seu próprio componente de projeção esférica personalizado, ele pode consultar a fonte do quadro por meio de seu MediaFrameSourceInfo.Properties para as propriedades de vídeo de nível de fluxo esférico, conforme descrito na tabela acima. No entanto, toda a configuração dos elementos da plataforma, como a pré-visualização do media player e o destino de gravação, será configurada implicitamente pela plataforma ao detectar as propriedades de vídeo esféricas expostas pelo DMFT da câmera nos atributos de fluxo e tipo de mídia.

. Exemplo de arquivo INF para publicar um 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

Exemplo de fluxo de frames com um dispositivo UVC

(1) Quadro combinado não costurado proveniente de USBVideo.sys:

Quadro combinado não costurado.

(2) Quadro não deformado, costurado e transformado em equiretangular dentro de um DMFT enviado para o elemento de renderização do aplicativo para pré-visualização, para um destino de vídeo ou destino de fotos para ser armazenado em arquivo:

Moldura desmoldada, costurada e transformada.

(3) Viewport renderizado dentro de um aplicativo usando um elemento da interface do utilizador que aplica uma projeção esférica, além de fornecer rotação panorâmica do viewport e interação com o campo de visão:

Viewport renderizado.