Mediastreamer2 VoIP เชเชจเซเชœเชฟเชจเชจเซ€ เชถเซ‹เชงเช–เซ‹เชณ. เชญเชพเช— 4

เชฒเซ‡เช–เชจเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เชฎเชพเชฐเชพ เชชเชฐเชฅเซ€ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡ เชเซ‡เชจ เชšเซ‡เชจเชฒ.

เชธเชฟเช—เซเชจเชฒ เชฒเซ‡เชตเชฒ เชฎเซ€เชŸเชฐ เชฌเชจเชพเชตเชตเซเช‚

เช›เซ‡เชฒเซเชฒเชพเชฎเชพเช‚ เชฒเซ‡เช– เช…เชฎเซ‡ เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธเชจเชพ เชฏเซ‹เช—เซเชฏ เชธเชฎเชพเชชเซเชคเชฟเชจเซ€ เชธเซเชชเชทเซเชŸเชคเชพ เช•เชฐเซ€ เช›เซ‡.

เช† เชฒเซ‡เช–เชฎเชพเช‚ เช†เชชเชฃเซ‡ เชธเชฟเช—เซเชจเชฒ เชฒเซ‡เชตเชฒ เชฎเซ€เชŸเชฐ เชธเชฐเซเช•เชฟเชŸ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเซ€เชถเซเช‚ เช…เชจเซ‡ เชซเชฟเชฒเซเชŸเชฐเชฎเชพเช‚เชฅเซ€ เชฎเชพเชชเชจ เชชเชฐเชฟเชฃเชพเชฎ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเช‚เชšเชตเซเช‚ เชคเซ‡ เชถเซ€เช–เซ€เชถเซเช‚. เชšเชพเชฒเซ‹ เชฎเชพเชชเชจเชจเซ€ เชšเซ‹เช•เชธเชพเชˆเชจเซเช‚ เชฎเซ‚เชฒเซเชฏเชพเช‚เช•เชจ เช•เชฐเซ€เช.

เชฎเซ€เชกเชฟเชฏเชพ เชธเซเชŸเซเชฐเซ€เชฎเชฐ เชฆเซเชตเชพเชฐเชพ เชชเซ‚เชฐเชพ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชซเชฟเชฒเซเชŸเชฐเซเชธเชจเชพ เชธเชฎเซ‚เชนเชฎเชพเช‚ เชซเชฟเชฒเซเชŸเชฐ, MS_VOLUME เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡, เชœเซ‡ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชชเชธเชพเชฐ เชฅเชคเชพ เชธเชฟเช—เซเชจเชฒเชจเชพ RMS เชธเซเชคเชฐเชจเซ‡ เชฎเชพเชชเชตเชพ, เชธเชฟเช—เซเชจเชฒเชจเซ‡ เช“เช›เซเช‚ เช•เชฐเชตเชพ เช…เชจเซ‡ เช˜เชฃเชพเช‚ เช‰เชชเชฏเซ‹เช—เซ€ เช…เชจเซ‡ เช…เชฃเชงเชพเชฐเซเชฏเชพ เช•เชพเชฐเซเชฏเซ‹ เช•เชฐเชตเชพ เชธเช•เซเชทเชฎ เช›เซ‡. เช…เชฎเซ‡ เชชเช›เซ€เชฅเซ€ เช† เชซเชฟเชฒเซเชŸเชฐ เชฎเชพเชŸเซ‡ เช†เช–เซ‹ เชฒเซ‡เช– เชธเชฎเชฐเซเชชเชฟเชค เช•เชฐเซ€เชถเซเช‚. เชชเชฐเช‚เชคเซ เช…เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เชคเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฎเซ€เชŸเชฐ เชคเชฐเซ€เช•เซ‡ เช•เชฐเซ€เชถเซเช‚.

เช…เชฎเซ‡ เชธเชฟเช—เซเชจเชฒ เชธเซเชคเซเชฐเซ‹เชค เชคเชฐเซ€เช•เซ‡ เชŸเซ‹เชจ เชœเชจเชฐเซ‡เชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚, เชœเซ‡เชฎเชพเช‚เชฅเซ€ เชธเชฟเช—เซเชจเชฒ MS_VOLUME เชซเชฟเชฒเซเชŸเชฐ เชชเชฐ เชฎเซ‹เช•เชฒเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เชœเซ‡เชฎเชพเช‚เชฅเซ€ เชธเชพเช‰เชจเซเชก เช•เชพเชฐเซเชก เชœเซ‹เชกเชพเชฏเซ‡เชฒ เช›เซ‡ เชคเซ‡ เช†เช‰เชŸเชชเซเชŸ เชชเชฐ.

