Niestandardowe kanały danych z funkcją komunikacji zdalnie holograficznej i interfejsem API Windows Mixed Reality
Użyj niestandardowych kanałów danych, aby wysyłać niestandardowe dane za pośrednictwem ustanowionego połączenia komunikacji wirtualnej.
Ważne
Niestandardowe kanały danych wymagają niestandardowej aplikacji zdalnej i niestandardowej aplikacji odtwarzacza, ponieważ umożliwia komunikację między dwiema aplikacjami niestandardowymi.
Porada
Prosty przykład ping-ponga można znaleźć w repozytorium github przykładów zdalnego i odtwarzacza w repozytorium GitHub Holographic Remoting. Usuń komentarz #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE
wewnątrz plików SampleRemoteApp.h / SamplePlayerMain.h, aby włączyć przykładowy kod.
Tworzenie niestandardowego kanału danych
Aby utworzyć niestandardowy kanał danych, wymagane są następujące pola:
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;
Po pomyślnym nawiązaniu połączenia można utworzyć nowe kanały danych po stronie zdalnej, po stronie odtwarzacza lub obu tych kanałach. Zarówno RemoteContext, jak i PlayerContext udostępniają metodę CreateDataChannel()
tworzenia kanałów danych. Pierwszy parametr to identyfikator kanału, który służy do identyfikowania kanału danych w kolejnych operacjach. Drugi parametr jest priorytetem określającym, z jakim priorytetem dane tego kanału są przesyłane do drugiej strony. Po stronie zdalnej prawidłowe identyfikatory kanałów wahają się od 0 do 63. Po stronie odtwarzacza prawidłowe identyfikatory kanałów są od 64 do 127. Prawidłowe priorytety to Low
, Medium
lub High
.
Aby rozpocząć tworzenie kanału danych po stronie zdalnej :
// Valid channel ids for channels created on the remote side are 0 up to and including 63
m_remoteContext.CreateDataChannel(0, DataChannelPriority::Low);
Aby rozpocząć tworzenie kanału danych po stronie odtwarzacza :
// Valid channel ids for channels created on the player side are 64 up to and including 127
m_playerContext.CreateDataChannel(64, DataChannelPriority::Low);
Uwaga
Aby utworzyć nowy niestandardowy kanał danych, tylko jedna strona (zdalna lub odtwarzacz) musi wywołać metodę CreateDataChannel
.
Obsługa niestandardowych zdarzeń kanału danych
Aby ustanowić niestandardowy kanał danych, OnDataChannelCreated
zdarzenie musi być obsługiwane (zarówno po stronie odtwarzacza, jak i zdalnego). Wyzwala on, gdy kanał danych użytkownika został utworzony obok siebie i udostępnia IDataChannel
obiekt, który może służyć do wysyłania i odbierania danych za pośrednictwem tego kanału.
Aby zarejestrować odbiornik w zdarzeniu OnDataChannelCreated
:
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...
});
Aby otrzymywać powiadomienia o odebraniu OnDataReceived
danych, zarejestruj się w zdarzeniu w IDataChannel
obiekcie dostarczonym OnDataChannelCreated
przez program obsługi. Zarejestruj się w zdarzeniu OnClosed
, aby otrzymywać powiadomienia o zamknięciu kanału danych.
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;
}
});
Wysyłanie danych
Aby wysyłać dane za pośrednictwem niestandardowego kanału danych, użyj IDataChannel::SendData()
metody . Pierwszy parametr jest parametrem winrt::array_view<const uint8_t>
do danych, które powinny być wysyłane. Drugi parametr określa, gdzie dane powinny być ponownie wyślij, aż druga strona potwierdzi odbiór.
Ważne
W przypadku nieprawidłowych warunków sieciowych ten sam pakiet danych może pojawić się więcej niż raz. Kod odbierający musi być w stanie obsłużyć tę sytuację.
uint8_t data[] = {1};
m_customDataChannel.SendData(data, true);
Zamykanie niestandardowego kanału danych
Aby zamknąć niestandardowy kanał danych, użyj IDataChannel::Close()
metody . Obie strony będą powiadamiane przez OnClosed
zdarzenie po zamknięciu niestandardowego kanału danych.
m_customDataChannel.Close();
Zobacz też
- Holographic Remoting Overview
- Pisanie zdalnej aplikacji Holographic Remoting przy użyciu interfejsów API Windows Mixed Reality
- Pisanie zdalnej aplikacji Holographic Remoting przy użyciu interfejsów API OpenXR
- Pisanie niestandardowej aplikacji odtwarzacza Holographic Remoting
- Holographic Remoting troubleshooting and limitations (Rozwiązywanie problemów i ograniczenia dotyczące komunikacji zdalnie holograficznej)
- Holographic Remoting software license terms (Postanowienia licencyjne dotyczące oprogramowania Holographic Remoting)
- Oświadczenie o ochronie prywatności w firmie Microsoft