INTEGRITY Документация

WebSocket-адаптер

Передавайте аудио и видео между дорожками WebRTC и эндпойнтами WebSocket. Поддерживается приём аудио из источников WebSocket и отправка аудио и видео WebRTC потребителям WebSocket. Исходящее видео (egress) передаётся в формате JPEG со скоростью около 1 FPS.

Что вы можете создать

Как это работает

Создание дорожек WebRTC из внешнего аудио

Прием аудио из внешних источников через WebSocket для создания WebRTC-дорожек с целью дальнейшей раздачи.

graph LR
    A[External System] -->|Audio Data| B[WebSocket Endpoint]
    B -->|Adapter| C[Realtime SFU]
    C -->|New Session| D[WebRTC Track]
    D -->|WebRTC| E[WebRTC Clients]

Варианты использования:

  • Потоковая генерация речи ИИ (text-to-speech) с передачей в WebRTC
  • Аудио от бэкенд-сервисов или баз данных
  • Аудиопотоки от внешних систем в реальном времени

Ключевые характеристики:

  • Автоматически создаёт новый идентификатор сессии
  • Использует buffer режим для передачи аудио частями
  • Максимум 32 КБ на сообщение WebSocket

Транслируйте аудио и видео WebRTC во внешние системы

Передавайте аудио и видео из существующих дорожек WebRTC во внешние системы через WebSocket для обработки или хранения.

graph LR
    A[WebRTC Source] -->|WebRTC| B[Realtime SFU Session]
    B -->|Adapter| C[WebSocket Endpoint]
    C -->|Media Data| D[External System]

Варианты использования:

  • Транскрипция речи в текст в реальном времени
  • Запись и архивирование аудио
  • Конвейеры обработки аудио в реальном времени
  • Снимки видео и миниатюры
  • Приём данных компьютерного зрения (низкий FPS)

Ключевые характеристики:

  • Требует существующего session ID с треком
  • Аудио: отправляет отдельные кадры PCM по мере их создания; каждый включает временную метку и порядковый номер
  • Видео: отправляет отдельные кадры JPEG примерно с частотой 1 FPS; каждый включает метку времени (номер последовательности может быть не задан)
  • Автоматически повторяет попытки подключения к тому же эндпойнту WebSocket в течение до 5 секунд после кратких разрывов связи или перезапусков эндпойнта. См. Автоматическое переподключение для потоковой передачи.

Справочник по API

Создание адаптера

POST /v1/apps/{appId}/adapters/websocket/new

Тело запроса

{
  "tracks": [
    {
      "location": "local",
      "trackName": "string",
      "endpoint": "wss://...",
      "inputCodec": "pcm",
      "mode": "buffer"
    }
  ]
}

Параметры

Параметр Тип Описание
location string Обязательный. Должно быть "local" для приёма аудио
trackName string Обязательный. Имя для создания нового трека WebRTC
endpoint string Обязательный. URL-адрес WebSocket, с которого получать аудио
inputCodec string Обязательный. Кодек входящего аудио. В настоящее время поддерживается только "pcm"
mode string Обязательный. Должно быть "buffer" для локального режима

Ответ

{
  "tracks": [
    {
      "trackName": "string",
      "adapterId": "string",
      "sessionId": "string",    // New session ID generated
      "endpoint": "string"      // Echo of the requested endpoint
    }
  ]
}

Тело запроса

{
  "tracks": [
    {
      "location": "remote",
      "sessionId": "string",
      "trackName": "string",
      "endpoint": "wss://...",
      "outputCodec": "pcm"
    }
  ]
}

Параметры

Параметр Тип Описание
location string Обязательный. Должно быть "remote" для вывода медиапотока
sessionId string Обязательный. Существующий session ID, содержащий трек
trackName string Обязательный. Имя существующего трека для трансляции
endpoint string Обязательный. URL-адрес WebSocket, на который отправлять медиаданные
outputCodec string Обязательный. Кодек для исходящего медиапотока. Используйте "pcm" для аудио, "jpeg" для видео (только вывод)

Ответ

{
  "tracks": [
    {
      "trackName": "string",
      "adapterId": "string",
      "sessionId": "string",    // Same as request sessionId
      "endpoint": "string"      // Echo of the requested endpoint
    }
  ]
}

Закройте адаптер

POST /v1/apps/{appId}/adapters/websocket/close

Тело запроса

{
	"tracks": [
		{
			"adapterId": "string"
		}
	]
}

Форматы медиа

WebRTC-треки

