Protokolo de konferenco
Tiu dokumento celas priskribi la evoluojn, kiujn ni faros por administri konferencojn (aŭdio/video). La celo estas plibonigi la aktualan efektivigon, kiu simple kunigas SIP-vokojn kaj disponigas retan vidon, al vidado, kie partoprenantoj estas listigitaj, povas esti mutaciitaj sendepende, aŭ la videokomplekto ŝanĝis (por montri nur unu partoprenanton)
Difinoj
Gastiganto: Ĉu la uzanto kiu miksas la aŭdio/vidbendojn por la aliaj
partoprenanto: Ĉiu uzanto en la konferenco, eĉ la gastiganto
Malkaŝo de respondeco
Tiu dokumento priskribas nur la unuajn paŝojn por nun. Tio signifas la identigon de partoprenantoj kaj pozicio en la videomikso sendita al ĉiuj partoprenantoj.
Eblaj aranĝoj
GRID: Ĉiu membro estas montrita kun la sama alteco/larĝo
ONE_BIG_WITH_SMALL: Unu membro estas plilarĝigita kaj la alia antaŭvidado estas montrita
ONE_BIG: Unu membro prenas la plenekranon renderiĝis
Du novaj metodoj estas haveblaj por administri la konferenco Layout 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 efektivigo estas sufiĉe simpla. Ĉio estas administrita fare de conference.cpp
(rilati partoprenanton al fontoj) kaj video_mixer.cpp
(rigardi la deziratan aranĝon).
Sinkronigado Konferencoj Informaĵoj
Noto: Fakte, la vorto partoprenanto estas uzita por alvoko miksita en konferenco. Tio povas komence konduki al kelkaj problemoj por la API kaj devas esti fiksita en la estonteco
La celo estas informi ĉiujn partoprenantojn pri la metadatenoj de la montrita video. Tio signifas, kiu partoprenanto estas en la konferenco kaj kie la video estas situanta.
Se partoprenanto mem estas konferenco, ĝia alvenanta aranĝo informoj devus esti kunfandita kiam sendita al aliaj partoprenantoj.
Layout Info
La Layout estas stokita kiel VectorMapStringString por klientoj kaj interne kun vektoro
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"
}
(...)
}
Povas esti ŝlosiloj:
uri = la urino de la konto
aparato = aparato id
amaskomunikilaro = la id de amaskomunikilaro
aktiva = se la partoprenanto estas aktiva
x = pozicio (x) en la video
y = pozicio (y) en la video
w = grandeco (larĝo) en la video
h = grandeco (alteco) en la video
videoMudita = se la video estas muta
audioLocalMuted = se la aŭdio estas loka mutaciita
audioModeratorMuted = se la aŭdio estas mutaciita de moderistoj
isModerator = se ĝi estas moderator
manoLevadita = se la mano estas levita
voĉActivity = se la fluo havas voĉan agadon
registrado = se la samrangulo registras la konferencon
Nova API
Nova metodo (en CallManager) kaj nova signalo por ricevi aktualajn konferencojn informojn kaj ĝisdatigojn estas haveblaj:
VectorMapStringString getConferenceInfos(const std::string& confId);
void onConferenceInfosUpdated(const std::string& confId, const VectorMapStringString& infos);
La Conference
Object (kiu ekzistas nur se ni miksas alvokojn, tio signifas ke ni estas la mastro) administras la informojn por la tuta konferenco, surbaze de la LayoutInfos de ĉiu Call
objekto.
Do, ĉiu Call
objekto nun havas LayoutInfo kaj se ĝisdatigita, demandu la Conference
objekto ĝisdatigi ĝiajn informojn.
La majstro de konferenco sendas sian informon per la SIP-kanalo kiel mesaĝo kun la sekva MIME-tipo: application/confInfo+json
Do, se iu alvoko ricevas iujn informojn, ni scias ke tiu alvoko estas membro de konferenco.
Resume, Call
administras ricevitajn aranĝojn, Conference
-administritajn senditajn aranĝojn.
Ŝanĝante la staton de la konferenco
Por ŝanĝi la staton de la konferenco, partoprenantoj devas sendi ordonojn, kiujn la gastiganto pritraktos.
La protokolo havas la sekvajn bezonojn:
Ĝi devas trakti ordonojn en pluraj niveloj. Fakte por konferenco estas 3 niveloj por difini partoprenanton:
La konto kiu estas la identeco de la partoprenanto
Aparatoj, ĉar ĉiu konto povas ligi tra pluraj aparatoj
Amaskomunikiloj, ĉar povas esti pluraj videoj per aparatoj (ekz. 1 fotilo kaj 1 ekrano partumado)
Por ŝpari bandobitadon, klientoj devus povi sendi multoblajn ordojn samtempe.
Ĝeneralaj agoj
Por ŝanĝi aranĝon, la moderisto povas sendi utilan ŝarĝon kun “apliko/konfOrder+json” kiel tipo: kie 0 estas griz, 1 estas unu uzanto en granda, aliaj en malgranda, 2 estas unu en granda
La agoj de la konto
Por nun, ekzistas neniu ago apogita, aliflanke, en la estonteco moderator: vera/false
devus esti traktita por ŝanĝi moderatoron.
La agoj de la aparato
hangup: true
por pendigi aparaton de la konferenco (nur moderistoj)raisehand: vera/falsa
por ŝanĝi la staton de la levilo mano. Nur ebla per la aparato mem, alie faligita.
La agoj de la amaskomunikiloj
muteAudio
nur fare de moderistoj por mutacii la aŭdio de partoprenantomuteVideo
ankoraŭ ne apogita.active
por marki la amaskomunikilaron kiel aktiva.voiceActivity
por indiki la statuson de la voĉa agado de amaskomunikila fluo (nur signifa por aŭdio)
Ekzemplo
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 */
}
Noto: la speco de la amaskomunikilaro devus esti inkludita en konferencoj informoj kaj povas esti uzita por la kliento por plibonigi ekrano (ekz. ne tranĉi ekrano dividado)
Kontrolado de moderistoj
Estas fakte tri ebloj:
Konfigado de ŝanĝanta konto aldoni liston de moderistoj (En la konfig.yml (
defaultModerators
povas enhavi liston de defaŭltaj moderistoj)Se
localModeratorsEnabled
estas vera, ĉiuj kontoj de la aparato estos moderistojSe
allModeratorsEnabled
estas vera, ĉiu en la konferenco estos moderisto
Estonteco
Ĉu apartaj fluoj por permesi pli da kontroloj?
Notoj/Komentoj
Estas probable, ke la protokolo evoluos por estontaj bezonoj. Mi kredas, ke estas plej bone, se ni havas “versio” kampo. La pli malnova versio estos rekonita se tiu kampo mankas.