Konferentsi protokolli

Selle dokumendi eesmärk on kirjeldada konverentside juhtimisel tehtud arengut (audio/video).

Määrused

  • Host: Kasutaja segab teistele audi-/videosstrimidele

  • Osaleja: Iga konverentsi kasutaja, isegi võõrustaja

Vastutuse välistamine

Käesolevas dokumendis kirjeldatakse praegu ainult esimesed sammud.

Võimalikud paigaldused

  • GRID: iga liige on näidatud samas kõrguses/laiusel

  • ONE_BIG_WITH_SMALL: Üks liige on suurendatud ja teine eelvaade on näidatud

  • ONE_BIG: Üks liige võtab täieliku ekraani

CallManageris on konverentsi korraldamiseks saadaval kaks uut meetodit:

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

Täiteviis

Kõik on juhitud conference.cpp (sõltuda osaleja allikatega) ja video_mixer.cpp (töötada soovitud paigutus).

Koosolekute sünkroniseerimine

Märkus: Tegelikult kasutatakse sõna osaleja konverentsis segatud kõne jaoks. See võib algul põhjustada mõningaid probleeme API-le ja tuleb tulevikus parandada

Eesmärk on teavitada kõiki osalejaid esitatud videot käsitlevate metadate kohta.

Kui osaleja ise on konverents, tuleb selle siseneva paigaldamise info ühendada, kui see saadetakse teistele osalejatele.

Layout info

Layout salvestatakse kliendi vectorMapStringStringina ja sisemalt vectorga järgmises vormis:

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

Võimalikud võtmed on:

  • uri = konto uri

  • seadme = seadme ID

  • meedia = meediat ID

  • aktiivne = kui osaleja on aktiivne

  • x = video positsioon (x)

  • y = video positsioon (y)

  • w = video suurus (laius)

  • h = video suurus (kõrgus)

  • videoMutted = kui video on vaikne

  • audioLocalMuted = kui audio on kohalikult vaikne

  • audioModeratorMuted = kui moderatorid panevad audio vaikima

  • isModerator = kui see on moderator

  • käe tõstmine = kui käsi tõstetakse

  • häälakäivitus = kui voolu on häälakäivitusel

  • salvestamine = kui kolleeg salvestas konverentsi

Uus API

Uus meetod (CallManageris) ja uus signaal vastavalt praeguste konverentside infot ja ajakohastusi saadaval:

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

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

Täiteviis

Konverents Objekt (mis on olemas ainult siis, kui me segame kõnesid, see tähendab, et me oleme meister) haldab kogu konverentsi teavet, mis põhineb iga Call objekti layoutInfos.

Seega on iga Call objektil nüüd LayoutInfo ja kui see on ajakohastatud, palu Conference objektilt oma infot ajakohastada.

Konferentsi juht saadab oma info SIP-kanaali kaudu sõnumi järgmiste MIME-tiikidega: application/confInfo+json

Kui kõne saab infot, siis me teame, et see on konverents.

Üheks sõnastuseks: Call juhatab saadud seadmeid, Conference-managed saadetud seadmeid.

Konferentsi seisundi muutmine

Et muuta konverentsi seisundit, peavad osalejad saatma korraldusi, mida võõrustaja käsitleb.

Protokollil on järgmised vajadused:

See peaks tegelema korraldustega mitmel tasandil.

  • Osaleja identiteediga konto

  • seadmed, sest iga konto saab ühendada mitme seadme kaudu

  • Meedia, sest seadmete kaupa võib olla mitu videot (nt 1 kaamera ja 1 ekraanide jagamine)

Liiduvõhu säästmiseks peaksid kliendid saama saata mitu tellimust korraga.

Üldmeetmed

Moderator võib paigalduse muutmiseks saata kasulik koormus, mille tüüp on „application/confOrder+json“: kus 0 on võrk, 1 on üks kasutaja suures, teised väikestes, 2 on üks suures

Kontodi tegevused

Praegu ei ole siiski mingit toetust antud tegevusele tulevikus moderator: real/false tuleb käsitleda moderatorit vahetamiseks.

Seadme toimingud

  • hangup: true kongressis olev seadme üles üles üles üles üles üles üles üles üles üles (ainult moderatorid)

  • raisehand: tõsi/väärs tõsta käe staatuse muutmiseks.

Meedia tegevus

  • muteAudio ainult moderatorid suudavad osaleja audiot vaikistada

  • muteVideo ei toeta veel.

  • active märgata meedia aktiivseks.

  • voiceActivity märgata meediasüsteemi häälakäitumise staatust (ainult audiosõnaline)

Näide

Seega sisaldab taotlus/kompleks+json:

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

Märkus: meediatüübi tuleks sisaldada konverentside infotesse ja seda saab kasutada kliendi jaoks näite parandamiseks (nt ei tohi ekraanide jagamist lõigata)

Kontrollivad moderatorid

Tegelikult on kolm võimalust:

  • Muudatava konto konfiguratsioon, et lisada moderatorite nimekiri (konfigur.yml (defaultModerators võib sisaldada standardmoderatorite nimekirja)

  • Kui localModeratorsEnabled on tõsi, siis kõik seadme kontod on moderatorid

  • Kui allModeratorsEnabled on tõsi, siis iga konverentsis on moderator

Tulevik

  • Erinevad voolud, et võimaldada rohkem kontrolli?

Märkused/Kommentarid

Prootokol on tõenäoliselt tulevikus vajalik, sest see on parem, kui meil on „versiooni“ välja.