सम्मेलनको प्रोटोकल
यो कागजातले सम्मेलनहरू व्यवस्थापनको लागि हामी गर्ने विकासको वर्णन गर्ने उद्देश्य हो (अडियो / भिडियो) लक्ष्य वर्तमान कार्यान्वयन सुधार गर्ने हो जुन केवल 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
(चाहेको लेआउट प्रदर्शन गर्न) द्वारा प्रबन्ध गरिन्छ।
समक्रमण सम्मेलन सूचना
नोटः वास्तवमा, सम्मेलनमा मिश्रित कलको लागि सहभागी शब्द प्रयोग गरिन्छ। यसले सुरुमा एपीआईका लागि केही समस्या निम्त्याउन सक्छ र भविष्यमा समाधान गर्नुपर्नेछ
लक्ष्य भनेको प्रस्तुत भिडियोको मेटाडाटाको बारेमा सबै सहभागीहरूलाई सूचित गर्नु हो। यसको अर्थ सम्मेलनमा सहभागी के हो र भिडियो कहाँ अवस्थित छ।
यदि सहभागी आफैं सम्मेलन हो भने, यसको आगमन लेआउट जानकारी अन्य सहभागीहरूलाई पठाउँदा मर्ज गर्नुपर्दछ। लेआउट जानकारी सम्मेलनमा फिर्ता पठाउँदा मर्ज गर्नु हुँदैन।
लेआउट जानकारी
लेआउटलाई ग्राहकहरूको लागि 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"
}
(...)
}
सम्भावित कुञ्जीहरूः
उरी = खाताको उरी
उपकरण = उपकरणको आईडी
मिडिया = मिडियाको आईडी
सक्रिय = यदि सहभागी सक्रिय छ भने
x = भिडियोमा स्थिति (x)
y = भिडियोमा स्थिति (y)
w = भिडियोमा आकार (चौडाई)
h = भिडियोमा आकार (उचाइ)
videoMuted = यदि भिडियो चुम्बन गरिएको छ भने
audioLocalMuted = यदि अडियो स्थानीय रूपमा चुम्बन गरिएको छ भने
audioModeratorMuted = यदि अडियोलाई मोडरेटरहरूले मौन पार्दछन् भने
isModerator = यदि यो एक moderator हो
हात उठाइयो = यदि हात उठाइयो भने
आवाज गतिविधि = यदि स्ट्रिममा आवाज गतिविधि छ भने
रेकर्डिङ = यदि समकक्षले सम्मेलन रेकर्डिङ गरिरहेको छ भने
नयाँ एपीआई
नयाँ विधि (कॉलमेनेजरमा) र नयाँ संकेत क्रमशः हालको सम्मेलन जानकारी र अपडेट प्राप्त गर्न उपलब्ध छन्ः
VectorMapStringString getConferenceInfos(const std::string& confId);
void onConferenceInfosUpdated(const std::string& confId, const VectorMapStringString& infos);
Conference
वस्तु (जुन केवल यदि हामी कलहरू मिश्रित गर्छौं भने मात्र अवस्थित हुन्छ, यसको मतलब हामी मास्टर हौं) ले प्रत्येक Call
वस्तुको लेआउटइन्फोको आधारमा सम्पूर्ण सम्मेलनको लागि जानकारी प्रबन्ध गर्दछ। getConferenceInfos ले यस वस्तुबाट सीधा जानकारी प्राप्त गर्दछ।
त्यसैले, हरेक Call
वस्तु अब एक लेआउट सूचना छ र यदि अद्यावधिक, Conference
वस्तु यसको जानकारी अद्यावधिक गर्न सोध्नुहोस्।
सम्मेलनको मास्टरले आफ्नो जानकारी SIP च्यानल मार्फत निम्न MIME प्रकारको सन्देशको रूपमा पठाउँछ: application/confInfo+json
त्यसैले, यदि कुनै कलले केही जानकारी प्राप्त गर्दछ भने, हामीलाई थाहा छ कि यो कल सम्मेलनको सदस्य हो।
सारांशमा, Call
प्राप्त लायआउटहरू प्रबन्ध गर्दछ, Conference
-managed sent layouts।
सम्मेलनको अवस्था परिवर्तन गर्दै
सम्मेलनको अवस्था परिवर्तन गर्न, सहभागीहरूले आदेशहरू पठाउनु पर्छ जुन होस्टले ह्यान्डल गर्नेछ।
प्रोटोकलका निम्न आवश्यकताहरू छन्ः
यो धेरै स्तरमा आदेशहरू ह्यान्डल गर्नुपर्छ. वास्तवमा एक सम्मेलन को लागि एक सहभागी परिभाषित गर्न 3 स्तर होः
खाता जुन सहभागीको पहिचान हो
उपकरणहरू, किनकि प्रत्येक खाता धेरै उपकरणहरू मार्फत जडान गर्न सकिन्छ
मिडिया, किनभने यन्त्रहरूद्वारा धेरै भिडियोहरू हुन सक्छन् (उदाहरण १ क्यामेरा र १ स्क्रीन साझेदारी)
ब्यान्डविड्थ बचत गर्न, ग्राहकहरूले एकै पटक धेरै अर्डरहरू पठाउन सक्षम हुनुपर्दछ।
सामान्य कार्यहरू
लेआउट परिवर्तन गर्न, मोडरेटरले "अनुप्रयोग / कन्फर्डर + json" को साथ एक उपयोगिता लोड पठाउन सक्दछः जहाँ ** 0** एक ग्रिड हो, ** 1** एक प्रयोगकर्ता ठूलो, अन्य सानोमा, ** 2** ठूलोमा एक हो
खाताको कार्यहरू
हालसम्म, कुनै पनि कार्य समर्थित छैन, तर भविष्यमा मोजरः सही/झूटा
मोजर परिवर्तन गर्न ह्यान्डल गर्नुपर्छ।
उपकरणको कार्यहरू
hangup: true
सम्मेलनबाट उपकरण ह्याक गर्न (केवल मोडरेटरहरू)raisehand: true/false
हाउज ह्यान्डको स्थिति परिवर्तन गर्न। केवल उपकरणले मात्र गर्न सकिन्छ, अन्यथा गिराइएको।
मिडियाको कार्य
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 */
}
नोटः मिडियाको प्रकार सम्मेलन जानकारीमा समावेश गर्नुपर्छ र ग्राहकले प्रदर्शन सुधार गर्न प्रयोग गर्न सक्दछ (उदाहरणका लागि स्क्रीन साझेदारी काट्नुहोस्)
नियन्त्रक मोडरेटरहरू
वास्तवमा तीनवटा सम्भावनाहरू छन्:
कन्फिग.yml मा (
defaultModerators
डिफल्ट मोडरेटरहरूको सूची समावेश गर्न सक्छ)यदि
localModeratorsEnabled
सत्य छ भने, उपकरणको सबै खाताहरू मोडरेटर हुनेछन्यदि
allModeratorsEnabled
सत्य छ भने सम्मेलनमा कोही पनि एक मोडरेटर हुनेछ
भविष्य
अधिक नियन्त्रणको लागि छुट्टै धाराहरू?
टिप्पणीहरू
यो सम्भव छ कि प्रोटोकल भविष्यका आवश्यकताहरूको लागि विकसित हुनेछ। मलाई लाग्छ कि यो राम्रो छ यदि हामीसँग "भेरिशन" क्षेत्र छ। पुरानो संस्करण पहिचान हुनेछ यदि यो क्षेत्र हराइरहेको छ भने।