Дистанционное обучение: доставляем видео без задержек
Сейчас школы и университеты перешли на удалённое обучение. Обнаружилось, что к этому были готовы не все. Учителя пытаются связаться с целым классом учеников по Skype или Zoom, где сейчас огромный трафик, и, соотвественно, большое количество задержек и помех. То, насколько беспроблемно пройдёт урок, зависит и от того, насколько хороший интернет у участников процесса. Если у ученика плохой интернет, это скажется только на нём. Если же плохой интернет у учителя, проблемы будут у всего класса.
Как учителю максимально обойти задержки видеосигнала, даже если качество интернета у него дома оставляет желать лучшего? Лучшим выходом будет организация доставки видеосигнала с низкой задержкой (low latency). Для этого отлично подходит протокол передачи видео WebRTC (Web Real Time Communications).
Есть три способа передачи данных: unicast (от одного хоста к другому), multicast (от одной хоста к ограниченной группе хостов) и broadcast (от одного хоста ко всем хостам в сети). Изначально протокол WebRTC был создан именно для unicast, то есть для связи двух пользователей. В такой схеме веб-камера учителя может передать сигнал в 2 Мбит одному ученику, и это вписывается в возможности стандартной камеры. Но если учителю необходимо передать сигнал в 2 Мбит двадцати ученикам, начинаются проблемы: далеко не у всех есть настолько качественное и быстрое соединение. Что с этим делать?
Организовываем multicast-рассылку по WebRTC
Сложность построения масштабируемой потоковой unicast-рассылки заключается в том, что источник видео не может установить прямое соединение с каждым одноранговым узлом - у него просто не будет достаточной пропускной способности и мощности ЦП для поддержания такого количества соединений. Мы реализовали доставку видео, используя протокол WebRTC, при котором появляется возможность отправлять сигнал с камеры учителя не непосредственно ученикам, а в облако, на сервер, который и будет заниматься последующей рассылкой сигнала.
У сервера по умолчанию будет более качественное и стабильное соединение с интернетом. Кроме этого, есть возможность подключить целый кластер серверов, находящихся в разных странах, если речь идёт об обучении студентов из разных стран.
Помимо этого мы реализовали ряд интересных возможностей. Если канал нестабилен, камере может отдаваться команда снизить битрейт. И снижать его можно сколько угодно - мы в режиме реального времени подстраиваемся под ширину нужного нам канала. Точно таким же образом мы можем и увеличивать битрейт, и всё это происходит очень плавно, с точностью до килобита.
Мы работаем над похожей системой для получателя: транскодирование в три профиля в облаке. Это даст возможность ученикам менять качество принимаемого от учителя сигнала, но не плавно, а в три профиля - низкое, среднее и высокое качество. Таким образом, ученики даже с самым слабым сигналом смогут получать видео от учителя с максимально низкой задержкой, пусть даже при этом будет страдать качество видеосигнала. При некоторых услових можно добиться задержки в 500 мс от захвата кадра в источнике до рендеринга его на экране приемника.
Даже в случае, если сигнал пропадёт на какое-то время, на непрерывности трансляции это не скажется: благодаря облаку у нас есть возможность сохранять небольшие, в 10-15 секунд, отрывки видео во временном хранилище. А впоследствии появится возможность вести запись урока и выгружать полученные видео, на основе которых учитель сможет сделать готовую лекцию для последующего применения.
Как создать свою платформу дистанционного образования
Главное преимущество WebRTC перед другими протоколами - чтобы начать транслировать видео через браузер, не требуется установки каких-то дополнительных драйверов и утилит. Учитель просто открывает браузер и начинает трансляцию для своего класса.
Но, разумеется, для организации полноценной платформы для дистанционного образования, нужно больше, чем просто браузер. Нужен понятный интерфейс, в котором ученики смогут поднять руку, оставить комментарий, поставить видео на паузу или включить перемотку (например, в случае опоздания на урок). Такую платформу, конечно, можно собрать “на коленке” из разных опенсорсных компонентов, но это многократно повысит сложность продукта и его поддержки. Кроме того, не факт, что все компоненты будут работать сообща и как по маслу.
Самый оптимальный и качественный вариант - пакетное решение для хранения, доставки и транскодирования видео. Таким решением может стать наш Flussonic Media Server. Конечно, необходимо будет добавить дополнительные функции, собрать понятный интерфейс, но это уже гораздо проще и эффективнее, чем собирать все компоненты с нуля.
Итак, мы делаем WebRTC, стандартный протокол передачи видео, нашим надёжным инструментом. А учителя и ученики могут получить надёжный и удобный канал связи, где не придётся переживать о плохом качестве интернета и возможных задержках в сигнале.