Bagikan melalui


Pengambilan video kamera 360

Windows 10, versi 1803 menyediakan dukungan untuk pratinjau, pengambilan, dan rekaman kamera 360 dengan API MediaCapture yang ada. Ini memungkinkan platform untuk mengekspos sumber bingkai bulat (misalnya, bingkai equirectangular), memungkinkan aplikasi untuk mendeteksi dan menangani 360 aliran kamera video serta untuk memberikan pengalaman pengambilan 360.

Catatan

Sampel Cam360 yang tersedia di GitHub menunjukkan cara mendukung skenario pratinjau, rekaman video, dan pengambilan foto dengan kamera 360 di Windows.

Gambaran Umum

IHV kamera 360 dapat menyediakan plugin DMFT (dengan atau tanpa driver UVC kustom) yang akan mengekspos format buncis dari setiap aliran dan jenis media yang memancarkan bingkai buncis, serta memproses output driver kamera dan menyediakan bingkai equirectangular dengan atribut dan metadata yang sesuai.

Sebagian besar 360 kamera dilengkapi dengan 2 sensor back-to-back dan menutupi 360 FoV dengan beberapa tumpang tindih. IHV biasanya akan menangkap secara sinkron dengan dua sensor fisheye, membuka dan menjahit bingkai di dalam DMFT untuk kemudian menghasilkan bingkai equirectangular.

Bingkai equirectangular ini kemudian dapat diperoleh dan digunakan oleh aplikasi melalui API MediaCapture dan MediaPlayer untuk memproyeksikan pengalaman pratinjau video 360, bulat, dan panning. Metadata yang disediakan melalui DMFT akan dimanfaatkan oleh platform untuk merekam video dalam format MP4 dan mengapit metadata standar yang tepat secara implisit. Ketika diputar dari dalam pemutar video pemutaran 360 seperti aplikasi Tv Movies & di Windows 10, video yang direkam yang dihasilkan akan menawarkan pengalaman panning tampilan bulat yang diharapkan.

Penggunaan kamera 360:

  • Untuk mempratinjau bingkai 360, aplikasi memang perlu secara eksplisit menggunakan XAML MediaPlayerElement untuk pratinjau. Aplikasi juga perlu secara eksplisit menangani interaksi UI untuk menggeser, melalui kuaternion MediaPlaybackSphericalVideoProjection.ViewOrientation .

  • Untuk rekaman video 360, aplikasi pengambilan tidak perlu dikonfigurasi secara eksplisit untuk konten 360 jika menggunakan API MediaCapture WinRT, karena format bulat secara implisit diteruskan ke sink rekaman dan ditulis ke header file.

  • Untuk pengambilan foto 360, aplikasi perlu secara eksplisit menambahkan metadata standar yang sesuai yang menentukan format bulatnya menggunakan API WIC WinRT yang tersedia.

Hingga IHV kamera 360 untuk mengimplementasikan aliran dengan tampilan yang diproyeksikan dan mengekspos kontrol Pan/Tilt/Zoom.

Aplikasi dapat menerapkan dan menyisipkan efek untuk menghasilkan proyeksi. Efeknya dapat memanfaatkan atribut pada mediatype untuk mengidentifikasi bingkai equirectangular.

Arsitektur

Diagram berikut mengilustrasikan hubungan DMFT dengan tumpukan kamera 360:

Tumpukan kamera 360.

360 IHV kamera akan menerbitkan DMFT yang akan mengekspos 360 aliran video yang menyediakan bingkai buncis dengan format yang ditentukan. DMFT dapat diinstal dan dikaitkan dengan kamera tertentu melalui penggunaan file INF untuk ekstensi driver seperti yang dijelaskan dalam contoh . INF di bawah ini.

Jahitan dan konversi ke bingkai equirectangular dapat terjadi di perangkat keras kamera atau di dalam DMFT. Mungkin lebih baik memanfaatkan DMFT untuk tujuan ini, karena akan memungkinkan penggunaan sumber daya perangkat keras seperti GPU untuk pemrosesan yang efisien. DMFT juga akan mengisi properti jenis aliran dan media berikut (seperti yang ditunjukkan pada tabel di bawah) untuk mengidentifikasinya sebagai 360 aliran konten.

Bahkan jika IHV memutuskan untuk melakukan jahitan di perangkat keras kamera, DMFT masih merupakan persyaratan wajib untuk mengisi properti atribut stream dan mediatype untuk video 360.

Tabel berikut menunjukkan atribut aliran yang diperlukan untuk mengidentifikasi sumber bingkai bubu:

Nama properti dan GUID Nilai Atribut
MF_SD_VIDEO_SPHERICAL
{A51DA449-3FDC-478C-BCB5-30BE76595F55}
BENAR (1) Stream dan MediaType
MF_SD_VIDEO_SPHERICAL_FORMAT
{4A8FC407-6EA1-46C8-B567-6971D4A139C3}
MFVideoSphericalFormat_Equirectangular (1) MediaType

Properti di atas sudah ada sebagai bagian dari mfidl.idl.

