Protokol konference

Cilj tega dokumenta je opisati razvoj, ki ga bomo storili pri upravljanju konferencij (audio/video). Cilj je izboljšati trenutno izvajanje, ki preprosto združuje SIP klice in zagotavlja pregled omrežja, da se prikažejo udeleženci, ki jih je mogoče samostojno pomiriti ali pa se spremeni video razporeditev (za prikaz samo enega udeležencega)

Definisije

  • Host: Je uporabnik, ki meša avdio/video tokove za druge

  • Sodelovalec: Vsak uporabnik konference, tudi gostitelj

Izključitev odgovornosti

Ta dokument opisuje le prve korake, ki so za zdaj namenjene identifikaciji udeležencev in položaju v videomeksu, ki ga pošljejo vsem udeleženci.

Možni razpored

  • GRID: Vsak član je prikazan z enako višino/širino

  • ONE_BIG_WITH_SMALL: Ena članica je povečana in prikazana je druga predvajalka

  • ONE_BIG: En član prikaže celotni zaslon

Za upravljanje konfiguracije konference v CallManagerju so na voljo dve novi metodi:

/**
 * 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);

Izvajanje

Izvajanje je precej preprosto. Vse upravlja conference.cpp (za povezovanje udeleženca z viri) in video_mixer.cpp (za prikaz želenega oblikovanja).

Informacije o sinhronizaciji konferencij

Opomba: Na splošno se za mešano klic na konferenci uporablja beseda udeleženec.

Cilj je, da se vsem udeleženci obvesti o metadanih podatkih prikazanega videa.

Če je udeleženec sam konferenca, se informacije o njegovi prihodnji postavki morajo združiti, ko jih pošljemo drugim udeležencem.

Informacije o razporeditvi

Razporeditev se shrani kot VectorMapStringString za stranke in notranji s vektorjem z naslednjim oblikom:

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"
    }
    (...)
}

Možni ključi so:

  • uri = uri računov

  • naprava = identifikacija naprave

  • medij = identifikacija medija

  • aktivno = če je udeleženec aktiven

  • x = položaj (x) v videu

  • y = položaj (y) v videu

  • w = velikost (širokost) v videu

  • h = velikost (visina) v videu

  • videoUmuted = če je videoUmuted

  • audioLocalMuted = če je zvok lokalno umeten

  • audioModeratorMuted = če so zvočni mediji zaumirali

  • isModerator = če je moderator

  • Roka dvignjena = če je roka dvignjena

  • glasActivity = če je tok glasovna aktivnost

  • zapisovanje = če je partner zapisoval konferenco

Novi API

Na voljo je nova metoda (v CallManagerju) in novi signal za pridobivanje trenutnih informacij in posodobitev konference:

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

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

Izvajanje

ConferenceObjekt (ki obstaja samo, če mešava klice, kar pomeni, da smo vi gospodar) upravlja informacije za celotno konferenco, na podlagi LayoutInfo vsakega Call`Objekt.

Torej, vsak Call objekt zdaj ima LayoutInfo in če je posodobljen, prosite Conference objekt, da posodobi svoje informacije.

Vodja konference pošlje svoje informacije prek SIP kanala kot sporočilo z naslednjim tipom MIME: application/confInfo+json

Če klice prejmejo informacije, vemo, da je član konference.

Če povzamemo, Call upravlja prejetih postavk, Conference-managed poslanih postavk.

Sprememba stanja konference

Da bi spremenili stanje konference, morajo udeleženci pošiljati naročila, ki jih bo voditelj opravil.

Protokol ima naslednje potrebe:

V resnici je za konferenco 3 ravni, ki opredeljujejo udeleženca:

  • Račun, ki je identiteta udeleženca

  • Naprave, ker se lahko vsak račun poveže prek več naprav

  • Mediji, ker lahko na različnih napravah (npr. 1 kamera in 1 deljenje zaslona)

Za prihranek širokopasovnega prometa bi morali biti stranke sposobne pošiljati več naročil hkrati.

Splošna akcija

Če želite spremeniti načrt, lahko moderator pošlje koristno obremenitev z „aplikacijo/konfiguracijo+json“ kot tip: kjer je 0 mreža, 1 je eden uporabnik v velikem, drugi v majhnem, 2 je eden v velikem

Dejanja računa

Zaenkrat ni podprtega ukrepa, vendar v prihodnosti moderator: real/false je treba obravnavati, da bi zamenjal moderatorja.

Dejanja naprave

  • hangup: true za obložitev naprave iz konference (samo moderatorji)

  • raisehand: true/false spremeniti status dvigače roke.

Dejanja medijev

  • muteAudio samo moderatorji lahko utišajo zvok udeleženca

  • muteVideo še ni podprt.

  • active označiti medije kot aktivne.

  • voiceAktivnost za navede stanje glasovne dejavnosti medijskega toka (samo relevantno za avdio)

Primeri

Torej priložba/povezava+json bo vsebovala:

{
    "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,
}

Opomba: vrsta medija je treba vključiti v informacije o konferencah in jo lahko uporabite za izboljšanje prikaza (npr. ne poslabšajte deljenja zaslona)

Kontrolirati moderatorji

V bistvu obstajajo tri možnosti:

  • Konfiguracija spreminjajočega računa za dodajanje seznama moderatorjev (v konfiguraciji.yml (defaultModerators lahko vsebuje seznam standardnih moderatorjev)

  • Če je localModeratorsEnabled res, bodo vse račune naprave moderatorji

  • Če je vse moderatorje omogočeni res, bo vsak na konferenci moderator.

Prihodnost

  • Ločeni tokovi, da bi omogočili več nadzora?

Opombe/Komentarji

Pravzaprav je verjetno, da se bo protokol razvil za prihodnje potrebe. Mislim, da je najbolje, če imamo polje „verzija“. Starejša različica bo prepoznana, če ta polje manjka.