सम्मेलन प्रोटोकॉल

इस दस्तावेज़ का उद्देश्य सम्मेलनों के प्रबंधन के लिए किए जाने वाले विकासों का वर्णन करना है (ऑडियो / वीडियो) लक्ष्य वर्तमान कार्यान्वयन को बेहतर बनाना है जो केवल SIP कॉल को मिलाता है और एक ग्रिड दृश्य प्रदान करता है, जिसमें प्रतिभागियों की सूची है, स्वतंत्र रूप से मूट किया जा सकता है, या वीडियो लेआउट बदल गया है (केवल एक प्रतिभागी को दिखाने के लिए)

परिभाषाएँ

  • मेजबानः वह उपयोगकर्ता है जो अन्य के लिए ऑडियो/वीडियो स्ट्रीम मिश्रित करता है

  • प्रतिभागी: सम्मेलन में प्रत्येक उपयोगकर्ता, यहां तक कि मेजबान भी

अस्वीकरण

इस दस्तावेज़ में केवल पहले चरणों का वर्णन किया गया है। इसका मतलब है कि सभी प्रतिभागियों को भेजे गए वीडियो मिक्सर में प्रतिभागियों की पहचान और स्थिति।

सम्भावित लेआउट

  • ग्रिडः प्रत्येक सदस्य समान ऊंचाई/चौड़ाई के साथ दिखाया गया है

  • ONE_BIG_WITH_SMALL: एक सदस्य को ज़ूम किया गया है और अन्य पूर्वावलोकन दिखाया गया है

  • ONE_BIG: एक सदस्य पूर्ण स्क्रीन प्रस्तुत करता है

कॉल मैनेजर में सम्मेलन लेआउट को प्रबंधित करने के लिए दो नई विधियां उपलब्ध हैंः

/**
 * 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 = वीडियो में आकार (ऊंचाई)

  • videoMuted = यदि वीडियो मूट है

  • audioLocalMuted = यदि ऑडियो स्थानीय रूप से मूट है

  • audioModeratorMuted = यदि ऑडियो को मॉडरेटर द्वारा मूट किया गया है

  • isModerator = यदि यह एक moderator है

  • हाथ उठाया = यदि हाथ उठाया गया हो

  • voiceActivity = यदि धारा में voice activity है

  • रिकॉर्डिंग = यदि समकक्ष सम्मेलन रिकॉर्ड कर रहा है

नई एपीआई

एक नई विधि (कॉल मैनेजर में) और एक नया संकेत क्रमशः वर्तमान सम्मेलन जानकारी और अद्यतन प्राप्त करने के लिए उपलब्ध हैंः

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

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

ConferenceObject (जो केवल तब मौजूद होता है जब हम कॉल को मिला देते हैं, इसका मतलब है कि हम मास्टर हैं) प्रत्येक Call`object के LayoutInfos के आधार पर पूरे सम्मेलन के लिए जानकारी प्रबंधित करता है। getConferenceInfos इस ऑब्जेक्ट से सीधे जानकारी प्राप्त करेगा।

तो, प्रत्येक Call वस्तु में अब एक LayoutInfo है और यदि अद्यतन किया गया है, तो Conference वस्तु से उसकी जानकारी अद्यतन करने के लिए पूछें।

सम्मेलन के मास्टर अपनी जानकारी SIP चैनल के माध्यम से निम्नलिखित MIME प्रकार के साथ संदेश के रूप में भेजते हैंः application/confInfo+json

तो, अगर किसी कॉल को कुछ confInfo मिलता है, हम जानते हैं कि यह कॉल एक सम्मेलन के सदस्य है.

संक्षेप में, Call प्राप्त लेआउट प्रबंधित करता है, Conference-managed sent layouts।

सम्मेलन की स्थिति को बदलना

सम्मेलन की स्थिति बदलने के लिए प्रतिभागियों को आदेश भेजने की आवश्यकता होती है जो मेजबान संभालेंगे।

प्रोटोकॉल की निम्नलिखित आवश्यकताएं हैंः

यह कई स्तरों पर आदेशों को संभालता है। वास्तव में एक सम्मेलन के लिए एक प्रतिभागी को परिभाषित करने के लिए 3 स्तर हैंः

  • खाता जो प्रतिभागी की पहचान है

  • डिवाइस, क्योंकि प्रत्येक खाता कई उपकरणों के माध्यम से जुड़ सकता है

  • मीडिया, क्योंकि डिवाइस द्वारा कई वीडियो हो सकते हैं (जैसे 1 कैमरा और 1 स्क्रीन साझा करना)

बैंडविड्थ बचाने के लिए, ग्राहकों को एक ही समय में कई आदेश भेजने में सक्षम होना चाहिए।

सामान्य कार्य

लेआउट बदलने के लिए, मॉडरेटर "अनुप्रयोग/confOrder+json" के साथ एक उपयोगिता लोड भेज सकता हैः जहां 0 एक ग्रिड है, 1 एक उपयोगकर्ता में बड़ा है, अन्य में छोटा है, 2 एक में बड़ा है

खाता की क्रियाएँ

अभी के लिए, कोई कार्रवाई समर्थित नहीं है, हालांकि, भविष्य में मॉडरेटरः सच/झूठ एक मॉडरेटर बदलने के लिए संभाला जाना चाहिए।

डिवाइस की क्रियाएं

  • hangup: true सम्मेलन से डिवाइस को लटकाने के लिए (केवल मॉडरेटर)

  • raisehand: true/false raise hand की स्थिति बदलने के लिए। केवल डिवाइस द्वारा ही संभव, अन्यथा गिरा दिया गया।

मीडिया की कार्रवाई

  • muteAudio केवल मॉडरेटर द्वारा प्रतिभागी के ऑडियो को चुप करने के लिए संभव

  • muteVideo अभी तक समर्थित नहीं है।

  • active मीडिया को सक्रिय के रूप में चिह्नित करने के लिए।

  • voiceActivity मीडिया स्ट्रीम की आवाज गतिविधि की स्थिति को इंगित करने के लिए (केवल ऑडियो के लिए प्रासंगिक)

उदाहरण

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 */
}

नोटः मीडिया का प्रकार सम्मेलन सूचनाओं में शामिल किया जाना चाहिए और ग्राहक के लिए प्रदर्शन को बेहतर बनाने के लिए इस्तेमाल किया जा सकता है (जैसे स्क्रीन साझा करने के लिए कट नहीं)

नियंत्रक नियंत्रक

वास्तव में तीन संभावनाएं हैंः

  • विन्यास खाता विन्यास प्रबंधकों की सूची जोड़ने के लिए (config.yml में (defaultModerators डिफ़ॉल्ट नियंत्रकों की सूची हो सकती है)

  • localModeratorsEnabled सही है, तो डिवाइस के सभी खाते मॉडरेटर होंगे

  • यदि allModeratorsEnabled सच है, सम्मेलन में कोई भी एक मॉडरेटर होगा

भविष्य

  • अधिक नियंत्रण की अनुमति देने के लिए अलग धाराओं?

नोट्स/टिप्पणी

यह संभावना है कि प्रोटोकॉल भविष्य की जरूरतों के लिए विकसित होगा. मुझे लगता है कि यह सबसे अच्छा है अगर हम एक "अनुकरण" क्षेत्र है. पुराने संस्करण को पहचान जाएगा अगर इस क्षेत्र की कमी है.