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
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 participantmuteVideo
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 moderadorsSi
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.