Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Als u geen gebruik hebt van Holographic Remoting, kunt u ons overzicht lezen.
Belangrijk
In dit document wordt het maken van een hosttoepassing voor HoloLens 1 beschreven. Hosttoepassing voor HoloLens (1e generatie) moet NuGet-pakketversie 1.x.x gebruiken. Dit betekent dat hosttoepassingen die zijn geschreven voor HoloLens 1 niet compatibel zijn met HoloLens 2 en vice versa.
HoloLens 2
HoloLens-ontwikkelaars die Holographic Remoting gebruiken, moeten hun apps bijwerken om ze compatibel te maken met HoloLens 2. Hiervoor is een nieuwe versie van het NuGet-pakket Holographic Remoting vereist. Zorg ervoor dat u versie 2.0.0.0 of hoger van het Holographic Remoting NuGet-pakket gebruikt wanneer u verbinding maakt met de Holographic Remoting Player op HoloLens 2. Anders mislukt de verbinding.
Opmerking
Richtlijnen die specifiek zijn voor HoloLens 2 vindt u hier.
Holografische remoting toevoegen aan uw bureaublad- of UWP-app
Op deze pagina wordt beschreven hoe u Holographic Remoting toevoegt aan een desktop- of UWP-app.
Met holografische remoting kan uw app zich richten op een HoloLens met holografische inhoud die wordt gehost op een desktop-pc of op een UWP-apparaat zoals de Xbox One. U hebt ook toegang tot meer systeembronnen, waardoor het mogelijk is om insluitende weergaven op afstand te integreren in bestaande desktop-pc-software. Een externe host-app ontvangt een invoergegevensstroom van een HoloLens, geeft inhoud weer in een virtuele insluitende weergave en streamt inhoudsframes terug naar HoloLens. De verbinding wordt gemaakt via standaard Wi-Fi. Als u externe toegang wilt gebruiken, gebruikt u een NuGet-pakket om holografische externe communicatie toe te voegen aan uw bureaublad of UWP-app. Schrijf vervolgens code om de verbinding af te handelen en een meeslepende weergave weer te geven. Helperbibliotheken zijn opgenomen in het codevoorbeeld waarmee de taak van het afhandelen van de apparaatverbinding wordt vereenvoudigd.
Een typische externe verbinding heeft slechts 50 ms latentie. De speler-app kan de latentie in realtime rapporteren.
Opmerking
In de codefragmenten in dit artikel wordt momenteel het gebruik van C++/CX in plaats van C++17-compatibele C++/WinRT gedemonstreerde, zoals gebruikt in de holografische projectsjabloon C++ van C++. De concepten zijn gelijkwaardig voor een C++/WinRT-project, hoewel u de code moet vertalen.
De externe NuGet-pakketten ophalen
Volg deze stappen om het NuGet-pakket voor holografische externe communicatie op te halen en een verwijzing uit uw project toe te voegen:
- Ga naar uw project in Visual Studio.
- Klik met de rechtermuisknop op het projectknooppunt en selecteer NuGet-pakketten beheren...
- Selecteer bladeren in het deelvenster dat verschijnt en zoek vervolgens naar 'Holographic Remoting'.
- Selecteer Microsoft.Holographic.Remoting en selecteer Installeren.
- Als het dialoogvenster Voorbeeld wordt weergegeven, selecteert u OK.
- Selecteer Ik ga akkoord wanneer het dialoogvenster Licentieovereenkomst wordt weergegeven.
De HolographicStreamerHelpers maken
Eerst moeten we een exemplaar van HolographicStreamerHelpers toevoegen aan de klasse die externe toegang verwerkt.
#include <HolographicStreamerHelpers.h>
private:
Microsoft::Holographic::HolographicStreamerHelpers^ m_streamerHelpers;
U moet ook de verbindingsstatus bijhouden. Als u het voorbeeld wilt weergeven, moet u een patroon hebben om het te kopiëren. U hebt ook een paar dingen nodig, zoals een verbindingsstatusvergrendeling, een manier om het IP-adres van HoloLens op te slaan, enzovoort.
private:
Microsoft::Holographic::HolographicStreamerHelpers^ m_streamerHelpers;
Microsoft::WRL::Wrappers::SRWLock m_connectionStateLock;
RemotingHostSample::AppView^ m_appView;
Platform::String^ m_ipAddress;
Microsoft::Holographic::HolographicStreamerHelpers^ m_streamerHelpers;
Microsoft::WRL::Wrappers::CriticalSection m_deviceLock;
Microsoft::WRL::ComPtr<IDXGISwapChain1> m_swapChain;
Microsoft::WRL::ComPtr<ID3D11Texture2D> m_spTexture;
HolographicStreamerHelpers initialiseren en verbinding maken met HoloLens
Als u verbinding wilt maken met een HoloLens-apparaat, maakt u een exemplaar van HolographicStreamerHelpers en maakt u verbinding met het doel-IP-adres. U moet de grootte van het videoframe zo instellen dat deze overeenkomt met de breedte en hoogte van het HoloLens-beeldscherm, omdat de holographic Remoting-bibliotheek verwacht dat de resolutie van de encoder en decoder exact overeenkomen.
m_streamerHelpers = ref new HolographicStreamerHelpers();
m_streamerHelpers->CreateStreamer(m_d3dDevice);
// We currently need to stream at 720p because that's the resolution of our remote display.
// There is a check in the holographic streamer that makes sure the remote and local
// resolutions match. The default streamer resolution is 1080p.
m_streamerHelpers->SetVideoFrameSize(1280, 720);
try
{
m_streamerHelpers->Connect(m_ipAddress->Data(), 8001);
}
catch (Platform::Exception^ ex)
{
DebugLog(L"Connect failed with hr = 0x%08X", ex->HResult);
}
De apparaatverbinding is asynchroon. Uw app moet gebeurtenis-handlers bieden voor het maken van verbinding, de verbinding verbreken en het frame verzenden van gebeurtenissen.
De gebeurtenis OnConnected kan de gebruikersinterface bijwerken, beginnen met renderen, enzovoort. In ons voorbeeld van de bureaubladcode werken we de titel van het venster bij met een 'verbonden' bericht.
m_streamerHelpers->OnConnected += ref new ConnectedEvent(
[this]()
{
UpdateWindowTitle();
});
De gebeurtenis OnDisconnected kan opnieuw verbinding maken, ui-updates, enzovoort verwerken. In dit voorbeeld maken we opnieuw verbinding als er een tijdelijke fout optreedt.
Platform::WeakReference streamerHelpersWeakRef = Platform::WeakReference(m_streamerHelpers);
m_streamerHelpers->OnDisconnected += ref new DisconnectedEvent(
[this, streamerHelpersWeakRef](_In_ HolographicStreamerConnectionFailureReason failureReason)
{
DebugLog(L"Disconnected with reason %d", failureReason);
UpdateWindowTitle();
// Reconnect if this is a transient failure.
if (failureReason == HolographicStreamerConnectionFailureReason::Unreachable ||
failureReason == HolographicStreamerConnectionFailureReason::ConnectionLost)
{
DebugLog(L"Reconnecting...");
try
{
auto helpersResolved = streamerHelpersWeakRef.Resolve<HolographicStreamerHelpers>();
if (helpersResolved)
{
helpersResolved->Connect(m_ipAddress->Data(), 8001);
}
else
{
DebugLog(L"Failed to reconnect because a disconnect has already occurred.\n");
}
}
catch (Platform::Exception^ ex)
{
DebugLog(L"Connect failed with hr = 0x%08X", ex->HResult);
}
}
else
{
DebugLog(L"Disconnected with unrecoverable error, not attempting to reconnect.");
}
});
Wanneer het externe onderdeel gereed is om een frame te verzenden, krijgt uw app de mogelijkheid om er een kopie van te maken in het SendFrameEvent. Hier kopiëren we het frame naar een wisselketen, zodat we het in een voorbeeldvenster kunnen weergeven.
m_streamerHelpers->OnSendFrame += ref new SendFrameEvent(
[this](_In_ const ComPtr<ID3D11Texture2D>& spTexture, _In_ FrameMetadata metadata)
{
if (m_showPreview)
{
ComPtr<ID3D11Device1> spDevice = m_appView->GetDeviceResources()->GetD3DDevice();
ComPtr<ID3D11DeviceContext> spContext = m_appView->GetDeviceResources()->GetD3DDeviceContext();
ComPtr<ID3D11Texture2D> spBackBuffer;
ThrowIfFailed(m_swapChain->GetBuffer(0, IID_PPV_ARGS(&spBackBuffer)));
spContext->CopySubresourceRegion(
spBackBuffer.Get(), // dest
0, // dest subresource
0, 0, 0, // dest x, y, z
spTexture.Get(), // source
0, // source subresource
nullptr); // source box, null means the entire resource
DXGI_PRESENT_PARAMETERS parameters = { 0 };
ThrowIfFailed(m_swapChain->Present1(1, 0, ¶meters));
}
});
Holografische inhoud weergeven
Als u inhoud wilt weergeven met behulp van externe toegang, stelt u een virtuele IFrameworkView in uw bureaublad- of UWP-app in en verwerkt u holografische frames tegen externe toegang. Alle Windows Holographic API's worden op dezelfde manier gebruikt door deze weergave, maar deze is anders ingesteld.
In plaats van ze zelf te maken, zijn de holografische ruimte- en spraakonderdelen afkomstig van uw Klasse HolographicRemotingHelpers:
m_appView->Initialize(m_streamerHelpers->HolographicSpace, m_streamerHelpers->RemoteSpeech);
In plaats van een updatelus in een Run-methode te gebruiken, geeft u vinkjesupdates op vanuit de hoofdlus van uw bureaublad- of UWP-app. Hiermee kan uw bureaublad- of UWP-app de controle houden over de verwerking van berichten.
void DesktopWindow::Tick()
{
auto lock = m_deviceLock.Lock();
m_appView->Tick();
// display preview, etc.
}
De methode Tick() van de holografische app-weergave voltooit één iteratie van de update, tekenen, huidige lus.
void AppView::Tick()
{
if (m_main)
{
// When running on Windows Holographic, we can use the holographic rendering system.
HolographicFrame^ holographicFrame = m_main->Update();
if (holographicFrame && m_main->Render(holographicFrame))
{
// The holographic frame has an API that presents the swap chain for each
// holographic camera.
m_deviceResources->Present(holographicFrame);
}
}
}
De holografische app-weergave-lus is precies hetzelfde als wanneer deze wordt uitgevoerd op HoloLens, behalve dat u toegang hebt tot een groter aantal systeembronnen op uw desktop-pc. U kunt veel meer driehoeken weergeven, meer tekenpassen hebben, meer natuurkunde uitvoeren en x64-processen gebruiken om inhoud te laden waarvoor meer dan 2 GB RAM is vereist.
De externe sessie verbreken en beëindigen
Als u de verbinding wilt verbreken, bijvoorbeeld wanneer de gebruiker op een knop van de gebruikersinterface klikt om de verbinding te verbreken, roept u Disconnect() aan op de HolographicStreamerHelpers en laat u het object vervolgens los.
void DesktopWindow::DisconnectFromRemoteDevice()
{
// Disconnecting from the remote device can change the connection state.
auto exclusiveLock = m_connectionStateLock.LockExclusive();
if (m_streamerHelpers != nullptr)
{
m_streamerHelpers->Disconnect();
// Reset state
m_streamerHelpers = nullptr;
}
}
De externe speler ophalen
De Windows Holographic Remoting Player wordt aangeboden in de Windows App Store als eindpunt voor externe host-apps waarmee verbinding kan worden gemaakt. Als u de Windows Holographic Remoting-speler wilt downloaden, gaat u naar de Windows App Store vanuit uw HoloLens, zoekt u naar Externe toegang en downloadt u de app. De speler voor externe toegang bevat een functie om statistieken weer te geven op het scherm, wat handig kan zijn bij het opsporen van problemen met externe host-apps.
Notities en resources
De holografische app-weergave heeft een manier nodig om uw app te voorzien van het Direct3D-apparaat, dat moet worden gebruikt om de holografische ruimte te initialiseren. Uw app moet dit Direct3D-apparaat gebruiken om het voorbeeldframe te kopiëren en weer te geven.
internal:
const std::shared_ptr<DX::DeviceResources>& GetDeviceResources()
{
return m_deviceResources;
}
Codevoorbeeld: Er is een volledig holographic remoting-codevoorbeeld beschikbaar. Het bevat een holografische toepassingsweergave die compatibel is met externe en externe hostprojecten voor desktop Win32, UWP DirectX en UWP met XAML.
Opmerking voor foutopsporing: De Holographic Remoting-bibliotheek kan uitzonderingen voor de eerste kans genereren. Deze uitzonderingen kunnen zichtbaar zijn in foutopsporingssessies, afhankelijk van de visual Studio-uitzonderingsinstellingen die op dat moment actief zijn. De Holographic Remoting-bibliotheek vangt deze uitzonderingen intern op en kan worden genegeerd.
Zie ook
- Overzicht van holografische remoting
- Een aangepaste Holographic Remoting-speler-app schrijven
- Een beveiligde verbinding tot stand brengen met Holographic Remoting
- Problemen met holografische remoting oplossen en beperkingen
- Licentievoorwaarden voor Holographic Remoting-software
- Privacyverklaring van Microsoft