Undersøger VoIP-motoren Mediastreamer2. Del 3

Materialet i artiklen er taget fra min zen-kanal.

Undersøger VoIP-motoren Mediastreamer2. Del 3

Forbedrer eksemplet på en tonal generator

I den forrige artikel Vi har skrevet en applikation til den tonale generator og har med dens hjælp udvundet lyd fra computerens højttaler. Nu vil vi fokusere på, at vores program, når det afslutter, ikke returnerer hukommelsen tilbage til bunken. Det er tid til at få afklaring omkring dette spørgsmål.

Efter at skemaet ikke længere er nødvendigt, skal frigørelsen af hukommelsen begynde med at stoppe datakanalen. For dette skal kildeklokken til skemaet frakobles ved hjælp af funktionen ms_ticker_detach(). I vores tilfælde skal vi frakoble tikeren fra indgangen til filteret voidsource:

ms_ticker_detach(ticker, voidsource)

For øvrigt kan vi efter at have stoppet kanalen ændre dens skema og genoptage arbejdet ved at tilslutte tikeren igen.

Nu kan vi slette den ved hjælp af funktionen ms_ticker_destroy():

ms_ticker_destroy(ticker)

Kanalen er stoppet, og vi kan begynde at nedbryde dens dele, ved at frakoble filtrene. Dette gøres ved hjælp af funktionen ms_filter_unlink():

ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);

Argumenternes formål er det samme som for funktionen ms_filter_link().

Sletter nu de frakoblede filtre ved hjælp af ms_filter_destroy():

ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);

Ved at tilføje disse linjer til vores eksempel vil vi opnå en korrekt afslutning af programmet med hensyn til hukommelsesstyring.

Som vi kan se, krævede en korrekt afslutning af programmet, at vi tilføjede cirka det samme antal kodelinjer som i dens begyndelse, og i gennemsnit var der fire linjer kode pr. filter. Det viser sig, at størrelsen på programmets kode vil vokse proportionelt med antallet af filtre, der anvendes i projektet. Hvis vi taler om tusinde filtre i skemaet, så vil dine kodelinjer blive tilføjet med fire tusinde linjer rutinemæssige operationer til oprettelse og destruktion.

Nu ved du, hvordan man korrekt afslutter et program, der bruger mediestreamer. I de kommende eksempler vil jeg for korthedens skyld "glemme" at gøre det. Men glemmer du det?

Udviklerne af mediestreameren har ikke forudset softwareværktøjer til at lette manipulationen af filtre under samling/nedrivning af skemaer. Ikke desto mindre er der en helper, der hurtigt giver mulighed for at indsætte/fjerne et filter fra skemaet.

Vi vender tilbage til at løse dette spørgsmål senere, når antallet af filtre i vores eksempler overstiger et par dusin.

I næste artikel Vi vil samle et signalniveau-måleinstrument og lære at aflæse måleresultatet fra filteret. Vi vil vurdere målingsnøjagtigheden.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster