Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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