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 s sljedećim formatom:

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česnika

  • muteVideo 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 moderatori

  • Ako 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.