Aracılığıyla paylaş


360 kamera video yakalama

Windows 10, sürüm 1803, mevcut MediaCapture API'leriyle 360 kamera önizlemesi, yakalama ve kaydetme desteği sağlar. Bu, platformun küresel çerçeve kaynaklarını (örneğin, equirectangular çerçeveler) kullanıma sunmasını sağlar, uygulamaların 360 video kamera akışını algılayıp işlemesine ve 360 yakalama deneyimi sağlamasına olanak tanır.

Uyarı

GitHub'da bulunan Cam360 örneği, Windows'da 360 kamera ile önizleme, video kaydı ve fotoğraf yakalama senaryolarının nasıl desteklenip desteklenemiyor olduğunu gösterir.

Genel Bakış

Bir 360 kamera IHV, özel UVC sürücüleri ile veya olmadan, küresel çerçeveler yayınlayan her akış ve medya türünün küresel biçimini ortaya çıkaracak DMFT eklentileri sağlayabilir. Ayrıca, kamera sürücüsü çıkışını işleyip, uygun öznitelik ve meta verilerle equirectangular çerçeveler sunabilir.

Çoğu 360 kamera, sırt sırta 2 sensörle birlikte gelir ve bir miktar örtüşmeyle 360 derece görüş alanını kaplar. Bir IHV genellikle iki balıkgözü sensörü ile senkron olarak veri yakalar, DMFT içinde çerçeveleri düzeltir ve birleştirir, ardından equirectangular çerçeveler oluşturur.

Bu equirectangular çerçeveler, daha sonra MediaCapture ve MediaPlayer API'leri aracılığıyla uygulamalar tarafından 360 derece, küresel, sürükleyici bir video önizleme deneyimi sağlamak için alınıp kullanılabilir. DMFT aracılığıyla sağlanan meta veriler, videoları MP4 biçiminde kaydetmek ve otomatik olarak uygun standartlaştırılmış meta verileri kapsamak için platform tarafından verimli bir şekilde kullanılacaktır. Windows 10'da Filmler ve TV uygulaması gibi 360 kayıttan yürütmeli bir video oynatıcının içinden oynatıldığında, elde edilen video beklenen küresel görünüm kaydırma deneyimini sunar.

360 kamera kullanımı:

  • Bir 360 çerçevesini önizlemek için bir uygulamanın önizleme için XAML MediaPlayerElement'i açıkça kullanması gerekir. Bir uygulamanın MediaPlaybackSphericalVideoProjection.ViewOrientation quaternion aracılığıyla kaydırma işlemlerinde UI etkileşimini açıkça yönetmesi gerekir.

  • 360 derece video kaydı için, MediaCapture WinRT API'leri kullanılıyorsa, bir yakalama uygulamasının 360 içerik için açıkça yapılandırılması gerekmez çünkü küresel biçim otomatik olarak kayıt birimine iletilir ve dosya üst bilgisine yazılır.

  • 360 fotoğraf yakalama için, bir uygulamanın kullanılabilir WIC WinRT API'lerini kullanarak küresel biçimini belirten uygun standartlaştırılmış meta verileri açıkça eklemesi gerekir.

Yansıtılmış görünüme sahip bir akışı uygulamak ve Kaydırma/Eğme/Yakınlaştırma kontrollerini sağlamak 360 derece kamera IHV'nin sorumluluğundadır.

Uygulama yansıtma oluşturmak için bir efekt uygulayabilir ve ekleyebilir. İşlev, equirectangular çerçeveleri tanımlamak için medya türü üzerindeki özniteliklerden yararlanabilir.

Mimarlık

Aşağıdaki diyagramda DMFT'nin 360 kamera yığınıyla ilişkisi gösterilmektedir:

360 kamera yığını.

360 kamera IHV'leri, tanımlanmış bir biçimde küresel çerçeveler sağlayan 360 video akışını kullanıma sunan bir DMFT yayımlar. DMFT, aşağıdaki örnek .INF dosyasında açıklandığı gibi sürücü uzantısı için INF dosyası kullanılarak yüklenebilir ve belirli bir kamerayla ilişkilendirilebilir.

Dikim ve equirectangular çerçevelere dönüştürme, kamera donanımında veya DMFT içerisinde gerçekleşebilir. Verimli işleme için GPU gibi donanım kaynaklarının kullanılmasına olanak tanıyacağı için bu amaçla DMFT'nin kullanılması tercih edilebilir. DMFT ayrıca aşağıdaki akış ve medya türü özelliklerini (aşağıdaki tabloda gösterildiği gibi) doldurarak bunları 360 içerik akışı olarak tanımlar.

IHV, dikişin kamera donanımında yapılmasına karar verse bile, DMFT yine de 360 videonun akış ve medya türü öznitelik özelliklerini doldurmak için zorunlu bir gereksinimdir.

Aşağıdaki tabloda, küresel çerçeve kaynağını tanımlamak için gerekli akış özniteliği gösterilmektedir:

Özellik adı ve GUID Değer Özellik
MF_SD_VIDEO_SPHERICAL
{A51DA449-3FDC-478C-BCB5-30BE76595F55}
DOĞRU (1) Stream ve MediaType
MF_SD_VIDEO_SPHERICAL_FORMAT
{4A8FC407-6EA1-46C8-B567-6971D4A139C3}
MFVideoSphericalFormat_Equirectangular (1) Medya Türü

Yukarıdaki özellik mfidl.idl dosyasının bir parçası olarak zaten var.

