Обзор медиасервера Kurento

author

Kurento — это бесплатный WebRTC медиасервер с открытым исходным кодом. Он распределяет медиапотоки между пользователями, транскодирует видео, делает запись.

В предыдущих статьях мы рассматривали архитектуру групповых видеочатов. Решение с использованием медиасервера в таких случаях самое надежное, но значительно увеличивает накладные расходы на сервер.

Если мы делаем групповой чат без медиасервера, то вынуждены либо соединить каждого клиента с каждым, либо выбрать одного клиента и передавать поток через него.

Когда видео транслирует один клиент, например в приложение для проведения вебинаров, можно передавать потоки по цепочке между всеми клиентами.

Но у этих решений есть недостатки, которые станут критичными при большом числе подключенных клиентов.

  • Лишняя нагрузка на ресурсы и трафик клиента из-за дублирования исходящего потока.
  • Низкое качество видео при большом количестве пользователей.
  • Реализация записи на клиенте — более трудоемкая задача. Если мы хотим сохранить файл на сервере, пользователю придется ждать окончания его загрузки.

Медиасервер решает эти проблемы. Он управляет, маршрутизирует и записывает медиапотоки. С ним наше приложение будет работать быстрее у пользователей.

Kurento и другие медиасервера

Существует несколько медиа серверов, которые поддерживают WebRTC.

Wowza Media Server

Wowza Media Server с 2004 года используется вместе с Flash. Передача медиапотоков осуществляется по RTMP протоколу. Летом 2016 года у Wowza Media Server вышло обновление с поддержкой WebRTC. Новая версия находится в стадии beta-тестирования. Для использования Wowza Media Server без ограничений необходима платная лицензия.

Jitsi Videobridge

Jitsi Videobridge является частью большого проекта Jitsi, который начал разрабатываться еще в 2005 году, как SIP-коммутатор. В 2014 разработчики добавили поддержку WebRTC.

Jitsi Videobridge — это маршрутизатор WebRTC потоков. Он перенаправляет медиа потоки между участниками чата. Jitsi Videobridge обладает меньшей функциональностью по сравнению с медиасерверами. Решения на его основе требуют меньше системных ресурсов. В отличие от медиасерверов Jitsi Videobridge не умеет записывать, транскодировать или смешивать медиапотоки вместе.

Kurento Media Server

Kurento — это бесплатный WebRTC медиа сервер, который начал разрабатываться в мадридском университете Rey Juan Carlos в 2010 году. В его основе лежала простая идея — создать медиасервер с открытым исходным кодом, который будет состоять из подключаемых модулей, обрабатывающих медиа потоки, а также предоставить простое API разработчикам приложений.

За последний год Kurento скачали более 20 000 раз и открыли на его основе более 200 проектов на GitHub. В сентябре 2016 года команды Twilio и Kurento объединились и теперь совместно работают над разработкой новой функциональности и повышением стабильности работы.

Возможности

Kurento Media Server предоставляет следующий функционал из коробки:

Этот функционал обеспечивают встроенные модули.

Разработчик может написать собственный модуль и подключить его к Kurento. Также в состав Kurento входит набор клиентских API для управления медиа сервером.

Kurento Media Server и его компоненты написаны на C/C++ и оптимизированы с точки зрения потребления ресурсов системы. Для фильтрации используются библиотеки Gstreamer или OpenCV. Один экземпляр Kurento Media Server (8 ядер, 2.4 ГГц, 16Гб RAM) может поддерживать порядка 1000 одновременных соединений пользователей.

Как работать с Kurento

Основной идеей Kurento являются медиа элементы — это программные блоки, каждый из которых выполняет одну определенную функцию. Медиа элемент имеет вход и выход и выполняет операцию над фреймами видео или частями аудио.

Kurento содержит множество различных медиа элементов в комплекте. Например, медиа элемент WebRtcEndpoint используется для получения и отправления WebRTC медиа потоков, а медиа элемент RecorderEndpoint записывает все входящие медиа потоки в файловую систему.

Архитектура приложений Kurento

Архитектура приложений Kurento состоит из двух уровней:

Медиа уровень непосредственно передает данные медиа потоков и осуществляет кодирование/декодирование.

Сигнальный уровень реализует бизнес-логику приложения — определяет, какие медиа элементы обрабатывают медиа потоки, управляет коммуникациями между компонентами системы и связывает клиента и Kurento.

Kurento API

Сигнальный уровень управляет медиасервером посредством Kurento API. Для Node.js и Java есть официальные SDK. Можно написать свое SDK под любую платформу, так как коммуникация между сигнальным уровнем и Kurento Media Server происходит через протокол Kurento, который основан на WebSockets и JSON-RPC. Например, мы можем управлять медиасервером напрямую и из браузера, но это не самое гибкое решение. С помощью отдельного сигнального сервера приложение масштабируется и, в зависимости от нагрузки, подключать пользователей к разным экземплярам Kurento Media Server. Этого не получилось бы при управлении медиасервером с клиента.

Медиа элементы

Разработка приложений с Kurento подобна игре в конструктор Lego — необходимо собрать из медиа элементов цепочку. Разработчик определяет, какие медиа элементы ему нужны, и собирает их в нужной последовательности. Соединяются элементы одинаково — у элемента-источника вызывается метод connect, а его аргументом является элемент, который нужно добавить в цепочку следующим:

sourceMediaElement.connect(sinkMediaElement)

Пример

Для начала работы нужно установить медиа сервер. Создадим приложение, которое запишет WebRTC потоки на сервере. Для этого понадобится два медиа элемента: WebRtcEndpoint и RecorderEndpoint. При подключении пользователя, мы получим его медиапоток из WebRTCEndpoint и запишем в видеофайл на сервере с помощью RecorderEndpoint.

Медиа элементы соединяем так:

WebRtcEndpoint.connect(RecorderEnpoint)

Возможности медиасервера не ограничены видеочатами или записью — можно передать по WebRTC на клиент видео с сетевой камеры или поток с SIP сервера для VoIP звонков. В документации Kurento много примеров на Node.js и Java, которые подойдут для более подробного изучения работы с медиасервером.

  1. Чат один-к-одному
  2. Вебинар
  3. Групповой видеочат

Итоги

Kurento является решением для реализации сложных мультимедийных проектов в области видеотехнологий.

Kurento включает обширный набор инструментов для разработки и предоставляет разработчику возможность дополнять и расширять его.

После объединения с командой Twilio у Kurento появились большие перспективы развития в сторону гибкой облачной масштабируемой медиа системы.

Kurento является стабильной и зрелой технологией для создания приложений. Мы используем Kurento в нескольких наших проектах, один из которых — система для онлайн образования, призер DC Tech Day 2014 — BrainCert.

Плюсануть
Отправить
Поделиться