Udostępnij za pośrednictwem


Stan kompilacji

Biblioteka klienta usługi Azure Remote Rendering dla języka Python — wersja 1.0.0b2

Azure Remote Rendering (ARR) to usługa, która umożliwia renderowanie wysokiej jakości, interaktywnej zawartości 3D w chmurze i przesyłanie strumieniowe jej w czasie rzeczywistym do urządzeń, takich jak HoloLens 2.

Ten zestaw SDK oferuje funkcje umożliwiające konwertowanie zasobów na format oczekiwany przez środowisko uruchomieniowe, a także zarządzanie okresem istnienia sesji renderowania zdalnego.

Ten zestaw SDK obsługuje wersję "2021-01-01" interfejsu API REST Remote Rendering.

UWAGA: Po uruchomieniu sesji aplikacja kliencka połączy się z nią przy użyciu jednego z "zestawów SDK środowiska uruchomieniowego". Te zestawy SDK są zaprojektowane tak, aby najlepiej obsługiwały potrzeby interaktywnej aplikacji wykonującej renderowanie 3d. Są one dostępne w programie (.net lub (C++).

Dokumentacja produktu

Zrzeczenie odpowiedzialności

Obsługa pakietów języka Python zestawu Azure SDK dla języka Python 2.7 została zakończona 01 stycznia 2022 r. Aby uzyskać więcej informacji i pytań, zapoznaj się z artykułem https://github.com/Azure/azure-sdk-for-python/issues/20691

Wprowadzenie

Wymagania wstępne

Do korzystania z tego pakietu będzie potrzebna subskrypcja platformy Azure i konto usługi Azure Remote Rendering.

Aby wykonać czynności opisane w tym samouczku, zdecydowanie zaleca się połączenie konta magazynu z kontem usługi ARR.

Instalowanie pakietu

Zainstaluj bibliotekę klienta usługi Azure Remote Rendering dla języka Python przy użyciu narzędzia pip:

pip install --pre azure-mixedreality-remoterendering

Tworzenie i uwierzytelnianie klienta

Konstruowanie klienta renderowania zdalnego wymaga uwierzytelnionego konta i zdalnego punktu końcowego renderowania. W przypadku konta utworzonego w regionie eastus domena konta będzie mieć formularz "eastus.mixedreality.azure.com". Istnieje kilka różnych form uwierzytelniania:

  • Uwierzytelnianie klucza konta
    • Klucze kont umożliwiają szybkie rozpoczęcie pracy z użyciem usługi Azure Remote Rendering. Jednak przed wdrożeniem aplikacji w środowisku produkcyjnym zalecamy zaktualizowanie aplikacji do korzystania z uwierzytelniania Azure AD.
  • Uwierzytelnianie tokenu usługi Azure Active Directory (AD)
    • Jeśli tworzysz aplikację dla przedsiębiorstw, a firma używa Azure AD jako systemu tożsamości, możesz użyć uwierzytelniania Azure AD opartego na użytkownikach w aplikacji. Następnie udzielasz dostępu do kont usługi Azure Remote Rendering przy użyciu istniejących grup zabezpieczeń Azure AD. Możesz również udzielić dostępu bezpośrednio użytkownikom w organizacji.
    • W przeciwnym razie zalecamy uzyskanie Azure AD tokenów z usługi internetowej obsługującej aplikację. Zalecamy tę metodę dla aplikacji produkcyjnych, ponieważ pozwala uniknąć osadzania poświadczeń w celu uzyskania dostępu do aplikacji klienckiej.

Zobacz tutaj , aby uzyskać szczegółowe instrukcje i informacje.

We wszystkich poniższych przykładach klient jest skonstruowany z parametrem endpoint . Dostępne punkty końcowe odpowiadają regionom, a wybór punktu końcowego określa region, w którym usługa wykonuje swoją pracę. Może to być na przykład https://remoterendering.eastus2.mixedreality.azure.com.

Pełną listę punktów końcowych w obsługiwanych regionach można znaleźć na liście regionów usługi Azure Remote Rendering.

UWAGA: W przypadku konwertowania zasobów zaleca się wybranie regionu w pobliżu magazynu zawierającego zasoby.

UWAGA: W przypadku renderowania zdecydowanie zaleca się wybranie najbliższego regionu do urządzeń przy użyciu usługi. Czas potrzebny na komunikację z serwerem ma wpływ na jakość środowiska.

Uwierzytelnianie przy użyciu uwierzytelniania klucza konta

Użyj obiektu, AzureKeyCredential aby użyć identyfikatora konta i klucza konta do uwierzytelnienia:

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
)

Uwierzytelnianie przy użyciu statycznego tokenu dostępu

Token dostępu Mixed Reality można przekazać jako AccessToken wcześniej pobrany z usługi Mixed Reality STS do użycia z biblioteką klienta 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,
)

Uwierzytelnianie przy użyciu poświadczeń usługi Azure Active Directory

Uwierzytelnianie klucza konta jest używane w większości przykładów, ale można również uwierzytelnić się w usłudze Azure Active Directory przy użyciu biblioteki tożsamości platformy Azure. Jest to zalecana metoda dla aplikacji produkcyjnych. Aby użyć dostawcy [DefaultAzureCredential][defaultazurecredential] pokazanego poniżej lub innych dostawców poświadczeń dostarczonych z zestawem Azure SDK, zainstaluj @azure/identity pakiet:

Musisz również zarejestrować nową aplikację usługi AAD[register_aad_app] i udzielić dostępu do zasobu Mixed Reality, przypisując odpowiednią rolę dla usługi Mixed Reality do jednostki usługi.

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
)

Kluczowe pojęcia

RemoteRenderingClient

Jest RemoteRenderingClient to biblioteka klienta używana do uzyskiwania dostępu do usługi RemoteRenderingService. Udostępnia metody tworzenia konwersji zasobów i sesji renderowania oraz zarządzania nimi.

operacje Long-Running

Długotrwałe operacje to operacje, które składają się z początkowego żądania wysłanego do usługi w celu uruchomienia operacji, a następnie sondowania usługi w odstępach czasu w celu ustalenia, czy operacja została ukończona, czy nie powiodła się, a jeśli zakończyła się pomyślnie, aby uzyskać wynik.

Metody konwertujące zasoby lub uruchamiające sesje renderowania są modelowane jako długotrwałe operacje. Klient uwidacznia metodę zwracającą begin_<method-name> LROPoller lub AsyncLROPoller. Obiekt wywołujący powinien czekać na ukończenie operacji przez wywołanie elementu result() w obiekcie poller zwróconym begin_<method-name> z metody . Przykładowe fragmenty kodu są udostępniane w celu zilustrowania użycia długotrwałych operacji poniżej.

Przykłady

Konwertowanie elementu zawartości

Przyjęto założenie, że obiekt RemoteRenderingClient został skonstruowany zgodnie z opisem w sekcji Uwierzytelnianie klienta . Poniższy fragment kodu opisuje sposób żądania, że "box.fbx" znajduje się w ścieżce "/input/box/box/box.fbx" kontenera obiektów blob na danym identyfikatorze URI kontenera magazynu, jest konwertowany.

Konwertowanie zasobu może potrwać od kilku sekund do godzin. Ten kod regularnie używa istniejącego elementu poller konwersji i sonduje do momentu zakończenia lub niepowodzenia konwersji. Domyślny okres sondowania to 5 sekund. Należy pamiętać, że można pobrać poller konwersji przy użyciu client.get_asset_conversion_poller przy użyciu identyfikatora istniejącej konwersji i klienta.

Po zakończeniu procesu konwersji dane wyjściowe zostaną zapisane w określonym kontenerze wyjściowym w ścieżce "/output/<conversion_id>/box.arrAsset". Ścieżkę można pobrać z output.asset_uri pomyślnej konwersji.

    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)

Konwersje listy

Informacje na temat konwersji można uzyskać przy użyciu list_asset_conversions metody . Ta metoda może zwracać konwersje, które nie zostały jeszcze uruchomione, konwersje, które są uruchomione i konwersje, które zostały zakończone. W tym przykładzie wymieniono wszystkie konwersje i identyfikator wydruku oraz reklamy tworzenia, a także identyfikatory URI elementów zawartości wyjściowej pomyślnych konwersji.

    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)

Tworzenie sesji

Przyjęto założenie, że obiekt RemoteRenderingClient został skonstruowany zgodnie z opisem w sekcji Uwierzytelnianie klienta . W poniższym fragmencie kodu opisano sposób żądania uruchomienia nowej sesji renderowania.

    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)

Rozszerzanie czasu dzierżawy sesji

Jeśli sesja zbliża się do maksymalnego czasu dzierżawy, ale chcesz zachować jej życie, musisz wykonać wywołanie, aby zwiększyć maksymalny czas dzierżawy. W tym przykładzie pokazano, jak wykonać zapytanie dotyczące bieżących właściwości, a następnie rozszerzyć dzierżawę, jeśli wkrótce wygaśnie.

UWAGA: Zestawy SDK środowiska uruchomieniowego oferują również tę funkcję, a w wielu typowych scenariuszach można ich używać do rozszerzania dzierżawy sesji.

    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
        )

Wyświetlanie listy sesji

Informacje o sesjach można uzyskać przy użyciu list_rendering_sessions metody klienta. Ta metoda może zwracać sesje, które nie zostały jeszcze uruchomione, i sesje, które są gotowe.

    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"),
        )

Zatrzymywanie sesji

Poniższy kod zatrzyma uruchomioną sesję z danym identyfikatorem. Ponieważ sesje uruchomione generują bieżące koszty, zaleca się zatrzymanie sesji, które nie są już potrzebne.

    client.stop_rendering_session(session_id)
    print("session with id:", session_id, "stopped")

Rozwiązywanie problemów

Aby uzyskać ogólne porady dotyczące rozwiązywania problemów dotyczące usługi Azure Remote Rendering, zobacz stronę Rozwiązywanie problemów z renderowaniem zdalnym w docs.microsoft.com.

Metody klienta i oczekiwanie na wyniki poller będą zgłaszać wyjątki, jeśli żądanie nie powiodło się.

Jeśli zasób w konwersji jest nieprawidłowy, narzędzie poller konwersji zgłosi wyjątek z błędem zawierającym szczegóły. Gdy usługa konwersji będzie mogła przetworzyć plik, <plik assetName.result.json> zostanie zapisany w kontenerze wyjściowym. Jeśli zasób wejściowy jest nieprawidłowy, ten plik będzie zawierać bardziej szczegółowy opis problemu.

Podobnie, czasami w przypadku żądania sesji sesja kończy się w stanie błędu. W tym przypadku poller zgłosi wyjątek zawierający szczegóły błędu. Błędy sesji są zwykle przejściowe i żądanie nowej sesji powinno zakończyć się pomyślnie.

Rejestrowanie

Ta biblioteka używa standardowej biblioteki [logging][python_logging] do rejestrowania.

Podstawowe informacje o sesjach HTTP (adresach URL, nagłówkach itp.) są rejestrowane na INFO poziomie.

Szczegółowe DEBUG rejestrowanie na poziomie, w tym treści żądań/odpowiedzi i nieredagowanych nagłówków, można włączyć na kliencie lub na operację z argumentem słowa kluczowego logging_enable .

Zobacz pełną dokumentację rejestrowania zestawu SDK z przykładami tutaj.

Konfiguracja opcjonalna

Opcjonalne argumenty słów kluczowych można przekazać na poziomie klienta i na poziomie operacji. W dokumentacji referencyjnej platformy Azure opisano dostępne konfiguracje dotyczące ponownych prób, rejestrowania, protokołów transportowych i nie tylko.

Wyjątki

Biblioteka klienta Remote Rendering zgłosi wyjątki zdefiniowane w usłudze Azure Core.

Asynchroniczne interfejsy API

Ta biblioteka zawiera również kompletny interfejs API asynchroniczny obsługiwany w języku Python w wersji 3.7 lub nowszej. Aby go używać, należy najpierw zainstalować transport asynchroniczny, taki jak aiohttp. Klienci asynchroniczny znajdują się w azure.mixedreality.remoterendering.aio przestrzeni nazw.

Następne kroki

  • Przeczytaj dokumentację produktu
  • Dowiedz się więcej o zestawach SDK środowiska uruchomieniowego:
    • .NET: /dotnet/api/microsoft.azure.remoterendering
    • C++: /cpp/api/remote-rendering/

Współtworzenie

W tym projekcie zachęcamy do współtworzenia i zgłaszania sugestii. Współtworzenie w większości przypadków wymaga zgody na umowę licencyjną dotyczącą współautorów (CLA, Contributor License Agreement), zgodnie z którą współautor ma prawo udzielić i faktycznie udziela nam praw do używania wytworzonej przez siebie zawartości. Aby uzyskać szczegółowe informacje, odwiedź stronę https://cla.microsoft.com.

Po przesłaniu żądania ściągnięcia robot CLA automatycznie określi, czy musisz przekazać umowę CLA, i doda odpowiednie informacje do tego żądania (na przykład etykietę czy komentarz). Po prostu postępuj zgodnie z instrukcjami robota. Wystarczy zrobić to raz dla wszystkich repozytoriów, w przypadku których jest używana nasza umowa CLA.

W tym projekcie przyjęto Kodeks postępowania oprogramowania Open Source firmy Microsoft. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące kodeksu postępowania lub skontaktuj się z opencode@microsoft.com dodatkowymi pytaniami lub komentarzami.

Jeśli chcesz współtworzyć tę bibliotekę, przeczytaj przewodnik współtworzenia , aby dowiedzieć się więcej na temat tworzenia i testowania kodu.

Wrażenia