|
<< Нажмите, чтобы показать Содержание >> Режимы подключения |
В этом разделе объясняется, как данные (видео, аудио, файлы, команды и т. д.) могут передаваться между двумя приложениями по сети.
Одно приложение (отправляющее данные) использует компонент TRVCamSender. Другое приложение (принимающее данные) использует компонент TRVCamReceiver.
Возможны несколько режимов подключения. Эти режимы различаются следующим образом: какая сторона инициирует соединение; используется ли компонент TRVMediaServer или нет.
Информацию о том, как устанавливать различные режимы подключения, можно найти в разделе, посвящённом TRVCamSender.
В этом режиме Отправитель не устанавливает постоянные соединения с Получателем (поэтому каналы и сессии не создаются). Отправитель отправляет новые данные по мере их поступления. Получатель (или Медиасервер) прослушивает порт и обрабатывает полученные данные.
Получатель использует следующие события (с параметрами SessionKey = 0 и MediaTypes = []): OnConnecting, OnConnected, OnDisconnect, OnConnectError.
Отправитель использует следующие события (SessionKey = Sender.SessionKey, а MediaTypes содержит тип отправляемых данных): OnConnected, OnConnecting, OnDisconnect, OnConnectError.
В этом режиме получатель не использует следующие события: OnOpenChannel, OnCloseChannel, OnSessionConnected, OnSessionDisconnected.
Получатель устанавливает постоянное соединение с Отправителем (или Медиасервером). Для каждого типа данных создаётся канал. Все каналы составляют сессию. Когда все каналы открыты, создаётся сессия. Если закрыт хотя бы один канал, сессия завершается.
В этом режиме используются все события Получателя: OnConnecting, OnConnected, OnDisconnect, OnConnectError, OnOpenChannel, OnCloseChannel, OnSessionConnected, OnSessionDisconnected. Во всех событиях, кроме OnSessionConnected и OnSessionDisconnected, параметр SessionKey=0.
Последовательность событий Получателя при открытии/закрытии канала:
4.OnDisconnect (если не было OnConnectError)
Когда все каналы открыты, происходит событие OnSessionConnected.
Если закрыт хотя бы один из каналов, происходит событие OnSessionDisconnected.
Например, используются только два канала: видео и аудио. События вызываются в следующем порядке: OnOpenChannel (для видео) OnConnecting OnConnected OnOpenChannel (для звука) OnConnecting OnConnected OnSessionConnected (сессия установлена) ... OnSessionDisconnected OnDisconnect OnCloseChannel OnDisconnect OnCloseChannel |
В варианте 1 возможны два режима передачи данных от Клиента-1 к Клиенту-2. В обоих режимах требуется, чтобы хотя бы одна сторона имела «белый IP-адрес» (доступный для другой стороны).
1.a) Клиент-1 отправляет данные Клиенту-2, когда появляются новые данные.
В этом режиме Клиент-2 должен быть виден для Клиента-1, то есть Клиент-2 должен иметь IP-адрес, который Клиент-1 может использовать для установления соединения. В противном случае этот режим невозможен.
Этот режим является самым быстрым, поскольку данные отправляются от Клиента-1 к Клиенту-2 сразу же, как только становятся доступны, без задержек.
В этом режиме сеанс соединения не создается, поскольку между клиентами нет постоянных соединений, соединение устанавливается только при отправке данных и разрывается по завершении передачи.

2.б) Клиент-2 подключается к Клиенту-1 и запрашивает новые данные.
В этом режиме Клиент-1 должен быть виден Клиенту-2, т.е. у Клиента-1 должен быть IP-адрес, который Клиент-2 может использовать для установления соединения. В противном случае этот режим невозможен.
В этом режиме открываются постоянные каналы для каждого типа данных. Клиент-2 периодически запрашивает новые данные из каждого канала. Этот тип соединения был организован для обеспечения максимально возможной пропускной способности (если бы он был организован как один канал, видеоданные могли бы переполнить канал, замедляя передачу данных других типов).

В этом режиме Клиент-1 отправляет данные Клиенту-2 через Сервер. В этом режиме только Сервер должен иметь «белый IP-адрес».
Клиент-1 подключается к Серверу напрямую. Он не создаёт постоянные каналы, поэтому Серверу не нужно запрашивать данные у Клиента. Когда появляются новые данные, Клиент-1 подключается к Серверу и передает их.
Ситуация для Клиента-2 иная. Он создаёт постоянные каналы для каждого типа данных и периодически запрашивает данные у Сервера. Это позволяет Клиенту-2 работать без белого IP-адреса. Множество каналов позволяет эффективно передавать данные, но увеличивает нагрузку на сервер.
Когда Клиент-2 отправляет данные Клиенту-1, всё происходит аналогично, то есть все клиенты работают одинаково.

Этот вариант подключения используется для организации передачи данных между несколькими клиентами, создания групп клиентов, списков контактов и т. д. Сервер может помочь в передаче данных между клиентами, которые не могут напрямую подключиться друг к другу.