د Mediastreamer2 VoIP انجن سپړنه. 2 برخه

د مقالې مواد زما څخه اخیستل شوي دي زین چینل.

د Mediastreamer2 VoIP انجن سپړنه. 2 برخه

د ټون جنراتور جوړول

په تیرو کې مقالې موږ د میډیا سټیمر کتابتون ، پرمختیایی وسیلې نصب کړې او د آزموینې غوښتنلیک په جوړولو سره د دوی فعالیت ازمویل شو.

نن ورځ موږ به یو اپلیکیشن جوړ کړو چې کولی شي په غږ کارت کې د ټون سیګنال رامینځته کړي. د دې ستونزې د حل لپاره موږ اړتیا لرو چې فلټرونه د غږ جنراتور سرکټ سره وصل کړو چې لاندې ښودل شوي:

د Mediastreamer2 VoIP انجن سپړنه. 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)

چیرته چې لومړی دلیل د سرچینې فلټر ته اشاره کوي، دویم دلیل د سرچینې محصول شمیره ده (یادونه وکړئ چې داخلې او محصولات د صفر څخه پیل کیږي). دریم دلیل د رسیدونکي فلټر ته اشاره کوي، څلورم د رسیدونکي ان پټ شمیره ده.

ټول فلټرونه سره وصل دي او د ساعت سرچینه وروستی وصل شوی (له دې وروسته به موږ په ساده ډول دا ټیکر ووایو). وروسته له دې چې زموږ د غږ سرکټ کار پیل کوي، مګر د کمپیوټر سپیکرو کې لاهم هیڅ شی نه اوریدل کیږي - د غږ جنراتور بند شوی او په ساده ډول د خاموشۍ سره د ان پټ ډیټا بلاکونو څخه تیریږي. د ټون تولید پیل کولو لپاره ، تاسو اړتیا لرئ د جنریټر فلټر میتود چل کړئ.

موږ به په تلیفون کې د "1" تڼۍ فشارولو سره سم دوه ټون (DTMF) سیګنال تولید کړو. د دې کولو لپاره، موږ فنکشن کاروو ms_filter_call_method() موږ د MS_DTMF_GEN_PLAY طریقه وایو، دا د دلیل په توګه کوډ ته د اشارې په توګه لیږدول چې د پلې بیک سیګنال باید ورته وي.

ټول هغه څه چې پاتې دي د پروګرام تالیف کول دي:

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

او منډه کړه:

$ ./mstest2

د برنامه پیل کولو وروسته ، تاسو به د کمپیوټر سپیکر کې یو لنډ غږیز سیګنال واورئ چې دوه ټونونه لري.

موږ خپل لومړی غږ سرکټ جوړ او پیل کړ. موږ ولیدل چې څنګه د فلټر مثالونه رامینځته کړو، څنګه یې وصل کړو او څنګه د دوی میتودونو ته زنګ ووهو. پداسې حال کې چې موږ د خپلې لومړنۍ بریا څخه خوښ یو، موږ لاهم باید دې حقیقت ته پام وکړو چې زموږ برنامه د وتلو دمخه تخصیص شوې حافظه نه خلاصوي. په راتلونکي کې مقالې موږ به د ځان پاکول زده کړو.

سرچینه: www.habr.com

Add a comment