เช† เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เช…เชฎเซ‡ เชœเชจเชฐเซ‡เชŸเชฐ เชซเชฟเชฒเซเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเซ‹เชกเซ‹ เช…เชฒเช— เชฎเซ‹เชกเชฎเชพเช‚ เช•เชฐเซ€เชถเซเช‚ - เชคเซ‡ เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชธเชฟเช‚เช—เชฒ-เชŸเซ‹เชจ เชธเชฟเช—เซเชจเชฒ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชถเซ‡, เชเชŸเชฒเซ‡ เช•เซ‡. เชเช• เชธเชฟเช—เซเชจเชฒ เชœเซ‡เชฎเชพเช‚ เชฎเชพเชคเซเชฐ เชเช• เชœ เชธเชฟเชจเซเชธเซ‹เช‡เชกเชฒ เช“เชธเชฟเชฒเซ‡เชถเชจ เชนเซ‹เชฏ เช›เซ‡.

เช†เชตเชฐเซเชคเชจ เช…เชจเซ‡ เช•เช‚เชชเชจเชตเชฟเชธเซเชคเชพเชฐ เช‰เชชเชฐเชพเช‚เชค, เช…เชฎเชจเซ‡ เชคเซ‡ เชธเชฎเชฏ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡ เช•เซ‡ เชœเซ‡ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชธเชฟเช—เซเชจเชฒ เชœเชจเชฐเซ‡เชŸ เชฅเชถเซ‡; เชœเชจเชฐเซ‡เชŸเชฐ เชชเชฐ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, MSDtmfGenCustomTone เชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡:

struct _MSDtmfGenCustomTone{
    char tone_name[8];     /* ะขะตะบัั‚ะพะฒะพะต ะฝะฐะทะฒะฐะฝะธะต ัะธะณะฝะฐะปะฐ ะธะท 8 ะฑัƒะบะฒ.*/
    int duration;          /* ะ”ะปะธั‚ะตะปัŒะฝะพัั‚ัŒ ัะธะณะฝะฐะปะฐ ะฒ ะผะธะปะปะธัะตะบัƒะฝะดะฐั….*/
    int frequencies[2];    /* ะŸะฐั€ะฐ ั‡ะฐัั‚ะพั‚ ะธะท ะบะพั‚ะพั€ั‹ั… ะดะพะปะถะตะฝ ัะพัั‚ะพัั‚ัŒ ะฒั‹ั…ะพะดะฝะพะน ัะธะณะฝะฐะป. */
    float amplitude;       /* ะะผะฟะปะธั‚ัƒะดะฐ ั‚ะพะฝะพะฒ, 1.0 ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒะตั‚ ัƒั€ะพะฒะฝัŽ 0 ะดะ‘ ะพั‚ ะผะธะปะปะธะฒะฐั‚ั‚ะฐ ะฝะฐ ะฝะฐะณั€ัƒะทะบะต 600 ะžะผ.*/
    int interval;          /* ะŸะฐัƒะทะฐ ะฒ ะผะธะปะปะธัะตะบัƒะฝะดะฐั… ะฟะตั€ะตะด ะฝะฐั‡ะฐะปะพะผ ะฟะพะฒั‚ะพั€ะฝะพะณะพ ะฟั€ะพะธะณั€ั‹ะฒะฐะฝะธั ัะธะณะฝะฐะปะฐ.*/
    int repeat_count;      /* ะšะพะปะธั‡ะตัั‚ะฒะพ ะฟะพะฒั‚ะพั€ะพะฒ.*/
};
typedef struct _MSDtmfGenCustomTone MSDtmfGenCustomTone;

เชœเชจเชฐเซ‡เชŸเชฐ เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชคเซ‡เชจเซ€ MS_DTMF_GEN_PLAY_CUSTOM เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚.

เชธเชฟเช—เซเชจเชฒ เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช—เชจเซ‹ เชฌเซเชฒเซ‹เช• เชกเชพเชฏเชพเช—เซเชฐเชพเชฎ:

Mediastreamer2 VoIP เชเชจเซเชœเชฟเชจเชจเซ€ เชถเซ‹เชงเช–เซ‹เชณ. เชญเชพเช— 4

เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช•เซ‹เชก เชœเซ‡ เช† เชฏเซ‹เชœเชจเชพเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡ เชคเซ‡ เชจเซ€เชšเซ‡ เชฆเชฐเซเชถเชพเชตเซ‡เชฒ เช›เซ‡.

/* ะคะฐะนะป mstest3.c */

#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/mssndcard.h>
#include <mediastreamer2/msvolume.h>

