使用電腦資源為您的應用程式提供全像攝影遠端應用程式的電源
本文說明全像攝影遠端處理的下列使用案例:
- 您希望電腦的資源提供應用程式電源,而不是依賴 HoloLens 上線資源:您可以建立並建置具有全像攝影遠端功能的應用程式。 使用者體驗 HoloLens 上的應用程式,但應用程式實際上會在電腦上執行,這可讓應用程式利用電腦更強大的資源。 如果您的 app 有高解析度的資產或模型,而且您不希望畫面播放速率受到影響,這特別有用。 我們稱之為 全像攝影遠端應用程式。 HoloLens 的輸入--注視、手勢、語音和空間對應,會傳送至電腦,其中內容會在虛擬沉浸式檢視中轉譯。 轉譯的畫面格接著會傳送至 HoloLens。
這種類型的全像攝影遠端功能也適用于Windows Mixed Reality (WMR) 沉浸式頭戴式裝置。 例如,如果您的 WMR 頭戴式裝置已連線到一台功能強大的電腦,而且您想要將應用程式從更強大的電腦串流處理到新電腦,這非常有用。
若要深入瞭解全像攝影遠端處理,請參閱 全像攝影遠端概觀
請注意, 如果您想要在開發過程中預覽和偵錯應用程式,也可以使用全像攝影遠端處理。
全像攝影遠端中的兩種可用模式
模式 1:在連線模式的電腦上執行的遠端應用程式,在接聽模式中執行HoloLens 2播放程式。
當遠端應用程式嘗試連線時,Player 會接聽連入連線。
模式 2:以接聽模式在電腦上執行的遠端應用程式、在連線模式中HoloLens 2執行的播放機。
當播放機嘗試連線時,遠端應用程式會接聽連入連線。
設定全像攝影遠端播放程式應用程式
若要單獨在 Mode 1 中使用全像攝影遠端處理,請在本文的HoloLens 2 (上從 Microsoft Store 安裝全像攝影遠端播放程式應用程式,我們將它直接稱為「播放機」) 。 如下所述,下載並執行應用程式之後,您會看到要連線的版本號碼和 IP 位址。 我們建議使用最新版的 Player。
全像攝影遠端需要快速的電腦和Wi-Fi連線。 您可以在上述連結的 Player 文章中找到更多詳細資料。
若要在上述兩種指定的模式中使用全像攝影遠端處理,您需要複製全像攝影遠端範例播放程式,並使用 Visual Studio 將其部署至HoloLens 2。
使用 Unity 建置在電腦上執行的遠端應用程式以進行全像攝影遠端處理
在功能表列上,選取 [編輯 > 專案設定]。
在左側資料行中,選取 [XR 外掛程式管理]。
確定您位於[通用 Windows 平臺設定] 索引標籤中。
在[OpenXR外掛程式] 區段中,選取[Microsoft HoloLens功能群組] 和 [全像攝影遠端遠端應用程式] 功能群組。
取消選取 [啟動時初始化 XR ] 核取方塊。
撰寫一些程式碼來設定遠端設定並觸發 XR 初始化。 應用程式可以針對 Mode 1 呼叫 Connect 函式,或呼叫 Mode 2 的 Listen 函式。 若要查看範例,請下載我們的 Open XR Unity Mixed Reality 範例,然後在RemotingSample專案中檢視AppRemoting.cs腳本。
針對模式 1,連線模式會使用填入
RemotingConfiguration
的 呼叫Microsoft.MixedReality.OpenXR.Remoting.AppRemoting.Connect
。 範例應用程式會在 Inspector 中公開此專案,並示範如何從文字欄位填入 IP 位址。 呼叫Connect
會設定組態並自動初始化 XR,這就是為什麼必須將其呼叫為協同程式的原因:StartCoroutine(Remoting.AppRemoting.Connect(remotingConfiguration));
針對模式 2,接聽模式會以填入
RemotingListenConfiguration
的 呼叫Microsoft.MixedReality.OpenXR.Remoting.AppRemoting.Listen
。 範例應用程式會在 Inspector 中公開此專案。 呼叫Listen
會設定組態,並等候來自全像攝影遠端範例播放程式的連線,這就是為什麼必須將其稱為協同程式的原因:StartCoroutine(Remoting.AppRemoting.Listen(remotingListenConfiguration));
執行時,您可以使用 API 取得目前的線上狀態
AppRemoting.TryGetConnectionState
,並選擇性地使用AppRemoting.Disconnect()
中斷和取消初始化 XR。 這可用來中斷連線並重新連線到相同應用程式會話內的不同裝置。 RemotingSample 應用程式會提供可套用的 Cube,這會在點選時中斷遠端會話的連線。
在上述模式中執行全像攝影遠端應用程式和播放機應用程式
模式 1:以連線模式在電腦上執行全像攝影遠端應用程式,並在接聽模式中執行播放機:
如果已在HoloLens 2上從市集安裝 Player,請略過下方的步驟數位 2 和 3,您可以在其中建置並執行範例播放機應用程式。 請改為執行已安裝的 Player,並繼續執行步驟 #4。
使用 VS 2019 開啟全像攝影遠端範例播放機應用程式,然後執行下列其中一項:
若要使用 USB 纜線在HoloLens 2上執行:
- 設定組建選項,如下所示:
- 開啟專案的 [屬性]頁面,然後流覽至 [組態屬性> 偵錯]。
- 按一下 [偵錯工具] 以啟動 下拉式清單,然後選取 [裝置]。
- 在 [ 命令列引數] 欄位中,新增 「-listen」。
若要使用 Wifi 在HoloLens 2上執行:
- 設定組建選項,如下所示:
- 開啟專案的 [屬性]頁面,然後流覽至 [組態屬性> 偵錯]。
- 按一下 [偵錯工具] 以啟動 下拉式清單,然後選取 [遠端電腦]。
- 在 [ 命令列引數] 欄位中,新增 HoloLens 的 Wifi IP 位址。
若要將 SamplePlayer 方案部署至HoloLens 2,請按 Visual Studio 中的播放按鈕。 您將能夠看到在 HoloLens 2 上執行的 HAR 範例播放程式,顯示其「正在等候HoloLens 2 IP 位址上的連線」。
在主機電腦上執行的遠端應用程式中,新增上面顯示的HoloLens 2 IP 位址,然後選取 [連線]。
建立連線之後,在HoloLens 2上執行的 Player 將會啟動「接收」。
模式 2:在接聽模式中在電腦上執行遠端應用程式,並在連線模式中執行 HAR 播放程式應用程式:
在電腦上執行的遠端應用程式中的 2D UI 畫面上,按一下 [ 接聽]。
開啟專案的 [屬性]頁面,然後流覽至 [組態屬性> 偵錯]。
按一下 [偵錯工具] 以啟動 下拉式清單,然後選取 [裝置]。
在 [ 命令列引數] 欄位中,新增主機電腦的 IP 位址。
若要將 SamplePlayer 方案部署至HoloLens 2,請在 Visual Studio 解決方案中,按一下 [播放] 按鈕。 您將能夠看到在HoloLens 2上執行的 HAR 範例播放程式,顯示其為「連線到命令列引數中提供的 IP 位址」。
建立連線之後,在HoloLens 2上執行的全像攝影遠端範例播放機應用程式將會啟動「接收」。
提示
若要獲得最佳結果,請確定您的應用程式已正確設定 。。/focus point。 這可協助全像攝影遠端處理將場景最適合無線連線的延遲。
從先前的全像攝影遠端 API 移轉
若要深入瞭解全像攝影遠端處理,請參閱 全像攝影遠端概觀
UnityEngine.XR.WSA.HolographicRemoting
從 Unity 檔上的範例程式碼:
XR。Wsa。HolographicRemoting | OpenXR.Remoting.AppRemoting |
---|---|
HolographicRemoting.ConnectRemotingSession() |
AppRemoting.Connect(RemotingConfiguration) |
HolographicRemoting.DisconnectRemotingSession() |
AppRemoting.Disconnect() |
HolographicRemoting.ConnectionState |
AppRemoting.TryGetConnectionState(out ConnectionState, out DisconnectReason) |
UnityEngine。XR。WindowsMR。WindowsMRRemoting
XR。WindowsMR。WindowsMRRemoting | OpenXR.Remoting.AppRemoting |
---|---|
WindowsMRRemoting.Connect() |
AppRemoting.Connect(RemotingConfiguration) |
WindowsMRRemoting.Listen() |
AppRemoting.Listen(RemotingListenConfiguration) |
WindowsMRRemoting.Disconnect() |
AppRemoting.Disconnect() |
WindowsMRRemoting.TryGetConnectionState(out ConnectionState) 和 WindowsMRRemoting.TryGetConnectionFailureReason(out ConnectionFailureReason) |
AppRemoting.TryGetConnectionState(out ConnectionState, out DisconnectReason) |
WindowsMRRemoting.isAudioEnabled , WindowsMRRemoting.maxBitRateKbps , WindowsMRRemoting.remoteMachineName |
透過 RemotingConfiguration 結構傳入 AppRemoting.Connect |
WindowsMRRemoting.isConnected |
AppRemoting.TryGetConnectionState(out ConnectionState state, out _) && state == ConnectionState.Connected |