సమావేశ ప్రోటోకాల్
ఈ పత్రం సమావేశాల నిర్వహణ (ఆడియో / వీడియో) కోసం మనం చేసే పరిణామాలను వివరించడానికి ఉద్దేశించబడింది. 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 (అనుసారమైన లేఅవుట్ను అందించడానికి) ద్వారా నిర్వహించబడుతుంది.
సమావేశాల సమాచారం సమకాలీకరణ
గమనికః వాస్తవానికి, సమావేశంలో మిశ్రమ కాల్ కోసం పాల్గొనే పదం ఉపయోగించబడుతుంది. ఇది మొదట API కోసం కొన్ని సమస్యలకు దారితీస్తుంది మరియు భవిష్యత్తులో పరిష్కరించబడాలి
ఈ సమావేశంలో పాల్గొనేవారు ఎవరు మరియు వీడియో ఎక్కడ ఉన్నారో అర్థం చేసుకోవడం ద్వారా ప్రదర్శించిన వీడియో యొక్క మెటాడేటా గురించి పాల్గొనేవారికి తెలియజేయడం లక్ష్యం.
ఒక పాల్గొనేవారు ఒక సమావేశం అయితే, దాని ఇన్కమింగ్ లేఅవుట్ సమాచారం ఇతర పాల్గొనేవారికి పంపినప్పుడు విలీనం చేయాలి. సమావేశానికి తిరిగి పంపినప్పుడు లేఅవుట్ సమాచారం విలీనం చేయబడదు.
లేఅవుట్ సమాచారం
లేఅవుట్ కస్టమర్లకు మరియు అంతర్గతంగా కస్టమర్
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"
}
(...)
}
సాధ్యమైన కీలుః
ఉరి = ఖాతా ఉరి
పరికరం = పరికరం యొక్క ID
మీడియా = మీడియా యొక్క ID
యాక్టివ్ = పాల్గొనేవారు యాక్టివ్ అయితే
x = వీడియోలో స్థానం (x)
y = వీడియోలో స్థానం (y)
w = వీడియోలో పరిమాణం (వెడల్పు)
h = వీడియోలో పరిమాణం (ఎత్తు)
videoMuted = వీడియో మ్యూట్ అయినట్లయితే
audioLocalMuted = ఆడియో స్థానికంగా మ్యూట్ అయినట్లయితే
audioModeratorMuted = ఆడియోను మోడరేటర్లు మ్యూట్ చేస్తే
isModerator = అది ఒక మోడరేటర్ అయితే
చేతి ఎత్తబడిన = చేతి ఎత్తబడినట్లయితే
వాయిస్ యాక్టివిటీ = స్ట్రీమ్ వాయిస్ యాక్టివిటీ కలిగి ఉంటే
రికార్డింగ్ = సహోద్యోగి సమావేశాన్ని రికార్డు చేస్తుంటే
కొత్త API
ప్రస్తుత సమావేశ సమాచారం మరియు నవీకరణలను పొందడానికి కొత్త పద్ధతి (కాల్ మేనేజర్లో) మరియు కొత్త సిగ్నల్ అందుబాటులో ఉన్నాయిః
VectorMapStringString getConferenceInfos(const std::string& confId);
void onConferenceInfosUpdated(const std::string& confId, const VectorMapStringString& infos);
కాన్ఫరెన్స్ ఆబ్జెక్ట్ (మేము కాల్స్ మిశ్రమ చేస్తే మాత్రమే ఉనికిలో ఉంటుంది, అంటే మనం మాస్టర్ అని అర్థం) ప్రతి కాన్ఫరెన్స్ ఆబ్జెక్ట్ యొక్క లేఅవుట్ ఇన్ఫోస్ ఆధారంగా మొత్తం సమావేశం కోసం సమాచారాన్ని నిర్వహిస్తుంది. getConferenceInfos ఈ వస్తువు నుండి నేరుగా సమాచారాన్ని సేకరిస్తుంది.
కాబట్టి, ప్రతి Call వస్తువుకు ఇప్పుడు లేఅవుట్ ఇన్ఫర్మేషన్ ఉంది మరియు ఇది నవీకరించబడితే, దాని సమాచారాన్ని నవీకరించమని Conference వస్తువును అడగండి.
ఒక సమావేశం యొక్క మాస్టర్ తన సమాచారాన్ని SIP ఛానల్ ద్వారా క్రింది MIME రకం సందేశంగా పంపుతుందిః application/confInfo+json
కాబట్టి, ఒక కాల్ కొన్ని ఇన్ఫర్మేషన్ అందుకున్నట్లయితే, ఈ కాల్ ఒక సమావేశం సభ్యుడు అని మాకు తెలుసు.
సంక్షిప్తంగా, Call అందుకున్న లేఅవుట్లను నిర్వహిస్తుంది, Conference-managed sent layouts.
సమావేశం యొక్క స్థితిని మార్చడం
సమావేశం యొక్క స్థితిని మార్చడానికి, పాల్గొనేవారు ఆతిథ్యమిచ్చే ఆదేశాలను పంపాలి.
ఈ ప్రోటోకాల్ క్రింది అవసరాలను కలిగి ఉందిః
ఇది బహుళ స్థాయిల ఆదేశాలను నిర్వహించాలి. వాస్తవానికి, ఒక సమావేశంలో పాల్గొనేవారిని నిర్వచించడానికి 3 స్థాయిలు ఉన్నాయిః
పాల్గొనే వ్యక్తి యొక్క గుర్తింపును కలిగి ఉన్న ఖాతా
పరికరాలు, ఎందుకంటే ప్రతి ఖాతా బహుళ పరికరాల ద్వారా చేరవచ్చు
మీడియా, ఎందుకంటే పరికరాల ద్వారా బహుళ వీడియోలు ఉండవచ్చు (ఉదా. 1 కెమెరా మరియు 1 స్క్రీన్ షేరింగ్)
బ్యాండ్విడ్త్ను ఆదా చేయడానికి, క్లయింట్లు ఒకేసారి బహుళ ఆర్డర్లను పంపగలగాలి.
సాధారణ చర్యలు
లేఅవుట్ మార్చడానికి, మోడరేటర్ "అప్లికేషన్ / కాన్ఫోర్డర్ + json" తో ఒక ఉపయోగకరమైన లోడ్ను రకం పంపవచ్చుః ఇక్కడ ** 0** ఒక గ్రిడ్, ** 1** ఒక వినియోగదారు పెద్ద, ఇతరులు చిన్న, ** 2** పెద్ద లో ఒక వినియోగదారు
ఖాతా యొక్క చర్యలు
అయితే, ప్రస్తుతానికి, భవిష్యత్ మోడరేటర్లో మద్దతు లేని చర్య లేదుః ఒక మోడరేటర్ను మార్చడానికి నిజమైన/అబద్ధమైన ను నిర్వహించాలి.
పరికర చర్యలు
hangup: trueసమావేశం నుండి ఒక పరికరాన్ని హ్యాంగ్ అప్ చేయడానికి (మధ్యవర్తులు మాత్రమే)raisehand: true/falseraise చేతి స్థితిని మార్చడానికి. కేవలం పరికరం ద్వారా మాత్రమే సాధ్యమవుతుంది, లేకపోతే పడిపోయింది.
మీడియా చర్యలు
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 */
}
గమనికః మీడియా రకం సమావేశ సమాచారంలో చేర్చాలి మరియు కస్టమర్ ప్రదర్శనను మెరుగుపరచడానికి ఉపయోగించవచ్చు (ఉదా. స్క్రీన్ షేరింగ్ను కత్తిరించవద్దు)
మోడరేటర్లను నియంత్రించడం
నిజానికి మూడు అవకాశాలున్నాయి.
మోడరేటర్ల జాబితాను జోడించడానికి మారుతున్న ఖాతా యొక్క కాన్ఫిగరేషన్ ( config.yml లో (
defaultModeratorsడిఫాల్ట్ మోడరేటర్ల జాబితాను కలిగి ఉంటుంది)localModeratorsEnabledనిజమైతే, పరికరం యొక్క అన్ని ఖాతాలు మోడరేటర్లుగా ఉంటాయిallModeratorsEnabledనిజమైతే, సమావేశంలో ఎవరైనా మోడరేటర్ అవుతారు
భవిష్యత్తు
మరింత నియంత్రణలు అనుమతించడానికి ప్రత్యేక ప్రవాహాలు?
గమనికలు/ వ్యాఖ్యలు
భవిష్యత్తు అవసరాలకు ప్రోటోకాల్ అభివృద్ధి చెందుతుందని నేను నమ్ముతున్నాను. మనకు "వెర్షన్" ఫీల్డ్ ఉంటే మంచిది. ఈ ఫీల్డ్ తప్పిపోయినట్లయితే పాత వెర్షన్ గుర్తించబడుతుంది.