Kuwunika injini ya Mediastreamer2 VoIP. Gawo 2

Zomwe zili m'nkhaniyi zatengedwa kuchokera ku wanga zene channel.

Kuwunika injini ya Mediastreamer2 VoIP. Gawo 2

Kupanga Jenereta wa Toni

M'mbuyomu nkhani Tidayika laibulale ya media streamer, zida zachitukuko ndikuyesa magwiridwe antchito popanga pulogalamu yoyeserera.

Lero tipanga pulogalamu yomwe imatha kupanga siginecha yamawu pakhadi lamawu. Kuti tithane ndi vutoli tiyenera kulumikiza zosefera mu gawo la jenereta lomwe likuwonetsedwa pansipa:

Kuwunika injini ya Mediastreamer2 VoIP. Gawo 2

Timawerenga chithunzicho kuchokera kumanzere kupita kumanja, iyi ndi njira yomwe deta yathu imayendera. Mivi imasonyezanso izi. Rectangles amawonetsa zosefera zomwe zimapanga midadada ya data ndikutulutsa zotsatira. Mkati mwa rectangle, udindo wake umasonyezedwa ndipo mtundu wa fyuluta umasonyezedwa ndi zilembo zazikulu pansipa. Mivi yolumikiza timakonati ndi mizere ya data momwe midadada ya data imatumizidwa kuchokera ku fyuluta kupita ku kusefa. Nthawi zambiri, fyuluta imatha kukhala ndi zolowetsa ndi zotuluka zambiri.

Zonse zimayamba ndi gwero la wotchi, lomwe limayika tempo yomwe deta imawerengedwa muzosefera. Malinga ndi kayendedwe ka wotchi yake, fyuluta iliyonse imagwiritsa ntchito midadada yonse yomwe ili panjira yake. Ndipo amayika midadada ndi zotsatira zake pamzere. Choyamba, fyuluta yomwe ili pafupi kwambiri ndi gwero la wotchi imapanga mawerengedwe, ndiye zosefera zomwe zimagwirizanitsidwa ndi zotsatira zake (pakhoza kukhala zotuluka zambiri), ndi zina zotero. Zosefera zomaliza mu unyolo zikamaliza kukonza, kupha kumayima mpaka wotchi yatsopano itafika. Kumenyedwa, mwachisawawa, kumatsata kapakati ka 10 milliseconds.

Tiyeni tibwerere ku chithunzi chathu. Mawotchi amafika pomwe pali gwero lachete; iyi ndi fyuluta, yomwe ili kalikiliki kupanga chipika cha data chokhala ndi ziro pazomwe imatuluka pa wotchi iliyonse. Ngati tiwona chipikachi ngati chipika cha zitsanzo zamawu, ndiye kuti palibenso china koma chete. Poyang'ana koyamba, zikuwoneka zachilendo kupanga midadada ya data mwakachetechete - pambuyo pake, sizingamveke, koma midadada iyi ndiyofunikira pakugwira ntchito kwa jenereta yamawu. Jenereta imagwiritsa ntchito midadada iyi ngati pepala lopanda kanthu, kujambula zitsanzo zamawu. M'malo ake abwino, jenereta imazimitsidwa ndikungotumiza midadada yolowera kuti itulutsidwe. Chifukwa chake, midadada ya chete imadutsa mosasinthika kudera lonselo kuchokera kumanzere kupita kumanja, ndikumathera mu khadi lamawu. Chomwe chimatenga mwakachetechete midadada kuchokera pamzere wolumikizidwa ndi kulowetsa kwake.

Koma chirichonse chimasintha ngati jenereta ipatsidwa lamulo loti azisewera phokoso, imayamba kupanga zitsanzo za phokoso ndikulowetsamo zitsanzo muzitsulo zolowetsamo ndikuyika midadada yosinthidwa pazotulutsa. Khadi lomveka limayamba kusewera. Pansipa pali pulogalamu yomwe imagwiritsa ntchito chiwembu chofotokozedwa pamwambapa:

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

Pambuyo poyambitsa media streamer, zosefera zitatu zimapangidwa: voidsource, dtmfgen, snd_card_write. Gwero la wotchi limapangidwa.

Ndiye muyenera kulumikiza zosefera molingana ndi dera lathu, ndipo gwero la wotchi liyenera kulumikizidwa komaliza, chifukwa pambuyo pake dera limayamba kugwira ntchito. Ngati mulumikiza gwero la wotchi kudera losamalizidwa, zitha kuchitika kuti media streamer imawonongeka ngati iwona fyuluta imodzi mu unyolo ndi zolowetsa zonse kapena zotuluka zonse "zolendewera mlengalenga" (zosalumikizidwa).

Kulumikiza zosefera kumachitika pogwiritsa ntchito ntchitoyi

ms_filter_link(src, src_out, dst, dst_in)

pomwe mtsutso woyamba ndi cholozera ku fyuluta yochokera, mtsutso wachiwiri ndi nambala yotulutsa (zindikirani kuti zolowa ndi zotuluka zimawerengedwa kuyambira ziro). Mtsutso wachitatu ndi cholozera kwa fyuluta yolandirira, yachinayi ndi nambala yolowera yolandila.

Zosefera zonse zimalumikizidwa ndipo gwero la wotchi limalumikizidwa komaliza (pambuyo pake tingoyitcha kuti ticker). Pambuyo pake phokoso lathu lozungulira limayamba kugwira ntchito, koma palibe chomwe chingamveke m'makamba apakompyuta komabe - jenereta ya phokoso imazimitsidwa ndikungodutsa midadada yolowetsamo ndi chete. Kuti muyambe kupanga kamvekedwe, muyenera kuyendetsa njira yojambulira jenereta.

Tidzapanga chizindikiro chamitundu iwiri (DTMF) chofanana ndi kukanikiza batani la "1" pafoni. Kuti tichite izi, timagwiritsa ntchito ms_sefa_call_method() Timatcha njira ya MS_DTMF_GEN_PLAY, ndikuipereka ngati mkangano ngati cholozera ku code yomwe siginecha yosewera iyenera kugwirizana nayo.

Zomwe zatsala ndikuphatikiza pulogalamuyo:

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

Ndipo kuthamanga:

$ ./mstest2

Mukangoyambitsa pulogalamuyo, mudzamva mawu achidule okhala ndi matani awiri mu choyankhulira pakompyuta.

Tinamanga ndi kukhazikitsa chigawo chathu choyamba cha mawu. Tinawona momwe tingapangire zochitika zosefera, momwe tingawalumikizire ndi momwe tingatchulire njira zawo. Ngakhale ndife okondwa ndi kupambana kwathu koyamba, tifunikabe kulabadira mfundo yakuti pulogalamu yathu simamasula kukumbukira koperekedwa tisanachoke. Chotsatira nkhani tidzaphunzira kuyeretsa.

Source: www.habr.com

Kuwonjezera ndemanga