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

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

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

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ‚ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ установку Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ мСдиастримСра, инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, собрав ΠΏΡ€ΠΎΠ±Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

БСгодня ΠΌΡ‹ создадим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ смоТСт ΠΏΡ€ΠΎΠΏΠΈΠ»ΠΈΠΊΠ°Ρ‚ΡŒ Π½Π° Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Π΅ Ρ‚ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ сигнал. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π² ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π½ΠΈΠΆΠ΅ схСму Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠ³ΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°:

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

Π§ΠΈΡ‚Π°Π΅ΠΌ схСму слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, ΠΈΠΌΠ΅Π½Π½ΠΎ Π² этом Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Ρƒ нас двиТСтся ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Ρ‚Ρ€Π΅Π»ΠΊΠΈ Ρ‚ΠΎΠΆΠ΅ Π½Π° это Π½Π°ΠΌΠ΅ΠΊΠ°ΡŽΡ‚. ΠŸΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²Ρ‹ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΡƒΠΊΠ°Π·Π°Π½Π° Π΅Π³ΠΎ Ρ€ΠΎΠ»ΡŒ ΠΈ Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅ Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. Π‘Ρ‚Ρ€Π΅Π»ΠΊΠΈ, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ, это ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΊ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρƒ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС, Π²Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠ² Ρƒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΌΠ°Π»ΠΎ.

НачинаСтся всС с источника Ρ‚Π°ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚ Ρ‚Π΅ΠΌΠΏ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ происходит обсчСт Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ…. По Π΅Π³ΠΎ Ρ‚Π°ΠΊΡ‚Ρƒ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Ρƒ Π½Π΅Π³ΠΎ Π½Π° Π²Ρ…ΠΎΠ΄Π΅. И выставляСт Π±Π»ΠΎΠΊΠΈ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄ β€” Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Π‘Π½Π°Ρ‡Π°Π»Π° выполняСт обсчСт самый Π±Π»ΠΈΠΆΠ½ΠΈΠΉ ΠΊ источнику Ρ‚Π°ΠΊΡ‚ΠΎΠ² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Π·Π°Ρ‚Π΅ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΊ Π΅Π³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π°ΠΌ (Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ) ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ послСдний Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ обсчСт, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ останавливаСтся Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΏΠΎΠΊΠ° Π½Π΅ поступит Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚Π°ΠΊΡ‚. Π’Π°ΠΊΡ‚Ρ‹, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ 10 миллисСкунд.

ВСрнСмся ΠΊ нашСй схСмС. Π’Π°ΠΊΡ‚Ρ‹ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π½Π° Π²Ρ…ΠΎΠ΄ источника Ρ‚ΠΈΡˆΠΈΠ½Ρ‹, это Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, занят Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Π°ΠΊΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° своСм Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π±Π»ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… содСрТащих Π½ΡƒΠ»ΠΈ. Если Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ этот Π±Π»ΠΎΠΊ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… отсчСтов, Ρ‚ΠΎ это Π½ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅ ΠΊΠ°ΠΊ Ρ‚ΠΈΡˆΠΈΠ½Π°. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд каТСтся странным, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с Ρ‚ΠΈΡˆΠΈΠ½ΠΎΠΉ β€” вСдь Π΅Ρ‘ нСльзя ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ, Π½ΠΎ эти Π±Π»ΠΎΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠ³ΠΎ сигнала. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эти Π±Π»ΠΎΠΊΠΈ ΠΊΠ°ΠΊ чистый лист Π±ΡƒΠΌΠ°Π³ΠΈ, записывая Π² Π½ΠΈΡ… Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Π΅ отсчСты. Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ своСм состоянии, Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΈ просто пробрасываСт Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π±Π»ΠΎΠΊΠΈ Ρ‚ΠΈΡˆΠΈΠ½Ρ‹ проходят Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· всю схСму слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, попадая Π² Π·Π²ΡƒΠΊΠΎΠ²ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ. ΠšΠΎΡ‚ΠΎΡ€Π°Ρ Π±Π΅Π·Π·Π²ΡƒΡ‡Π½ΠΎ Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΊ Π΅Ρ‘ Π²Ρ…ΠΎΠ΄Ρƒ.

Но всС мСняСтся, Ссли Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½Π° воспроизвСдСниС Π·Π²ΡƒΠΊΠ°, ΠΎΠ½ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Π΅ отсчСты ΠΈ Π·Π°ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΈΠΌΠΈ отсчСты Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠ°Ρ… ΠΈ выставляСт ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄. Звуковая ΠΊΠ°Ρ€Ρ‚Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π²ΡƒΠΊ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° которая Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ схСму Ρ€Π°Π±ΠΎΡ‚Ρ‹:

/* Π€Π°ΠΉΠ» mstest2.c */
#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/mssndcard.h>
int main()
{
    ms_init();

    /* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ экзСмпляры Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ². */
    MSFilter  *voidsource = ms_filter_new(MS_VOID_SOURCE_ID);
    MSFilter  *dtmfgen = ms_filter_new(MS_DTMF_GEN_ID);
    MSSndCard *card_playback = ms_snd_card_manager_get_default_card(ms_snd_card_manager_get());
    MSFilter  *snd_card_write = ms_snd_card_create_writer(card_playback);

    /* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Ρ‚ΠΈΠΊΠ΅Ρ€. */
    MSTicker *ticker = ms_ticker_new();

    /* БоСдиняСм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ. */
    ms_filter_link(voidsource, 0, dtmfgen, 0);
    ms_filter_link(dtmfgen, 0, snd_card_write, 0);

   /* ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ источник Ρ‚Π°ΠΊΡ‚ΠΎΠ². */
   ms_ticker_attach(ticker, voidsource);

   /* Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€. */
   char key='1';
   ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY, (void*)&key);

   /* Π”Π°Π΅ΠΌ, врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΎΠΉ.*/
   ms_sleep(2);   
}

ПослС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ мСдиастримСра, выполняСтся созданиС Ρ‚Ρ€Π΅Ρ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²: voidsource, dtmfgen, snd_card_write. БоздаСтся источник Ρ‚Π°ΠΊΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сигнала.

Π—Π°Ρ‚Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ соСдинСниС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² Π² соотвСтствии с нашСй схСмой, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ источник Ρ‚Π°ΠΊΡ‚ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ послСдним, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ послС этого сразу начнСтся Ρ€Π°Π±ΠΎΡ‚Π° схСмы. Если ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ источник Ρ‚Π°ΠΊΡ‚ΠΎΠ² ΠΊ Π½Π΅Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½ΠΎΠΉ схСмС, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ случится Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ мСдиастримСр Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, Ссли ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ всС Π²Ρ…ΠΎΠ΄Ρ‹ ΠΈΠ»ΠΈ всС Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹ "висят Π² Π²ΠΎΠ·Π΄ΡƒΡ…Π΅" (Π½Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹).

Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ms_filter_link(src, src_out, dst, dst_in)

Π³Π΄Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€-источник, Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ‹Ρ…ΠΎΠ΄Π° источника (ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄Ρ‹ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹ Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ начиная с нуля). Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ, Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ β€” Π½ΠΎΠΌΠ΅Ρ€ Π²Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°.

ВсС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ соСдинСны ΠΈ послСдним ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ источник Ρ‚Π°ΠΊΡ‚ΠΎΠ² (Π΄Π°Π»Π΅Π΅ просто Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΈΠΊΠ΅Ρ€ΠΎΠΌ). ПослС Ρ‡Π΅Π³ΠΎ наша звуковая схСма запускаСтся Π² Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½ΠΎ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΏΠΎΠΊΠ° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡΠ»Ρ‹ΡˆΠ½ΠΎ β€” Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΈ просто пробрасываСт Ρ‡Π΅Ρ€Π΅Π· сСбя Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с Ρ‚ΠΈΡˆΠΈΠ½ΠΎΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ Ρ‚ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ сигнала, Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΡƒΡ‚ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ (DTMF) сигнал ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ "1". Для этого ΠΌΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ms_filter_call_method() Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ MS_DTMF_GEN_PLAY, пСрСдавая Π΅ΠΌΡƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ воспроизводимый сигнал.

ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

$ gcc mstest2.c -o mstest2 `pkg-config mediastreamer --libs --cflags`

И Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ:

$ ./mstest2

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ ΡƒΡΠ»Ρ‹ΡˆΠΈΡ‚Π΅ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠΉ сигнал состоящий ΠΈΠ· Π΄Π²ΡƒΡ… Ρ‚ΠΎΠ½ΠΎΠ².

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

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