Aangepaste gegevenskanalen met holografische externe communicatie en de Windows Mixed Reality-API
Gebruik aangepaste gegevenskanalen om aangepaste gegevens te verzenden via een tot stand gebrachte externe verbinding.
Belangrijk
Voor aangepaste gegevenskanalen is een aangepaste externe app en een aangepaste speler-app vereist, omdat hiermee communicatie tussen de twee aangepaste apps mogelijk is.
Tip
Een eenvoudig ping-pong voorbeeld is te vinden in de externe en speler voorbeelden in de Holographic Remoting samples github repository. Verwijder de opmerking #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE
in de bestanden SampleRemoteApp.h /SamplePlayerMain.h om de voorbeeldcode in te schakelen.
Een aangepast gegevenskanaal maken
Als u een aangepast gegevenskanaal wilt maken, zijn de volgende velden vereist:
std::recursive_mutex m_customDataChannelLock;
winrt::Microsoft::Holographic::AppRemoting::IDataChannel m_customDataChannel = nullptr;
winrt::Microsoft::Holographic::AppRemoting::IDataChannel::OnDataReceived_revoker m_customChannelDataReceivedEventRevoker;
winrt::Microsoft::Holographic::AppRemoting::IDataChannel::OnClosed_revoker m_customChannelClosedEventRevoker;
Nadat een verbinding tot stand is gebracht, kunt u nieuwe gegevenskanalen maken vanaf de externe kant, de spelerzijde of beide. Zowel de RemoteContext als de PlayerContext bieden een CreateDataChannel()
methode voor het maken van gegevenskanalen. De eerste parameter is de kanaal-id, die wordt gebruikt om het gegevenskanaal in latere bewerkingen te identificeren. De tweede parameter is de prioriteit waarmee wordt aangegeven met welke prioriteitsgegevens van dit kanaal naar de andere kant worden overgebracht. Aan de externe kant variëren geldige kanaal-id's van 0 tot en met 63. Aan de spelerzijde zijn geldige kanaal-id's van 64 tot en met 127. Geldige prioriteiten zijn Low
, Medium
of High
.
Het maken van een gegevenskanaal aan de externe zijde starten:
// Valid channel ids for channels created on the remote side are 0 up to and including 63
m_remoteContext.CreateDataChannel(0, DataChannelPriority::Low);
Het maken van een gegevenskanaal aan de kant van de speler starten:
// Valid channel ids for channels created on the player side are 64 up to and including 127
m_playerContext.CreateDataChannel(64, DataChannelPriority::Low);
Notitie
Als u een nieuw aangepast gegevenskanaal wilt maken, hoeft slechts één kant (extern of speler) de CreateDataChannel
methode aan te roepen.
Aangepaste gegevenskanaal-gebeurtenissen verwerken
Als u een aangepast gegevenskanaal tot stand wilt brengen, moet de OnDataChannelCreated
gebeurtenis worden verwerkt (zowel aan de speler als aan de externe zijde). Het wordt geactiveerd wanneer een gebruikersgegevenskanaal aan beide zijden is gemaakt en biedt een IDataChannel
-object dat kan worden gebruikt om gegevens via dit kanaal te verzenden en te ontvangen.
Een listener registreren voor de OnDataChannelCreated
gebeurtenis:
m_onDataChannelCreatedEventRevoker = m_remoteContext.OnDataChannelCreated(winrt::auto_revoke,
[this](const IDataChannel& dataChannel, uint8_t channelId)
{
std::lock_guard lock(m_customDataChannelLock);
m_customDataChannel = dataChannel;
// Register to OnDataReceived and OnClosed event of the data channel here, see below...
});
Als u een melding wilt ontvangen wanneer gegevens worden ontvangen, registreert u zich bij de OnDataReceived
gebeurtenis op het IDataChannel
object dat door de OnDataChannelCreated
handler is opgegeven. Registreer u voor de OnClosed
gebeurtenis om een melding te ontvangen wanneer het gegevenskanaal is gesloten.
m_customChannelDataReceivedEventRevoker = m_customDataChannel.OnDataReceived(winrt::auto_revoke,
[this]()
{
// React on data received via the custom data channel here.
});
m_customChannelClosedEventRevoker = m_customDataChannel.OnClosed(winrt::auto_revoke,
[this]()
{
// React on data channel closed here.
std::lock_guard lock(m_customDataChannelLock);
if (m_customDataChannel)
{
m_customDataChannel = nullptr;
}
});
Gegevens verzenden
Gebruik de IDataChannel::SendData()
methode om gegevens te verzenden via een aangepast gegevenskanaal. De eerste parameter is een winrt::array_view<const uint8_t>
voor de gegevens die moeten worden verzonden. De tweede parameter geeft aan waar de gegevens opnieuw moeten worden verzonden, totdat de andere kant de ontvangst bevestigt.
Belangrijk
In het geval van slechte netwerkomstandigheden kan hetzelfde gegevenspakket meer dan één keer binnenkomen. De ontvangende code moet deze situatie kunnen afhandelen.
uint8_t data[] = {1};
m_customDataChannel.SendData(data, true);
Een aangepast gegevenskanaal sluiten
Gebruik de IDataChannel::Close()
methode om een aangepast gegevenskanaal te sluiten. Beide zijden worden door de gebeurtenis op de OnClosed
hoogte gesteld zodra het aangepaste gegevenskanaal is gesloten.
m_customDataChannel.Close();
Zie ook
- Overzicht van Holoographic Remoting
- Een Externe App voor externe communicatie van Holographic schrijven met behulp van Windows Mixed Reality API's
- Een holographic externe externe app schrijven met behulp van OpenXR-API's
- Een aangepaste Holographic Remoting-speler-app schrijven
- Problemen en beperkingen voor holografische externe communicatie oplossen
- Licentievoorwaarden voor software voor externe communicatie van Holographic
- Privacyverklaring van Microsoft