Поделиться через


Канал данных

Примечание.

В этом документе подробно описана функция канала данных, представленная в пакете SDK для вызовов Службы коммуникации Azure. Хотя канал данных в этом контексте имеет некоторое сходство с каналом данных в WebRTC, важно распознать тонкие различия в их особенности. В этом документе мы используем API канала данных или API для обозначения API канала данных в пакете SDK. При обращении к API канала данных в WebRTC мы явно используем термин WebRTC Data Channel API для ясности и точности.

API канала данных обеспечивает обмен сообщениями в режиме реального времени во время аудио- и видеозвонков. Благодаря этому API теперь можно легко интегрировать функции обмена данными в приложения, обеспечивая простой обмен данными для пользователей. Ключевые возможности:

  • Обмен сообщениями в режиме реального времени: API канала данных позволяет пользователям мгновенно отправлять и получать сообщения во время текущего аудио- или видеозвонка, повышая плавность и эффективность взаимодействия. В сценариях группового вызова сообщения можно отправлять одному участнику, определенному набору участников или всем участникам в вызове. Эта гибкость улучшает взаимодействие и совместную работу между пользователями во время группового взаимодействия.
  • Однонаправленная связь: в отличие от двунаправленной связи, API канала данных предназначен для однонаправленной связи. Он использует различные объекты для отправки и получения сообщений: объект DataChannelSender для отправки и объекта DataChannelReceiver для получения. Это разделение упрощает управление сообщениями в групповых вызовах, что приводит к более упрощенному пользовательскому интерфейсу.
  • Поддержка двоичных данных: API поддерживает отправку и получение двоичных данных, что позволяет обмениваться различными типами данных, такими как текст, изображения и файлы. Перед передачей текстовых сообщений необходимо сериализовать в буфер байтов.
  • Параметры отправителя: API канала данных предоставляет три настраиваемых параметра при создании объекта отправителя, включая надежность, приоритет и скорость. Эти параметры позволяют настроить канал в соответствии с конкретными потребностями для различных вариантов использования.
  • Безопасность: все сообщения, передаваемые между клиентом и другой конечной точкой, шифруются, обеспечивая конфиденциальность и безопасность данных пользователей.

Распространенные варианты использования

Канал данных можно использовать во многих различных сценариях. Ниже приведены два распространенных примера вариантов использования.

Обмен сообщениями между участниками звонка

API канала данных позволяет передавать сообщения двоичного типа среди участников вызова. При соответствующей сериализации в приложении он может доставлять различные типы сообщений в различных целях. Существуют и другие библиотеки или службы, предоставляющие функции обмена сообщениями. У каждого из них есть свои преимущества и недостатки. Вы должны выбрать подходящий вариант для вашего сценария использования. Например, API канала данных предлагает преимущество связи с низкой задержкой и упрощает управление пользователями, так как нет необходимости поддерживать отдельный список участников. Однако функция канала данных не обеспечивает сохраняемость сообщений и не гарантирует, что сообщение не будет потеряно в сквозном режиме. Если требуется обмен сообщениями с отслеживанием состояния или гарантированная доставка, вам может потребоваться рассмотреть альтернативные решения.

Общий доступ к файлам

Общий доступ к файлам представляет собой еще один распространенный вариант использования API канала данных. В сценарии однорангового вызова подключение канала данных работает на одноранговой основе. Эта настройка предлагает эффективный метод передачи файлов, используя полное преимущество прямого однорангового подключения для повышения скорости и уменьшения задержки.

В сценарии группового вызова файлы по-прежнему могут предоставляться участникам. Однако существуют лучшие способы, такие как служба хранилища Azure или Файлы Azure. Кроме того, трансляция содержимого файла всем участникам звонка может быть достигнута, задав пустой список участников. Однако важно помнить, что помимо ограничений пропускной способности существуют дополнительные ограничения во время группового вызова при трансляции сообщений, таких как скорость пакетов и обратное давление от скорости приема.

Основные понятия

Однонаправленное взаимодействие

API канала данных предназначен для однонаправленного взаимодействия, а не двунаправленного взаимодействия в канале данных WebRTC. Он использует отдельные объекты для отправки и получения сообщений с объектом DataChannelSender, ответственным за отправку сообщений и объект DataChannelReceiver для получения сообщений.

Разделение объектов отправителя и получателя упрощает обработку сообщений в сценариях группового вызова, обеспечивая более удобный и удобный интерфейс.

Канал

Каждое сообщение канала данных связано с определенным каналом channelId, определенным. Важно уточнить, что этот channelId не связан со id свойством в канале данных WebRTC. Этот channelId можно использовать для отличия различных приложений, таких как использование 1000 для сообщений управления и 1001 для передачи изображений.

ChannelId назначается во время создания объекта DataChannelSender и может быть указан пользователем или определен пакетом SDK, если он не указан.

Допустимый диапазон channelId составляет от 1 до 65535. Если указан код канала 0 или отсутствует идентификатор канала, пакет SDK назначает доступный channelId из допустимого диапазона.

Надежность

После создания канал можно настроить как один из двух вариантов надежности: lossy или durable.

lossy Канал означает, что порядок сообщений не гарантируется, и сообщение может быть автоматически удалено при отправке сбоем. Как правило, это обеспечивает более быструю скорость передачи данных.

durable Канал означает, что пакет SDK гарантирует потерю и упорядоченную доставку сообщений. В случаях, когда сообщение не может быть доставлено, пакет SDK вызовет исключение. В веб-пакете SDK устойчивость канала обеспечивается с помощью надежного подключения SCTP. Однако это не означает, что сообщение не будет потеряно в сквозном режиме. В контексте группового вызова он означает предотвращение потери сообщений между отправителем и сервером. В одноранговом вызове он обозначает надежную передачу между отправителем и удаленной конечной точкой.

Примечание.

В текущей реализации веб-пакета SDK передача данных осуществляется через надежное подключение канала данных WebRTC для обоих lossy каналов и durable каналов.

Приоритет

После создания канал можно настроить как один из двух вариантов приоритета: normal или high.

Для веб-пакета SDK параметры приоритета сравниваются только между каналами на стороне отправителя. Каналы с приоритетом имеют более высокий high приоритет для передачи по сравнению с каналами с normal приоритетом.

Bitrate

При создании канала для распределения пропускной способности можно указать желаемую скорость.

Это свойство Bitrate заключается в том, чтобы уведомить пакет SDK о ожидаемом требовании пропускной способности для конкретного варианта использования. Хотя пакет SDK, как правило, не может соответствовать точной скорости, он пытается разместить запрос.

Сеанс

API канала данных представляет концепцию сеанса, который соответствует семантике открытого закрытия. В пакете SDK сеанс связан с отправителем или объектом получателя.

При создании объекта отправителя с новым идентификатором канала объект отправителя находится в открытом состоянии. close() Если API вызывается в объекте отправителя, сеанс становится закрытым и больше не может упростить отправку сообщений. В то же время объект отправителя уведомляет всех участников вызова о закрытии сеанса.

Если объект отправителя создается с уже существующим каналом ChannelId, существующий объект отправителя, связанный с channelId, будет закрыт, и все сообщения, отправленные из только что созданного объекта отправителя, будут распознаны как часть нового сеанса.

С точки зрения получателя сообщения, поступающие из разных сеансов на стороне отправителя, направляются к отдельным объектам приемника. Если пакет SDK идентифицирует новый сеанс, связанный с существующим идентификатором канала на стороне получателя, он создает новый объект приемника. Пакет SDK не закрывает старый объект приемника; такое закрытие происходит 1) когда объект-получатель получает уведомление о закрытии от отправителя или 2), если сеанс не получил сообщений от отправителя в течение двух минут.

В случаях, когда сеанс объекта приемника закрыт, и новый сеанс для того же channelId не существует на стороне получателя, пакет SDK создает новый объект приемника при получении сообщения из того же сеанса позже. Однако если новый сеанс для того же channelId существует на стороне получателя, пакет SDK не карта любые входящие сообщения из предыдущего сеанса.

Учитывая, что объект-получатель закрывается, если он не получает сообщения более двух минут, мы рекомендуем, чтобы приложение периодически отправляло сообщения с стороны отправителя для поддержания активного состояния объекта получателя.

Порядковый номер

Порядковый номер — это 32-разрядное целое число без знака, включенное в сообщение канала данных, указывающее порядок сообщений в канале. Важно отметить, что это число создается с точки зрения отправителя. Следовательно, получатель может заметить разрыв в номерах последовательности, если отправитель изменяет получателей во время отправки сообщений.

Например, рассмотрим сценарий, в котором отправитель отправляет три сообщения. Изначально получатели являются участником A и участником B. После первого сообщения отправитель изменяет получателя на участника B и перед третьим сообщением получатель переключится на участника A. В этом случае участник A получит два сообщения с порядковым номером 1 и 3. Однако это не означает потерю сообщения, но отражает только изменение получателей отправителем.

Ограничения

Размер сообщения

Максимальный допустимый размер одного сообщения — 32 КБ. Если необходимо отправить данные, превышающие ограничение, необходимо разделить данные на несколько сообщений.

Список участников

Максимальное число участников списка ограничено 64. Если вы хотите указать больше участников, вам потребуется самостоятельно управлять списком участников. Например, если вы хотите отправить сообщение 50 участникам, можно создать два разных канала, каждый из которых содержит 25 участников в списках получателей. При вычислении ограничения две конечные точки с одинаковым идентификатором участника будут считаться отдельными сущностями. В качестве альтернативы можно выбрать трансляцию сообщений. Однако некоторые ограничения применяются при трансляции сообщений.

Ограничение частоты

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

  • Надежный канал (устойчивый): 64 кб/с
  • Ненадежный канал (Lossy): 512 кб/с
  • Высокоприоритетный ненадежный канал: 200 кб/с

Однако при трансляции сообщений ограничение скорости отправки является динамическим и зависит от скорости получения. В текущей реализации ограничение скорости отправки вычисляется как максимальная скорость отправки минус 80 % от скорости получения.

Кроме того, мы также применяем ограничение частоты пакетов при отправке широковещательных сообщений. Текущее ограничение устанавливается в 80 пакетов в секунду, где каждые 1200 байт в сообщении считаются одним пакетом. Эти меры применяются для предотвращения наводнения, когда значительное количество участников группового звонка являются вещательными сообщениями.

Следующие шаги

Дополнительные сведения см. в следующих статьях: