Материал статьи взят с моего дзен-канала.  Статья 1
Статья 2
Статья 3
Статья 4
Статья 5
Статья 6
Статья 7
Статья 8
Статья 9
Статья 10
Статья 11
Статья 12
Статья 13 Книгу на основе статей можно свободно скачать по ссылке: pdf-файл. Эта статья является началом цикла статей о реалтайм обработке медиаданных с помощью движка Mediastreamer2.  В ходе изложения будут задействованы минимальные навыки работы в терминале Linux и программирования на языке Си. Mediastreamer2 это VoIP-движок, лежащий в основе популярного open-source проекта программного voip-телефона Linphone. В Linphone Mediastreamer2 реализует все функции связанные со звуком и видео. Подробный список возможностей движка можно увидеть на этой странице Mediastreamer. Исходный код находится здесь: GitLab. Далее в тексте, для удобства, вместо слова Mediastreamer2 будем использовать его русскую нотацию: "медиастример". История его создания не совсем ясна, но судя по его исходному коду, он ранее использовал библиотеку Glib, что как бы намекает нам, на возможное дальнее родство с GStreamer. В сравнении с которым медиастример выглядит более легковесным. Первая версия Linphone появилась в 2001 году, так что в настоящий момент медиастример существует и развивается без малого 20 лет. В основе медиастримера лежит архитектура называемая "Data flow" (поток данных). Пример такой архитектуры изображен на рисунке ниже.  В этой архитектуре алгоритм обработки данных задается не программным кодом, а схемой (графом) соединения функций, которые можно выстраивать в любом порядке. Эти функции называются фильтрами. Такая архитектура позволяет реализовать функционал обработки медиа в виде набора фильтров, соединенных в схему обработки и передачи RTP-трафика VoIP-телефона. Возможность соединять фильтры в произвольные схемы, простая разработка новых фильтров, реализация медиастримера в виде самостоятельной отдельной библиотеки, позволяют использовать его и в других проектах. Причём, проект может быть в области VoIP, так как имеется возможность добавлять фильтры сделанные своими руками. Поставляемая по умолчанию библиотека фильтров достаточно богата и как уже было сказано, может быть расширена фильтрами собственной разработки. Но сначала опишем готовые фильтры, которые поставляются вместе с медиастримером. Вот их список: AMR-NB кодер/декодер G.729 кодер/декодер iLBC кодер/декодер SILK кодер/декодер H.264 программный кодер H.264 V4L2 кодер/декодер с аппаратным ускорением После короткого описания фильтра показано название типа, которое используется при создании нового экземпляра данного фильтра. В дальнейшем изложении мы будем ссылаться на этот список. Теперь мы выполним установку медиастримера на компьютер и соберем наше первое приложение с ним. Установка Mediastremer2 на компьютер или виртуальную машину под управлением Ubuntu не требует особых навыков. Здесь и далее символом "$" будем обозначать приглашение оболочки shell для ввода команд. Т.е. если в листинге вы видите этот символ в начале строки, то значит это строка в которой показаны команды для выполнения в терминале. Предполагается, что во время выполнения действий описанных в этой статье, ваш компьютер имеет доступ к сети Интернет. Запускаем терминал и набираем команду: Будет запрошен пароль на внесение изменений, введите его и менеджер пакетов обновит свои базы. После этого нужно выполнить: Будут автоматически скачаны и установлены необходимые пакеты зависимостей и сама библиотека медиастримера. Общий размер скачанных deb-пакетов зависимостей составит примерно 35 МБайт. Подробности об установленном пакете можно узнать командой: Пример ответа: Устанавливаем компилятор Си и сопутствующие ему инструменты: Проверяем результат, запросив версию компилятора: Ответ должен быть примерно таким: Создаем в home папку для наших учебных проектов, назовем её mstutorial: Воспользуйтесь вашим любимым текстовым редактором и создайте файл Си-программы с именем mstest.c со следующим содержанием: Она выполняет инициализацию медиастримера, печатает приветствие и заканчивает выполнение. Сохраняем файл и компилируем тестовое приложение командой: Обратите внимание, что строка заключена в кавычки, которые находятся на клавиатуре там же где и буква "Ё". Если файл не содержит ошибок, то после компиляции в каталоге появится файл mstest. Запускаем программу: Результат будет таким: В данном листинге мы видим сообщения об ошибках, которые выводит библиотека ALSA, она используется для управления звуковой картой. Сами разработчики медиастримера считают, что это нормально. Мы в данном случае по неволе согласимся с ними. Теперь у нас все готово для работы с медиастримером. Мы установили библиотеку медиастримера, инструмент компиляции и с помощью пробного приложения проверили, что инструменты настроены, а медиастример успешно инициализируется. В следующей статье мы создадим приложение, которое соберет и запустит обработку звукового сигнала в цепочке из нескольких фильтров. Разработчик ПО для радиосвязи