Kuongorora iyo Mediastreamer2 VoIP injini. Chikamu 12

Zvinyorwa zvechinyorwa zvakatorwa kubva kwangu zen channel.

Kuongorora iyo Mediastreamer2 VoIP injini. Chikamu 12

Pakupedzisira chinyorwa, Ndakavimbisa kufunga nezve nyaya yeticker load estimation uye nzira dzekugadzirisa zvakanyanya computing load mu media streamer. Asi ini ndakafunga kuti zvingave zvine musoro kuvhara nyaya dzekugadzirisa mafirita ane chekuita nekufamba kwedata uye wobva wafunga nyaya dzekuita.

Debugging craft filters

Mushure mekunge taongorora maitiro ekufambisa data mune media streamer mune yapfuura chinyorwa, zvingave zvine musoro kutaura nezve njodzi dzakavanzwa mairi. Chimwe chezvinhu zve "data flow" musimboti ndechekuti kugovaniswa kwendangariro kubva pamurwi kunoitika mumasefa ari panzvimbo yekuyerera kwedata, uye mafirita ari kumagumo enzira yekuyerera atove atogovera ndangariro nekudzoka. kumurwi. Mukuwedzera, kusikwa kwedata idzva uye kuparadzwa kwavo kunogona kuitika pane imwe nzvimbo munzvimbo dzepakati. Kazhinji, kusunungurwa kwekuyeuka kunoitwa nesefa kunze kweiyo yakagadzira data block.

Kubva pakuona kwekutarisa kwakajeka kwendangariro, zvingave zvine musoro kune sefa, kana ichinge yagamuchira chivharo chekuisa, kuti iparadze nekukurumidza mushure mekugadzirisa, kusunungura ndangariro, uye kuisa ichangobva kugadzirwa bhuroka ine yakabuda data pane zvakabuda. Muchiitiko ichi, ndangariro inodonhedza musefa inogona kuteedzerwa zviri nyore - kana muongorori akaona kuvuza musefa, ipapo sefa inoitevera haiparadzi zvidhinha zvinopinda uye paine chikanganiso mairi. Asi kubva pakuona kwekuchengetedza kushanda kwepamusoro, nzira iyi yekushanda nemabhuraki e data haina kubereka - inotungamira kune huwandu hukuru hwekushanda kugovera / yemahara ndangariro yezvivharo zvedata pasina chero kupedzwa kunobatsira.

Nechikonzero ichi, midhiya streamer mafirita, kuitira kuti isanonoke kugadzirisa data, shandisa mabasa anogadzira makopi akareruka pakukopa mameseji (takataura nezvawo mune yapfuura chinyorwa). Aya mabasa anongogadzira kopi nyowani yemusoro wemeseji ne "kubatanidza" data block kubva kune yakakopwa "yekare" meseji kwairi. Nekuda kweizvozvo, misoro miviri yakasungirirwa kune imwe data block uye referensi counter mu data block inowedzerwa. Asi zvinozoita kunge mameseji maviri. Panogona kuve nemamwe mameseji ane "yeruzhinji" data block, semuenzaniso, iyo MS_TEE sefa inogadzira gumi makopi emwenje kamwechete, ichiagovera pakati pezvainoburitsa. Kana ese mafirita mumaketani akashanda nemazvo, pakupera kwepombi iyi referensi kuverenga inofanira kusvika zero uye iyo memory deallocation basa ichadaidzwa: ms_free(). Kana kudana kusingaitiki, ipapo chidimbu ichi chekuyeuka hachichazodzoserwe kumurwi, i.e. iye "anodonha". Mutengo wekushandisa makopi akareruka kurasikirwa kwekugona kuona zviri nyore (sezvazvingave mukushandisa makopi akajairwa) umo girafu sefa ndangariro iri kubuda.

