פרוטוקול של הכנס
המסמך הזה נועד לתאר את ההתפתחות שאנו נעשה לניהול מסיבות (אודיו/וידאו). המטרה היא לשפר את ההיישום הנוכחי אשר פשוט ממזג שיחות SIP ו לספק תצוגה רשת, כדי לראות היכן המשתתפים רשומים, ניתן להטיל את המשתתפים באופן עצמאי, או את תצוגת הוידאו שונה (להראות רק משתתף אחד)
הגדרות
מארח: הוא המשתמש המערבב את הזרמים האודיו/ווידיאו עבור האחרים
משתתף: כל משתמש בכנס, אפילו המארח
הסרת אחריות
המסמך הזה מתאר רק את השלבים הראשונים לעת עתה. זה אומר את זיהוי המשתתפים ואת המיקום במערבב וידאו שנשלח לכל המשתתפים.
תכנון אפשרי
גריד: כל חבר מופיע עם אותו גובה/רוחב
ONE_BIG_WITH_SMALL: חבר אחד מתקרב והראשון השני מופיע
ONE_BIG: חבר אחד לוקח את המסך המלא
שתי שיטות חדשות זמינות לניהול את תכנון הכנס בCallManager:
/**
* 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
(להעניק את התכנון הנדרש).
סינכרון מידע של מסיבות
הערה: למעשה, המילה משתתף משמשת עבור callId מעורב בוועידה. זה יכול להוביל בהתחלה למספר בעיות עבור האפיי
המטרה היא ליידע את כל המשתתפים בנתונים המטא של הסרטון המוצג. זה אומר מי משתתף בוועידה ואיפה נמצא הסרטון.
אם משתתף הוא בעצמו מסיבת, המידע של תכנון הפתיחה שלו צריך להיות מוגבר כאשר נשלח למשתתפים אחרים.
מידע על תארים
התארה נשמרת כVectorMapStringString עבור לקוחות ובתוך וקטור
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"
}
(...)
}
המפתחות אפשריות הן:
uri = uri של חשבון
מכשיר = תעודת זהות של המכשיר
מדיה = תעודת זהות של מדיה
פעיל = אם המשתתף פעיל
x = עמדה (x) בווידאו
y = עמדה (y) בווידאו
w = גודל (רוחב) בווידאו
h = גודל (גובה) בווידאו
videoMuted = אם הסרטון הוא מוט
audioLocalMuted = אם האודיו מופרע מקומית
audioModeratorMuted = אם האודיו מתמנע על ידי המודרייטורים
isModerator = אם זה מתמקח
יד מורמת = אם היד מורמת
פעילות קול = אם הזרם יש פעילות קול
הקלטה = אם השותף הקלטת את הוועידה
API חדש
שיטה חדשה (בCallManager) וסיגנל חדש לקבל מידע ועדכונים של הכנסים הנוכחיים זמינים:
VectorMapStringString getConferenceInfos(const std::string& confId);
void onConferenceInfosUpdated(const std::string& confId, const VectorMapStringString& infos);
האובייקט של Conference
(שמקיים רק אם אנחנו מערבבים שיחות, זה אומר שאנחנו הבעלים) מנהל את המידע של כל הוועידה, על בסיס LayoutInfos של כל אובייקט של Call
.
אז, כל Call
אובייקט עכשיו יש מידע תארים ואם עדכון, לבקש את Conference
אובייקט עדכון המידע שלו.
מנהל שלועידה שולח את המידע שלו דרך ערוץ SIP כודעת עם סוג MIME הבא: application/confInfo+json
אז, אם שיחת טלפון מקבלת מידע, אנחנו יודעים ששיחת זו היא חברה של קונפרנס.
לסיכום, Call
ניהול תכנונים קיבל, Conference
-managed תכנונים נשלחו.
שינוי מצב הקונפרנס
כדי לשנות את מצב הכנס, המשתתפים צריכים לשלוח הוראות שהארח יטפל בה.
לפרוטוקול יש את הצרכים הבאים:
הוא צריך לטפל בהזמנות ברמות מרובות. למעשה, עבור מסיבה זה 3 רמות להגדיר משתתף:
החשבון שהוא זהות המשתתף
מכשירים, כי כל חשבון יכול להצטרף באמצעות מכשירים רבים
מדיה, כיוון שיכול להיות מספר סרטונים על ידי מכשירים (למשל, מצלמה אחת וחלוקת מסך אחד)
כדי לחסוך רוחב קו, הלקוחות צריכים להיות מסוגלים לשלוח הזמנות מרובות בו זמנית.
פעולות כלליות
כדי לשנות את תכנון, המודרטור יכול לשלוח עומס מועיל עם ”הבקשה/הסדר+json“ כתיב: שבו 0 הוא רשת, 1 הוא משתמש אחד בגדול, אחרים בקלות, 2 הוא אחד בגדול
פעולות החשבון
לעת עתה, אין פעולה תומכת, עם זאת, בעתיד מודרייטור: נכון/לא נכון
צריך להיות מטופל כדי לשנות מנהל.
פעולות המכשיר
hangup: true
לתלות מכשיר מהעידת (רק מתרגלים)raisehand: true/false
לשנות את מצב היד הרמה. רק ניתן לעשות על ידי המכשיר עצמו, אחרת נפל.
פעולות התקשורת
muteAudio
רק מתאמים יכולים להשתיק את הקול של משתתףmuteVideo
עדיין לא תומך.active
להדגים את התקשורת כפעילה.קולפעילות
להדגיש את מצב הפעילות הקולית של זרם מדיה (משמע רק לאודיו)
דוגמה
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 */
}
הערה: סוג התקשורת צריך להיות כלול במידע של מסיבות וניתן להשתמש בו עבור הלקוח כדי לשפר את הצגה (למשל, אל תשתף מסך)
שליטה במודרייטורים
למעשה יש 3 אפשרויות:
קונפיגור של חשבון שינוי כדי להוסיף רשימה של מתמודדים (ב config.yml (
defaultModerators
יכול להכיל רשימה של מתמודדים דפוטים)אם
localModeratorsEnabled
נכון, כל החשבונות של המכשיר יהיו מתמודדיםאם
allModeratorsEnabled
נכון, כל אחד בוועידה יהיה מודרטור
עתיד
זרמים נפרדים כדי לאפשר יותר שליטה?
הערות/הערות
זה סביר שהפרוטוקול יתפתח לצרכים עתידיים. אני מאמין שזה הכי טוב אם יש לנו שדה ”גרסה“. הגרסה הישנה תוכנה אם שדה זה חסר.