Ihlola injini ye-Mediastreamer2 VoIP. Ingxenye 12

Indaba ye-athikili ithathwe kweyami ishaneli zen.

Ihlola injini ye-Mediastreamer2 VoIP. Ingxenye 12

Ekugcineni isihloko, ngithembise ukucabangela indaba yokuhlola umthwalo wethikha kanye nezindlela zokulwa nomthwalo wekhompiyutha owedlulele ku-streamer yemidiya. Kodwa nginqume ukuthi kuzoba okunengqondo kakhulu ukumboza izindaba zokulungisa amaphutha izihlungi zezikebhe ezihlobene nokuhamba kwedatha bese ngicubungula izinkinga zokuthuthukisa ukusebenza.

Ukulungisa izihlungi zezikebhe

Ngemuva kokuthi sibheke indlela yokuhambisa idatha ku-media streamer esihlokweni esedlule, kungaba okunengqondo ukukhuluma ngezingozi ezifihliwe kuyo. Esinye sezici zesimiso β€œsokugeleza kwedatha” ukuthi inkumbulo inikezwa inqwaba kuzihlungi ezitholakala kumthombo wokugeleza kwedatha, futhi inkumbulo iyakhululwa futhi ibuyiselwe enqwabeni ngezihlungi ezitholakala ekugcineni kokugeleza. indlela. Ngaphezu kwalokho, ukwakhiwa kwedatha entsha kanye nokubhujiswa kwayo kungenzeka endaweni ethile phakathi. Ngokuvamile, ukukhululwa kwememori kwenziwa yisihlungi esihlukile kunaleso esidale ibhulokhi yedatha.

Ngokombono wokuqapha inkumbulo esobala, kungaba okunengqondo ukuthi isihlungi, lapho sithola ibhulokhi yokufaka, siyibhubhise ngokushesha ngemva kokucubungula, ukukhulula inkumbulo, futhi sikhiphe ibhulokhi esanda kwakhiwa enedatha yokuphumayo. Kulesi simo, ukuvuza kwenkumbulo kusihlungi kuzolandelelwa kalula - uma umhlaziyi ethole ukuvuza kwesihlungi, isihlungi esilandelayo asiwachithi kahle amabhulokhi angenayo futhi kuba nephutha kuso. Kodwa ngokombono wokugcina ukusebenza okuphezulu, le ndlela yokusebenza ngamabhulokhi wedatha ayikhiqizi - iholela enanini elikhulu lemisebenzi yokwaba/inkumbulo yamahhala yamabhulokhi wedatha ngaphandle kokukhipha okuwusizo.

Ngenxa yalesi sizathu, izihlungi ze-media streamer, ukuze zingabambezeli ukucubungula idatha, sebenzisa imisebenzi eyenza amakhophi alula lapho ukopisha imilayezo (sikhulume ngakho esihlokweni esandulele). Le misebenzi idala kuphela isibonelo esisha sesihloko somlayezo "ngokunamathisela" kuso ibhulokhi yedatha evela kumlayezo "omdala" okopishwayo. Ngenxa yalokho, izihloko ezimbili zinamathiselwe kubhulokhi yedatha eyodwa futhi ikhawunta yereferensi kubhulokhi yedatha iyandiswa. Kodwa izobukeka njengemiyalezo emibili. Kungase kube nemilayezo eminingi enombhalo onjalo wedatha "yokuhlalisana", isibonelo, isihlungi se-MS_TEE sikhiqiza ishumi nambili lamakhophi anjalo okukhanya ngesikhathi esisodwa, siwasabalalise phakathi kokuphumayo kwaso. Uma zonke izihlungi kuchungechunge zisebenza kahle, ekupheleni kwepayipi lesi sibali sereferensi kufanele sifinyelele uziro futhi umsebenzi wokukhipha inkumbulo uzobizwa ngokuthi: ms_mahhala(). Uma ucingo lungenzeki, khona-ke lesi siqeshana senkumbulo ngeke sisabuyiselwa kunqwaba, i.e. "izovuza". Intengo yokusebenzisa amakhophi alula ukulahlekelwa ikhono lokunquma kalula (njengoba kungaba njalo ngamakhophi avamile) ukuthi yisiphi isihlungi segrafu esivuza inkumbulo.

Njengoba abathuthukisi be-media streamer benesibopho sokuthola ukuvuza kwememori kuzihlungi zomdabu, cishe ngeke kudingeke ukuthi uzisuse. Kodwa ngesihlungi sakho sobuciko, uyintethe yenjabulo yakho, futhi isikhathi osichitha ucinga ukuvuza kwekhodi yakho sizoncika ekunembeni kwakho. Ukuze unciphise isikhathi sakho sokulungisa iphutha, sidinga ukubheka amasu okuthola ukuvuza lapho sithuthukisa izihlungi. Ukwengeza, kungenzeka ukuthi ukuvuza kuzozibonakalisa kuphela uma isihlungi sisetshenziswa ohlelweni lwangempela, lapho inani "labasolwa" lingase libe likhulu futhi isikhathi sokususa iphutha silinganiselwe.

Ukuvuza kwenkumbulo kuzibonakalisa kanjani?

Kunengqondo ukucabanga ukuthi ekuphumeni kohlelo top izobonisa amaphesenti akhulayo enkumbulo esetshenziswa uhlelo lwakho lokusebenza.

Ukubonakaliswa kwangaphandle kuzoba ukuthi ngesikhathi esithile isistimu izoqala ukuphendula kancane ekunyakazeni kwegundane futhi idwebe kabusha isikrini kancane kancane. Kungenzeka futhi ukuthi ilogi yesistimu izokhula, idle isikhala ku-hard drive yakho. Kulokhu, isicelo sakho sizoqala ukuziphatha ngendlela exakile, singaphenduli emiyalweni, asikwazi ukuvula ifayela, njll.

Ukuze sithole ukwenzeka kokuvuza, sizosebenzisa isihlaziyi senkumbulo (esibizwa kamuva ngokuthi i-analyzer). Kungaba njalo I-Valgrind (kuhle indatshana mayelana nayo) noma eyakhelwe kumhlanganisi gcc I-MemorySanitizer noma yini enye. Uma i-analyzer ibonisa ukuthi ukuvuza kwenzeka kwesinye sezihlungi zegrafu, lokhu kusho ukuthi sekuyisikhathi sokusebenzisa enye yezindlela ezichazwe ngezansi.

Indlela Yephayini Ezintathu

Njengoba kushiwo ngenhla, uma kukhona ukuvuza kwenkumbulo, umhlaziyi uzokhomba isihlungi esicele ukwabelwa inkumbulo enqwabeni. Kodwa ngeke ikhombise isihlungi β€œesikhohlwe” ukusibuyisela, okuyisona sizathu. Ngakho, i-analyzer ingaqinisekisa kuphela ukwesaba kwethu, kodwa ingabonisi impande yabo.

Ukuze uthole indawo yesihlungi "esibi" kugrafu, ungahamba ngokunciphisa igrafu enanini elincane lamanodi lapho umhlaziyi asathola ukuvuza futhi enze okokuhlunga okuyinkinga kube okwasendaweni kumaphayini amathathu asele.

Kodwa kungenzeka ukuthi ngokunciphisa inani lezihlungi kugrafu, uzophazamisa inkambo evamile yokusebenzisana phakathi kwezihlungi nezinye izakhi zesistimu yakho futhi ukuvuza ngeke kusavela. Kulokhu, kuzodingeka usebenze ngegrafu enosayizi ogcwele futhi usebenzise indlela echazwe ngezansi.

Indlela ye-insulator yokushelela

Ukuze kube lula isethulo, sizosebenzisa igrafu equkethe uchungechunge olulodwa lwezihlungi. Uyaboniswa esithombeni.

Ihlola injini ye-Mediastreamer2 VoIP. Ingxenye 12

Igrafu evamile lapho, kanye nezihlungi ezenziwe ngomumo ze-media streamer, kusetshenziswa izihlungi ezine zobuciko F1...F4, zezinhlobo ezine ezihlukene, ozenze kudala futhi ungangabazi ngokunemba kwazo. Nokho, ake sicabange ukuthi eziningana zazo zinokuvuza kwenkumbulo. Uma sisebenzisa uhlelo lwethu lokuqapha isihlaziyi, sifunda embikweni waso ukuthi isihlungi esithile sicele inani elithile lememori futhi asizange siyibuyisele kunqwaba yezikhathi ezingu-N. Ungaqagela kalula ukuthi kuzoba khona isixhumanisi semisebenzi yokuhlunga yangaphakathi yohlobo MS_VOID_SOURCE. Umsebenzi wakhe uwukuthatha inkumbulo enqwabeni. Ezinye izihlungi kufanele ziyibuyisele lapho. Labo. sizolibona iqiniso lokuvuza.

Ukuze kunqunywe ukuthi yisiphi isigaba sepayipi lapho kube khona ukungasebenzi okuholela ekuvuzeni kwenkumbulo, kuhlongozwa ukuba kwethulwe isihlungi esengeziwe esimane siguqule imilayezo isuke kokufakiwe iye kokuphumayo, kodwa ngesikhathi esifanayo idale ikhophi yomlayezo wokufaka ongakhanyi. , kodwa kunalokho evamile β€œesindayo,” bese isusa ngokuphelele umlayezo owamukelwe emnyango. Isihlungi esinjalo sizosibiza ngokuthi i-insulator. Sikholelwa ukuthi njengoba isihlungi silula, akukho ukuvuza kuso. Futhi enye impahla enhle - uma siyifaka noma yikuphi kugrafu yethu, lokhu ngeke kuthinte ukusebenza kwesifunda nganoma iyiphi indlela. Sizobonisa isihlungi-isihlukanisi ngesimo sendilinga enesekhethi ephindwe kabili.