Untuk memanfaatkan aplikasi kustom yang melakukan jahitan juga, IHV memiliki opsi untuk mengekspos jenis media video 360 lain yang tidak terpasang dengan atribut yang ditetapkan sebagai MF_SD_VIDEO_SPHERICAL_FORMAT ke MFVideoSphericalFormat_Unsupported(0). Aplikasi kustom harus memilih aliran yang tidak diolah dan menanganinya.

Panduan platform

Platform ini sudah mengekspos semua atribut stream ke lapisan WinRT untuk aplikasi melalui MediaFrameSourceInfo.Properties, yang dapat dicari MF_SD_VIDEO_SPHERICAL GUID yang ditentukan dalam tabel di atas. Namun, sebagian besar konfigurasi bulat elemen platform akan dikelola secara implisit oleh platform. Properti dapat dikueri oleh aplikasi hanya untuk fungsionalitas tambahan yang mungkin ingin diterapkan pengembang aplikasi, misalnya, efek kustom apa pun yang perlu dimasukkan atau dihapus tergantung pada bujur video.

Platform melewati efek kotak masuk seperti deteksi wajah, penganalisis adegan, dan stabilisasi video (jika ditambahkan) saat mendeteksi nilai properti atribut aliran yang menunjukkan sumber bingkai bulat.

Platform ini secara implisit mengonfigurasi elemen pemutar media yang terhubung untuk pratinjau untuk pengalaman proyeksi video 360. Aplikasi harus memanggil API platform yang sesuai untuk memilih elemen pemutar media untuk pratinjau. Aplikasi ini juga harus mengimplementasikan UI untuk mengontrol arah dan sudut proyeksi pemutar media. Jika aplikasi memilih elemen pengambilan untuk pratinjau, pengalaman proyeksi bujangan tidak dapat dimanfaatkan.

Platform ini juga secara implisit mengonfigurasi sink MP4 untuk merekam video 360 (meneruskan format bulat video yang sesuai dan metadata terkait jika tersedia dan didukung) ketika aliran yang digunakan berisi properti (ditentukan dalam tabel berikut) untuk menyediakan atribut stream yang diperlukan untuk mengidentifikasi sumber bingkai bulat.

nilai MF_SD_VIDEO_SPHERICAL_FORMAT (MFVideoSphericalFormat) Nilai SphericalVideoFrameFormat Interpretasi
Properti yang ditemukan dalam atribut jenis media diatur ke nilai MFVideoSphericalFormat_Equirectangular (1) SphericalVideoFrameFormat. Equirectangular Aliran ini menyediakan bingkai buncis dalam format equirectangular yang dapat dilihat melalui MediaPlayer Element.
Properti yang ditemukan dalam atribut jenis media diatur ke nilai MFVideoSphericalFormat_Unsupported (0) SphericalVideoFrameFormat. Tidak didukung Aliran menyediakan bingkai bujang dalam format lain yang tidak kompatibel dengan Elemen MediaPlayer. (Mungkin format kustom yang didukung oleh beberapa Aplikasi)
Properti tidak ada dari atribut jenis media. SphericalVideoFrameFormat. Tidak ada Aliran ini menyediakan bingkai non-bunyi reguler. (non-360)

Panduan aplikasi

Aplikasi ini dapat menggunakan kontrol MediaPlayerElement XAML, untuk memanfaatkan pengalaman proyeksi bulat video 360.

Jika properti MF_SD_VIDEO_SPHERICAL_FORMAT ada pada jenis media dan diatur ke MFVideoSphericalFormat_Equirectangular, bingkai kemudian diharapkan bulat dan dapat dirender dengan tepat melalui kontrol MediaPlayerElement XAML. Aplikasi dapat mengkueri format bola yang terdeteksi oleh pemutar media dengan memeriksa properti MediaPlaybackSphericalVideoProjection yang diperoleh dari sesi pemutaran pemutar media (objMediaPlayer.PlaybackSession.SphericalVideoProjection). Aplikasi harus mengatur properti isEnabled ke TRUE untuk memulai proyeksi buncis.

Jika aplikasi menerapkan komponen proyeksi sferis kustomnya sendiri, maka aplikasi dapat meminta sumber bingkai melalui MediaFrameSourceInfo.Properties untuk properti video tingkat aliran bujang seperti yang dijelaskan dalam tabel di atas. Namun, semua konfigurasi elemen platform seperti pratinjau pemutar media dan sink rekaman akan dikonfigurasi secara implisit oleh platform pada deteksi properti video bulat yang diekspos oleh DMFT kamera pada atribut jenis aliran dan media.

. Contoh file INF untuk menerbitkan 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

Contoh alur bingkai dengan perangkat UVC

(1) Bingkai gabungan yang tidak terpasang keluar dari USBVideo.sys:

Bingkai gabungan yang tidak terpasang.

(2) Bingkai tidak diwarnai, dijahit, dan diubah menjadi equirectangular di dalam DMFT yang dikirim ke elemen penyajian aplikasi untuk pratinjau, ke sink video atau sink foto untuk disimpan ke file:

Bingkai tidak diwarnai, dijahit, dan diubah.

(3) Viewport yang dirender di dalam aplikasi menggunakan elemen UI yang menerapkan proyeksi bulat serta menyediakan panning rotasi viewport dan interaksi bidang pandang:

Viewport yang dirender.