Protocol de la conferència

Aquest document té com a objectiu descriure les evolucions que farem per a la gestió de conferències (àudio/vídeo).

Definicions

  • Host: És l’usuari que barreja els flux d’àudio/vídeo per als altres

  • Participant: Cada usuari de la conferència, fins i tot l’anfitrió

Disclaimer

Aquest document només descriu els primers passos per ara. Això significa la identificació dels participants i la posició en el video mixer enviat a tots els participants.

Posibles disposicions

  • GRID: Cada membre es mostra amb la mateixa alçada/amplada

  • ONE_BIG_WITH_SMALL: Un membre és zoomat i l’altre es mostra en vista previa

  • ONE_BIG: Un membre pren la pantalla completa rendert

Dos nous mètodes estan disponibles per gestionar la configuració de la conferència en CallManager:

/**
 * Change the conference layout
 * @param confId
 * @param layout    0 = matrix, 1 = one big, others in small, 2 = one in big
 */
void setConferenceLayout(const std::string& confId, int layout);

/**
 * Change the active participant (used in layout != matrix)
 * @param confId
 * @param participantId    If participantId not found, the local video will be shown
 */
void setActiveParticipant(const std::string& confId, const std::string& participantId);

La implementació és bastant senzilla. Tot és gestionat per conference.cpp (per enllaçar el participant a les fonts) i video_mixer.cpp (per render el disseny desitjat).

Sincronizació de conferències Informació

Nota: En realitat, la paraula participant s’utilitza per a la trucada misturada en una conferència. Això pot conduir al principi a alguns problemes per a l’API i ha de ser arreglat en el futur

L’objectiu és notificar a tots els participants de les metadades del vídeo que es realitza. Això significa què és el participant en la conferència i on es troba el vídeo.

Si un participant és en si mateix una conferència, la seva informació de disposició entrant ha de ser fusionada quan es enviarà a altres participants.

Informació de la disposició

La disposició es almacena com a VectorMapStringString per als clients i internament amb un vector amb el següent format:

Layout = {
    {
        "uri": "participant", "x":"0", "y":"0", "w": "0", "h": "0", "isModerator": "true"
    },
    {
        "uri": "participant1", "x":"0", "y":"0", "w": "0", "h": "0", "isModerator": "false"
    }
    (...)
}

Les claus possibles són:

  • Uri = Uri de compte

  • dispositiu = ID del dispositiu

  • media = ID de la comunicació

  • actiu = si el participant és actiu

  • x = posició (x) en el vídeo

  • y = posició (y) en el vídeo

  • w = mida (amplada) en el vídeo

  • h = mida (altura) en el vídeo

  • videoMuted = si el vídeo està silenciat

  • audioLocalMuted = si l’àudio està localment silenciat

  • audioModerator Muted = si l’àudio està silenciat pels moderadors

  • esModerador = si és un moderador

  • Manada elevada = si la mà és elevada

  • voiceActivity = si el flux té activitat de veu

  • gravat = si el company està gravat la conferència

Nova API

Un nou mètode (en CallManager) i una nova senyal per obtenir respectivament les informacions i actualitzacions de conferències actuals estan disponibles:

VectorMapStringString getConferenceInfos(const std::string& confId);

void onConferenceInfosUpdated(const std::string& confId, const VectorMapStringString& infos);

L’Object Conference (que només existeix si ens barrejam les trucades, això significa que som el mestre) gestiona la informació per a tota la conferència, basant-se en el LayoutInfos de cada object Call.

Així, cada Call objecte ara té una LayoutInfo i si s’actualitza, demana al Conference objecte per actualitzar la seva informació.

El mestre d’una conferència envia la seva informació a través del canal SIP com a missatge amb el següent tipus de MIME: application/confInfo+json

Així que, si una trucada rebia alguna informació, sabem que aquesta trucada és membre d’una conferència.

En resum, Call gestiona els layouts rebuts, Conferència-gestionat els layouts enviats.

Canvi de l’estat de la conferència

Per canviar l’estat de la conferència, els participants han de enviar ordres que l’anfitrió tractarà.

El protocol té les següents necessitats:

De fet, per a una conferència és de 3 nivells per definir un participant:

  • El compte que és la identitat del participant

  • Dispositius, perquè cada compte pot unir-se a través de múltiples dispositius

  • Medios, perquè poden haver múltiples vídeos per dispositius (per exemple, 1 càmera i 1 partil·lació d’escreix)

Per a salvar la banda, els clients han de poder enviar múltiples ordres a la vegada.

Accions generals

Per canviar un disseny, el moderador pot enviar una càrrega útil amb «aplicació/confOrder+json» com a tipus: on 0 és una xarxa, 1 és un usuari en gran, altres en petit, 2 és un en gran

Accions del compte

Per ara, no s’activa cap acció recolzada, però, en el futur moderator: true/false s’ha de gestionar per canviar un moderador.

Les accions de l’aparell

  • hangup: true per colgar un dispositiu de la conferència (só moderadors)

  • raisehand: true/false per canviar l’estat de la mà elevadora.

Les accions dels mitjans de comunicació

  • muteAudio només faible per part dels moderadors per silenciar l’àudio d’un participant

  • muteVideo encara no està suportat.

  • active per marcar els mitjans com a actius.

  • voiceActivity per indicar l’estat d’activitat vocal d’un flux de mitjans (solo rellevant per a l’àudio)

Exemple

So, the application/confOrder+json will contain:

{
    "989587609427420" : {
        "moderator": true, /* false  */
        "devices": {
            "40940943604396R64363": {
                "hangup": true,
                "raisehand": true, /* false */
                "media":{
                    "3532532662432" : {
                        "muteAudio": true, /* false */
                        "muteVideo": true, /* false */
                        "active": true, /* false */
                        "voiceActivity": true /* false */
                    }
                }
            }
        }
    },
    "layout": 0, /* 1, 2 */
}

Nota: el tipus de mitjà ha de ser inclòs en la informació de conferències i pot ser utilitzat per al client per millorar la visualització (per exemple no corregir el partage d’escreines)

Control dels moderadors

Hi ha en realitat 3 possibilitats:

  • Config de compte de canvi per afegir una llista de moderadors (En la config.yml (defaultModerators pot contenir una llista de moderadors default)

  • Si localModeratorsEnabled és cert, totes les comptes del dispositiu seran moderadors

  • Si allModeratorsEnabled és veritat, qualsevol persona de la conferència serà un moderador

Futur

  • Separate streams to allow more controls?

Notes/Comentaris

És probable que el protocol evolucioni per a necessitats futures. Crec que és millor si tenim un camp «versió». La versió anterior serà reconeguda si aquest camp manca.