Мы Изучаем Voip-Движок Mediastreamer2. Часть 3

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



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



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

В предыдущем статья Мы написали приложение тон-генератора и использовали его для извлечения звука из динамика компьютера.

Теперь мы заметим, что наша программа не возвращает память обратно в кучу после завершения.

Пришло время внести ясность в этот вопрос.

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

Для этого необходимо отключить источник тактирования и тикер от схемы с помощью функции ms_ticker_detach() .

В нашем случае мы должны отключить тикер от входа фильтра.

источник пустоты :

  
  
  
   

ms_ticker_detach(ticker, voidsource)

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

Теперь мы можем удалить его с помощью функции ms_ticker_destroy() :

ms_ticker_destroy(ticker)

Конвейер остановился и мы можем начать разбирать его части, отсоединяя фильтры.

Для этого используйте функцию ms_filter_unlink() :

ms_filter_unlink(voidsource, 0, dtmfgen, 0); ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);

назначение аргументов такое же, как и для функции ms_filter_link() .

Мы удаляем теперь разделенные фильтры, используя ms_filter_destroy() :

ms_filter_destroy(voidsource); ms_filter_destroy(dtmfgen); ms_filter_destroy(snd_card_write);

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

Как мы видим, для корректного завершения программы нам потребовалось добавить примерно то же количество строк кода, что и в начале, в среднем по четыре строки кода на фильтр.

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

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

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

В следующих примерах я ради компактности «забуду» это сделать.

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

Тем не менее, есть помощник, позволяющий быстро вставить/вынуть фильтр из схемы.

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

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

Оценим точность измерений.

Теги: #*nix #разработка Linux #с открытым исходным кодом #C++ #Системный анализ и проектирование #voip #voip #mediastreamer2 #mediastreamer2 #mediastreamer2 #mediastreamer2 #mediastreamer2 #mediastreamer #mediastreamer

Вместе с данным постом часто просматривают: