Protokol konferencije
Ovaj dokument ima za cilj opisati razvoj koji ćemo napraviti za upravljanje konferencijama (audio/video). Cilj je poboljšati trenutnu implementaciju koja jednostavno spaja SIP pozive i pruža prikaz mreže, kako bi prikaz gdje su učesnici navedeni, može se samostalno umiriti, ili video raspored promijenjen (da se prikaže samo jedan učesnik)
Definisi
Host: Je li korisnik koji miješa audio/video strume za druge
Učesnik: Svaki korisnik konferencije, čak i domaćin
Izricanje odgovornosti
U ovom dokumentu se za sada opisuju samo prvi koraki, što znači identifikaciju učesnika i položaj u video mixer-u koji je poslat svim učesnicima.
Mogući raspored
Svaka članova prikazana je s istom visinom/širkom
ONE_BIG_WITH_SMALL: Jedan član je povećao i prikazan je drugi preuzetak
Jedan član uzima cijeli ekran prikazan
Postoje dvije nove metode za upravljanje organizacijom konferencije u CallManageru:
/**
* 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);
Uprkos tome, sve se upravlja s conference.cpp
(za povezivanje učesnika s izvorima) i video_mixer.cpp
(za prikaz traženih raspored).
Informacije o sinhronizaciji konferencija
Napomena: U stvari, riječ učesnik se koristi za poziv miješane na konferenciji.
Cilj je obavijestiti sve učesnike o metadanoj prikazanih videozapisa.
Ako je učesnik sam konferencija, informacije o njegovom prihađanju u rasporedu treba spajati kada se šalju drugim učesnicima.
Informacije o rasporedu
Layout se čuva kao VectorMapStringString za klijente i unutarnje s vektorom
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"
}
(...)
}
Mogući ključevi su:
uri = računovo uri
Uređaj = ID uređaja
medije = medije ID
aktivni = ako je učesnik aktivan
x = pozicija (x) u videu
Y = pozicija (y) u videu
w = veličina (šira) u videu
h = veličina (visina) u videu
videoUmuted = ako je video umuted
audioLocalMuted = ako je audio lokalno umutiran
audioModeratorMuted = ako su moderatori umutili audio
isModerator = ako je moderator
Ruke podignute = ako je ruka podignuta
Glasna aktivnost = ako je tok glasna aktivnost
snimanje = ako je kolega snima konferenciju
Novi API
Novi način (u CallManageru) i novi signal za dobivanje trenutnih informacija i ažuriranja konferencije su dostupni:
VectorMapStringString getConferenceInfos(const std::string& confId);
void onConferenceInfosUpdated(const std::string& confId, const VectorMapStringString& infos);
Conference
Objekt (koji postoji samo ako mi mešamo pozive, što znači da smo mi glavni) upravlja informacijama za cijelu konferenciju, na temelju LayoutInfo-a svakog Call
objekta.
Dakle, svaki Call
objekt sada ima LayoutInfo i ako je ažuriran, zamolite Conference
objekt da ažurira svoje informacije.
Glavni učesnik konferencije šalje svoje informacije putem SIP kanala kao poruku s sljedećim tipom MIME-a: application/confInfo+json
Dakle, ako poziv primi neke informacije, znamo da je ovaj poziv član konferencije.
U sučetu, Call
upravlja primljenim rasporedima, Conference
-managed poslatim rasporedima.
Promjena stanja konferencije
Da bi se promijenio stanje konferencije, učesnici moraju poslati narudžbe koje će voditelj nositi.
Protokol ima sljedeće potrebe:
U stvari, za konferenciju je 3 razine za definiranje učesnika:
Uloga u kojem se učesnik identifikuje
Uređaji, jer svaki račun može se pridružiti preko više uređaja
Mediji, jer može biti više video snimaka po uređaju (npr. 1 kamera i 1 dijeljenje ekrana)
Da bi se uštedjela propusnica, klijenti bi trebali moći poslati više narudžbi istovremeno.
Opće akcije
Kako bi promijenili raspored, moderator može poslati korisnu opterećenje s „aplikacija/confOrder+json” kao tip: gdje 0 je mreža, 1 je jedan korisnik u velikom, drugi u malom, 2 je jedan u velikom
Akcije računa
Za sada, međutim, u budućnosti moderator ne podržava nikakvu akciju: za zamjenu moderatora treba upravljati pravim/lažnim
.
Aktivnosti uređaja
hangup: true
za obustavu uređaja iz konferencije (samo moderatori)raisehand: true/false
da se promijeni status ruke podignuće.
Akcije medija
muteAudio
samo moderatori mogu umuti audio učesnikamuteVideo
još nije podržan.active
za označavanje medija kao aktivnih.voiceActivity
za označavanje stanja glasovne aktivnosti medijskog toka (samo relevantno za audio)
Primjer
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 */
}
Napomena: vrsta medija treba uključiti u informacije konferencije i može se koristiti za poboljšanje prikaza klijenta (npr. ne objelodite dijeljenje zaslona)
Kontrolirati moderatore
Postoje zapravo 3 mogućnosti:
Config račun promjene za dodavanje liste moderatora (U config.yml (
defaultModerators
može sadržavati popis default moderatora)Ako je
localModeratorsEnabled
istinito, svi računi uređaja bit će moderatoriAko je
allModeratorsEnabled
istina, bilo tko na konferenciji će biti moderator
Budućnost
Odvojene struje da omogući više kontrola?
Uloga:
Vjerujem da je najbolje da imamo polje „verzije”. Starija verzija će biti prepoznata ako to polje nedostaje.