Pull to refresh
  • by relevance
  • by date
  • by rating

Изучаем VoIP-движок Mediastreamer2. Часть 1

Open source *System Analysis and Design **nix *C *Sound
Sandbox
Tutorial

Материал статьи взят с моего дзен-канала.



Все статьи цикла


Статья 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.

Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Views 2.7K
Comments 0

Изучаем VoIP-движок Mediastreamer2. Часть 2

Open source **nix *C *
Tutorial

Материал статьи взят с моего дзен-канала.



Создаем тональный генератор


В предыдущей статье мы выполнили установку библиотеки медиастримера, инструментов разработки и проверили их функционирование, собрав пробное приложение.


Сегодня мы создадим приложение, которое сможет пропиликать на звуковой карте тональный сигнал. Чтобы решить эту задачу нам нужно соединить фильтры в показанную ниже схему звукового генератора:


Схема звукового генератора

Читать дальше →
Total votes 9: ↑9 and ↓0 +9
Views 1.9K
Comments 0

Изучаем VoIP-движок Mediastreamer2. Часть 3

Open source *System Analysis and Design **nix *C *Development for Linux *
Tutorial

Материал статьи взят с моего дзен-канала.



Улучшаем пример тонального генератора


В предыдущей статье мы написали приложение тонального генератора и с его помощью извлекли звук из динамика компьютера. Теперь мы обратим внимание на то, что наша программа, заканчивая работу, не возвращает память обратно в кучу. Пришло время внести ясность в этом вопрос.

Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Views 899
Comments 0

Изучаем VoIP-движок Mediastreamer2. Часть 5

Open source *System Analysis and Design **nix *C *Development for Linux *
Tutorial

Материал статьи взят с моего дзен-канала.



Обнаружитель тонального сигнала


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



В старые времена, когда не в каждой семье был телевизор, и у половины из них каналы переключались с помощью пассатижей, в обзорах иностранной технической прессы появилась интригующая новость, что один и производителей телевизоров снабдил свои аппараты пультом дистанционного беспроводного управления. Из подробностей было известно, что пульт работает без батареек благодаря использованию необычного подхода — пульт был механический и представлял из себя гибрид музыкального инструмента — металлофона и револьвера. В барабане револьвера находились металлические цилиндры, разные по длине, и когда боёк ударял по одному из них, цилиндр начинал звенеть на своей собственной частоте. Предположительно на ультразвуке. Электроника в телевизоре слышала этот сигнал и определив его частоту выполняла соответствующее действие — переключить канал, изменить громкость, выключить телевизор.


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

Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Views 742
Comments 0

Изучаем VoIP-движок Mediastreamer2. Часть 8

Open source **nix *C *
Tutorial

Материал статьи взят с моего дзен-канала.



Структура RTP-пакета


В прошлой статье мы с помощью TShark выполнили захват RTP-пакетов, которыми обменивались наши приемник и передатчик. Ну а в этой мы раскрасим элементы пакета в разные цвета и поговорим об их назначении.


Взглянем на тот же пакет, но уже с подкрашенными полями и с поясняющими надписями:

Читать дальше →
Total votes 9: ↑8 and ↓1 +7
Views 1.9K
Comments 0

Изучаем VoIP-движок Mediastreamer2. Часть 10

Open source **nix *C *
Tutorial

Материал статьи взят с моего дзен-канала.



В прошлой статье мы сделали дуплексное переговорное устройство, выполняющее обмен звуковым сигналом через дуплексную RTP-сессию. В этой статье мы научимся писать фильтры и добавим сделанный своими руками фильтр в сделанное своими руками переговорное устройство.


Разрабатываем плагин



Плагины в медиастримере, как и во многих других программах, используются для расширения функционала без необходимости перекомпиляции самого медиастримера.


Чтобы использовать плагин в своей программе, вы с помощью include должны подключить заголовочный файл плагина. В теле программы, с помощью функции у ms_filter_register() выполнить регистрацию нового фильтра. Естественно, ваша программа и и исходник плагина должны быть скомпилированы и собраны в одно приложение.


Теперь обратимся к написанию плагина. Все фильтры медиастримера и плагины подчиняются в написании общему канону, что значительно облегчает понимание устройства очередного фильтра, который вы захотели изучить. Поэтому далее, чтобы не размножать сущности, плагины буду называть фильтрами.

Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Views 1.1K
Comments 0

Изучаем VoIP-движок Mediastreamer2. Часть 11

Open source *System Analysis and Design **nix *C *Sound
Tutorial

Материал статьи взят с моего дзен-канала.



Механизм перемещения данных


  • Блок данных dblk_t
  • Сообщение mblk_t
  • Функции работы с сообщениями mblk_t
  • Очередь queue_t
  • Функции работы с очередями queue_t
  • Соединение фильтров
  • Сигнальная точка графа обработки данных
  • Закулисная деятельность тикера
  • Буферизатор MSBufferizer
  • Функции работы с MSBufferizer

В прошлой статье мы разработали свой собственный фильтр. Эту статью мы посветим устройству внутреннего механизма перемещения данных между фильтрами медиастримера. Это позволит в дальнейшем писать изощренные фильтры с меньшими усилиями.

Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Views 695
Comments 0

Изучаем VoIP-движок Mediastreamer2. Часть 12

Open source **nix *C *Development for Linux *Sound
Tutorial

Материал статьи взят с моего дзен-канала.



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


Отладка крафтовых фильтров


После того, как мы в предыдущей статье рассмотрели механизм перемещения данных в медиастримере будет логично поговорить о скрывающихся в нем опасности. Одна из особенностей принципа "data flow" состоит в том, что выделение памяти из кучи происходит в фильтрах, которые находятся у истоков потока данных, а освобождение памяти с возвращением в кучу делают уже фильтры, расположенные в конце пути потока. Кроме этого, создание новых данных и их уничтожение может происходить где-то в промежуточных точках. В общем случае, освобождение памяти выполняет не тот фильтр, что создал блок данных.

Читать дальше →
Total votes 3: ↑3 and ↓0 +3
Views 611
Comments 1

Изучаем VoIP-движок Mediastreamer2. Часть 13, заключительная

Open source **nix *C *Development for Linux *Sound
Tutorial

Материал статьи взят с моего дзен-канала.



Все статьи цикла


Статья 1
Статья 2
Статья 3
Статья 4
Статья 5
Статья 6
Статья 7
Статья 8
Статья 9
Статья 10
Статья 11
Статья 12
Статья 13


Книгу на основе статей можно свободно скачать по ссылке: pdf-файл.


В прошлой статье, мы рассмотрели вопросы отладки крафтовых фильтров, связанные с перемещением данных.


Эта статья будет заключительной в цикле и её мы посвятим, как неоднократно обещалось, вопросам оценки нагрузки на тикер и способы борьбы с чррезмерной вычислительной нагрузкой в медиастримере.

Читать дальше →
Total votes 4: ↑4 and ↓0 +4
Views 812
Comments 0