다음을 통해 공유


360 카메라 비디오 캡처

Windows 10 버전 1803은 기존 MediaCapture API를 사용하여 360개 카메라 미리 보기, 캡처 및 레코드를 지원합니다. 이를 통해 플랫폼은 구형 프레임 원본(예: 등면 프레임)을 노출하여 앱이 360개의 비디오 카메라 스트림을 감지 및 처리하고 360개의 캡처 환경을 제공할 수 있습니다.

참고

GitHub에서 사용할 수 있는 Cam360 샘플은 Windows에서 360 카메라를 사용하여 미리 보기, 비디오 녹화 및 사진 캡처 시나리오를 지원하는 방법을 보여 줍니다.

개요

360 카메라 IHV는 DMFT 플러그 인(사용자 지정 UVC 드라이버 포함 또는 제외)을 제공할 수 있습니다. 이 플러그 인은 구형 프레임을 내보내는 각 스트림 및 미디어 형식의 구형 형식을 노출할 뿐만 아니라 카메라 드라이버 출력을 처리하고 적절한 특성 및 메타데이터가 있는 등각형 프레임을 제공합니다.

대부분의 360 대의 카메라에는 2 개의 센서가 있으며 360 FoV가 겹칩니다. IHV는 일반적으로 두 개의 어안 센서와 동기적으로 캡처하여 DMFT 내부의 프레임을 풀고 스티치한 다음 등각형 프레임을 출력합니다.

그런 다음 MediaCapture 및 MediaPlayer API를 통해 앱에서 이러한 등형 프레임을 획득하고 사용하여 360 구형 이동 비디오 미리 보기 환경을 프로젝션할 수 있습니다. DMFT를 통해 제공되는 메타데이터는 플랫폼에서 활용하여 MP4 형식으로 비디오를 녹화하고 적절한 표준화된 메타데이터를 암시적으로 묶습니다. Windows 10 영화 & TV 앱과 같은 360 재생 비디오 플레이어 내에서 재생할 경우 결과 녹화된 비디오는 예상 구형 보기 이동 환경을 제공합니다.

360 카메라 사용:

  • 360 프레임을 미리 보려면 애플리케이션에서 미리 보기에 XAML MediaPlayerElement 를 명시적으로 사용해야 합니다. 또한 애플리케이션은 MediaPlaybackSphericalVideoProjection.ViewOrientation 쿼터니언을 통해 이동에 대한 UI 상호 작용을 명시적으로 처리해야 합니다.

  • 360 비디오 녹화의 경우 구형 형식이 암시적으로 레코드 싱크에 전달되고 파일 헤더에 기록되므로 MediaCapture WinRT API를 사용하는 경우 360개 콘텐츠에 대해 캡처 애플리케이션을 명시적으로 구성할 필요가 없습니다.

  • 360 사진 캡처의 경우 애플리케이션은 사용 가능한 WIC WinRT API를 사용하여 구형 형식을 지정하는 적절한 표준화된 메타데이터를 명시적으로 추가해야 합니다.

360 카메라 IHV는 프로젝팅된 뷰를 사용하여 스트림을 구현하고 Pan/Tilt/Zoom 컨트롤을 노출합니다.

애플리케이션은 프로젝션을 생성하는 효과를 구현하고 삽입할 수 있습니다. 이 효과는 미디어 형식의 특성을 활용하여 등각형 프레임을 식별할 수 있습니다.

아키텍처

다음 다이어그램은 DMFT와 360 카메라 스택의 관계를 보여 줍니다.

360 카메라 스택.

360 대의 카메라 IHV는 정의된 형식의 구형 프레임을 제공하는 360 개의 비디오 스트림을 노출하는 DMFT를 게시합니다. DMFT는 예제에 설명된 대로 드라이버 확장에 INF 파일을 사용하여 특정 카메라를 설치하고 연결할 수 있습니다. 아래 INF.

등변 프레임으로의 연결 및 변환은 카메라 하드웨어 또는 DMFT 내부에서 이루어질 수 있습니다. 효율적인 처리를 위해 GPU와 같은 하드웨어 리소스를 사용할 수 있으므로 이 목적을 위해 DMFT를 활용하는 것이 좋습니다. DMFT는 다음 스트림 및 미디어 형식 속성(아래 표와 같이)을 채워 360개의 콘텐츠 스트림으로 식별합니다.

IHV가 카메라 하드웨어에서 스티칭을 수행하도록 결정하더라도 DMFT는 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에는 특성이 MFVideoSphericalFormat_Unsupported(0)에 MF_SD_VIDEO_SPHERICAL_FORMAT 설정된 다른 스티치되지 않은 360 비디오 미디어 형식을 노출하는 옵션이 있습니다. 사용자 지정 애플리케이션은 처리되지 않은 스트림을 선택하고 처리해야 합니다.

플랫폼 지침

플랫폼은 이미 위의 표에 정의된 MF_SD_VIDEO_SPHERICAL GUID를 검색할 수 있는 MediaFrameSourceInfo.Properties를 통해 애플리케이션의 WinRT 계층에 모든 스트림 특성을 노출합니다. 그러나 플랫폼 요소의 구형 구성 대부분은 플랫폼에서 암시적으로 관리됩니다. 애플리케이션 개발자가 구현할 수 있는 추가 기능(예: 비디오의 구형에 따라 삽입하거나 제거해야 하는 사용자 지정 효과)에 대해서만 애플리케이션에서 속성을 쿼리할 수 있습니다.

플랫폼은 구형 프레임 소스를 나타내는 스트림 특성 속성 값을 검색할 때 얼굴 감지, 장면 분석기 및 비디오 손떨림 보정(추가된 경우)과 같은 받은 편지함 효과를 무시합니다.

플랫폼은 360 비디오 프로젝션 환경을 위해 미리 보기로 연결된 미디어 플레이어 요소를 암시적으로 구성합니다. 애플리케이션은 미리 보기에 대한 미디어 플레이어 요소를 선택하기 위해 적절한 플랫폼 API를 호출해야 합니다. 또한 애플리케이션은 미디어 플레이어의 프로젝션 방향과 각도를 제어하기 위해 UI를 구현해야 합니다. 애플리케이션이 미리 보기로 캡처 요소를 선택하는 경우 구형 프로젝션 환경을 활용할 수 없습니다.

또한 플랫폼은 사용된 스트림에 구형 프레임 원본을 식별하는 데 필요한 스트림 특성을 제공하는 속성(다음 표에 정의됨)이 포함된 경우 360 비디오를 기록하도록 MP4 싱크를 암시적으로 구성합니다(사용 가능하고 지원되는 경우 적절한 비디오 구형 형식 및 관련 메타데이터 전달).

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 설정된 경우 프레임은 구형으로 예상되며 MediaPlayerElement XAML 컨트롤을 통해 적절하게 렌더링될 수 있습니다. 애플리케이션은 미디어 플레이어 재생 세션(objMediaPlayer.PlaybackSession.SphericalVideoProjection)에서 가져온 MediaPlaybackSphericalVideoProjection의 속성을 확인하여 미디어 플레이어가 검색한 구형 형식을 쿼리할 수 있습니다. 애플리케이션은 구형 프로젝션을 시작하려면 isEnabled 속성을 TRUE 로 설정해야 합니다.

애플리케이션이 자체 사용자 지정 구형 프로젝션 구성 요소를 구현하는 경우 위의 표에 설명된 대로 MediaFrameSourceInfo.Properties 를 통해 프레임 원본을 구형 스트림 수준 비디오 속성에 대해 쿼리할 수 있습니다. 그러나 미디어 플레이어 미리 보기 및 레코드 싱크와 같은 모든 플랫폼 요소 구성은 스트림 및 미디어 유형 특성에서 카메라 DMFT가 노출하는 구형 비디오 속성을 검색할 때 플랫폼에서 암시적으로 구성됩니다.

. DMFT를 게시하는 INF 파일 예제

;=================================================================================
; 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) 구형 프로젝션을 적용하고 뷰포트 회전 이동 및 뷰 상호 작용 필드를 제공하는 UI 요소를 사용하여 애플리케이션 내에서 렌더링된 뷰포트:

렌더링된 뷰포트.