疑難排解
此頁面列出干擾 Azure 遠端轉譯 的常見問題,以及解決方式。
用戶端無法連線到伺服器
請確定您的防火牆(在裝置、路由器內部等)不會封鎖系統需求中所述的埠。
無法載入模型
載入模型時(例如,透過 Unity 範例)失敗,雖然 Blob 設定正確,但 Blob 記憶體可能未正確連結。 記憶體帳戶連結一章會說明適當的連結。 正確鏈接之後,最多可能需要 30 分鐘的時間,變更才會生效。
無法將儲存體帳戶連結至 ARR 帳戶
有時在鏈接記憶體帳戶期間,不會列出 遠端轉譯 帳戶。 若要修正此問題,請移至 Azure 入口網站 中的ARR帳戶,然後選取左側 設定群組底下的 [身分識別]。 確定 [狀態 ] 設定為 [ 開啟]。
無法透過 SAS 令牌載入模型
如果用戶端應用程式無法透過有效的 SAS 令牌從記憶體載入模型,可能是由 Blob 記憶體上設定的公用網路存取層級 所造成。 只有在已使用 [從所有網络啟用] 選項設定 ARR 模型時,才能從 SAS 令牌載入 ARR 模型:
如果限制為私人端點是必要條件, 則必須連結 記憶體帳戶,而且模型必須透過非 SAS 程式代碼路徑載入,如 這裡所述。
錯誤 'Disconnected: VideoFormatNotAvailable
'
檢查您的 GPU 是否支援硬體視訊譯碼。 請參閱 開發計算機。
如果您使用的是具有兩個 GPU 的膝上型電腦,則預設可能會執行 GPU,不提供硬體視訊譯碼功能。 若是如此,請嘗試強制您的應用程式使用其他 GPU。 在 GPU 驅動程式設定中,通常可能會變更使用的 GPU。
擷取會話/轉換狀態失敗
傳送 REST API 命令太頻繁會導致伺服器節流並最終傳回失敗。 節流案例中的 HTTP 狀態代碼為 429 (「要求太多」)。 作為經驗法則,後續呼叫之間應該有 5-10 秒的延遲。
請注意,此限制不僅會影響直接呼叫時的 REST API 呼叫,也會影響其 C#/C++ 對應專案,例如 Session.GetPropertiesAsync
、 Session.RenewAsync
或 Frontend.GetAssetConversionStatusAsync
。 有些函式也會傳回儲存以重試時的資訊。 例如, RenderingSessionPropertiesResult.MinimumRetryDelay
指定嘗試另一項檢查之前要等候的秒數。 當可用時,使用這類傳回的值是最佳的,因為它可讓您儘可能頻繁地進行檢查,而不會受到節流。
如果您遇到伺服器端節流,請變更程式代碼以較不頻繁地執行呼叫。 伺服器會每分鐘重設節流狀態,因此在一分鐘之後安全地重新執行程序代碼。
H265 編解碼器無法使用
伺服器可能會拒絕連線併發生錯誤的原因有兩個 codec not available
。
未安裝 H265 編解碼器:
首先,請務必如系統需求的軟體一節所述安裝 HEVC 視訊延伸模組。
如果您仍然遇到問題,請確定您的圖形卡支援 H265,且已安裝最新的圖形驅動程式。 如需廠商特定資訊,請參閱系統需求的開發電腦一節。
編解碼器已安裝,但無法使用:
此問題的原因是 DLL 上的安全性設定不正確。 嘗試觀看以 H265 編碼的影片時,此問題不會顯現出來。 重新安裝編解碼器並不會修正問題。 請改為執行下列步驟:
使用系統管理員許可權開啟 PowerShell 並執行
Get-AppxPackage -Name Microsoft.HEVCVideoExtension*
(請注意 '*' 是因為針對某些套件安裝版本,名稱
HEVCVideoExtensions
與 相反HEVCVideoExtension
。 此命令應該輸出InstallLocation
編解碼器的 ,如下所示:InstallLocation : C:\Program Files\WindowsApps\Microsoft.HEVCVideoExtension_1.0.23254.0_x64__5wasdgertewe
在 Windows 檔案總管中開啟該資料夾
應該有 x86 和 x64 子資料夾。 以滑鼠右鍵按下其中一個資料夾,然後選擇 [ 屬性]
- 選取 [安全性] 索引標籤,然後選取 [進階設定] 按鈕
- 選取擁有者的 [變更]
- 在文字欄位中輸入 管理員 istrators
- 選取 [檢查名稱] 和 [確定]
針對其他資料夾重複上述步驟
同時在兩個資料夾內的每個 DLL 檔案上重複上述步驟。 應該有四個 DLL。
若要確認設定現在正確無誤,請針對四個 DLL 執行下列步驟:
- 選取 [屬性 > 安全性 > 編輯]
- 瀏覽所有群組/使用者的清單,並確定每個群組都有 [讀取] 和 [執行] 權限集(必須勾選允許資料列中的複選標記)
低視訊品質
視訊品質可以透過網路品質或遺漏的 H265 視訊編解碼器來入侵。
- 請參閱識別網路問題的步驟。
- 請參閱安裝最新圖形驅動程序的系統需求。
使用 MRC 錄製的影片不會反映即時體驗的品質
您可以透過 混合實境擷取 (MRC) 在 HoloLens 上錄製影片。 不過,產生的影片品質比實時體驗差兩個原因:
- 視訊幀速率上限為 30 Hz,而不是 60 Hz。
- 影片影像不會經歷 後期重新投影 處理步驟,因此影片看起來會更切碎。
兩者都是錄製技術的固有限制。
成功載入模型之後的黑色畫面
如果您已連線到轉譯運行時間並成功載入模型,但之後只會看到黑色畫面,則這可能會有一些不同的原因。
建議您先測試下列事項,再執行更深入的分析:
- 是否安裝 H265 編解碼器? 雖然 H264 編解碼器應該有後援,但我們已看到此後援無法正常運作的情況。 請參閱安裝最新圖形驅動程序的系統需求。
- 使用 Unity 專案時,請關閉 Unity,刪除項目目錄中的暫存連結 庫 和 obj 資料夾,然後再次載入/建置專案。 在某些情況下,快取的數據會導致範例因沒有明顯原因而無法正常運作。
如果這兩個步驟沒有説明,則需要瞭解用戶端是否收到視訊畫面。 這可以用程式設計方式進行查詢,如伺服器端效能查詢一章中所述。 FrameStatistics struct
有一個成員,表示已接收多少視訊畫面。 如果這個數位大於 0 並隨著時間增加,用戶端會從伺服器接收實際的視訊畫面。 因此,它必須是客戶端的問題。
轉換設定中的縮放值不會套用至模型
如果在展示或快速入門中顯示模型,但縮放比例未變更,但調整會套用為轉換設定幾何參數的一部分,這可能是因為範例的內建自動調整功能。 也就是說,不論模型的輸入縮放比例為何,範例都會調整模型以最適合檢視範圍。
如果是「展示」,可以在models.xml檔案內的模型區Transform
段中指定MaxSize
零,以停用自動調整。 此數據驅動方法需要先透過 XML 載入模型,因為在其他所有情況下, MaxSize
預設值為 1 公尺。 另外還有一個 MinSize
預設為0.5公尺的屬性,導致所有較小的模型都會相應增加。
如需在展示中載入模型的詳細資訊,請參閱 展示檔的<將 3D 模型資產新增至 ARR 展示 >一章。
常見的客戶端問題
此模型超過所選 VM 的限制,特別是基本類型數目上限:
請參閱特定的 伺服器大小限制。
模型不在相機 frustum 內:
在許多情況下,模型會正確顯示,但位於相機 frustum 外部。 常見的原因是模型已使用遠距中心樞紐導出,因此由相機的遠裁剪平面裁剪。 它有助於以程式設計方式查詢模型的周框方塊,並以 Unity 將方塊可視化為折線框,或將其值列印至偵錯記錄檔。
此外,轉換程式會 與轉換的模型一起產生輸出 json 檔案 。 若要偵錯模型定位問題,值得查看 boundingBox
outputStatistics 區段中的專案:
{
...
"outputStatistics": {
...
"boundingBox": {
"min": [
-43.52,
-61.775,
-79.6416
],
"max": [
43.52,
61.775,
79.6416
]
}
}
}
周框方塊描述為 min
3D 空間中的 和 max
位置,以公尺為單位。 因此,1000.0 的座標表示距離原點 1 公里。
這個周框方塊可能會有兩個問題,導致不可見的幾何:
- 此方塊可能離中心很遠,因此對象會因為遠平面裁剪而完全裁剪。
boundingBox
在此案例中,值看起來會像這樣:min = [-2000, -5,-5], max = [-1990, 5,5]
,使用 X 軸上的大位移做為範例。 若要解決此問題,請在模型轉換組態中啟用recenterToOrigin
選項。 - 方塊可以置中,但大小太大。 這表示,雖然相機從模型中央開始,但其幾何會裁剪到所有方向。 此案例中的一般
boundingBox
值看起來會像這樣:min = [-1000,-1000,-1000], max = [1000,1000,1000]
。 這類問題的原因通常是單位規模不符。 若要補償,請在 轉換 期間指定縮放值,或使用正確的單位標記來源模型。 在運行時間載入模型時,調整也可以套用至根節點。
Unity 轉譯管線不包含轉譯攔截:
Azure 遠端轉譯 連結至 Unity 轉譯管線,以使用影片執行畫面組合,以及執行重現。 若要確認這些勾點存在,請開啟選單 Window > Analysis > Frame debugger。 啟用它,並確定管線中有兩個專案 HolographicRemotingCallbackPass
:
若要修正,請確定已使用提供的 HybridRenderingPipeline 資產:
..如 Unity 轉譯管線中所述。
棋盤模式會在模型載入後轉譯
如果轉譯的影像看起來像這樣:
然後轉譯器會達到 標準組態大小的多邊形限制。 若要減輕問題,請切換至 進階 組態大小,或減少可見多邊形的數目。
Unity 中轉譯的影像是倒置的
請務必遵循 Unity 教學課程:完全檢視遠端模型 。 倒置影像表示需要 Unity 才能建立螢幕外轉譯目標。 目前不支援此行為,而且會對 HoloLens 2 產生巨大的效能影響。
此問題的原因可能是 MSAA、HDR 或啟用後續處理。 請確定已選取低品質配置檔,並在 Unity 中設定為預設值。 若要這樣做,請移至編輯>項目 設定... >品質。
在 Unity 2020 中使用 OpenXR 外掛程式時,不論啟用後續處理,都有一些 URP(通用轉譯管線)版本可建立此額外的螢幕外轉譯目標。 因此,請務必手動將 URP 版本升級至至少 10.5.1(或更新版本)。 此升級程式會在系統需求中說明。
使用 遠端轉譯 API 的 Unity 程式代碼不會編譯
針對 Unity 編輯器進行編譯時,請使用偵錯
將 Unity 方案的組建類型 切換為 [ 偵錯]。 在 Unity 編輯器中測試 ARR 時,定義 UNITY_EDITOR
只能在 「偵錯」組建中使用。 此設定與用於 已部署應用程式的組建類型無關,您應該偏好使用「發行」組建。
編譯 HoloLens 2 的 Unity 範例時編譯失敗
我們在嘗試編譯 HoloLens 2 的 Unity 範例時,看到虛假失敗(快速入門 ShowCaseApp...)。 Visual Studio 抱怨無法複製某些檔案,儘管檔案已存在。 如果您遇到此問題:
- 從項目移除所有暫存 Unity 檔案,然後再試一次。 也就是說,關閉 Unity,刪除項目目錄中的暫存連結 庫 和 obj 資料夾,然後再次載入/建置專案。
- 請確定項目位於磁碟上具有合理簡短路徑的目錄中,因為複製步驟有時似乎遇到長檔名的問題。
- 如果這無濟於事,MS Sense 可能會干擾複製步驟。 若要設定例外狀況,請從命令行執行此登錄命令(需要系統管理員許可權):
reg.exe ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows Advanced Threat Protection" /v groupIds /t REG_SZ /d "Unity"
Unity 專案的 Arm64 組建失敗,因為缺少 AudioPluginMsHRTF.dll
AudioPluginMsHRTF.dll
for Arm64 已在 3.0.1 版中新增至 Windows Mixed Reality 套件 (com.unity.xr.windowsmr.metro)。 請確定您已透過 Unity 封裝管理員 安裝 3.0.1 版或更新版本。 從 Unity 功能表欄,流覽至 [視窗>] 封裝管理員 並尋找 Windows Mixed Reality 套件。
Unity Cinemachine
外掛程式無法在遠端姿勢模式中運作
在 遠端姿勢模式中,ARR Unity 系結程式代碼會隱含建立 Proxy 相機來執行實際轉譯。 在此情況下,主相機的撲殺面具會設定為0(“nothing”),以有效地關閉它的轉譯。 不過,某些第三方外掛程式(例如 Cinemachine
)會驅動相機,可能至少依賴一些正在設定的圖層位。
為此,系結程式代碼可讓您以程式設計方式變更主相機的圖層位掩碼。 具體來說,需要下列步驟:
- 在 Unity 中建立新的層次,該圖層不會用於轉譯任何本機場景幾何。 在此範例中,假設圖層名為 “Cam”。
- 將此位掩碼傳遞至 ARR,讓 ARR 將其設定在主相機上:
RemoteManagerUnity.CameraCullingMask = LayerMask.GetMask("Cam");
- 設定
Cinemachine
屬性以使用此新層次:
本機姿勢模式不受此問題影響,因為在此情況下,ARR 系結不會將轉譯重新導向至內部 Proxy 相機。
原生 C++ 型應用程式未編譯
UWP 應用程式或 DLL 的「找不到連結庫」錯誤
在 C++ NuGet 套件內,有檔案 microsoft.azure.remoterendering.Cpp.targets
檔案會定義要使用的二進位類別。 若要識別 UWP
,檔案中的條件會檢查 是否有 ApplicationType == 'Windows Store'
。 因此,必須確定此類型是在項目中設定的。 透過 Visual Studio 的專案精靈建立 UWP 應用程式或 DLL 時,應該會發生這種情況。
不穩定的 全像投影
如果轉譯的物件似乎隨著頭部移動移動而移動,您可能會遇到延遲階段重新剖析 (LSR) 的問題。 如需如何處理這類情況的指引,請參閱晚期重新投影一節。
不穩定全像投影(搖擺、變形、抖動或跳躍全像投影)的另一個原因可能是網路連線能力不佳,特別是網路頻寬不足或延遲太高。 網路連線品質的良好指標是 效能統計數據 值 ServiceStatistics.VideoFramesReused
。 重複使用的畫面格表示用戶端上需要重複使用舊視訊畫面的情況,因為沒有新的視訊畫面可用,例如因為封包遺失或網路等待時間的變化。 如果 ServiceStatistics.VideoFramesReused
經常大於零,表示網路問題。
另一個要檢視的值是 ServiceStatistics.LatencyPoseToReceiveAvg
。 它應該一致低於 100 毫秒。 看到較高的值可能表示您已連線到離得太遠的數據中心。
如需潛在風險降低的清單,請參閱 網路連線的指導方針。
HoloLens 2 上的本機內容 (UI, ...) 會轉譯的失真成品明顯比沒有 ARR
此成品是因為預設設定會交易本機內容投影品質,以達到運行時間效能。 請參閱重新投影姿勢模式的章節,以瞭解投影模式如何變更,讓本機內容以與沒有ARR相同的重新投影品質層級轉譯。
Z 戰鬥
雖然 ARR 提供 z 戰鬥風險降低功能,但 z-fighting 仍然可以顯示在場景中。 本指南旨在針對這些剩餘的問題進行疑難解答。
建議的步驟
使用下列工作流程來減輕 z-fighting:
使用 ARR 的預設設定來測試場景 (z-fighting mitigation on)
將相機的近遠平面變更為更接近的範圍
透過下一節對場景進行疑難解答
調查剩餘的 z 戰鬥
如果上述步驟已用盡,剩餘的 z 戰鬥是不能接受的,則需要調查 z 戰鬥的根本原因。 如 z-fighting 風險降低功能頁面所述,Z 戰鬥有兩個主要原因:深度精確度損失在深度範圍的遠端,而表面在共同平面時相交。 深度精確度損失是數學最終結果,只能遵循上述步驟 3 來緩和。 平面表面表示來源資產缺陷,而且在源數據中較好地修正。
ARR 有一項功能可用來判斷表面是否可以 z-fight: 棋盤醒目提示。 您也可以以視覺方式判斷造成 z 戰鬥的原因。 下列第一個動畫顯示距離中深度精確度損失的範例,第二個動畫顯示幾乎平面表面的範例:
將這些範例與您的 z-fighting 進行比較,以判斷根本原因,或選擇性地遵循此逐步工作流程:
- 將相機放置在 z 戰鬥表面上方,以直接查看表面。
- 慢慢地將相機往後移動,遠離表面。
- 如果 Z 戰鬥一直可見, 表面是完全共同的。
- 如果 Z 戰鬥在大部分時間都可見,表面幾乎是平面。
- 如果 z 戰鬥只看得見遠,原因就是缺乏深度精確度。
平面表面可能會有許多不同的原因:
匯出應用程式因為錯誤或不同的工作流程方法而複製物件。
請使用個別的應用程式和應用程式支援來檢查這些問題。
表面會重複並翻轉,以在使用正面或後臉撲殺的轉譯器中出現雙面。
透過模型轉換匯入會決定模型的主要側邊性。 雙面性會假設為預設值。 表面會轉譯為薄牆,兩側有實際正確的光源。 單邊性可由來源資產中的旗標隱含,或在模型轉換期間明確強制。 此外,也可以選擇性地將 單邊模式 設定為「一般」。
物件會交集於來源資產中。
以某些表面重疊的方式轉換的物件也會建立 z-fighting。 在 ARR 中轉換匯入場景中的場景樹狀結構部分,也可能會造成此問題。
表面是有目的的撰寫來觸摸,例如牆上的裝飾或文字。
在原生 C++ 應用程式中使用多階段立體轉譯的圖形成品
在某些情況下,在呼叫BlitRemoteFrame之後,針對本機內容使用多重傳遞立體聲轉譯模式的自定義原生 C++ 應用程式,可以在呼叫 BlitRemoteFrame 之後,觸發驅動程式 Bug。 錯誤會導致不具決定性的點陣化問題,導致本機內容的個別三角形或三角形部分隨機消失。 基於效能考慮,建議您使用更現代化的單次立體轉譯技術來轉譯本機內容,例如使用 SV_RenderTargetArrayIndex。
轉換檔案下載錯誤
轉換服務可能會因為檔案系統限制而從 Blob 記憶體下載檔案時發生錯誤。 特定失敗案例如下所列。 如需 Windows 檔案系統限制的完整資訊,請參閱 命名檔案、路徑和命名空間 檔。
碰撞路徑和檔名
在 Blob 記憶體中,可以建立與同層級專案完全相同名稱的檔案和資料夾。 Windows 文件系統不允許此專案。 因此,服務在該情況下會發出下載錯誤。
路徑長度
Windows 和服務會施加路徑長度限制。 Blob 記憶體中的檔案路徑和檔名不得超過 178 個字元。 例如,假設的 blobPrefix
models/Assets
為 ,其為13個字元:
models/Assets/<any file or folder path greater than 164 characters will fail the conversion>
轉換服務會下載 下 blobPrefix
指定的所有檔案,而不只是轉換中使用的檔案。 在這些情況下,造成問題的檔案/資料夾可能較不明顯,因此請務必檢查 下記憶體帳戶 blobPrefix
中包含的所有專案。 如需下載的內容,請參閱下面的範例輸入。
{
"settings": {
"inputLocation": {
"storageContainerUri": "https://contosostorage01.blob.core.windows.net/arrInput",
"blobPrefix": "models/Assets",
"relativeInputAssetPath": "myAsset.fbx"
...
}
}
models
├───Assets
│ │ myAsset.fbx <- Asset
│ │
│ └───Textures
│ | myTexture.png <- Used in conversion
│ |
| └───MyFiles
| myOtherFile.txt <- File also downloaded under blobPrefix
|
└───OtherFiles
myReallyLongFileName.txt <- Ignores files not under blobPrefix
HoloLens2 「拍照」(MRC) 不會顯示任何本機或遠端內容
如果專案從WMR 更新為OpenXR,且專案存取 HolographicViewConfiguration 類別 (Windows.Graphics.Holographic) 設定,通常會發生此問題。 OpenXR 中不支援此 API,且不得存取。