Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Windows 10, versão 1803 fornece suporte para visualização, captura e registro de câmera 360 com APIs mediacapture existentes. Isso permite que a plataforma exponha fontes de quadros esféricos (por exemplo, quadros equirectangulares), permitindo que os aplicativos detectem e manipulem 360 fluxos de câmera de vídeo, bem como forneçam uma experiência de captura 360.
Observação
O exemplo cam360 disponível no GitHub mostra como dar suporte a cenários de visualização, registro de vídeo e captura de fotos com uma câmera 360 no Windows.
Visão geral
Um IHV de câmera 360 pode fornecer plug-ins DMFT (com ou sem drivers UVC personalizados) que exporão o formato esférico de cada fluxo e tipo de mídia que emite quadros esféricos, bem como processar a saída do driver da câmera e fornecer quadros equirectangulares com atributos e metadados apropriados.
A maioria das câmeras 360 vem com dois sensores posicionados costas com costas e cobrem um campo de visão de 360 graus com certa sobreposição. Um IHV normalmente estaria capturando de forma síncrona com os dois sensores de olho de peixe, desdistorcer e costurar os quadros dentro do DMFT para, em seguida, gerar quadros equirectangulares.
Esses quadros equiretangulares podem ser adquiridos e consumidos pelos apps por meio das APIs MediaCapture e MediaPlayer para proporcionar uma experiência de visualização de vídeo 360 graus, esférica e panorâmica. Os metadados fornecidos por meio do DMFT serão aproveitados pela plataforma para gravar os vídeos no formato MP4 e colocar implicitamente os metadados padronizados adequados. Quando reproduzido de dentro de um reprodutor de vídeo de 360 graus, como o aplicativo
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 fazer movimento panorâmico por meio do quatérnio MediaPlaybackSphericalVideoProjection.ViewOrientation .
Para a gravação de vídeo 360, um aplicativo de captura não precisa ser configurado explicitamente para conteúdo 360 se estiver usando as APIs WinRT do MediaCapture, pois o formato esférico é implicitamente passado para o destino de gravação 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 winRT do WIC disponíveis.
Cabe ao IHV da câmera 360 implementar um streaming com uma vista projetada e exibir 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 mídia para identificar quadros equiretangulares.
Arquitetura
O diagrama a seguir ilustra a relação do DMFT com a pilha de câmeras 360:
Os fabricantes independentes de hardware (IHVs) de câmeras 360 publicarão um DMFT que exporá fluxos de vídeo 360, fornecendo quadros esféricos em um formato definido. O DMFT pode ser instalado e associado à câmera específica por meio do uso do arquivo INF para extensão de driver, conforme descrito no exemplo. INF abaixo.
O processo de costura e a conversão para frames equirectangulares podem ocorrer no hardware da câmera ou dentro do DMFT. Pode ser preferível aproveitar o DMFT para essa finalidade, 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 360 fluxos de conteúdo.
Mesmo que o IHV decida realizar a fusão no hardware da câmera, um DMFT ainda será um requisito obrigatório para preencher as propriedades do atributo 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) | Tipo de Mídia |
A propriedade acima já existe como parte de mfidl.idl.
Para aproveitar os aplicativos personalizados que também executam a costura, um IHV tem a opção de expor outro tipo de mídia de vídeo 360 não costurado, com atributos definidos como MF_SD_VIDEO_SPHERICAL_FORMAT para MFVideoSphericalFormat_Unsupported(0). O aplicativo personalizado teria que selecionar o fluxo não processado e maniê-lo.
Diretrizes da plataforma
A plataforma já expõe todos os atributos de fluxo à camada WinRT para aplicativos por meio do MediaFrameSourceInfo.Properties, que podem ser pesquisados pelo GUID MF_SD_VIDEO_SPHERICAL definido na tabela acima. No entanto, a maioria das configurações esféricas de elementos de plataforma será gerenciada implicitamente pela plataforma. As propriedades podem ser consultadas pelo aplicativo apenas para qualquer funcionalidade extra que o desenvolvedor de aplicativos possa querer 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 detecção facial, analisador de cena e estabilização de vídeo (se adicionado) quando detecta o valor da propriedade do atributo de fluxo que indica uma fonte de quadro esférico.
A plataforma configura implicitamente o elemento media player conectado para visualização para a experiência de projeção de vídeo 360. O aplicativo precisa chamar APIs de plataforma apropriadas para selecionar o elemento de player de mídia para visualização. O aplicativo também precisa implementar a interface do usuário para controlar a direção e o ângulo de projeção do player de mídia. 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 destino MP4 para gravação de um vídeo 360 (passando o formato esférico de vídeo apropriado e metadados relacionados, se disponíveis e compatíveis) quando o fluxo utilizado contiver a propriedade (definida na tabela a seguir) necessária para fornecer o atributo de fluxo que identifica uma fonte de quadro esférico.
| Valor de MF_SD_VIDEO_SPHERICAL_FORMAT (FormatoEsféricoMF) | Valor de SphericalVideoFrameFormat | Interpretação |
|---|---|---|
| Propriedade encontrada em atributos de tipo de mídia definida com o valor MFVideoSphericalFormat_Equirectangular (1) | SphericalVideoFrameFormat. Equiretangular | O fluxo fornece quadros esféricos no formato equirectangular acessível por meio do Elemento MediaPlayer. |
| Propriedade encontrada em atributos de tipo de mídia definidos com o valor MFVideoSphericalFormat_Unsupported (0) | FormatoDeQuadroDeVídeoEsférico Sem suporte | O fluxo fornece quadros esféricos em outro formato que não é compatível com o Elemento MediaPlayer. (Pode ser um formato personalizado compatível com alguns Aplicativos) |
| A propriedade está ausente nos atributos do tipo de mídia. | SphericalVideoFrameFormat. Nenhum | O fluxo fornece quadros de imagem não esféricos regulares. (não 360) |
Diretrizes do aplicativo
O aplicativo pode usar o controle XAML MediaPlayerElement 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 XAML MediaPlayerElement . O aplicativo pode consultar o formato esférico detectado pelo player de mídia verificando as propriedades de MediaPlaybackSphericalVideoProjection obtidas da sessão de reprodução do player de mídia (objMediaPlayer.PlaybackSession.SphericalVideoProjection). O aplicativo precisa definir a propriedade isEnabled como TRUE para iniciar a projeção esférica.
Se o aplicativo implementar seu próprio componente personalizado de projeção esférica, ele poderá consultar a origem do quadro por meio das Propriedades de MediaFrameSourceInfo para as propriedades de vídeo no nível do fluxo esférico, conforme descrito na tabela acima. No entanto, toda a configuração dos elementos da plataforma, como a visualização do player de mídia e o destino de gravação, será configurada implicitamente pela plataforma durante a detecção das propriedades esféricas de vídeo 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 quadros com um dispositivo UVC
(1) Quadro combinado sem costura saindo de USBVideo.sys:
(2) Quadro desenrolado, costurado e transformado em equiretangular dentro de um DMFT enviado para o elemento de renderização do aplicativo para visualização, para um destino de vídeo ou destino de fotos para ser armazenado em arquivo.
(3) Visor renderizado dentro de um aplicativo usando um elemento de interface do usuário que aplica uma projeção esférica, bem como fornece movimento panorâmico de rotação do visor e campo de interação de exibição: