# Overview

Данная инструкция описывает работу с API обоих продуктов: TrueConf VideoSDK и TrueConf Room.

# Сравнение продуктов

Ниже представлена таблица с перечислением функционала каждого решения:

Функционал TrueConf Room TrueConf VideoSDK
Free PRO Free PRO
Веб-интерфейс управления настройками приложения X X X X
Полнофункциональный веб-интерфейс управления видеоконференцсвязью X X
Разграничение прав доступа для администраторов и пользователей X X
Выбор элементов интерфейса для отображения на главном экране X X
Изменение фона главного окна приложения X X
Брендирование: изменение логотипа на главном экране X X
Отсутствие надписи “Free” поверх видео с камеры и в конференциях X X
Наличие API X X X X
Протокол NDI: отправка видео по протоколу NDI X X
Протокол NDI: получение видео по протоколу NDI X X
TrueConf Room Service X X
Поддерживаемые ОС Microsoft Windows 7 SP1 и выше
Debian 10 / 11
Ubuntu 20.04 / 21.10
Astra Linux CE 2.12
Astra Linux SE 1.6 / 1.7
Raspberry Pi OS

# Введение

Интерфейс управления представляет из себя один вебсокет (WebSocket), по которому осуществляется обмен сообщениями в формате JSON

# Example

Ниже приведен пример html-страницы, где при нажатие на кн. "Call" будет произведен вызов абонента по его TrueConf ID, который указан в текстовом поле.

Важно. Перед открытием страницы в браузере убедитесь в следующем:

  1. VideoSDK/Room уже запущен локально.

  2. Для управления VideoSDK/Room используется Незащищенный вход.

<html lang="en">
<script>
    let ws;
    let inputPeerId;
    let submitButton;
    let resultH4;

    window.addEventListener('load', () => {
        inputPeerId = window.document.getElementById('peerIdInput');
        submitButton = window.document.getElementById('submitButton');
        resultH4 = window.document.getElementById('resultH4');

        submitButton.addEventListener('click', ()=> {
            const peerId = inputPeerId.value;
            sendMsg({ method : "call", peerId });
        });

        init();
    })

    function init(){
        ws = new WebSocket("ws://localhost:8765/");
        ws.addEventListener('message', onMsg);
        ws.addEventListener('error', onError);
        ws.addEventListener('open', onOpen);
    }

    function sendMsg(msg) {
        ws.send(JSON.stringify(msg));
    }

    function onMsg(e) {
        const data = JSON.parse(e.data);

        // Processing: Commands responses
        switch (data.method) {
            case "auth": {
                data.result ? console.log('authorization done') : console.error('authorization error', data.error);

                sendMsg({
                    method: 'login',
                    login: "1@someserver.name",
                    password: "123"
                });
            } 
            break;
        }

        // Processing: Events
        switch (data.event) {
            case "conferenceCreated": {
                resultH4.innerHTML = "confID: " + data.confId;
            }
            break;
        }
    }

    function onError(e) {
        console.error(e);
    }

    function onOpen(e) {
        sendMsg({
            method: 'setUsedApiVersion',
            requestId: "",
            version: "1"
        });

        sendMsg({
            method: 'auth',
            type : "unsecured"
        });
    }
</script>
<body>

<h3>Calling from TrueConf Room to any user by ID</h3>
<input id="peerIdInput" type="text" name="peerId" />
<input id="submitButton" type="submit" value="call" />
<h4 id="resultH4"></h4>

</body>
</html>