適用於開發人員的混合實境擷取 (DirectX)
注意
如需 HoloLens 2 的新 MRC 功能指引,請參閱 下方的 PV 相機 轉譯。
開始這裡之前,建議您先看看 混合實境擷取概觀 一文。
從 PV 相機轉譯 (選擇加入)
HoloLens 2 新增沉浸式應用程式 在混合實境擷取執行時從 PV 相機 轉譯的能力。 為了確保應用程式支援其他轉譯正確,應用程式必須加入加入這項功能。
從 PV 相機轉譯提供下列預設 MRC 體驗的改善:
- 全像投影對齊您的實體環境和手部進行接近互動應該在所有距離上都正確。 避免在焦點點以外的距離處有位移,因為您可能會在預設 MRC 中看到。
- 耳機中的右眼不會遭到入侵,因為它不會用來轉譯 MRC 輸出的全像投影。
有三個步驟可從 PV 相機啟用轉譯:
- 啟用 PhotoVideoCamera HolographicViewConfiguration
- 處理其他 HolographicCamera 轉譯
- 確認您的著色器和程式代碼從這個額外的 HolographicCamera 正確轉譯
在 DirectX 中啟用 PhotoVideoCamera HolographicViewConfiguration
若要選擇從 PV 相機轉譯,應用程式只會啟用 PhotoVideoCamera 的 HolographicViewConfiguration:
var display = Windows.Graphics.Holographic.HolographicDisplay.GetDefault();
var view = display.TryGetViewConfiguration(Windows.Graphics.Holographic.HolographicViewConfigurationKind.PhotoVideoCamera);
if (view != null)
{
view.IsEnabled = true;
}
處理 DirectX 中的其他 HolographicCamera 轉譯
當應用程式選擇從 PV 相機轉譯時,混合實境擷取就會啟動:
- HolographicSpace 的 CameraAdded 事件將會引發。 如果應用程式目前無法處理相機,則可以延遲此事件。
- 一旦事件完成且沒有未完成延遲,HolographicCamera 就會出現在下一個 HolographicFrame 的 AddedCameras 列表中。
當混合實境擷取停止時(或當混合實境擷取正在執行時,如果應用程式停用檢視設定):HolographicCamera 將出現在下一個 HolographicFrame 的 RemovedCameras 清單中,且 HolographicSpace 的 CameraRemoved 事件將會引發。
ViewConfiguration 屬性已新增至 HolographicCamera,以協助識別相機所屬的設定。
確認著色器和程式代碼支援其他相機
執行混合實境擷取,並檢查異常對齊、遺漏內容或效能問題。 視需要更新著色器和程序代碼。
如果某些場景不支持轉譯至其他相機,您可以停用 PhotoVideoCamera 的 HolographicViewConfiguration。
在您的應用程式中停用 MRC
2D 應用程式
2D 應用程式可以選擇在混合實境擷取執行時遮蔽其視覺內容:
- 以 DXGI_PRESENT_RESTRICT_TO_OUTPUT 旗標呈現
- 使用 DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED 旗標建立應用程式的交換鏈結
- 使用 Windows 10 2019 年 5 月更新,設定 ApplicationView 的 IsScreenCaptureEnabled
沈浸式應用程式
沈浸式應用程式可以選擇將視覺內容從混合實境擷取中排除,方法是:
- 將 HolographicCameraRenderingParameter 的 IsContentProtectionEnabled 設定為停用相關聯畫面的混合實境擷取
- 將 HolographicCamera 的 IsHardwareContentProtectionEnabled 設定為停用其相關聯全像攝影相機的混合實境擷取
密碼鍵盤
透過 Windows 10 2019 年 5 月更新,當看到密碼或釘選鍵盤時,視覺內容會自動從混合實境擷取中排除。
知道 MRC 何時處於作用中狀態
AppCapture 類別可供應用程式用來知道系統混合實境擷取何時執行(適用於音訊或視訊)。
注意
如果裝置上無法使用混合實境擷取,AppCapture 的 GetForCurrentView API 可能會傳回 Null。 當您的應用程式暫停時,也請務必取消註冊 CapturingChanged 事件,否則 MRC 可能會進入封鎖狀態。
整合應用程式內的 MRC 功能
您的混合實境應用程式可以從應用程式內啟動 MRC 相片或視訊擷取,而且擷取的內容可供您的應用程式使用,而不會儲存到裝置的「相機卷」。您可以建立自定義 MRC 錄製器,或利用內建相機擷取 UI。
具有內建相機UI的MRC
開發人員可以使用相機擷 取 UI API 來取得使用者擷取的混合實境相片或影片,只需幾行程式代碼。
此 API 會啟動內建 MRC 相機 UI,讓使用者可以拍照或視訊,並將產生的擷取傳回至您的應用程式。 如果您需要新增自己的相機 UI 或較低層級的擷取串流存取,您可以建立自定義的混合實境擷取錄製器。
具有螢幕擷取的 MRC
透過 HoloLens 2 2021 年 5 月更新 (Windows 全像攝影版 21H1 組建 20346.1002),開發人員可以使用 螢幕擷取 API 來要求混合實境視訊畫面串流。
建立自定義 MRC 錄製器
雖然使用者一律可以使用系統 MRC 擷取服務來觸發相片或視訊,但應用程式可能會想要建置自定義相機應用程式,以在相機串流中包含全像投影,就像 MRC 一樣。 這可讓應用程式從使用者輸入開始擷取、建置自定義錄製UI,或自定義MRC設定,以命名一些範例。
HoloStudio 使用 MRC 效果新增自定義 MRC 相機
其他應用程式可以使用 Windows 媒體擷取 API 來控制相機,並新增 MRC 視訊和音訊效果,以在靜止和視訊中包含虛擬全像投影和應用程式音訊。
應用程式有兩個選項可新增效果:
- 舊版 API: Windows.Media.Capture.MediaCapture.AddEffectAsync()
- 新的Microsoft建議 API(傳回物件,讓您能夠操作動態屬性):Windows.Media.Capture.MediaCapture.AddVideoEffectAsync() / Windows.Media.Capture.MediaCapture.AddAudioEffectAsync()需要應用程式建立自己的 IVideoEffectDefinition 和 IAudioEffectDefinition 實作。 如需範例, 請參閱 MRC 範例應用程式 。
注意
Visual Studio 無法辨識 Windows.Media.MixedRealityCapture 命名空間,但字串仍然有效。
MRC 視訊效果 (Windows.Media.MixedRealityCapture.MixedRealityCaptureVideoEffect)
屬性名稱 | 類型 | 預設值 | 說明 |
---|---|---|---|
StreamType | UINT32 (MediaStreamType) | 1 (VideoRecord) | 描述使用此效果的擷取數據流。 無法使用音訊。 |
HologramCompositionEnabled | boolean | TRUE | 在影片擷取中啟用或停用全像投影的旗標。 |
RecordingIndicatorEnabled | boolean | TRUE | 在全像投影擷取期間啟用或停用螢幕錄製指示器的旗標。 |
VideoStabilizationEnabled | boolean | FALSE | 啟用或停用 HoloLens 追蹤器提供之視訊穩定功能的旗標。 |
VideoStabilizationBufferLength | UINT32 | 0 | 設定有多少歷史畫面用於視訊防震。 0 是 0 延遲,而且從電源和效能的觀點來看,幾乎「免費」。 建議使用15個最高品質(代價是延遲和記憶體的15個畫面格)。 |
GlobalOpacityCoefficient | float | 0.9 (HoloLens) 1.0 (沉浸式頭戴式裝置) | 將全像投影的全域不透明度係數設定為 0.0(完全透明)到 1.0(完全不透明)。 |
BlankOnProtectedContent | boolean | FALSE | 如果有 2d UWP 應用程式顯示受保護的內容,則為啟用或停用傳回空白框架的旗標。 如果此旗標為 false,且 2d UWP 應用程式顯示受保護的內容,則 2d UWP 應用程式將會由頭戴式裝置和混合實境擷取中的受保護內容紋理取代。 |
ShowHiddenMesh | boolean | FALSE | 啟用或停用的旗標,顯示全像攝影機的隱藏區域網格和鄰近內容。 |
OutputSize | 大小 | 0, 0 | 在裁剪視訊穩定之後設定所需的輸出大小。 如果指定 0 或指定的輸出大小無效,則會選擇預設裁剪大小。 |
OutputSubtype | String | Nv12 | 在全像投影組合和/或影片防震之後,設定所需的輸出子類型。 支援 Nv12 和 Argb32 MediaEncodingSubtypes。 |
PreferredHologramPerspective | UINT32 | 在 Windows 裝置入口網站中從相機 設定轉譯 | 用來指出應該擷取哪個全像攝影相機檢視組態的列舉:0(顯示)表示應用程式不會被要求從相片/視訊相機轉譯,1 (PhotoVideoCamera) 會要求應用程式從相片/視訊相機轉譯(如果應用程式支援)。 僅支援 HoloLens 2 |
注意
您可以移至 [混合實境擷取] 頁面,然後從相機取消核取,以變更 [PreferredHologramPerspective] 的預設值。 此設定預設為 1 (PhotoVideoCamera),但可以取消核取以將它設定為 0 (Display)。
在 2020 年 6 月更新之前,PreferredHologramPerspective 的預設值為 0(Windows Holographic,版本 2004 組建 19041.1106 和 Windows 全像攝影版本 1903 組建 18362.1064)。
已使用 2021 年 5 月更新新增 OutputSubtype 的支援(Windows 全像攝影版本 21H1 組建 20346.1002)。
MRC 音訊效果 (Windows.Media.MixedRealityCapture.MixedRealityCaptureAudioEffect)
屬性名稱 | 類型 | 預設值 | 說明 |
---|---|---|---|
MixerMode | UINT32 | 2 (麥克風和系統音訊) | 用來指出應使用哪些音訊來源的列舉:0(僅限麥克風音訊)、1(僅限系統音訊)、2(麥克風和系統音訊) |
LoopbackGain | float | Windows 裝置入口網站中的應用程式音訊取得 設定 | 取得以套用至系統音訊音量。 範圍從 0.0 到 5.0。 僅支援 HoloLens 2 |
MicrophoneGain | float | Windows 裝置入口網站中的麥克風音訊取得 設定 | 取得以套用至麥克風音量。 範圍從 0.0 到 5.0。 僅支援 HoloLens 2 |
注意
您可以移至混合實境擷取頁面,並調整其個別設定旁的滑桿,以變更 Windows Device Portal 中的 LoopbackGain 或 MicrophoneGain 預設值。 這兩個設定預設為 1.0,但可以設定為介於 0.0 和 5.0 之間的任何值。
使用 Windows 裝置入口網站設定預設值時,會隨著 2020 年 6 月更新而新增 (Windows 全像攝影版本 2004 組建 19041.1106 和 Windows 全像攝影版本 1903 組建 18362.1064)。
同時 MRC 限制
當多個應用程式同時存取 MRC 時,您必須注意某些限制。
相片/視訊相機存取
在 HoloLens 1 上,MRC 無法在錄製視訊或拍照時擷取相片或擷取視訊。 反轉也是真的:如果 MRC 正在執行,應用程式將無法存取相機。
使用 HoloLens 2,您可以共用相機的存取權。 如果您不需要直接控制解析度或幀速率,您可以使用SharedReadOnly的 SharedMode屬性 來初始化 MediaCapture。
內建 MRC 相片和視訊相機存取
Windows 10 內建的 MRC 功能(透過 Cortana、開始功能表、硬體快捷方式、Miracast、Windows 裝置入口網站):
- 預設會以 ExclusiveControl 執行
不過,已將支援新增至 MRC 子系統,以共用模式運作:
- 如果應用程式要求 ExclusiveControl 存取相片/視訊相機,內建 MRC 會自動停止使用相片/視訊相機,讓應用程式的要求成功
- 如果在應用程式具有 ExclusiveControl 時啟動內建 MRC,內建 MRC 將會以 SharedReadOnly 模式執行
此共享模式功能有某些限制:
- 透過 Cortana、硬件快捷方式或 [開始] 功能表拍照:需要 Windows 10 2018 年 4 月更新版 (或更新版本)
- 透過 Cortana、硬件快捷方式或 [開始] 功能表的影片:需要 Windows 10 2018 年 4 月更新版 (或更新版本)
- 透過 Miracast 串流 MRC: 需要 Windows 10 2018 年 10 月更新 (或更新版本)
- 透過 Windows 裝置入口網站或透過 HoloLens 隨附應用程式串流 MRC:需要 HoloLens 2
注意
當另一個應用程式使用相片/視訊相機時,內建 MRC 相機 UI 的解析度和幀速率可能會從其正常值降低。
適用於開發人員的 MRC 存取
建議您在使用 MRC 時,一律要求相機的獨佔控制。 只要您知道上述限制,您的應用程式就能完全控制相機的設定。
- 使用 初始化設定建立媒體擷取物件
- 將 SharingMode 屬性設定為 獨佔
警告
在繼續之前,請務必仔細閱讀 SharingMode 備註 。
- 以您想要的方式設定相機
- 啟動應用程式、使用啟動 API 擷取視訊畫面,然後啟用 MRC
警告
如果您在啟動應用程式之前啟動 MRC,我們無法保證此功能會如預期般運作。
您可以在全像攝影臉部追蹤範例中找到 上述程式的完整範例。
注意
在 Windows 10 2018 年 4 月更新之前,應用程式的自定義 MRC 錄製器與系統 MRC 互斥(從 Windows 裝置入口網站擷取相片、擷取影片或串流)。