Sivula isihlukanisi ngokushesha ngemva kwesihlungi se-voidsource:
Ihlola injini ye-Mediastreamer2 VoIP. Ingxenye 12

Siqhuba uhlelo nge-analyzer futhi, futhi siyabona ukuthi kulokhu i-analyzer izosola i-insulator. Phela, nguye manje odala amabhlogo wedatha, abese elahlekelwa isihlungi esinganaki esingaziwa (noma izihlungi). Isinyathelo esilandelayo ukuhambisa isivikelo ochungechungeni uye kwesokudla, ngesihlungi esisodwa, bese uqala ukuhlaziya futhi. Ngakho-ke, isinyathelo ngesinyathelo sihambisa i-isolator kwesokudla, sizothola isimo lapho ku-analyser elandelayo kubika inani lamabhulokhi enkumbulo "avuthiwe" azokwehla. Lokhu kusho ukuthi kulesi sinyathelo isivikelo sasiseketango ngokushesha ngemva kwesihlungi senkinga. Uma bekukhona kuphela okokuhlunga "okubi", khona-ke ukuvuza kuzonyamalala ngokuphelele. Ngakho, senze isihlungi esinenkinga sasendaweni (noma esisodwa kwezimbalwa). Ngemva kokuthi "silungisile" isihlungi, singaqhubeka sihambisa isihlukanisi kwesokudla eduze kweketango size sikunqobe ngokuphelele ukuvuza kwenkumbulo.

Ukusetshenziswa kwesihlungi esihlukanisayo

Ukufakwa kwe-isolator kubukeka njengesihlungi esijwayelekile. Ifayela likanhlokweni:

/* Π€Π°ΠΉΠ» iso_filter.h  ОписаниС ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. */

#ifndef iso_filter_h
#define iso_filter_h

/* Π—Π°Π΄Π°Π΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. */
#include <mediastreamer2/msfilter.h>

#define MY_ISO_FILTER_ID 1024

extern MSFilterDesc iso_filter_desc;

#endif

Isihlungi ngokwaso:

/* Π€Π°ΠΉΠ» iso_filter.c  ОписаниС ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. */

#include "iso_filter.h"

    static void
iso_init (MSFilter * f)
{
}
    static void
iso_uninit (MSFilter * f)
{
}

    static void
iso_process (MSFilter * f)
{
    mblk_t *im;

    while ((im = ms_queue_get (f->inputs[0])) != NULL)
    {
        ms_queue_put (f->outputs[0], copymsg (im));
        freemsg (im);
    }
}

static MSFilterMethod iso_methods[] = {
    {0, NULL}
};

MSFilterDesc iso_filter_desc = {
    MY_ISO_FILTER_ID,
    "iso_filter",
    "A filter that reads from input and copy to its output.",
    MS_FILTER_OTHER,
    NULL,
    1,
    1,
    iso_init,
    NULL,
    iso_process,
    NULL,
    iso_uninit,
    iso_methods
};

MS_FILTER_DESC_EXPORT (iso_desc)

Indlela yokushintsha imisebenzi yokuphatha inkumbulo

Ukuze uthole olunye ucwaningo olucashile, i-media streamer inikeza ikhono lokushintsha imisebenzi yokufinyelela inkumbulo ngeyakho, okuthi, ngaphezu komsebenzi oyinhloko, izorekhoda "Ubani, kuphi futhi ngani". Imisebenzi emithathu iyashintshwa. Lokhu kwenziwa kanje:

OrtpMemoryFunctions reserv;
OrtpMemoryFunctions my;

reserv.malloc_fun = ortp_malloc;
reserv.realloc_fun = ortp_realloc;
reserv.free_fun = ortp_free;

my.malloc_fun = &my_malloc;
my.realloc_fun = &my_realloc;
my.free_fun = &my_free;

ortp_set_memory_functions(&my);

Lesi sici sisiza ezimweni lapho i-analyzer ibambezela ukusebenza kwezihlungi kangangokuthi ukusebenza kwesistimu lapho isifunda sethu sakhiwe khona kuphazamiseka. Esimweni esinjalo, kufanele ulahle i-analyzer futhi usebenzise esikhundleni semisebenzi yokusebenza ngenkumbulo.

Sicabangele i-algorithm yezenzo yegrafu elula engaqukethe amagatsha. Kodwa le ndlela ingasetshenziswa kwamanye amacala, yebo ngokuyinkimbinkimbi, kodwa umqondo uhlala ufana.

Esihlokweni esilandelayo, sizobheka udaba lokulinganisa umthwalo kuthikha nezindlela zokulwa nomthwalo wekhompyutha oweqile kumsakazi wemidiya.

Source: www.habr.com

Engeza amazwana