Konferenssin pöytäkirja
Tässä asiakirjassa pyritään kuvaamaan konferenssien hallinnoinnissa tehtäviä kehitystä (audio/video). Tavoitteena on parantaa nykyistä toteutusta, joka yhdistää SIP-soittoja ja tarjoaa verkko-näytön, jossa osallistujat luetellaan, voidaan hiljentää itsenäisesti tai videon suunnittelu muutetaan (joka näyttää vain yhden osallistujan)
Määritelmät
Isäntä: Onko käyttäjä, joka sekoittaa äänen/videon virtauksia muille
Osallistuja: Jokainen konferenssin käyttäjä, jopa isännöitsijä
Vapautus
Tässä asiakirjassa kuvataan vain ensimmäiset askeleet, jotka koskevat osallistujien tunnistamista ja kaikkien osallistujien lähettämää videomikseliä.
Mahdolliset suunnittelut
GRID: Jokainen jäsen on näytetty samalla korkeudella/levyltä
ONE_BIG_WITH_SMALL: Yksi jäsen on suurennettu ja toinen esittely näkyy
ONE_BIG: Yksi jäsen ottaa koko näytön
CallManagerissa on kaksi uutta tapaa hallita konferenssin suunnittelu:
/**
* 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);
Käytäntöönpano
Kaikki on hoidettu conference.cpp
(yhteyttämiseksi osallistujan lähteisiin) ja video_mixer.cpp
(ks. haluaman suunnittelun esitys).
Konferenssien tietojen synkronointi
Huomautus: Itse asiassa sanaa osallistuja käytetään konferenssin yhteydessä sekoitetun kutsun yhteydessä. Tämä voi johtaa aluksi joihinkin API:n ongelmiin ja sen on korjattava tulevaisuudessa
Tavoitteena on ilmoittaa kaikille osallistujille esitettyjen videoiden metatietoista.
Jos osallistuja on itse konferenssi, sen tulossa olevan suunnittelun tiedot on yhdistettävä, kun ne lähetetään muille osallistujille.
Järjestelmätiedot
Laajennus tallennetaan VectorMapStringString-säännösksi asiakkaille ja sisäisessä
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"
}
(...)
}
Voitavat avaimet ovat:
Uri = tilin uria
laite = laitteen tunnus
media = median tunnus
aktiivinen = jos osallistuja on aktiivinen
x = videoon oleva asema (x)
y = videon sijainti (y)
w = videon koko (läheys)
h = videon koko (korkeus)
video Muted = jos video on muted
audioLocalMuted = jos ääntä on paikallisesti hiljentetty
audioModerator Muted = jos ääntä moderattorit äänettöivät
isModerator = jos se on moderator
Käsi kohotettu = jos käsi kohotetaan
voiceActivity = jos virtaus on äänenaikainen
tallennus = jos vertaisella on konferenssin tallennus
Uusi API
Uusi menetelmä (CallManagerissa) ja uusi signaali, joilla saat nykyisiä konferenssin tietoja ja päivityksiä:
VectorMapStringString getConferenceInfos(const std::string& confId);
void onConferenceInfosUpdated(const std::string& confId, const VectorMapStringString& infos);
Käytäntöönpano
Conference
Object (joka on olemassa vain, jos sekoitamme puheluja, mikä tarkoittaa, että olemme päällikkö) hallinnoi koko konferenssin tietoja, joka perustuu jokaisen Call
-objektin layoutInfoon.
Jokaisella Call
-objektillä on nyt LayoutInfo, ja jos se on päivitetty, pyydä Conference
-objektia päivittämään tiedot.
Konferenssin johtaja lähettää tiedot SIP-kanavalla viestiä seuraavalla MIME-tyyppillä: application/confInfo+json
Jos puhelu saa tietoa, tiedämme, että puhelu on konferenssin jäsen.
Yhteenvetona Call
hallinnoi vastaanotettuja järjestelyjä, Conference
-managee lähetettyjä järjestelyjä.
Konferenssin tilaa muutetaan
Konferenssin tilannetta muutettaakseen osallistujien on lähetettävä määräyksiä, joita isännöi.
Protokolla on seuraavat tarpeet:
Konferenssin on määriteltävä osallistuja kolmella tasolla:
Tilin, joka on osallistujan henkilöllisyys
Laitteet, koska jokainen tili voi liittyä useiden laitteiden kautta
Mediat, koska laitteiden mukaan voi olla useita videoita (esim. 1 kamera ja 1 näytön jakaminen)
Jotta asiakkaat voisivat säästää kaikkiaan, heidän pitäisi saada useita tilauksia kerrallaan.
Yleiset toimet
Muuttaakseen ulkoasu, moderator voi lähettää hyödyllisen kuormituksen ”sovellus/konfOrder+json” tyypinä: jossa 0 on verkko, 1 on yksi käyttäjä suuressa, toiset pienessä, 2 on yksi suuressa
Tilin toiminnot
Tällä hetkellä ei ole tukea, mutta tulevaisuudessa moderaattor: true/false
olisi käsiteltävä, jotta voidaan vaihtaa moderatorin.
Laitteen toiminnot
hangup: true
to hangup a device from the conference (vain moderattorit)raisehand: true/false
korotuksen statusin muuttamiseksi.
Tiedotusvälineiden toimet
muteAudio
vain moderattoreiden mahdollinen osallistujan äänen äänettöminenmuteVideo
ei vielä tuettu.active
merkitä media aktiivisena.voiceActivity
ilmoittaa median virran ääniteollisuuden tila (vain merkityksellinen äänelle)
Esimerkki
hakemuksessa/sovittelu+json
sisältyy siis:
{
"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,
}
Huomautus: median tyyppi on sisällytettävä konferenssin tietoon ja sitä voidaan käyttää asiakkaalle näytön parantamiseksi (esim. ei leikata näytön jakamista)
Kontrolloiminen moderatorit
On olemassa kolme mahdollisuutta:
Muutostilin muunnelma lisätä moderattorin luettelo (muunnelma.yml (
defaultModerators
voi sisältää luettelon oletettuja moderattoria)Jos
localModeratorsEnabled
on totta, kaikki laitteen tiliä ovat moderattoritJos kaikki moderatorit on oikeat, kaikki konferenssin jäsenet ovat moderatorit.
Tulevaisuus
Erilliset virrat, jotta voi hallita enemmän?
Huomattaukset/ huomautukset
On todennäköistä, että pöytäkirja kehittyisi tulevien tarpeiden mukaan.