int main()
{
    ms_init();
    /* ะกะพะทะดะฐะตะผ ัะบะทะตะผะฟะปัั€ั‹ ั„ะธะปัŒั‚ั€ะพะฒ. */
    MSFilter  *voidsource=ms_filter_new(MS_VOID_SOURCE_ID);
    MSFilter  *dtmfgen=ms_filter_new(MS_DTMF_GEN_ID);
    MSFilter  *volume=ms_filter_new(MS_VOLUME_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, volume, 0);
    ms_filter_link(volume, 0, snd_card_write, 0);

    /* ะŸะพะดะบะปัŽั‡ะฐะตะผ ะธัั‚ะพั‡ะฝะธะบ ั‚ะฐะบั‚ะพะฒ. */
    ms_ticker_attach(ticker,voidsource);

    MSDtmfGenCustomTone dtmf_cfg;

   /* ะฃัั‚ะฐะฝะฐะฒะปะธะฒะฐะตะผ ะธะผั ะฝะฐัˆะตะณะพ ัะธะณะฝะฐะปะฐ, ะฟะพะผะฝั ะพ ั‚ะพะผ, ั‡ั‚ะพ ะฒ ะผะฐััะธะฒะต ะผั‹ ะดะพะปะถะฝั‹
    ะพัั‚ะฐะฒะธั‚ัŒ ะผะตัั‚ะพ ะดะปั ะฝัƒะปั, ะบะพั‚ะพั€ั‹ะน ะพะฑะพะทะฝะฐั‡ะฐะตั‚ ะบะพะฝะตั† ัั‚ั€ะพะบะธ. */
    strncpy(dtmf_cfg.tone_name, "busy", sizeof(dtmf_cfg.tone_name));
    dtmf_cfg.duration=1000;
    dtmf_cfg.frequencies[0]=440; /* ะ‘ัƒะดะตะผ ะณะตะฝะตั€ะธั€ะพะฒะฐั‚ัŒ ะพะดะธะฝ ั‚ะพะฝ, ั‡ะฐัั‚ะพั‚ัƒ ะฒั‚ะพั€ะพะณะพ ั‚ะพะฝะฐ ัƒัั‚ะฐะฝะพะฒะธะผ ะฒ 0.*/
    dtmf_cfg.frequencies[1]=0;
    dtmf_cfg.amplitude=1.0; /* ะขะฐะบะพะน ะฐะผะฟะปะธั‚ัƒะดะต ัะธะฝัƒัะฐ ะดะพะปะถะตะฝ ัะพะพั‚ะฒะตั‚ัั‚ะฒะพะฒะฐั‚ัŒ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะธะทะผะตั€ะตะฝะธั 0.707.*/
    dtmf_cfg.interval=0.;
    dtmf_cfg.repeat_count=0.;

   /* ะ’ะบะปัŽั‡ะฐะตะผ ะทะฒัƒะบะพะฒะพะน ะณะตะฝะตั€ะฐั‚ะพั€. */
   ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY_CUSTOM, (void*)&dtmf_cfg);

   /* ะ”ะฐะตะผ, ะฒั€ะตะผั ะฟะพะปะพะฒะธะฝัƒ ัะตะบัƒะฝะดั‹, ั‡ั‚ะพะฑั‹ ะธะทะผะตั€ะธั‚ะตะปัŒ ะฝะฐะบะพะฟะธะป ะดะฐะฝะฝั‹ะต. */
   ms_usleep(500000);

   /* ะงะธั‚ะฐะตะผ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะธะทะผะตั€ะตะฝะธั. */
  float level=0;
   ms_filter_call_method(volume, MS_VOLUME_GET_LINEAR,&level);
   printf("ะะผะฟะปะธั‚ัƒะดะต ัะธะฝัƒัะฐ %f ะฒะพะปัŒั‚  ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒะตั‚ ัั€ะตะดะฝะตะบะฒะฐะดั€ะฐั‚ะธั‡ะตัะบะพะต ะทะฝะฐั‡ะตะฝะธะต %f ะฒะพะปัŒั‚.n", dtmf_cfg.amplitude, level);
}

เช…เชฎเซ‡ เช…เชฎเชพเชฐเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเซ€เช เช›เซ€เช, เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เชชเชนเซ‡เชฒเชพ เช•เชฐเซเชฏเซเช‚ เชนเชคเซเช‚, เชซเช•เซเชค เชซเชพเช‡เชฒเชจเชพ เชจเชพเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ mstest3. เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เชšเชฒเชพเชตเซ€เช เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎ เชฎเซ‡เชณเชตเซ€เช:

