Studujeme VoIP engine Mediastreamer2. Část 3

Materiál článku je převzat z mého zenového kanálu.

Studujeme VoIP engine Mediastreamer2. Část 3

Zlepšujeme příklad tónového generátoru

V předchozím článku jsme napsali aplikaci tónového generátoru a pomocí ní jsme extrahovali zvuk z počítačového reproduktoru. Nyní se zaměříme na to, že naše aplikace při ukončení nevrací paměť zpět do haldy. Je čas objasnit tuto situaci.

Jakmile schéma přestane být potřeba, uvolnění paměti by mělo začít zastavením datového kanálu. K tomu je třeba od schématu odpojit zdroj taktování, ticker, pomocí funkce ms_ticker_detach(). V našem případě musíme odpojit ticker od vstupu filtru voidsource:

ms_ticker_detach(ticker, voidsource)

Mimochodem, po zastavení kanálu můžeme změnit jeho schéma a znovu ho uvést do provozu tím, že opět připojíme ticker.

Teď ho můžeme odstranit pomocí funkce ms_ticker_destroy():

ms_ticker_destroy(ticker)

Kanál je zastaven a můžeme začít rozebírat jeho části, oddělením filtrů. K tomu se používá funkce ms_filter_unlink():

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

účel argumentů je stejný jako u funkce ms_filter_link().

Odstraňujeme nyní již oddělené filtry pomocí ms_filter_destroy():

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

Přidáním těchto řádků do našeho příkladu získáme správné ukončení programu z hlediska správy paměti.

Jak vidíme, správné ukončení programu od nás vyžadovalo přidat přibližně stejný počet řádků kódu, jako na jeho začátku, a průměrně na každý filtr připadly čtyři řádky kódu. To znamená, že velikost kódu programu poroste úměrně počtu použitých filtrů v projektu. Pokud mluvíme o tisíci filtrech ve schématu, přidá se k vašemu kódu čtyři tisíce řádků rutinních operací pro jejich vytváření a ničení.

Nyní víte, jak správně ukončit program používající mediastreamer. V následujících příkladech, pro stručnost, budu "zapomínat" to dělat. Ale vy přece nezapomenete?

Vývojáři mediastreameru nepředpokládali softwarové nástroje pro usnadnění manipulací s filtry při sestavování/rozebírání schémat. Přesto existuje helper, který umožňuje rychlé zasunování/vytahování filtru ze schématu.

K této otázce se vrátíme později, když počet filtrů v našich příkladech přesáhne několik desítek.

V následující článku Sestavíme schéma měřiče úrovně signálu a naučíme se číst výsledky měření z filtru. Zhodnotíme přesnost měření.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster