適用于 Python 的 Azure 遠端轉譯 用戶端程式庫 - 1.0.0b2 版
Azure 遠端轉譯 (ARR) 是一項服務,可讓您在雲端轉譯高品質、互動式3D 內容,並將其即時串流至裝置,例如 HoloLens 2。
此 SDK 提供的功能可將資產轉換成執行時間預期的格式,以及管理遠端轉譯會話的存留期。
此 SDK 支援遠端轉譯 REST API版本 「2021-01-01」。
注意:會話執行之後,用戶端應用程式會使用其中一個「執行時間 SDK」來連線到它。 這些 SDK 的設計目的是為了支援執行 3D 轉譯的互動式應用程式需求。 它們可在 .net (或 (C++) 中使用。
免責聲明
Python 2.7 的 Azure SDK Python 套件支援已于 2022 年 1 月 1 日結束。 如需詳細資訊和問題,請參閱 https://github.com/Azure/azure-sdk-for-python/issues/20691
開始使用
Prerequisites
您將需要Azure 訂用帳戶和Azure 遠端轉譯 帳戶才能使用此套件。
若要遵循本教學課程,強烈建議您將 儲存體帳戶與 ARR 帳戶連結。
安裝套件
使用pip安裝適用于 Python 的 Azure 遠端轉譯 用戶端程式庫:
pip install --pre azure-mixedreality-remoterendering
建立和驗證用戶端
建構遠端轉譯用戶端需要已驗證的帳戶和遠端轉譯端點。 針對在 eastus 區域中建立的帳戶,帳戶網域會具有「eastus.mixedreality.azure.com」。 驗證有幾種不同形式:
- 帳戶金鑰驗證
- 帳戶金鑰可讓您快速開始使用 Azure 遠端轉譯。 但在您將應用程式部署至生產環境之前,建議您先更新應用程式,以使用 Azure AD 驗證。
- Azure Active Directory (AD) 權杖驗證
- 如果您要建置企業應用程式,且貴公司使用 Azure AD 做為其身分識別系統,則您可在應用程式中使用使用者型的 Azure AD 驗證。 然後,您可以使用現有的 Azure AD 安全性群組來授與 Azure 遠端轉譯 帳戶的存取權。 您也可以直接將存取權授與貴組織中的使用者。
- 否則,建議您從支援應用程式的 Web 服務中取得 Azure AD 權杖。 建議您針對生產應用程式使用這個方法,因為它可讓您避免在用戶端應用程式中內嵌認證以進行存取。
如需詳細指示和資訊,請參閱 這裡 。
在下列所有範例中,會使用 endpoint
參數建構用戶端。
可用的端點會對應至區域,而端點的選擇會決定服務執行其工作的區域。
例如 https://remoterendering.eastus2.mixedreality.azure.com
。
您可以在Azure 遠端轉譯 區域清單中找到支援區域中的完整端點清單。
注意:若要轉換資產,最好選擇接近包含資產之儲存體的區域。
注意:若要轉譯,強烈建議您使用服務挑選最接近裝置的區域。 與伺服器通訊所花費的時間會影響體驗的品質。
使用帳戶金鑰驗證進行驗證
AzureKeyCredential
使用 物件來使用帳戶識別碼和帳戶金鑰進行驗證:
from azure.core.credentials import AzureKeyCredential
from azure.mixedreality.remoterendering import RemoteRenderingClient
account_id = "<ACCOUNT_ID>"
account_domain = "<ACCOUNT_DOMAIN>"
account_key = "<ACCOUNT_KEY>"
arr_endpoint = "<ARR_ENDPOINT>"
key_credential = AzureKeyCredential(account_key)
client = RemoteRenderingClient(
endpoint=arr_endpoint,
account_id=account_id,
account_domain=account_domain,
credential=key_credential
)
使用靜態存取權杖進行驗證
您可以傳遞Mixed Reality存取權杖,做為 AccessToken
先前從Mixed Reality STS 服務擷取,以便與Mixed Reality用戶端程式庫搭配使用:
from azure.mixedreality.authentication import MixedRealityStsClient
from azure.mixedreality.remoterendering import RemoteRenderingClient
account_id = "<ACCOUNT_ID>"
account_domain = "<ACCOUNT_DOMAIN>"
account_key = "<ACCOUNT_KEY>"
key_credential = AzureKeyCredential(account_key)
client = MixedRealityStsClient(account_id, account_domain, key_credential)
token = client.get_token()
client = RemoteRenderingClient(
endpoint=arr_endpoint,
account_id=account_id,
account_domain=account_domain,
credential=token,
)
使用 Azure Active Directory 認證進行驗證
帳戶金鑰驗證用於大部分的範例中,但您也可以使用 Azure 身分識別程式庫向 Azure Active Directory 進行驗證。 這是生產應用程式的建議方法。 若要使用如下所示的 [DefaultAzureCredential][defaultazurecredential] 提供者,或隨附于 Azure SDK 的其他認證提供者,請安裝 @azure/identity
套件:
您也需要 [註冊新的 AAD 應用程式][register_aad_app],並將Mixed Reality服務的適當角色指派給服務主體,以授與Mixed Reality資源的存取權。
from azure.identity import DefaultAzureCredential
from azure.mixedreality.remoterendering import RemoteRenderingClient
account_id = "<ACCOUNT_ID>"
account_domain = "<ACCOUNT_DOMAIN>"
default_credential = DefaultAzureCredential()
client = RemoteRenderingClient(
endpoint=arr_endpoint,
account_id=account_id,
account_domain=account_domain,
credential=default_credential
)
重要概念
RemoteRenderingClient
RemoteRenderingClient
是用來存取 RemoteRenderingService 的用戶端程式庫。
它提供方法來建立和管理資產轉換和轉譯會話。
Long-Running作業
長時間執行的作業是由傳送至服務以啟動作業的初始要求所組成,接著依間隔輪詢服務,以判斷作業是否已完成或失敗,以及是否成功,以取得結果。
轉換資產或加速轉譯會話的方法會模型化為長時間執行的作業。
用戶端會公開傳 begin_<method-name>
回 LROPoller 或 AsyncLROPoller 的方法。
呼叫端應該等候作業完成,方法是在從 begin_<method-name>
方法傳回的 Poller 物件上呼叫 result () 。 提供範例程式碼片段來說明如何使用長時間執行的作業。
範例
轉換資產
我們假設已建構 RemoteRenderingClient,如 驗證用戶端 一節中所述。 下列程式碼片段描述如何要求在指定儲存體容器 URI 上 Blob 容器的 「/input/box/box.fbx」 路徑中找到 「box.fbx」 的 「box.fbx」。
將資產轉換可能需要數秒到數小時的時間。 此程式碼會使用現有的轉換輪詢器,並定期輪詢,直到轉換完成或失敗為止。 預設輪詢期間為 5 秒。 請注意,您可以使用現有轉換和用戶端的識別碼,使用client.get_asset_conversion_poller擷取轉換輪詢器。
轉換程式完成之後,輸出會寫入指定的輸出容器,其路徑為 「/output/ < conversion_id > /box.arrAsset」。 您可以從成功轉換output.asset_uri擷取路徑。
conversion_id = str(uuid.uuid4()) # A randomly generated uuid is a good choice for a conversion_id.
input_settings = AssetConversionInputSettings(
storage_container_uri="<STORAGE CONTAINER URI>",
relative_input_asset_path="box.fbx",
blob_prefix="input/box"
)
output_settings = AssetConversionOutputSettings(
storage_container_uri="<STORAGE CONTAINER URI>",
blob_prefix="output/"+conversion_id,
output_asset_filename="convertedBox.arrAsset" #if no output_asset_filename <input asset filename>.arrAsset will be the name of the resulting converted asset
)
try:
conversion_poller = client.begin_asset_conversion(
conversion_id=conversion_id,
input_settings=input_settings,
output_settings=output_settings
)
print("Conversion with id:", conversion_id, "created. Waiting for completion.")
conversion = conversion_poller.result()
print("conversion output:", conversion.output.asset_uri)
except Exception as e:
print("Conversion failed", e)
清單轉換
您可以使用 方法來取得轉換 list_asset_conversions
的相關資訊。
這個方法可能會傳回尚未啟動的轉換、正在執行的轉換,以及已完成的轉換。
在此範例中,我們會列出所有轉換和列印識別碼和建立廣告,以及成功轉換的輸出資產 URI。
print("conversions:")
for c in client.list_asset_conversions():
print(
"\t conversion: id:",
c.id,
"status:",
c.status,
"created on:",
c.created_on.strftime("%m/%d/%Y, %H:%M:%S"),
)
if c.status == AssetConversionStatus.SUCCEEDED:
print("\t\tconversion result URI:", c.output.asset_uri)
建立工作階段
我們假設已建構 RemoteRenderingClient,如 驗證用戶端 一節中所述。 下列程式碼片段描述如何要求啟動新的轉譯會話。
print("starting rendering session with id:", session_id)
try:
session_poller = client.begin_rendering_session(
session_id=session_id, size=RenderingSessionSize.STANDARD, lease_time_minutes=20
)
print(
"rendering session with id:",
session_id,
"created. Waiting for session to be ready.",
)
session = session_poller.result()
print(
"session with id:",
session.id,
"is ready. lease_time_minutes:",
session.lease_time_minutes,
)
except Exception as e:
print("Session startup failed", e)
延長會話的租用時間
如果會話接近其租用時間上限,但您想要讓它保持運作,您必須進行呼叫,以增加其租用時間上限。 此範例示範如何查詢目前的屬性,然後在租用即將到期時延長租用。
注意:執行時間 SDK 也提供這項功能,而且在許多情況下,您會使用它們來擴充會話租用。
session = client.get_rendering_session(session_id)
if session.lease_time_minutes - session.elapsed_time_minutes < 2:
session = client.update_rendering_session(
session_id=session_id, lease_time_minutes=session.lease_time_minutes + 10
)
列出會話
您可以使用用戶端的 方法來取得會話 list_rendering_sessions
的相關資訊。
這個方法可能會傳回尚未啟動的會話,以及已就緒的會話。
print("sessions:")
rendering_sessions = client.list_rendering_sessions()
for session in rendering_sessions:
print(
"\t session: id:",
session.id,
"status:",
session.status,
"created on:",
session.created_on.strftime("%m/%d/%Y, %H:%M:%S"),
)
停止會話
下列程式碼將會停止具有指定識別碼的執行中會話。由於執行會話會產生持續成本,因此建議停止不再需要的會話。
client.stop_rendering_session(session_id)
print("session with id:", session_id, "stopped")
疑難排解
如需有關 Azure 遠端轉譯的一般疑難排解建議,請參閱 docs.microsoft.com 遠端轉譯的疑難排解頁面。
如果要求失敗,用戶端方法和等候輪詢器結果將會擲回例外狀況。
如果轉換中的資產無效,轉換輪詢器會擲回例外狀況,其中包含詳細資料的錯誤。 一旦轉換服務能夠處理檔案, < assetName.result.json > 檔案就會寫入輸出容器。 如果輸入資產無效,則該檔案將包含問題的詳細描述。
同樣地,有時候當要求會話時,會話最終會處於錯誤狀態。 在此案例中,輪詢器會擲回包含錯誤詳細資料的例外狀況。 會話錯誤通常是暫時性的,而且要求新的會話應該會成功。
記錄
此程式庫會使用標準 [logging][python_logging] 程式庫進行記錄。
HTTP 會話的基本資訊 (URL、標頭等。) 會在層級記錄 INFO
。
詳細的 DEBUG
層級記錄,包括要求/回應主體和 未回應 標頭,可以在用戶端或每個作業 logging_enable
上使用 關鍵字引數來啟用。
如需完整的 SDK 記錄檔,請參閱 這裡的範例。
選用組態
選擇性關鍵字引數可以在用戶端和每個作業層級傳入。 azure 核心 參考檔 說明重試、記錄、傳輸通訊協定等可用的組態。
例外狀況
遠端轉譯用戶端程式庫將會引發Azure Core中定義的例外狀況。
非同步 API
此程式庫也包含 Python 3.7+ 上支援的完整非同步 API。 若要使用它,您必須先安裝非同步傳輸,例如 aioHTTP。 非同步用戶端可在 命名空間下 azure.mixedreality.remoterendering.aio
找到。
下一步
- 閱讀 產品檔
- 瞭解執行時間 SDK:
- .NET:/dotnet/api/microsoft.azure.remoterendering
- C++: /cpp/api/remote-rendering/
參與
此專案歡迎參與和提供建議。 大部分的參與都要求您同意「參與者授權合約 (CLA)」,宣告您有權且確實授與我們使用投稿的權利。 如需詳細資料,請前往 https://cla.microsoft.com 。
當您提交提取要求時,CLA Bot 會自動判斷您是否需要提供 CLA,並適當地裝飾 PR (例如標籤、註解)。 請遵循 bot 提供的指示。 您只需要使用我們的 CLA 在所有存放庫上執行此動作一次。
此專案採用 Microsoft Open Source Code of Conduct (Microsoft 開放原始碼管理辦法)。 如需詳細資訊,請參閱管理辦法常見問題集,如有任何其他問題或意見請連絡 opencode@microsoft.com。
如果您希望向此程式庫投稿,請參閱投稿指南,深入瞭解如何組建與測試程式碼。