ะะผะฟะปะธั‚ัƒะดะต ัะธะฝัƒัะฐ 1.000000 ะฒะพะปัŒั‚  ัะพะพั‚ะฒะตั‚ัั‚ะฒัƒะตั‚ ัั€ะตะดะฝะตะบะฒะฐะดั€ะฐั‚ะธั‡ะตัะบะพะต ะทะฝะฐั‡ะตะฝะธะต 0.707733 ะฒะพะปัŒั‚.

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชฎเชพเชชเชจ เชชเชฐเชฟเชฃเชพเชฎ เชคเซเชฐเซ€เชœเซ€ เชฆเชถเชพเช‚เชถ เชธเซเชฅเชพเชจ เชธเชพเชฅเซ‡ เชฎเซ‡เชณ เช–เชพเชฏ เช›เซ‡ เช…เชจเซ‡ เชธเซˆเชฆเซเชงเชพเช‚เชคเชฟเช• เชฎเซ‚เชฒเซเชฏ เชฌเซ‡ เชจเชพ เชตเชฐเซเช—เชฎเซ‚เชณเชจเซ‡ เช…เชกเชงเชพ เชญเชพเช—เชฎเชพเช‚ เชตเชนเซ‡เช‚เชšเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡: sqr(2)/2=0,7071067811865475

เชธเชพเชšเชพ เชฎเซ‚เชฒเซเชฏเชฎเชพเช‚เชฅเซ€ เชชเชฐเชฟเชฃเชพเชฎเชจเซเช‚ เชธเช‚เชฌเช‚เชงเชฟเชค เชตเชฟเชšเชฒเชจ 0.1% เชนเชคเซเช‚. เช…เชฎเซ‡ เชฎเชนเชคเซเชคเชฎ เชธเชฟเช—เซเชจเชฒ เชธเซเชคเชฐเซ‡ เชฎเชพเชชเชจ เชญเซ‚เชฒเชจเซเช‚ เชฎเซ‚เชฒเซเชฏเชพเช‚เช•เชจ เช•เชฐเซเชฏเซเช‚. เชคเชฆเชจเซเชธเชพเชฐ, เชธเซเชคเชฐ เช˜เชŸเซ‡ เชคเซ‡เชฎ, เชญเซ‚เชฒ เชตเชงเชตเซ€ เชœเซ‹เชˆเช. เชนเซเช‚ เชธเซ‚เชšเชจ เช•เชฐเซเช‚ เช›เซเช‚ เช•เซ‡ เชคเชฎเซ‡ เชจเซ€เชšเชพ เชธเชฟเช—เซเชจเชฒ เชธเซเชคเชฐเซ‹ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซเช‚ เชœเชพเชคเซ‡ เชฎเซ‚เชฒเซเชฏเชพเช‚เช•เชจ เช•เชฐเซ‹.

เชนเชตเซ‡ เชชเช›เซ€เชจเชพ เชฒเซ‡เช–เชฎเชพเช‚ เช†เชชเชฃเซ‡ เชเช• เชธเชฐเซเช•เชฟเชŸ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเซ€เชถเซเช‚ เชœเซ‡ เชŸเซ‹เชจ เชกเชฟเชŸเซ‡เช•เซเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช‡เชจเชชเซเชŸ เชชเชฐ เช†เชชเซ‡เชฒ เชซเซเชฐเซ€เช•เซเชตเชจเซเชธเซ€เชจเชพ เชŸเซ‹เชจ เชธเชฟเช—เซเชจเชฒเชจเซ€ เชนเชพเชœเชฐเซ€ เชถเซ‹เชงเซ€ เช•เชพเชขเซ‡ เช›เซ‡. เชซเชฟเชฒเซเชŸเชฐ เชฆเซเชตเชพเชฐเชพ เชœเชจเชฐเซ‡เชŸ เชฅเชคเซ€ เช˜เชŸเชจเชพเช“เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชชเซเชฐเซ‹เชธเซ‡เชธ เช•เชฐเชตเซ€ เชคเซ‡ เชชเชฃ เชถเซ€เช–เซ€เชถเซเช‚.

เชธเซ‹เชฐเซเชธ: www.habr.com

DDoS เชธเซเชฐเช•เซเชทเชพ, VPS VDS เชธเชฐเซเชตเชฐ เชงเชฐเชพเชตเชคเซ€ เชธเชพเช‡เชŸเซเชธ เชฎเชพเชŸเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชนเซ‹เชธเซเชŸเชฟเช‚เช— เช–เชฐเซ€เชฆเซ‹ ๐Ÿ”ฅ DDoS เชธเซเชฐเช•เซเชทเชพ, VPS VDS เชธเชฐเซเชตเชฐเซเชธ เชธเชพเชฅเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชตเซ‡เชฌเชธเชพเช‡เชŸ เชนเซ‹เชธเซเชŸเชฟเช‚เช— เช–เชฐเซ€เชฆเซ‹ | ProHoster