Πρωτόκολλο της διάσκεψης
Στόχος του παρόντος εγγράφου είναι να περιγράψει τις εξελίξεις που θα κάνουμε για τη διαχείριση των συνεδριάσεων (αυτο/βίντεο).
Ορισμοί
Διοικητής: Είναι ο χρήστης που αναμιγνύει τις ροές ήχου/βίντεο για τους άλλους
Συμμετέχων: Κάθε χρήστης της διάσκεψης, ακόμη και ο οικοδεσπότης
Απαλλαγή από ευθύνη
Το παρόν έγγραφο περιγράφει μόνο τα πρώτα βήματα προς το παρόν.
Πιθανές διαρθρώσεις
ΔΙΑΜΑΣ: Κάθε μέλος εμφανίζεται με το ίδιο ύψος/εύρος
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 για πελάτες και εσωτερικά με έναν vektor
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 του λογαριασμού
συσκευή = ταυτότητα της συσκευής
media = ταυτότητα του μέσου
ενεργός = αν ο συμμετέχων είναι ενεργός
x = θέση (x) στο βίντεο
y = θέση (y) στο βίντεο
w = μέγεθος (εύθοδος) στο βίντεο
h = μέγεθος (πάνω) στο βίντεο
βίντεο Ακωδικοποιημένο = αν το βίντεο είναι ακωδικοποιημένο
audioLocalMuted = αν το ήχο είναι τοπικά αθόρυβο
audioModeratorMuted = αν το ήχο είναι αθόρυβο από τους διαχειριστές
isModerator = αν είναι ένας διαχειριστής
αν το χέρι είναι ανυψωμένο
voiceActivity = αν η ροή έχει φωνητική δραστηριότητα
ηχογράφηση = αν ο συνάδελφος ηχογραφεί τη διάσκεψη
Νέα API
Μια νέα μέθοδος (σε CallManager) και ένα νέο σήμα για να λαμβάνονται αντίστοιχα τρέχουσες πληροφορίες και ενημερώσεις για τη διάσκεψη είναι διαθέσιμες:
VectorMapStringString getConferenceInfos(const std::string& confId);
void onConferenceInfosUpdated(const std::string& confId, const VectorMapStringString& infos);
Το Συνέδριο
Object (το οποίο υπάρχει μόνο αν αναμιγνύουμε κλήσεις, αυτό σημαίνει ότι είμαστε ο κύριος) διαχειρίζεται τις πληροφορίες για ολόκληρη τη διάσκεψη, με βάση τις LayoutInfos κάθε Call
object.
Έτσι, κάθε Καλή
αντικείμενο έχει τώρα μια LayoutInfo και αν ενημερωθεί, ζητήστε από το Συνδιάσκεψη
αντικείμενο να ενημερώνει τις πληροφορίες του.
Ο διευθυντής μιας διάσκεψης στέλνει τις πληροφορίες του μέσω του κανάλι SIP ως μήνυμα με τον ακόλουθο τύπο MIME: application/confInfo+json
Έτσι, αν μια κλήση λαμβάνει κάποια πληροφορία, ξέρουμε ότι αυτή η κλήση είναι μέλος μιας διάσκεψης.
Για να συνοψίσουμε, η Call
διαχειρίζεται τις παραλαβές διαρθρώσεων, η Conference
-managed έστειλε διαρθρώσεις.
Αλλαγή της κατάστασης της διάσκεψης
Για να αλλάξει η κατάσταση του συνέδρου, οι συμμετέχοντες πρέπει να στείλουν εντολές που θα χειριστεί ο οικοδεσπότης.
Το πρωτόκολλο έχει τις ακόλουθες ανάγκες:
Για μια διάσκεψη, είναι 3 επίπεδα για να ορίσετε έναν συμμετέχοντα:
Το λογαριασμό που αποτελεί την ταυτότητα του συμμετέχοντος
Συσκευές, επειδή κάθε λογαριασμός μπορεί να ενωθεί μέσω πολλαπλών συσκευών
Μέσα, επειδή μπορεί να υπάρχουν πολλαπλά βίντεο από συσκευές (π.χ. 1 κάμερα και 1 κοινή χρήση οθόνης)
Για να εξοικονομήσει το εύρος ζώνης, οι πελάτες θα πρέπει να μπορούν να στέλνουν πολλές παραγγελίες ταυτόχρονα.
Γενικές ενέργειες
Για να αλλάξει μια διάταξη, ο διαχειριστής μπορεί να στείλει ένα ωφέλιμο φορτίο με «application/confOrder+json» ως τύπο: όπου 0 είναι μια πλέγμα, 1 είναι ένας χρήστης σε μεγάλο, άλλοι σε μικρό, 2 είναι ένας σε μεγάλο
Δράσεις του λογαριασμού
Προς το παρόν, δεν υποστηρίζεται καμία ενέργεια, ωστόσο, στο μέλλον ο διαχειριστής: πρέπει να χειριστείται true/false
για να αλλάξει ένας διαχειριστής.
Δράσεις της συσκευής
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
είναι αλήθεια, όλες οι λογαριασμοί της συσκευής θα είναι διαχειριστέςΑν είναι αλήθεια ότι όλοι οι διαχειριστές έχουν ενεργοποιηθεί, οποιοσδήποτε στο συνέδριο θα είναι διαχειριστής
Το μέλλον
Ειδικές ροές για να επιτρέψουμε περισσότερους ελέγχους;
Σημειώσεις/Επισημειώσεις
Είναι πιθανό το πρωτόκολλο να εξελιχθεί για μελλοντικές ανάγκες. Πιστεύω ότι είναι καλύτερο αν έχουμε ένα πεδίο «επιστολή».