Bir IHV, dikiş gerçekleştiren özel uygulamalardan yararlanmak için, öznitelikleri MF_SD_VIDEO_SPHERICAL_FORMAT olarak ayarlanmış ve MFVideoSphericalFormat_Unsupported(0) değerine sahip başka bir birleştirilmemiş 360 video medya türünü gösterme seçeneğine sahiptir. Özel uygulamanın işlenmemiş akışı seçip işlemesi gerekir.

Platform kılavuzu

Platform, yukarıdaki tabloda tanımlanan MF_SD_VIDEO_SPHERICAL GUID için aranabilen MediaFrameSourceInfo.Properties aracılığıyla uygulamalar için tüm akış özniteliklerini WinRT katmanında kullanıma sunar. Ancak platform öğelerinin küresel yapılandırmalarının çoğu platform tarafından örtük olarak yönetilecektir. Özellikler, uygulama tarafından yalnızca uygulama geliştiricisinin uygulamak isteyebileceği ek işlevler için sorgulanabilir. Örneğin, videonun küreselliğine bağlı olarak eklenmesi veya kaldırılması gereken özel efektler.

Platform, küresel çerçeve kaynağını gösteren akış özniteliği özellik değerini algıladığında, yüz algılama, sahne çözümleme ve video sabitleme (eklenirse) gibi efektleri devre dışı bırakır.

Platform, 360 video projeksiyon deneyimi için önizleme için bağlı medya oynatıcı öğesini örtük olarak yapılandırıyor. Uygulamanın, önizleme için media player öğesini seçmek için uygun platform API'lerini çağırması gerekir. Uygulamanın ayrıca medya oynatıcının projeksiyon yönünü ve açısını denetlemek için kullanıcı arabirimini uygulaması gerekir. Uygulama önizleme için yakalama öğesini seçerse küresel projeksiyon deneyiminden yararlanılamaz.

Platform ayrıca, kullanılan akış, küresel bir çerçeve kaynağını tanımlamak için gerekli olan ve aşağıdaki tabloda tanımlanan özelliği içerdiğinde, MP4 depolama birimini örtülü olarak, 360 derece video kaydedecek şekilde yapılandırır (uygun video küresel biçimini ve mevcutsa ilgili meta verileri sağlamak üzere).

MF_SD_VIDEO_SPHERICAL_FORMAT değeri (MFVideoSphericalFormat) SphericalVideoFrameFormat değeri Yorumu
MFVideoSphericalFormat_Equirectangular değerine ayarlanmış medya türü özniteliklerinde bulunan özellik (1) SphericalVideoFrameFormat. Eş-Dikdörtgen Akış, MediaPlayer Elementi aracılığıyla görüntülenebilir eğik dikdörtgen biçiminde küresel çerçeveler sağlar.
MFVideoSphericalFormat_Unsupported değerine ayarlanmış medya türü özniteliklerinde bulunan özellik (0) SphericalVideoFrameFormat. Desteklenmeyen Akış, MediaPlayer Öğesi ile uyumlu olmayan başka bir biçimde küresel çerçeveler sağlar. (Bazı Uygulamalar tarafından desteklenen özel bir biçim olabilir)
Özellik, medya türü özniteliklerinde yok. SphericalVideoFrameFormat (Küresel Video Çerçeve Formatı). Hiç kimse Akış, düzenli olarak küresel olmayan çerçeveler sağlar. (360 derece olmayan)

Uygulama kılavuzu

Uygulama, 360 video küresel projeksiyon deneyiminden yararlanmak için MediaPlayerElement XAML denetimini kullanabilir.

MF_SD_VIDEO_SPHERICAL_FORMAT özelliği medya türünde varsa ve MFVideoSphericalFormat_Equirectangular olarak ayarlandıysa, çerçevelerin küresel olması beklenir ve MediaPlayerElement XAML denetimi aracılığıyla uygun şekilde işlenebilir. Uygulama, medya oynatıcı kayıttan yürütme oturumundan (objMediaPlayer.PlaybackSession.SphericalVideoProjection) alınan MediaPlaybackSphericalVideoProjection özelliklerini denetleyerek, medya oynatıcı tarafından algılanan küresel format üzerinde sorgulama yapabilir. Uygulamanın küresel projeksiyonu başlatmak için isEnabled özelliğini TRUE olarak ayarlaması gerekir.

Uygulama kendi özel küresel projeksiyon bileşenini uygularsa, yukarıdaki tabloda açıklandığı gibi küresel akış düzeyi video özellikleri için MediaFrameSourceInfo.Properties aracılığıyla çerçeve kaynağını sorgulayabilir. Ancak, medya oynatıcı önizlemesi ve kayıt havuzu gibi tüm platform öğesi yapılandırmaları, akış ve medya türü özniteliklerinde kamera DMFT tarafından kullanıma sunulan küresel video özelliklerinin algılanması üzerine platform tarafından örtük olarak yapılandırılır.

DMFT yayımlamak için bir .INF dosyası örneği

;=================================================================================
; 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 cihazıyla örnek çerçeve akışı

USBVideo.sys'den dışarı çıkan, dikişsiz birleşik çerçeve:

Dikilmemiş kombine çerçeve.

(2) Çerçeve, bir DMFT'nin içinde uyarılmamış, birleştirilmiş ve equirectangular'a dönüştürülmüş halde, önizleme için uygulamanın işleme öğesine, dosyada depolanmak üzere bir video çıkışına veya fotoğraf çıkışına gönderilir:

Kare düzeltilmiş, birleştirilmiş ve dönüştürülmüş.

(3) Küresel projeksiyon uygulayan ve görünüm penceresinde döndürme, kaydırma ve görüş alanı etkileşimi sağlayan bir UI öğesi kullanılarak uygulama içinde işlenen görünüm penceresi:

İşlenen görüntüleme alanı.