Протокол конференције
Овај документ има за циљ да опише еволуције које ћемо урадити за управљање конференцијама (аудио/видео).
Дефиниције
Хост: Да ли је корисник који меша аудио/видео струје за друге
Учесник: Сваки корисник конференције, чак и домаћин
Уговорност
Овај документ описује само прве кораке за сада. То значи идентификацију учесника и положај у видео миксеру који се šalје свим учесницима.
Могуће распореде
ГРИД: Сваки члан је приказан са истим висином/широком
ONE_BIG_WITH_SMALL: Један члан је проширен и други прегледи се приказује
ONE_BIG: Један члан узима рендерацију пуног екрана
Постоје два нова метода за управљање конференцијом у 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);
Увршење
Реализација је прилично једноставна. Све се управља conference.cpp
(за повезивање учесника са изворима) и video_mixer.cpp
(за регенерацију тражених распореда).
Информације конференција за синхронизацију
Напомена: заправо се реч учесник користи за позиве смешене на конференцији.
Циљ је да се сви учесници обавештеју о метадатама рендераног видео снимка.
Ако је учесник сам конференција, његове прилазне информације о расположеници треба да се споје када се слају другим учесницима.
Информације о распореду
Лейлаут се чува као ВекторамАпСтрингСтринг за клијенте и унутра са вектором
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"
}
(...)
}
Могуће кључеве су:
Ури = Ури рачуна
Уредиште = идентификатор уређаја
медија = идентификатор медија
активна = ако је учесник активен
x = позиција (x) у видео
y = позиција (y) у видео
w = величина (ширина) у видео снимку
h = величина (висок) у видео снимку
видеоУглушено = ако је видеоуглушено
audioLocalMuted = ако је аудио локално заглушћен
audioModeratorMuted = ако су аудио заглушени од стране модератора
isModerator = ако је модератор
рукуПодигнута = ако је рука подигнута
Голосова активност = ако струја има гласова активност
запис = ако је вршњак снима конференцију
Нови АПИ
Нова метода (у CallManager) и нови сигнал за добијање тренутних конференција информација и ажурирања су доступни:
VectorMapStringString getConferenceInfos(const std::string& confId);
void onConferenceInfosUpdated(const std::string& confId, const VectorMapStringString& infos);
Увршење
КонференцОбјекце (који постоји само ако смешимо позиве, то значи да смо ми мајстор) управља информацијама за целу конференцију, на основу ЛайуутИнфоса сваког
Каллнообјекце.
Дакле, сваки Кал
објекат сада има LayoutInfo и ако је ажуриран, замоли Конференц
објекат да ажурира своје информације.
Мастер конференције послаје своје информације преко SIP канала као поруку са следећим типом MIME: application/confInfo+json
Дакле, ако позив прими нека информација, знамо да је овај позив члан конференције.
За сумирање, Кал
управља примљене распореде, Конференце
-управљана испраћена распореде.
Промена стања конференције
Да би се променио стање конференције, учесници морају послати наредице које ће домаћин да се бави.
Протокол има следеће потребе:
За конференцију је потребно три нивоа да се дефинише учесник:
Рачун који је идентитет учесника
Уреди, јер се сваки рачун може придружити преко више уређаја
Медији, јер може бити више видео снимака по уређајима (на пример, 1 камера и 1 дељење екрана)
Да би се уштедела пролаз прапускања, клијенти би требало да могу да испрате више нарада истовремено.
Општа акције
Да би променио распоред, модератор може послати корисничко оптерећење са „примјена/конфордер+јсон” као тип: где је 0 решетка, 1 је један корисник у великој, други у малом, 2 је један у великој
Акције рачуна
За сада, нема подржаних акција, међутим, у будућности модератор: прави/лажи
треба да се обрађује за смену модератора.
Акције уређаја
hangup: true
за вешање уређаја из конференције (само модератори)raisehand: true/false
да промени статус руке за подизање.
Акције медија
muteAudio
само модератори могу да затимну аудио учесникаmuteVideo
још није подржана.активни
да се означе медији као активни.голосоваДеланост
да се укаже статус гласовете активности медијског потока (само релевантан за аудио)
Пример
Дакле, апликација/конфордер+јсон` ће садржати:
{
"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,
}
Напомена: тип медија треба укључити у информације конференције и може се користити за клијент да побољша приказивање (на пример, не крећете дељење екрана)
Контролирање модератора
Постоји три могућности:
Конфигурација рачуна за мењање да додате листу модератора (у конфигурацији.имлу (
defaultModerators
може садржати листу дефолтних модератора)Ако је
localModeratorsEnabled
тачно, сви рачуни уређаја ће бити модераториАко је вистина
allModeratorsEnabled
, свако на конференцији ће бити модератор
Будућност
Одвојени струје да омогући више контроле?
Примете/Коментар
Вероватно је да ће се протокол развијати за будуће потребе. верујем да је најбоље ако имамо поље „верзије”. Старе верзије ће бити препозната ако ово поље недостаје.