Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ VoIP-Π΄Π²ΠΈΠΆΠΎΠΊ Mediastreamer2. Π§Π°ΡΡ‚ΡŒ 3

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΡΡ‚Π°Ρ‚ΡŒΠΈ взят с ΠΌΠΎΠ΅Π³ΠΎ Π΄Π·Π΅Π½-ΠΊΠ°Π½Π°Π»Π°.

Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ VoIP-Π΄Π²ΠΈΠΆΠΎΠΊ Mediastreamer2. Π§Π°ΡΡ‚ΡŒ 3

Π£Π»ΡƒΡ‡ΡˆΠ°Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ написали ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ Π·Π²ΡƒΠΊ ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, заканчивая Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΊΡƒΡ‡Ρƒ. ΠŸΡ€ΠΈΡˆΠ»ΠΎ врСмя внСсти ΡΡΠ½ΠΎΡΡ‚ΡŒ Π² этом вопрос.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ схСма стала Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Π°, освобоТдСниС памяти Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с остановки ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ…. Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ схСмы ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ источник Ρ‚Π°ΠΊΡ‚ΠΎΠ², Ρ‚ΠΈΠΊΠ΅Ρ€ c ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ms_ticker_detach(). Π’ нашСм случаС ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΊΠ΅Ρ€ ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° voidsource:

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().

УдаляСм, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ Ρ€Π°Π·ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ c ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ms_filter_destroy():

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

Π”ΠΎΠ±Π°Π²ΠΈΠ² эти строки Π² наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎ ΠΎΡ‚ нас Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ строк ΠΊΠΎΠ΄Π° Ρ‡Ρ‚ΠΎ ΠΈ Π² Π΅Ρ‘ Π½Π°Ρ‡Π°Π»Π΅, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ Π² срСднСм Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ строки ΠΊΠΎΠ΄Π°. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρƒ Π½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ€Π°ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ количСству ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ². Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ тысячС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π² схСмС, Ρ‚ΠΎ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ добавится Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ тысячи строк Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ созданию ΠΈ ΠΈΡ… ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΡŽ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ мСдиастримСр. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, для компактности излоТСния, я Π±ΡƒΠ΄Ρƒ "Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ" это Π΄Π΅Π»Π°Ρ‚ΡŒ. Но Π²Ρ‹-Ρ‚ΠΎ Π½Π΅ Π·Π°Π±ΡƒΠ΄Π΅Ρ‚Π΅?

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ мСдиастримСра Π½Π΅ прСдусмотрСли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… срСдств ΠΏΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π΅Π½ΠΈΡŽ манипуляций с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ ΠΏΡ€ΠΈ сборкС/Ρ€Π°Π·Π±ΠΎΡ€ΠΊΠ΅ схСм. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ Ρ…Π΅Π»ΠΏΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт быстро Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ/Π²Ρ‹Π½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΈΠ· схСмы.

ΠœΡ‹ вСрнёмся ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ этого вопроса ΠΏΠΎΠ·ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° количСство Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π² Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… прСвысит ΠΏΠ°Ρ€Ρƒ дСсятков.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ собСрСм схСму измСритСля уровня сигнала ΠΈ научимся Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ измСрСния ΠΈΠ· Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. ΠžΡ†Π΅Π½ΠΈΠΌ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ измСрСния.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