Ke ʻimi nei i ka ʻenekini Mediastreamer2 VoIP. Mahele 2

Lawe ʻia ka mea o ka ʻatikala mai kaʻu zen channel.

Ke ʻimi nei i ka ʻenekini Mediastreamer2 VoIP. Mahele 2

Ke hana ʻana i kahi mea hana leo

I ka mua 'ōlelo Hoʻokomo mākou i ka waihona streamer media, nā mea hana hoʻomohala a hoʻāʻo i kā lākou hana ma ke kūkulu ʻana i kahi noi hoʻāʻo.

I kēia lā e hana mākou i kahi noi e hiki ke hoʻopuka i kahi hōʻailona leo ma kahi kāleka kani. No ka hoʻoponopono ʻana i kēia pilikia, pono mākou e hoʻopili i nā kānana i loko o ke kaapuni mīkini kani i hōʻike ʻia ma lalo nei.

Ke ʻimi nei i ka ʻenekini Mediastreamer2 VoIP. Mahele 2

Heluhelu mākou i ke kiʻikuhi mai ka hema a i ka ʻākau, ʻo ia ke ala e neʻe ai kā mākou ʻikepili. Hōʻike pū nā pua i kēia. Hōʻike nā rectangles i nā kānana e hana ana i nā poloka o ka ʻikepili a hoʻopuka i ka hopena. I loko o ka rectangle, hōʻike ʻia kona kuleana a hōʻike ʻia ke ʻano kānana ma nā hua nui ma lalo iho. ʻO nā pua e hoʻopili ana i nā ʻāpana ʻāpana he mau queue ʻikepili kahi e lawe ʻia ai nā poloka o ka ʻikepili mai kānana a kānana. Ma keʻano laulā, hiki i kahi kānana ke loaʻa nā mea hoʻokomo a me nā mea hoʻopuka.

Hoʻomaka ia me ke kumu uaki, kahi e hoʻonohonoho ai i ka manawa i helu ʻia ai ka ʻikepili i nā kānana. E like me kona pōʻaiapuni uaki, hoʻoponopono kēlā me kēia kānana i nā poloka ʻikepili a pau i kona hoʻokomo. A waiho i nā poloka me ka hopena i waho i ka pila. ʻO ka mea mua,ʻo ka kānana kokoke loa i ke kumu o ka uaki e hana i nā helu, a laila ua pili nā kānana i kāna mau mea hoʻopuka (hiki ke loaʻa nā huahana he nui), a pēlā aku. Ma hope o ka hoʻopau ʻana o ka kānana hope loa i ke kaulahao, pau ka hoʻokō ʻana a hiki i kahi uaki hou. ʻO nā kuʻi, ma ka paʻamau, e hahai i kahi manawa o 10 milliseconds.

E hoʻi kāua i kā mākou kiʻi. Hiki mai nā pōʻaiapuni o ka uaki i ka hoʻokomo ʻana o ke kumu hāmau; he kānana kēia, kahi e hana nei i kahi poloka o ka ʻikepili i loaʻa nā zeros ma kāna puka no kēlā me kēia pōʻai uaki. Inā mākou e noʻonoʻo i kēia poloka ma ke ʻano he poloka o nā laʻana leo, a laila ʻaʻohe mea ʻē aʻe ma mua o ka hāmau. I ka nānā mua ʻana, he mea kupanaha ka hoʻopuka ʻana i nā poloka ʻikepili me ka leo ʻole - ma hope o nā mea a pau, ʻaʻole hiki ke lohe ʻia, akā pono kēia mau poloka no ka hana ʻana o ka mīkini hōʻailona leo. Hoʻohana ka mīkini hana i kēia mau poloka e like me kahi pepa paʻa ʻole, e hoʻopaʻa ana i nā mea kani i loko o lākou. Ma kona kūlana maʻamau, ua pio ka mīkini hana a hoʻouna wale i nā poloka komo i ka puka. No laila, hele ʻole nā ​​poloka o ka hāmau ma ke kaapuni holoʻokoʻa mai ka hema a i ka ʻākau, e pau ana i ke kāleka kani. Ka mea e lawe malie i nā poloka mai ka pila i hoʻopili ʻia i kāna hoʻokomo.

