Команды протокола
Эта страница фиксирует текущий 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.
Правило добавления новой команды
- Добавить
Cmd*.h/.cppвEngine/Proto. - Добавить enum value в
Engine/Proto/CommandType.h. - Добавить detection в
Engine/Proto/CommandType.cpp. - Добавить обработку в
Server/Http/HttpServer.h. - Добавить метод в
IProcessor/Processor, если команда серверная. - Добавить client-side handling в
Engine/Controllerи/илиweb-client. - Обновить эту страницу и сценарии.