Skip to content

Команды протокола

Эта страница фиксирует текущий JSON command set из Engine/Proto/CommandType.h. Реальный формат сообщений VideoGrace — объект с одним ключом-командой:

{
  "connect_request": {
    "channel_type": 0,
    "login": "user@example.com",
    "password": "secret"
  }
}

Не использовать устаревший envelope вида {"command":"...","data":{...}}.

Группы команд

Группа Команды
Auth/session connect_request, connect_response, disconnect, change_server, ping, sso_negotiate_request, sso_negotiate_response
User/account user_update_request, user_update_response, update_grants, set_max_bitrate
Contacts/groups contact_list, search_contact, contacts_update, group_list, group_update_request, group_update_response, change_contact_state
Conferences conferences_list, conference_update_request, conference_update_response, create_temp_conference, send_connect_to_conference, connect_to_conference_request, connect_to_conference_response, disconnect_from_conference, change_member_state, member_action, want_speak, turn_speaker, schedule_connect
Devices/media control device_params, device_connect, device_disconnect, renderer_connect, renderer_disconnect, resolution_change, microphone_active, request_media_addresses, media_addresses_list
Messages/blobs delivery_messages, load_messages, delivery_blobs, load_blobs

Auth/session

connect_request

Первое сообщение после открытия WebSocket. Для CommandLoop передает credentials, для WSMedia и BlobChannel передает access_token.

{
  "connect_request": {
    "client_type": 0,
    "channel_type": 0,
    "client_version": 100,
    "system": "Web",
    "login": "user@example.com",
    "password": "secret"
  }
}

Поля:

Поле Тип Назначение
client_type number 0=Ordinal, 1=MediaProcessor, 2=Connector, 3=Recorder.
channel_type number 0=CommandLoop, 1=WSMedia, 2=BlobChannel.
client_version number Версия клиента.
system string Платформа/окружение клиента.
login string Логин для CommandLoop.
password string Пароль для CommandLoop.
access_token string Token для дополнительных каналов.

connect_response

Ответ сервера на connect_request.

{
  "connect_response": {
    "result": 1,
    "server_version": 100,
    "id": 223900001,
    "connection_id": 1,
    "access_token": "opaque-token",
    "name": "User",
    "redirect_url": "",
    "secure_key": "",
    "server_name": "VideoGrace",
    "options": 0,
    "grants": 0,
    "max_output_bitrate": 4096
  }
}

result: 0=Undefined, 1=OK, 2=InvalidCredentials, 3=UpdateRequired, 4=Redirect, 5=ServerFull, 6=InternalServerError, 7=Banned.

disconnect

Команда закрытия session. На сервере также может приходить как server-side kick/disconnect event.

{ "disconnect": {} }

change_server

Сервер просит клиента перейти на другой URL.

ping

Легковесная проверка живости control channel. Не заменяет reconnect policy.

Conferences

connect_to_conference_request

Вход в конференцию.

{
  "connect_to_conference_request": {
    "tag": "default",
    "connect_members": 1,
    "has_camera": 1,
    "has_microphone": 1,
    "has_demonstration": 0
  }
}

connect_to_conference_response

Результат входа в конференцию. OK переводит клиента в conferencing state; NotAllowed, NotExists, LicenseFull возвращают в ready state.

create_temp_conference

Создание временной конференции для p2p call flow. После ответа клиент приглашает второго участника через send_connect_to_conference.

send_connect_to_conference

Invite-команда: один клиент просит сервер подключить другого участника к конференции.

disconnect_from_conference

Выход из конференции. Перед ним клиент должен удалить локальные capturer devices.

change_member_state

Серверная рассылка изменения состава/состояния участников.

member_action, want_speak, turn_speaker

Команды управления участниками и speaker flow. Доступность зависит от conference/member grants.

Devices/media control

device_params

Запрос на создание локального capturer device.

{
  "device_params": {
    "id": 0,
    "ssrc": 0,
    "device_type": 1,
    "ord": 0,
    "name": "Camera",
    "metadata": "",
    "resolution": 31457920,
    "color_space": 0
  }
}

device_connect

Серверное событие о подключении device. Для автора my=1, для удаленных клиентов my=0.

Ключевые поля:

Поле Назначение
connect_type 1=CreatedDevice, 2=ConnectRenderer.
device_type 1=Camera, 2=Demonstration, 4=Microphone, 5=VideoRenderer, 6=AudioRenderer.
device_id Control lifecycle id устройства.
receiver_ssrc SSRC для приема remote stream.
author_ssrc SSRC автора/local publish.
port Порт media translator.
secure_key Ключ payload encryption.

device_disconnect

Удаление capturer device. Shared media transport не закрывается.

renderer_connect / renderer_disconnect

Native renderer lifecycle для UDP receive path. В browser WSMedia mux роль renderer выполняет локальная регистрация receiver_ssrc в demux.

request_media_addresses / media_addresses_list

Запрос списка media endpoints: RTP ports и WSS fallback endpoint.

Messages/blobs

delivery_messages / load_messages

Доставка и загрузка сообщений. Сообщение описывается структурой Message.

delivery_blobs / load_blobs

Доставка и загрузка blob metadata/data. Binary payload идет через BlobChannel, а не через WSMedia.

Правило добавления новой команды

  1. Добавить Cmd*.h/.cpp в Engine/Proto.
  2. Добавить enum value в Engine/Proto/CommandType.h.
  3. Добавить detection в Engine/Proto/CommandType.cpp.
  4. Добавить обработку в Server/Http/HttpServer.h.
  5. Добавить метод в IProcessor/Processor, если команда серверная.
  6. Добавить client-side handling в Engine/Controller и/или web-client.
  7. Обновить эту страницу и сценарии.