Sezvo basa rekutsvaga ndangariro rinodonha mumafirita e "native" riri nevagadziri vemedia streamer, saka kazhinji haufanirwe kuvagadzirisa. Asi nesefa yako yekugadzira, iwe pachako ndiwe hwiza yekufara kwako, uye nguva yaunoshandisa uchitsvaga kuvuza mukodhi yako zvinoenderana nekurongeka kwako. Kuti udzikise nguva yako yekugadzirisa, isu tinofanirwa kutarisa nzira dzekuvuza dzenzvimbo kana uchigadzira mafirita. Mukuwedzera, zvinogona kuitika kuti iyo inodonha ichazviratidza chete kana uchishandisa sefa mune chaiyo sisitimu, uko huwandu hwe "vanofungidzirwa" hunogona kunge hwakakura, uye nguva yekubvisa ishoma.

Kudeuka kwendangariro kunozviratidza sei kumene?

Zvine musoro kufunga kuti mukubuda kwepurogiramu pamusoro icharatidza kuwedzera muzana yendangariro inogarwa nekushandisa kwako.

Iko kuratidzwa kwekunze kunosanganisira chokwadi chekuti pane imwe nguva sisitimu ichaita zvishoma nezvishoma kune kufamba kwegonzo, zvishoma nezvishoma ichidhirowa skrini. Izvo zvakare zvinogoneka kuti iyo system log ichakura, ichidya nzvimbo pane hard drive. Muchiitiko ichi, chikumbiro chako chinotanga kuita zvisingaite, kusapindura kumirairo, haigone kuvhura faira, nezvimwe.

Kuti tizive chokwadi chekuvuza, isu tichashandisa memory analyzer (inozonzi iyo analyzer). Zvinogona kudaro valgrind (kugona chinyorwa nezvayo) kana kuvakwa mumubatanidzwa gcc MemorySanitizer kana chimwe chinhu. Kana iyo analyzer ikaratidza kuti kuvuza kunoitika mune imwe yemagirafu mafirita, zvinoreva kuti yave nguva yekushandisa imwe yenzira dzinotsanangurwa pazasi.

Three Pines Nzira

Sezvambotaurwa pamusoro, kana ndangariro yadonha, muongorori anonongedzera kune sefa yakakumbira ndangariro kugoverwa kubva pamurwi. Asi haizonongedze kune sefa iyo "yakakanganwa" kuidzosera, iyo, chaizvoizvo, ndiyo ine mhosva. Nokudaro, analyzer inogona kungosimbisa kutya kwedu, asi kwete kunongedzera kumudzi wavo.

Kuti uzive nzvimbo ye "yakaipa" sefa mugirafu, unogona kuenda nekudzikisira girafu kusvika pashoma nhamba yemanodhi apo muongorori achiri kuona padonhera uye kutsvaga iyo ine dambudziko sefa mumapaini matatu asara.

Asi zvinogona kuitika kuti nekudzikisa huwandu hwemafirita mukoramu iwe unozokanganisa yakajairika kosi yekudyidzana pakati pemafirita uye zvimwe zvinhu zve system yako uye kuvuza hakuchaonekwe. Muchiitiko ichi, iwe uchafanirwa kushanda negirafu yakazara-yakazara uye shandisa nzira inotsanangurwa pazasi.

Sliding insulator nzira

Kuti ratidziro iri nyore, tichashandisa girafu rine cheni imwe yemasefa. Anoratidzwa pamufananidzo.

Kuongorora iyo Mediastreamer2 VoIP injini. Chikamu 12

Girafu rakajairwa, umo, pamwe chete neyakagadzirirwa-yakagadzirwa midhiya mafirita, mafirita mana F1…F4 anoshandiswa, mana emhando dzakasiyana dzawakagadzira kare uye hauna kupokana nezve kurongeka kwavo. Zvisinei, ngatitii vanoverengeka vavo vane leak yendangariro. Pakumhanyisa chirongwa chedu chekutarisa cheanalyzer, tinodzidza kubva mushumo kuti imwe sefa yakakumbira imwe huwandu hwendangariro uye haina kuidzosera kumurwi N nguva. Zviri nyore kufungidzira kuti pachave nereferensi kune yemukati sefa mabasa eMS_VOID_SOURCE mhando. Basa rake nderekutora ndangariro kubva murwi. Mamwe masefa anofanira kuidzosera ikoko. Avo. tichawana yadeuka.

Kuti uone kuti ndechipi chikamu chekusashanda kwepombi chakaitika chakonzera kudonha kwendangariro, zvinokurudzirwa kuunza imwe sefa inongo shandura mameseji kubva pakuiswa kuenda kune inobuda, asi panguva imwe chete ichigadzira isiri-mwenje, yakajairika. "heavy" kopi yemeseji yekupinda, wobva wadzima meseji yasvika pakubuda.kupinda. Tichadaidza sefa yakadaro insulator. Isu tinotenda kuti sezvo sefa iri nyore, kuvuza mairi hakuna kubatanidzwa. Uye imwezve pfuma yakanaka - kana tikaiwedzera kune chero nzvimbo mugirafu yedu, saka izvi hazvizokanganisa kushanda kwedunhu nenzira ipi zvayo. Isu ticharatidza iyo insulator sefa sedenderedzwa ine kaviri contour.

Gonesa iyo isolator mushure meiyo voidsourse sefa:
Kuongorora iyo Mediastreamer2 VoIP injini. Chikamu 12

Isu tinomhanyisa chirongwa neanalyzer zvakare, uye tinoona kuti panguva ino, analyzer ichaisa mhosva kune iyo isolator. Mushure mezvose, ndiye iye zvino anogadzira zvidhinha zve data, izvo zvinozorasika neisingazivikanwe isina hanya sefa (kana mafirita). Nhanho inotevera ndeye kushandura insulator pamwe neketani kurudyi, nesefa imwe, uye wotanga kuongorora zvakare. Saka, nhanho nhanho, kufambisa iyo isolator kurudyi, isu tinowana mamiriro apo iyo nhamba ye "yakaburitswa" ndangariro inovhara mune inotevera analyzer report inoderera. Izvi zvinoreva kuti padanho iri insulator yakaguma yapinda mucheni pakarepo mushure medambudziko resefa. Kana paive nesefa imwe chete "yakaipa", ipapo iyo inodonha ichanyangarika zvachose. Nekudaro, isu takaisa iyo inonetsa sefa (kana imwe yeanoverengeka). Kuve ne "kugadzirisa" sefa, tinogona kuenderera mberi nekufambisa iyo isolator kurudyi pamwe neketani kudzamara ndangariro dzinodonha dzabviswa zvachose.

Kushandisa sefa yekuzviparadzanisa nevamwe

Iyo isolator yekumisikidza inotaridzika seyakajairika sefa. Header file:

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

Sefa pachayo:

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

Nzira yekutsiva memory manejimendi mabasa

Kuti uwane mamwe madiki ekutsvagisa, iyo midhiya inoyerera inopa kugona kutsiva ndangariro yekuwana mabasa neyako, iyo, kunze kwebasa guru, ichagadzirisa "Ndiani, kupi uye nei." Mabasa matatu ari kutsiviwa. Izvi zvinoitwa nenzira inotevera:

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);

Ichi chiitiko chinouya pakununura mumamiriro ezvinhu apo analyzer inoderedza mafiritsi zvakanyanya zvokuti kushanda kwegadziriro umo dunhu redu rakavakwa rinovhiringidzika. Mumamiriro ezvinhu akadaro, unofanira kusiya analyzer uye kushandisa kutsiva ndangariro mabasa.

Isu takafunga algorithm yezviito zvegirafu iri nyore isina matavi. Asi nzira iyi inogona kushandiswa kune dzimwe nyaya, hongu nekunetseka, asi pfungwa inoramba yakafanana.

Muchinyorwa chinotevera, isu tichatarisa nyaya yeticker mutoro fungidziro uye maitiro ekuita neakawandisa komputa mutoro mune media streamer.

Source: www.habr.com

Voeg