Существует уже немало медиа сервисов, но люди продолжают их создавать. Решил и я заняться изобретением своего велосипеда.
Натолкнувшись на проект Kurento, понял что это то, что мне надо. Данная статья является частично переводом Kurento Documentatin, частично это заметки о моих экспериментах с KurentoTutorial. Надеюсь что разработчикам, приступающим к изучению данного вопроса, этот материал поможет быстрее освоить тему создания медиа сервисов.
Kurento c Esperanto переводится «поток». Разработан он в испанском университете Rey
Juan Carlos Universidad. Kurento — это WebRTC Media Server и набор клиентского API, который упрощает создание приложений для Web и смартфонов. Это могут быть сервисы видеотелефонии, видеоконференцсвязи, мониторинг картинок от видеокамер с распознаванием движения, может проигрывать аудио-видео контент из файла или из сети, распознавать лицо или автомобильные номера, и много чего еще. Код Kurento является опенсорсным, распространяется на условиях лицензии Apache License Version 2.0 и доступен на Гитхабе. Как утверждают создатели Kurento, он похож на Lego, из его программных блоков можно сделать много полезных приложений. Могут применяться блоки прямо «из коробки», но можно разрабатывать так же свои плагины при желании.
Примеры Web приложений приведены на Java, Node.js, JavaScript, хотя можно разрабатывать на любом языке, главное что бы обмен с Kurento Media Server-ом происходил на понятном ему Kurento-протоколе. Правда, для вышеупомянутых языков уже изобретены библиотеки, так что мороки будет меньше. А поскольку я изучаю Java и Spring, мои комментарии будут для этих примеров.
Всякий уважающий себя туториал начинается с приложения HelloWorld. Не стал исключением и данный. Но прежде чем написать первое приложение, нужно установить KMS — Kurento Media Server, который написан на C++ и устанавливается только на Ubuntu или Linux Mint, причем версия (на момент написания статьи) должна быть между 14 и 18. Я сразу установил Linux Mint 19 версию и KMS не установился, пришлось откатывать на 18-ю.
Ну вот установили систему, Intellij Idea, добавляем Kurento репозиторий и устанавливаем KMS:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5AFA7A83
sudo tee "/etc/apt/sources.list.d/kurento.list" >/dev/null <<EOF
# Kurento Media Server - Release packages
deb [arch=amd64] http://ubuntu.openvidu.io/6.7.1 $DISTRO kms6
EOF
sudo apt-get update
sudo apt-get install kurento-media-server
Стартуем KMS командой:
sudo service kurento-media-server start
Клонируем весь туториал для Java:
git clone https://github.com/Kurento/kurento-tutorial-java.git
Переходим в нужную директорию
cd kurento-tutorial-java/kurento-hello-world
Запускаем приложение под Maven или, как в моем случае, через Идею. После запуска Web приложения заходим через браузер Firefox по адресу localhost:8443/ видим страничку, где после нажатия на кнопку «Start» получаем что-нибудь похожее на это
В левом видео-элементе отображается картинка от Web камеры, а в правом та же картинка, но изображение пропущено через KMS петлей (loop-back).
На основании данного опыта делаем вывод: HelloWorld получается запустить почти всегда.
Теперь разберемся как это работает. На данном рисунке показана схема подключения частей нашего опыта.
Схематически выглядит так, как я описал. Логически наш опыт состоит из трех главных частей: размещенный в браузере JavaScript Client, только что скомпилированный Application Server и установленный в самом начале Kurento Media Server. Взаимодействие этих частей показано на рисунке ниже.
JavaScript Client отправляет Application Server — у текстовое сообщение «Start». Application Server выполняет три основные действия в этом приложении:
final MediaPipeline pipeline = kurento.createMediaPipeline();
user.setMediaPipeline(pipeline);
final WebRtcEndpoint webRtcEp =
new WebRtcEndpoint.Builder(pipeline).build();
user.setWebRtcEndpoint(webRtcEp);
webRtcEp.connect(webRtcEp);
Создает MediaPipeline, по которой будет передаваться медиа-трафик, создает WebRtcEndpoint-объект, обрабатывающий медиа-трафик и заворачивает передачу этого блока себе на прием.
На этом краткое ознакомление с приложением HelloWorld, использующим Kurento, завершаю. Желаю успешного создания медиа-сервисов.