ื—ืงืจ ืžื ื•ืข ื”-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

ืœืื—ืจ ื”ืคืขืœืช ื”ืชื•ื›ื ื™ืช, ืชืฉืžืข ืื•ืช ืงื•ืœ ืงืฆืจ ื”ืžื•ืจื›ื‘ ืžืฉื ื™ ืฆืœื™ืœื™ื ื‘ืจืžืงื•ืœ ื”ืžื—ืฉื‘.

ื‘ื ื™ื ื• ื•ื”ืฉืงื ื• ืืช ืžืขื’ืœ ื”ืกืื•ื ื“ ื”ืจืืฉื•ืŸ ืฉืœื ื•. ืจืื™ื ื• ืื™ืš ื™ื•ืฆืจื™ื ืžื•ืคืขื™ ืกื™ื ื•ืŸ, ืื™ืš ืžื—ื‘ืจื™ื ืื•ืชื ื•ืื™ืš ืงื•ืจืื™ื ืœืฉื™ื˜ื•ืช ืฉืœื”ื. ืœืžืจื•ืช ืฉืื ื—ื ื• ืžืจื•ืฆื™ื ืžื”ื”ืฆืœื—ื” ื”ืจืืฉื•ื ื™ืช ืฉืœื ื•, ืื ื—ื ื• ืขื“ื™ื™ืŸ ืฆืจื™ื›ื™ื ืœืฉื™ื ืœื‘ ืœืขื•ื‘ื“ื” ืฉื”ืชื•ื›ื ื™ืช ืฉืœื ื• ืœื ืžืฉื—ืจืจืช ืืช ื”ื–ื™ื›ืจื•ืŸ ืฉื”ื•ืงืฆื” ืœืคื ื™ ื”ื™ืฆื™ืื”. ื‘ื‘ื ัั‚ะฐั‚ัŒะต ื ืœืžื“ ืœื ืงื•ืช ืื—ืจื™ื ื•.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”