Ho hlahloba enjene ea Mediastreamer2 VoIP. Karolo ea 2

Thepa ea sehlooho e nkiloe ho ea ka mocha oa zen.

Ho hlahloba enjene ea Mediastreamer2 VoIP. Karolo ea 2

Ho theha jenereithara ea Tone

Nakong e fetileng sehlooho Re kentse laeborari ea media streamer, lisebelisoa tsa nts'etsopele mme ra leka ts'ebetso ea tsona ka ho aha sesebelisoa sa liteko.

Kajeno re tla etsa kopo e ka hlahisang letšoao la molumo ka karete ea molumo. Ho rarolla bothata bona re hloka ho hokahanya li-filters ho potoloho ea jenereithara e bontšitsoeng ka tlase:

Ho hlahloba enjene ea Mediastreamer2 VoIP. Karolo ea 2

Re bala setšoantšo ho tloha ho le letšehali ho ea ho le letona, ena ke tataiso eo data ea rona e tsamaeang ho eona. Metsu le eona e fana ka maikutlo a sena. Li-rectangles li bonts'a li-filters tse sebetsanang le li-block tsa data ebe li hlahisa sephetho. Ka har'a khutlonnetsepa, karolo ea eona e bonts'itsoe mme mofuta oa sefe o bonts'itsoe ka litlhaku tse kholo ka tlase. Metsu e kopanyang likhutlo-tharo ke mela ea data eo ka eona li-block tsa data li romelloang ho tloha ho sefe ho ea ho sefe. Ka kakaretso, sefe se ka ba le lintho tse ngata tse kenang le tse hlahisoang.

Tsohle li qala ka mohloli oa oache, o behang tempo eo data e baloang ka har'a li-filters. Ho ea ka potoloho ea eona ea oache, filthara e 'ngoe le e' ngoe e sebetsana le li-block tsa data tse fumanehang ho eona. 'Me e beha li-blocks tse nang le sephetho ho tsoa moleng. Ntlha ea pele, filthara e haufi le mohloli oa oache e etsa lipalo, ebe li-filters tse amanang le liphello tsa eona (ho ka ba le liphello tse ngata), joalo-joalo. Kamora hore sefe ea ho qetela ketane e qete ho sebetsa, ts'ebetso ea emisa ho fihlela oache e ncha e fihla. Beats, ka ho sa feleng, e latela nako ea 10 milliseconds.

Ha re khutlele setšoantšong sa rona. Lipotoloho tsa oache li fihla moo mohloli oa khutso o kenang teng; sena ke sefe, se phathahaneng ka ho hlahisa "data" e nang le li-zero se hlahisoang ke nako ea oache ka 'ngoe. Haeba re nka boloko bona joalo ka lisampole tsa molumo, joale sena ha se letho ho feta khutso. Ha u sheba ka lekhetlo la pele, ho bonahala ho makatsa ho hlahisa li-block tsa data ka khutso - ka mor'a moo, e ke ke ea utluoa, empa li-blocks tsena lia hlokahala bakeng sa ts'ebetso ea jenereithara ea molumo. Jenereithara e sebelisa li-blocks tsena joalo ka pampiri e se nang letho, e hatisang lisampole tsa molumo ho tsona. Boemong ba eona bo tloaelehileng, jenereithara e koetsoe 'me e fetisetsa li-blocks tsa ho kenya pele ho tlhahiso. Ka hona, li-blocks tsa khutso li feta li sa fetohe ho potoloha potoloho eohle ho tloha ka letsohong le letšehali ho ea ho le letona, li qetella ka karete ea molumo. E nkang li-blocks ka khutso moleng o hokahaneng le tlhahiso ea eona.

Empa ntho e 'ngoe le e' ngoe e fetoha haeba jenereithara e fuoa taelo ea ho bapala molumo, e qala ho hlahisa lisampole tsa molumo ebe e e nkela sebaka ka lisampole ka har'a li-block tsa ho kenya ebe e beha li-blocks tse fetotsoeng ho tlhahiso. Karete ea molumo e qala ho bapala molumo. Ka tlase ke lenaneo le sebelisang morero oa mosebetsi o hlalositsoeng ka holimo:

/* Файл 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);   
}

Kamora ho qala media streamer, ho etsoa li-filters tse tharo: voidsource, dtmfgen, snd_card_write. Mohloli oa oache oa etsoa.

Ebe o hloka ho hokahanya li-filters ho latela potoloho ea rona, 'me mohloli oa oache o tlameha ho hokahanngoa qetellong, kaha ka mor'a sena potoloho e tla qala ho sebetsa hang-hang. Haeba o hokahanya mohloli oa oache ho potoloho e sa phethoang, ho ka 'na ha etsahala hore media streamer e senyehe haeba e lemoha bonyane filthara e le' ngoe ka ketane ka lintho tsohle tse kenang kapa lihlahisoa tsohle "tse leketlileng moeeng" (tse sa kopane).

Ho kopanya li-filters ho etsoa ho sebelisoa ts'ebetso

ms_filter_link(src, src_out, dst, dst_in)

moo ngangisano ea pele e leng sesupo sa sefe ea mohloli, khang ea bobeli ke nomoro ea tlhahiso ea mohloli (hlokomela hore lintho tse kenang le tse hlahisoang li baloa ho qala ho zero). Khang ea boraro ke pointer ho filthara ea moamoheli, ea bone ke nomoro ea moamoheli.

Li-filters tsohle li hokahane 'me mohloli oa oache o hokahane qetellong (ka mor'a moo re tla e bitsa ticker). Ka mor'a moo potoloho ea rona ea molumo e qala ho sebetsa, empa ha ho letho le ka utluoang ho libui tsa k'homphieutha leha ho le joalo - jenereithara ea molumo e tima 'me e feta feela ka har'a li-block tsa data ka khutso. Ho qala ho hlahisa molumo, o hloka ho sebelisa mokhoa oa filtara ea jenereithara.

Re tla hlahisa lets'oao la melumo e 'meli (DTMF) le lumellanang le ho tobetsa konopo ea "1" fonong. Ho etsa sena, re sebelisa sesebelisoa ms_filter_call_method() Re bitsa mokhoa oa MS_DTMF_GEN_PLAY, re e fetisa e le khang e le sesupo sa khoutu eo letšoao la ho bapala le lokelang ho lumellana le eona.

Ho setseng ke ho hlophisa lenaneo:

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

Mme matha:

$ ./mstest2

Ka mor'a ho qala lenaneo, u tla utloa lets'oao le lekhutšoanyane la molumo le nang le lithane tse peli sebuela-hōle sa k'homphieutha.

Re ile ra haha ​​le ho thakhola potoloho ea rōna ea pele ea molumo. Re bone mokhoa oa ho theha maemo a li-filters, mokhoa oa ho li hokahanya le mokhoa oa ho bitsa mekhoa ea tsona. Leha re thabetse katleho ea rona ea pele, re ntse re hloka ho ela hloko taba ea hore lenaneo la rona ha le lokolle mohopolo o fanoeng pele o tsoa. Ho e latelang sehlooho re tla ithuta ho itlhoekisa.

Source: www.habr.com

Eketsa ka tlhaloso