Mikaroka ny motera Mediastreamer2 VoIP. Fizarana 2

Ny fitaovan'ny lahatsoratra dia nalaina avy amin'ny ahy fantsona zen.

Mikaroka ny motera Mediastreamer2 VoIP. Fizarana 2

Mamorona Tone Generator

Tamin'ny teo aloha lahatsoratra Nametraka ny tranomboky streamer media izahay, fitaovana fampivoarana ary nanandrana ny asany tamin'ny alΓ lan'ny fananganana fampiharana andrana.

Androany isika dia hamorona fampiharana izay afaka miteraka famantarana feo amin'ny karatra fanamafisam-peo. Mba hamahana ity olana ity dia mila mampifandray ireo sivana amin'ny faritra mpamokatra feo aseho eto ambany isika:

Mikaroka ny motera Mediastreamer2 VoIP. Fizarana 2

Mamaky ny kisary izahay miankavia miankavanana, io no lalana izoran'ny fikorianan'ny angonay. Ny zana-tsipìka koa dia manondro izany. Ny mahitsizoro dia manondro sivana izay manodina sakana angona ary mamoaka ny vokatra. Ao anatin'ny mahitsizoro dia aseho ny anjara asany ary ny karazana sivana dia aseho amin'ny litera lehibe etsy ambany. Ny zana-tsipìka mampifandray ireo mahitsizoro dia filaharana angon-drakitra izay anaterana ireo sakana angona avy amin'ny sivana mankany amin'ny sivana. Amin'ny ankapobeny, ny sivana dia afaka manana fidirana sy fivoahana maro.

Izany rehetra izany dia manomboka amin'ny loharanon'ny famantaranandro, izay mametraka ny fotoana kajy ny angona ao amin'ny sivana. Araka ny tsingerin'ny famantaranandrony, ny sivana tsirairay dia manodina ny bloc data rehetra izay ao anatin'ny fampidirana azy. Ary mametraka sakana miaraka amin'ny vokatra mivoaka ao amin'ny filaharana. Voalohany, ny sivana akaiky indrindra amin'ny loharanon'ny famantaranandro dia manao kajy, avy eo ny sivana mifandray amin'ny vokatra azony (mety ho maro ny vokatra), sy ny sisa. Rehefa tapitra ny fanodinana ny sivana farany amin'ny rojo dia mijanona ny famonoana mandra-pahatongan'ny famantaranandro vaovao. Ny kapoka, raha ny mahazatra, dia manaraka elanelana 10 milisegondra.

Andao hiverina amin'ny kisary. Ny tsingerin'ny famantaranandro dia tonga amin'ny fidirana amin'ny loharano fahanginana; sivana ity, izay sahirana amin'ny famoronana sakana misy angona misy aotra amin'ny famoahana azy isaky ny tsingerin'ny famantaranandro. Raha heverintsika ho santionan'ny feo io sakana io, dia tsy inona izany fa fahanginana. Raha vao jerena dia toa hafahafa ny mamorona sakana angon-drakitra miaraka amin'ny fahanginana - na izany aza, tsy re izany, fa ireo sakana ireo dia ilaina amin'ny fampandehanana ny mpamokatra famantarana feo. Ny mpamokatra dia mampiasa ireo sakana ireo toy ny taratasy tsy misy na inona na inona, mirakitra santionany feo ao anatiny. Amin'ny maha-ara-dalΓ na azy dia tapaka ny mpamokatra ary alefa fotsiny ireo sakana fampidirana mankany amin'ny vokatra. Noho izany, ny sakana fahanginana dia mandalo tsy miova manerana ny faritra manontolo avy any ankavia miankavanana, ary miafara amin'ny karatra fanamafisam-peo. Izay maka mangina ny sakana amin'ny filaharana mifandray amin'ny fampidirana azy.

Saingy miova ny zava-drehetra raha omena baiko hilalao feo ny mpamokatra, manomboka mamoaka santionany feo izy ary manolo azy ireo amin'ny santionany ao amin'ny blocs input ary mametraka ny bloc niova amin'ny vokatra. Manomboka milalao feo ny karatra fanamafisam-peo. Ity ambany ity ny programa iray izay mampihatra ny tetik'asa voalaza etsy ambony:

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

Aorian'ny fanombohana ny streamer media dia misy sivana telo noforonina: voidsource, dtmfgen, snd_card_write. Misy loharanon'ny famantaranandro noforonina.

Avy eo dia mila mampifandray ireo sivana mifanaraka amin'ny faritra misy antsika ianao, ary ny loharanon'ny famantaranandro dia tsy maintsy mifandray amin'ny farany, satria aorian'izany dia manomboka miasa avy hatrany ny faritra. Raha ampifandraisinao amin'ny faritra tsy vita ny loharanon'ny famantaranandro iray, dia mety hidona ny streamer media raha mahita sivana iray farafahakeliny ao amin'ny rojo miaraka amin'ny fidirana rehetra na ny vokatra rehetra "mihantona amin'ny rivotra" (tsy mifandray).

Ny fampifandraisana sivana dia atao amin'ny fampiasana ny fiasa

ms_filter_link(src, src_out, dst, dst_in)

izay tondro mankany amin'ny sivana loharano ny tohan-kevitra voalohany, ny tohan-kevitra faharoa dia ny laharan'ny famoahana loharano (mariho fa ny fidirana sy ny vokatra dia isaina manomboka amin'ny aotra). Ny hevitra fahatelo dia manondro ny sivana mpandray, ny fahefatra dia ny laharana fampidirana mpandray.

Ny sivana rehetra dia mifamatotra ary ny loharanon'ny famantaranandro dia mifamatotra amin'ny farany (arakaraka izany dia antsoina hoe ticker fotsiny izany). Aorian'izay dia manomboka miasa ny fizaran-kiranay, saingy mbola tsy misy re ao amin'ny fanamafisam-peo amin'ny solosaina - maty ny mpamokatra feo ary mandalo fotsiny amin'ny alΓ lan'ny blocs data fampidirana am-pahanginana. Mba hanombohana mamorona feo dia mila mampiasa ny fomba sivana mpamokatra ianao.

Hamokatra famantarana roa (DTMF) mifanaraka amin'ny fanindriana ny bokotra "1" amin'ny telefaona izahay. Mba hanaovana izany, dia mampiasa ny asa ms_filter_call_method() Antsoinay ny fomba MS_DTMF_GEN_PLAY, mamindra azy ho tohan-kevitra ho tondro mankany amin'ny kaody tokony hifanaraka amin'ny famantarana playback.

Ny hany sisa tavela dia ny fanangonana ny programa:

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

Ary mihazakazaka:

$ ./mstest2

Aorian'ny fanombohana ny fandaharana dia handre feo fohy misy feo roa ao amin'ny mpandahateny solosaina ianao.

Nanamboatra sy nanomboka ny fizaran-tserananay voalohany izahay. Hitanay ny fomba hamoronana ohatra sivana, ny fomba hampifandraisana azy ireo ary ny fomba fiantsoana ny fomba fiasany. Na dia faly tamin'ny fahombiazanay voalohany aza izahay, dia mbola mila mitandrina izahay fa ny programanay dia tsy mahafaka ny fahatsiarovana nomena alohan'ny hivoahany. Amin'ny manaraka lahatsoratra hianatra hanadio ny tenantsika isika.

Source: www.habr.com

Add a comment