Ukuphonononga injini yeMediastreamer2 VoIP. Icandelo 2

Izinto zenqaku zithathwe kum zen channel.

Ukuphonononga injini yeMediastreamer2 VoIP. Icandelo 2

Ukwenza iJenereyitha yeToni

Ngaphambili nqaku Sifake ithala leencwadi losasazo lweendaba, izixhobo zophuhliso kwaye savavanya ukusebenza kwazo ngokwakha isicelo solingo.

Namhlanje siza kudala isicelo esinokuvelisa isignali yethoni kwikhadi lesandi. Ukusombulula le ngxaki kufuneka siqhagamshele izihluzi kwisekethe yejenereyitha yesandi eboniswe ngezantsi:

Ukuphonononga injini yeMediastreamer2 VoIP. Icandelo 2

Sifunda umzobo ukusuka kwesobunxele ukuya ngasekunene, le yindlela ehamba ngayo idatha yethu. Iintolo nazo ziyayichaza le nto. IiRectangles zibonisa izihluzi ezenza iibhloko zedatha kwaye zikhuphe isiphumo. Ngaphakathi koxande, indima yalo ibonisiwe kwaye uhlobo lokucoca lubonakaliswe ngoonobumba abakhulu ngezantsi nje. Iintolo ezidibanisa uxande yimigca yedata apho iibhloko zedatha zihanjiswa ukusuka kwisihluzo ukuya kwisihluzo. Ngokubanzi, isihluzi sinokuba namagalelo amaninzi kunye neziphumo.

Konke kuqala ngomthombo wewotshi, obeka i-tempo apho idatha ibalwa khona kwizihluzi. Ngokomjikelo wewotshi, isihluzi ngasinye siqhuba zonke iibhloko zedatha ezikwigalelo lalo. Kwaye ibeka iibhloko ezinesiphumo ngaphandle emgceni. Okokuqala, icebo lokucoca elikufutshane nomthombo wewotshi lenza izibalo, emva koko izihluzi ziqhagamshelwe kwiziphumo zaso (kunokubakho iziphumo ezininzi), njalo njalo. Emva kokuba isihluzo sokugqibela kwitsheyini sigqibe ukuqhubekeka, uphunyezo luyayeka de kufike iwotshi entsha. Ukubetha, ngokungagqibekanga, landela isithuba se-10 millisecond.

Masibuyele kumzobo wethu. Imijikelo yewotshi ifika kwigalelo lomthombo wothuliso, esi sisihluzo, esixakekileyo sivelisa ibhloko yedata equlathe ooziro kwimveliso yaso kumjikelo wewotshi nganye. Ukuba sithatha le bhloko njengebhloko yeesampulu zesandi, oku akukho nto ngaphandle kokuthula. Ekuboneni kokuqala, kubonakala kungaqhelekanga ukuvelisa iibhloko zedatha ngokuthula - emva kwayo yonke loo nto, ayinakuviwa, kodwa ezi zibhloko ziyimfuneko ekusebenzeni kwejeneretha yesandi. Ijenereyitha isebenzisa ezi bhloko njengephepha elingenanto, irekhoda iisampulu zesandi kuzo. Kwimeko yayo yesiqhelo, i-generator icinyiwe kwaye imane idlulisela phambili iibhloko zongeniso kwimveliso. Ngaloo ndlela, iibhloko zokuthula zidlula zingatshintshi kwisiphaluka sonke ukusuka kwesobunxele ukuya ngasekunene, ziphela kwikhadi lesandi. Ethi cwaka ithatha iibhloko kumgca oqhagamshelwe kwigalelo layo.

Kodwa yonke into iyatshintsha ukuba i-generator inikwe umyalelo wokudlala isandi, iqala ukuvelisa iisampulu zesandi kwaye ithathe indawo yazo ngeesampuli kwiibhloko zokufaka kwaye ibeke iibhloko ezitshintshileyo kwimveliso. Ikhadi lesandi liqala ukudlala isandi. Ngezantsi yinkqubo ephumeza isikimu somsebenzi esichazwe ngasentla:

/* Π€Π°ΠΉΠ» 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);   
}

Emva kokuqalisa i-media streamer, izihluzi ezintathu zenziwe: i-voidsource, dtmfgen, snd_card_bhala. Kwenziwa umthombo wewotshi.

Emva koko kufuneka udibanise izihlungi ngokuhambelana nesiphaluka sethu, kwaye umthombo wewashi kufuneka uqhagamshelwe ekugqibeleni, ekubeni emva koku isiphaluka siya kuqalisa ukusebenza ngokukhawuleza. Ukuba uqhagamshela umthombo wewotshi kwisekethe engagqitywanga, kunokwenzeka ukuba i-media streamer iphazamiseke ukuba ibhaqa ubuncinane isihluzo esinye kwikhonkco kunye nawo onke amagalelo okanye zonke iziphumo "ezijinga emoyeni" (ezingaxhunywanga).

Ukuqhagamshela izihluzi kwenziwa ngokusebenzisa umsebenzi

ms_filter_link(src, src_out, dst, dst_in)

apho impikiswano yokuqala isalatha kwisihluzo semvelaphi, impikiswano yesibini linani lemveliso yemvelaphi (qaphela ukuba amagalelo kunye neziphumo zibaliwe ukususela ku-zero). Ingxoxo yesithathu sisalatha kwisihluzo sommkeli, eyesine linani lokufaka ummkeli.

Zonke izihluzi ziqhagamshelwe kwaye umthombo wewotshi uqhagamshelwe okokugqibela (emva koku siya kuyibiza ngokulula ngokuba yiticker). Emva koko isiphaluka sethu sesandi siqala ukusebenza, kodwa akukho nto inokuviwa kwizithethi zekhompyutheni okwangoku - i-generator yesandi icinyiwe kwaye idlula nje kwiibhloko zedatha yokufaka ngokuthula. Ukuqala ukuvelisa ithoni, kufuneka usebenzise indlela yokucoca i-generator.

Siza kuvelisa isignali yeethoni ezimbini (i-DTMF) ehambelana nokucofa iqhosha elithi "1" kwifowuni. Ukwenza oku, sisebenzisa umsebenzi ms_filter_call_method() Sibiza indlela ye-MS_DTMF_GEN_PLAY, ukuyigqithisa njengengxabano isalathisi kwikhowudi ekufuneka isignali yokudlala ihambelane nayo.

Ekuphela kwento eseleyo kukuqulunqa inkqubo:

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

Kwaye ubaleke:

$ ./mstest2

Emva kokuqalisa inkqubo, uya kuva isandi esifutshane somqondiso oquka iithowuni ezimbini kwisithethi sekhompyuter.

Sakha saza saqalisa isiphaluka sethu sokuqala sesandisi-lizwi. Siye sabona indlela yokwenza iimeko zokucoca, indlela yokudibanisa kunye nendlela yokubiza iindlela zabo. Ngelixa sonwabile ngempumelelo yethu yokuqala, kusafuneka sithathele ingqalelo into yokuba inkqubo yethu ayikhululi imemori eyabelweyo phambi kokuba iphume. Kwilandelayo nqaku siya kufunda ukucoca emva kwethu.

umthombo: www.habr.com

Yongeza izimvo