а якими можна однозначно встановити зв'язок між клієнтом і потоком, який виходить від нього. У браузері MozillaFirefox (Gecko) об'єкт stream не містить таких полів. Про це не говориться в документації, тому це викликало певні проблеми на етапі тестування бібліотеки. Дана проблема була вирішена шляхом перевизначення об'єкта stream і додавання в нього унікального ключа.
Малюнок 25 - Додавання ключа до потоку
Вищеописані зміни додали підтримку основними браузерами, такими як Mozilla, Chrome, Opera.
Другий завданням даної реалізації було спростити процес створення відеоконференцій і реалізувати додатковий функціонал, такий як, наприклад, блокування користувачів, вимикання камери і мікрофону, збереження додаткової інформації про користувача. Для цього був написаний клас Conference, що виконує роль шару абстракції над бібліотекою RTCPeerBroadcasting і спрощує роботу з нею. Вихідний код класу Conference знаходиться у додатку В.
Конструктор Conference приймає в якості параметрів два аргументи: адреса бази даних Firebase та ім'я конференції. На новому об'єкті Conference викликається метод startConnection для підключення або створення нової конференції. Цей метод приймає в параметрах ім'я користувача та функції зворотних викликів. Ім'я користувача перевіряється на наявність і коректність методом checkLoginAlreadyInUse.
Малюнок 26 - Метод checkLoginAlreadyInUse
Якщо ім'я може бути використано, то проводиться перевірка кількості користувачів в даній конференції. Залежно від кількості користувачів буде вироблено або підключення до конференції, або створення нової (якщо користувачів немає). Для перевірки кількості перевіряється значення в відповідної директорії бази даних.
Малюнок 27 - Перевірка кількості користувачів
Після всіх перевірок створюється новий об'єкт RTCPeerBroadcasting, на якому викликається метод joinRoom або createRoom, а в базу даних записується інформація про користувача. Таким чином, всі перевірки автоматизуються і процес створення або підключення до конференції помітно спрощується в порівнянні з використанням бібліотеки RTCPeerBroadcasting, вимагаючи лише виклику одного методу startConnection.
Для відключення від конференції реалізований метод disconnect, який викликає метод leaveRoom бібліотеки RTCPeerBroadcasting і виробляє відключення від бази даних з видаленням директорії користувача. Цей метод може бути використаний як для самостійного відключення, так і для автоматичного, коли користувач буде вигнаний з конференції.
Для реалізації функції відключення інших користувачів доданий метод kickUser, що приймає як параметр ім'я користувача. При виклику цього методу в директорію зазначеного користувача записується значення" kicked". При підключенні до конференції на директорію користувача вішається подія появи значення" kicked", при спрацьовуванні якого виробляється виклик методу disconnect.
Для реалізації функцій відключення камери і мікрофону додані методи switchAudio і switchVideo, приймаючі параметром логічне значення (true або false). Щоб перемикати мовлення відео або аудіо потоків задіяні методи Stream API, а саме: необхідним що походить потокам задається властивість enabled .
Малюнок 28 - Реалізація методу switchVideo
Процес отримання потоків від інших користувачів реалізований у вигляді події. Після створення об'єкта Conf...