Режимы подключения

<< Нажмите, чтобы показать Содержание >>

Режимы подключения

В этом разделе объясняется, как данные (видео, аудио, файлы, команды и т. д.) могут передаваться между двумя приложениями по сети.

Одно приложение (отправляющее данные) использует компонент TRVCamSender. Другое приложение (принимающее данные) использует компонент TRVCamReceiver.

Возможны несколько режимов подключения. Эти режимы различаются следующим образом: какая сторона инициирует соединение; используется ли компонент TRVMediaServer или нет.

Работа в различных режимах подключения

Информацию о том, как устанавливать различные режимы подключения, можно найти в разделе, посвящённом TRVCamSender.

Соединение от Отправителя к Получателю или Медиасерверу (UDP, TCP или HTTP)

В этом режиме Отправитель не устанавливает постоянные соединения с Получателем (поэтому каналы и сессии не создаются). Отправитель отправляет новые данные по мере их поступления. Получатель (или Медиасервер) прослушивает порт и обрабатывает полученные данные.

Получатель использует следующие события (с параметрами SessionKey = 0 и MediaTypes = []): OnConnecting, OnConnected, OnDisconnect, OnConnectError.

Отправитель использует следующие события (SessionKey = Sender.SessionKey, а MediaTypes содержит тип отправляемых данных): OnConnected, OnConnecting, OnDisconnect, OnConnectError.

В этом режиме получатель не использует следующие события: OnOpenChannel, OnCloseChannel, OnSessionConnected, OnSessionDisconnected.

Соединение от Получателя к Отправителю или Медиасерверу (TCP или HTTP)

Получатель устанавливает постоянное соединение с Отправителем (или Медиасервером). Для каждого типа данных создаётся канал. Все каналы составляют сессию. Когда все каналы открыты, создаётся сессия. Если закрыт хотя бы один канал, сессия завершается.

В этом режиме используются все события Получателя: OnConnecting, OnConnected, OnDisconnect, OnConnectError, OnOpenChannel, OnCloseChannel, OnSessionConnected, OnSessionDisconnected. Во всех событиях, кроме OnSessionConnected и OnSessionDisconnected, параметр SessionKey=0.

Последовательность событий Получателя при открытии/закрытии канала:

1.OnOpenChannel

2.OnConnecting

3.OnConnected/OnConnectError

4.OnDisconnect (если не было OnConnectError)

5.OnCloseChannel

Когда все каналы открыты, происходит событие OnSessionConnected.

Если закрыт хотя бы один из каналов, происходит событие OnSessionDisconnected.

hmtoggle_arrow1Пример

Соединение между клиентами

Вариант 1: Прямое соединение без сервера.

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

1.a) Клиент-1 отправляет данные Клиенту-2, когда появляются новые данные.

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

Этот режим является самым быстрым, поскольку данные отправляются от Клиента-1 к Клиенту-2 сразу же, как только становятся доступны, без задержек.

В этом режиме сеанс соединения не создается, поскольку между клиентами нет постоянных соединений, соединение устанавливается только при отправке данных и разрывается по завершении передачи.

connect_sender_to_receiver

2.б) Клиент-2 подключается к Клиенту-1 и запрашивает новые данные.

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

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

connect_receiver_to_sender

Вариант 2: Клиент-Сервер-Клиент

В этом режиме Клиент-1 отправляет данные Клиенту-2 через Сервер. В этом режиме только Сервер должен иметь «белый IP-адрес».

Клиент-1 подключается к Серверу напрямую. Он не создаёт постоянные каналы, поэтому Серверу не нужно запрашивать данные у Клиента. Когда появляются новые данные, Клиент-1 подключается к Серверу и передает их.

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

Когда Клиент-2 отправляет данные Клиенту-1, всё происходит аналогично, то есть все клиенты работают одинаково.

connect_server

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