Kuongorora iyo Mediastreamer2 VoIP injini. Chikamu 2

Zvinyorwa zvechinyorwa zvakatorwa kubva kwangu zen channel.

Kuongorora iyo Mediastreamer2 VoIP injini. Chikamu 2

Kugadzira Toni Jenareta

Mune yapfuura chinyorwa Isu takaisa iyo media media streamer raibhurari, maturusi ekuvandudza uye akaedza mashandiro avo nekuvaka application yekushandisa.

Nhasi tichagadzira application inogona kuburitsa toni chiratidzo pane inonzwika kadhi. Kugadzirisa dambudziko iri tinofanirwa kubatanidza mafirita mune inonzwika jenareta reketi inoratidzwa pazasi:

Kuongorora iyo Mediastreamer2 VoIP injini. Chikamu 2

Isu tinoverenga dhayagiramu kubva kuruboshwe kuenda kurudyi, iyi ndiyo nzira iyo data yedu inoyerera inofamba. Miseve inonongedzawo pane izvi. Rectangles dzinoratidza mafirita anogadzira mabhuraki edata uye anoburitsa mhedzisiro. Mukati merectangle, basa rayo rinoratidzwa uye mhando yesefa inoratidzwa nemavara makuru pazasi. Miseve inobatanidza rectangles imitsara yedata iyo mabhuraki edata anounzwa kubva pasefa kuenda kusefa. Kazhinji, sefa inogona kuva nezvakawanda zvekupinza uye zvinobuda.

Izvo zvese zvinotanga newachi sosi, iyo inogadzirisa tempo iyo data inoverengerwa mumasefa. Zvinoenderana neayo kutenderera kwewachi, sefa yega yega inobata ese mabhuraki edata ari pakuisa kwayo. Uye inoisa zvidhinha zvine mhedzisiro kunze mumutsetse. Chekutanga, iyo sefa iri padyo newachi sosi inoita kuverenga, ipapo mafirita akabatanidzwa kune zvaaburitsa (panogona kuve nezvakawanda zvinobuda), zvichingodaro. Mushure mekunge sefa yekupedzisira mucheni yapedza kugadzirisa, kuuraya kunomira kusvika wachi itsva yasvika. Beats, nekusarudzika, tevera nguva yegumi milliseconds.

Ngatidzokere kudhayagiramu yedu. Mawachi ewachi anosvika pakuiswa kweiyo runyararo sosi; iyi sefa, iyo iri mushishi kugadzira block yedata ine zero pakubuda kwayo kwewachi yega yega. Kana isu tikafunga iyi bhuroka se block yemasampureti eruzha, saka ichi hachisi chimwe chinhu kunze kwekunyarara. Pakutanga kuona, zvinoita sezvisinganzwisisike kugadzira mabhuraki edata nekunyarara - mushure mezvose, haigone kunzwika, asi zvidhinha izvi zvakakosha pakushanda kwejenareta yechiratidzo. Jenareta inoshandisa zvidhinha izvi sepepa risina chinhu, richirekodha masampuli enzwi mukati mawo. Mumamiriro ayo akajairika, jenareta inodzimwa uye inongoendesa mberi mabhuroko ekupinza kune zvinobuda. Nokudaro, zvidhinha zvekunyarara zvinopfuura zvisina kuchinjwa kuburikidza nedunhu rose kubva kuruboshwe kuenda kurudyi, zvichiguma mune kadhi rezwi. Iyo inotora chinyararire zvidhinha kubva pamutsetse wakabatana nekuisa kwayo.

Asi zvese zvinoshanduka kana jenareta ikapihwa murairo wekuridza ruzha, inotanga kuburitsa masampuli enzwi uye inotsiva iwo nemasamples mumabhuroko ekuisa uye inoisa mabhuroki akachinja pane zvinobuda. Kadhi renzwi rinotanga kutamba ruzha. Pazasi pane chirongwa chinoshandisa chirongwa chebasa chinotsanangurwa pamusoro apa:

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

Mushure mekutanga media streamer, mafirita matatu anogadzirwa: voidsource, dtmfgen, snd_card_write. Chitubu chewachi chinogadzirwa.

Ipapo iwe unofanirwa kubatanidza mafirita zvinoenderana nedunhu redu, uye chitubu chewachi chinofanira kubatanidzwa kwekupedzisira, sezvo mushure meizvi dunhu richatanga kushanda. Kana ukabatanidza chitubu chewachi kudunhu risati rapera, zvinogona kuitika kuti media streamer ikapaza kana ikaona sefa imwe chete mucheni ine zvese zvinopinda kana zvese zvinobuda "zvakarembera mumhepo" (zvisina kubatana).

Kubatanidza mafirita kunoitwa uchishandisa basa

ms_filter_link(src, src_out, dst, dst_in)

uko kupokana kwekutanga kunongedza kune sosi sefa, nharo yechipiri ndiyo inobuda nhamba (ona kuti zvinopinza uye zvinobuda zvakaverengerwa kutanga kubva paziro). Nharo yechitatu inongedzo kune inogamuchira sefa, yechina ndiyo nhamba yekupinza yekugamuchira.

Ese mafirita akabatana uye sosi yewachi yakabatana kwekupedzisira (pano tichangoidaidza kuti ticker). Mushure mezvo dunhu redu rinonzwika rinotanga kushanda, asi hapana chinogona kunzwika mumatauri emakombuta zvakadaro - jenareta inonzwika inodzimwa uye inongopfuura nepakati pekuisa data mabhuroki nekunyarara. Kuti utange kugadzira toni, unofanirwa kumhanya iyo jenareta sefa nzira.

Isu tichagadzira maviri-toni (DTMF) chiratidzo chinoenderana nekudzvanya bhatani re "1" pafoni. Kuti tiite izvi, tinoshandisa basa ms_filter_call_method() Isu tinodaidza iyo MS_DTMF_GEN_PLAY nzira, tichiipfuudza senharo chinongedzo kune kodhi iyo chiratidzo chekutamba chinofanirwa kuenderana nacho.

Chasara ndechekugadzira chirongwa:

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

Uye kumhanya:

$ ./mstest2

Mushure mekutanga chirongwa, iwe unonzwa kapfupi kurira chiratidzo chine matani maviri mumukurukuri wekombuta.

Takavaka uye takaparura dunhu redu rekutanga regudzanzwi. Takaona magadzirirwo ekugadzira mafirita, maitiro ekuabatanidza uye maitiro ekudaidza maitiro avo. Kunyange isu tichifara nekubudirira kwedu kwekutanga, tichiri kuda kutarisisa kuti chirongwa chedu hachisunungure ndangariro yakapihwa tisati tabuda. Mune inotevera chinyorwa tichadzidza kuzvichenesa pachedu.

Source: www.habr.com

Voeg