Двоичный формат WebSocket

Медиа использует Protocol Buffers. Аудио использует PCM payload, видео использует JPEG payload:

message Packet {
    uint32 sequenceNumber = 1;  // Used in Stream mode only
    uint32 timestamp = 2;       // Used in Stream mode only
    bytes payload = 5;          // Media data
}

Режим приема (буфер): Только payload поле используется и содержит фрагменты аудиоданных.

Потоковый режим (egress):

Видео (JPEG)

Протокол соединения

Подключается к вашему эндпойнту WebSocket:

  1. Рукопожатие при обновлении до WebSocket
  2. Защищённое соединение для wss:// URL-адреса
  3. Начинается передача медиапотока

Формат сообщения

Режим буферизации (ingest)

Потоковый режим (egress)

Жизненный цикл соединения

  1. Подключается к эндпойнту WebSocket
  2. Начинается передача аудиопотока
  3. Начинается видеотрансляция (если настроено)
  4. При потоковой передаче из WebRTC в WebSocket выполняется несколько кратких попыток переподключения к тому же эндпойнту после разрыва соединения
  5. Соединение закрывается при закрытии, ошибке или после исчерпания окна автоматического переподключения

Автоматическое переподключение для потоковой передачи

Когда вы используете WebSocket-адаптер в Потоковый режим (egress) чтобы отправлять аудио или видео в реальном времени от SFU на собственный эндпойнт WebSocket (WebRTC → WebSocket), SFU автоматически переподключается после кратковременных отключений или перезапусков конечной точки.

SFU повторяет попытки подключения к тому же WebSocket-эндпойнту в течение до 5 секунд. Изменения в API не требуются. Если по истечении окна переподключения эндпойнт остаётся недоступным, адаптер закрывается, и для возобновления передачи потока приложению нужно создать новый адаптер.

Буферизация медиа при переподключении

Автоматическое переподключение использует буферизацию с приоритетом прямого эфира, пока эндпойнт WebSocket временно недоступен:

Автоматическое переподключение применяется только при использовании Потоковый режим (egress). Он повторяет попытки только для того же эндпойнта и не поддерживает отказоустойчивое переключение между несколькими эндпойнтами.

Цены

В настоящее время находится в бета-версии и доступен бесплатно.

После достижения статуса общей доступности тарификация будет соответствовать стандартным ценам Cloudflare Realtime: $0.05 за ГБ исходящего трафика. Взимается плата только за трафик, идущий от Cloudflare к эндпойнтам WebSocket. Трафик, поступающий от эндпойнтов WebSocket в Cloudflare, не тарифицируется.

Использование учитывается в счёт бесплатного тарифа Cloudflare Realtime на 1000 ГБ.

Рекомендации

Управление соединением

Производительность

Безопасность

Ограничения

Обработка ошибок

Код ошибки Описание
400 Недопустимые параметры запроса
404 Сессия или трек не найдены
503 Адаптер не найден (для операций закрытия)

Эталонные реализации

Миграция с пользовательских мостов

  1. Замена пользовательской сигнализации вызовами Adapter API
  2. Обновление эндпойнтов WebSocket для обработки формата PCM
  3. Реализуйте управление жизненным циклом адаптера
  4. Удалите пользовательскую конфигурацию STUN/TURN

Часто задаваемые вопросы

Вопрос: можно ли использовать один и тот же адаптер для двунаправленного аудио? О: Нет, каждый экземпляр однонаправленный. Создавайте отдельные адаптеры для отправки и для приема.

Вопрос: что происходит при обрыве соединения WebSocket?

О: При использовании Потоковый режим (egress), SFU автоматически повторяет попытки подключения к тому же эндпойнту WebSocket в течение 5 секунд. Если эндпойнт становится доступным в этот промежуток времени, трансляция возобновляется автоматически.

Для аудио используется короткий ограниченный буфер, который уменьшает слышимые потери при кратких прерываниях. Видео возобновляется с последнего доступного JPEG-кадра, а не воспроизводит более старые кадры.

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

При приёме данных из WebSocket в WebRTC WebSocket-клиент должен переподключаться и по необходимости пересоздавать адаптер.

Вопрос: есть ли ограничение на количество одновременных адаптеров? О: Ограничения соответствуют стандартным квотам Cloudflare Realtime. По конкретным требованиям обращайтесь в службу поддержки.

Вопрос: можно ли изменить аудиоформат после создания адаптера? О: Нет, формат аудио фиксируется в момент создания. Для другого формата создайте новый адаптер.