Akā, hoʻololi nā mea a pau inā hāʻawi ʻia ka mea hana i ke kauoha e pāʻani i ke kani, hoʻomaka ia e hana i nā laʻana kani a hoʻololi iā lākou me nā laʻana i loko o nā poloka hoʻokomo a kau i nā poloka i hoʻololi ʻia i ka puka. Hoʻomaka ke kani kani i ke kani. Aia ma lalo kahi papahana e hoʻokō i ka papahana hana i hōʻike ʻia ma luna.

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

Ma hope o ka hoʻomaka ʻana i ka streamer media, hana ʻia ʻekolu kānana: voidsource, dtmfgen, snd_card_write. Hana ʻia kahi kumu uaki.

A laila pono ʻoe e hoʻopili i nā kānana e like me kā mākou kaapuni, a pono e hoʻopili ʻia ke kumu o ka uaki hope, ʻoiai ma hope o kēia e hoʻomaka koke ka hana. Inā hoʻohui ʻoe i kahi kumu uaki i kahi kaapuni i hoʻopau ʻole ʻia, hāʻule paha ka streamer media inā ʻike ʻo ia i hoʻokahi kānana ma ke kaulahao me nā mea hoʻokomo a i ʻole nā ​​​​mea hoʻopuka āpau "e kau ana i ka lewa" (ʻaʻole pili).

Hoʻopili ʻia nā kānana me ka hoʻohana ʻana i ka hana

ms_filter_link(src, src_out, dst, dst_in)

kahi i kuhikuhi ai ka hoʻopaʻapaʻa mua i ke kānana kumu, ʻo ka pane ʻelua ka helu kumu kumu (e hoʻomaopopo i ka helu ʻana i nā mea hoʻokomo a me nā mea hoʻopuka e hoʻomaka ana mai ka ʻole). ʻO ke kolu o ka hoʻopaʻapaʻa he kuhikuhi i ka kānana hoʻokipa, ʻo ka hā ka helu hoʻokomo mea hoʻokipa.

Hoʻopili ʻia nā kānana a pau a hoʻopili ʻia ke kumu uaki hope loa (ma hope aku e kapa mākou iā ia he ticker). Ma hope o ka hoʻomaka ʻana o kā mākou kaapuni kani, akā ʻaʻohe mea e hiki ke lohe ʻia i loko o nā mea haʻi'ōlelo kamepiula - ua pio ka mea hoʻoheheʻe kani a hele wale i nā poloka ʻikepili hoʻokomo me ka hāmau. No ka hoʻomaka ʻana i kahi leo, pono ʻoe e holo i ke ʻano kānana generator.

E hana mākou i kahi hōʻailona ʻelua-leo (DTMF) e like me ke kaomi ʻana i ke pihi "1" ma ke kelepona. No ka hana ʻana i kēia, hoʻohana mākou i ka hana ms_filter_call_method() Kāhea mākou i ke ʻano MS_DTMF_GEN_PLAY, me ka hāʻawi ʻana iā ia ma ke ʻano he hoʻopaʻapaʻa he kuhikuhi i ke code e kūpono ai ka hōʻailona pāʻani.

ʻO nā mea a pau i koe e hōʻuluʻulu i ka papahana:

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

A holo:

$ ./mstest2

Ma hope o ka hoʻomaka ʻana i ka papahana, e lohe ʻoe i kahi hōʻailona leo pōkole me ʻelua mau leo ​​i loko o ka leo kamepiula.

Ua kūkulu mākou a hoʻomaka i kā mākou kaapuni kani mua. Ua ʻike mākou pehea e hana ai i nā mea kānana, pehea e hoʻopili ai iā lākou a pehea e kāhea ai i kā lākou mau ala. ʻOiai ʻoliʻoli mākou i kā mākou holomua mua, pono mākou e hoʻolohe i ka ʻoiaʻiʻo ʻaʻole hoʻokuʻu kā mākou papahana i ka hoʻomanaʻo i hāʻawi ʻia ma mua o ka puka ʻana. I ka wā e hiki mai ana 'ōlelo e aʻo mākou e hoʻomaʻemaʻe ma hope o mākou iho.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka