Омӯзиши муҳаррики Mediastreamer2 VoIP. Қисми 12

Материали макола аз ман гирифта шудааст канали zen.

Омӯзиши муҳаррики Mediastreamer2 VoIP. Қисми 12

Дар охир мақола, Ман ваъда додам, ки масъалаи баҳодиҳии сарборӣ ба тикер ва роҳҳои мубориза бо сарбории аз ҳад зиёди компютерӣ дар стримери медиаро баррасӣ кунам. Аммо ман қарор додам, ки мантиқӣтар аст, ки масъалаҳои ислоҳи филтрҳои ҳунармандии марбут ба ҳаракати додаҳоро баррасӣ кунам ва танҳо пас аз он масъалаҳои оптимизатсияи фаъолиятро баррасӣ кунам.

Муайян кардани филтрҳои ҳунарӣ

Пас аз он ки мо механизми интиқоли маълумотро дар стримери медиа дар мақолаи қаблӣ дида баромадем, дар бораи хатарҳои дар он пинҳоншуда сӯҳбат кардан мантиқӣ мебуд. Яке аз хусусиятҳои принсипи «Ҷараёни маълумот» дар он аст, ки хотира аз тӯда дар филтрҳое, ки дар манбаи ҷараёни додаҳо ҷойгиранд, ҷудо карда мешавад ва хотира бо филтрҳои дар охири ҷараёни ҷойгиршуда озод ва ба тӯда бармегардад. роҳ. Илова бар ин, эҷоди маълумоти нав ва нобудшавии он метавонад дар байни онҳо рух диҳад. Умуман, озодкунии хотира аз ҷониби филтри дигар аз филтри дигаре, ки блоки маълумотро офаридааст, иҷро карда мешавад.

Аз нуқтаи назари мониторинги хотираи шаффоф, мувофиқ аст, ки филтр ҳангоми гирифтани блоки воридотӣ, онро пас аз коркард, озод кардани хотира фавран нобуд кунад ва блоки навтаъсисро бо маълумоти баромад баромад кунад. Дар ин ҳолат, ихроҷи хотира дар филтр ба осонӣ пайгирӣ карда мешавад - агар анализатор ихроҷро дар филтр муайян кунад, пас филтри навбатӣ блокҳои воридшударо дуруст нест намекунад ва дар он хатогӣ вуҷуд дорад. Аммо аз нуқтаи назари нигоҳ доштани нишондиҳандаҳои баланд, ин равиш ба кор бо блокҳои додаҳо самаранок нест - он боиси шумораи зиёди амалиётҳо барои ҷудо кардан/хотираи озод барои блокҳои додаҳо бе ягон натиҷаи муфид мегардад.

Аз ин сабаб, филтрҳои стримерҳои медиа бо мақсади суст накардани коркарди маълумот, функсияҳоеро истифода мебаранд, ки ҳангоми нусхабардории паёмҳо нусхаҳои осон эҷод мекунанд (мо дар бораи онҳо дар мақолаи қаблӣ сӯҳбат карда будем). Ин функсияҳо танҳо як мисоли нави сарлавҳаи паёмро бо роҳи "часпонидани" блоки маълумот аз паёми "кӯҳна"-и нусхабардорӣшуда эҷод мекунанд. Дар натиҷа, ду сарлавҳа ба як блоки додаҳо замима карда мешаванд ва ҳисобкунаки истинод дар блоки додаҳо афзоиш меёбад. Аммо он ба ду паём монанд хоҳад буд. Бо чунин блоки додаҳои "иҷтимоъшуда" паёмҳои бештар вуҷуд дошта метавонанд, масалан, филтри MS_TEE якбора даҳҳо чунин нусхаҳои равшанро тавлид мекунад ва онҳоро дар байни баромадҳои худ тақсим мекунад. Агар ҳамаи филтрҳо дар занҷир дуруст кор кунанд, дар охири қубур ин ҳисобкунаки истинод бояд ба сифр расад ва функсияи озодкунии хотира даъват карда мешавад: ms_free(). Агар занг рӯй надиҳад, пас ин порчаи хотира дигар ба тӯда баргардонида намешавад, яъне. он «резад» мешавад. Нархи истифодаи нусхаҳои сабук ин аз даст додани қобилияти ба осонӣ муайян кардани он аст (чунон ки дар сурати нусхаҳои муқаррарӣ) кадом филтри графикӣ хотираро ихроҷ мекунад.

Азбаски таҳиягарони стримерҳои медиа барои дарёфти ихроҷи хотира дар филтрҳои маҳаллӣ масъуланд, эҳтимолан ба шумо лозим нест, ки онҳоро ислоҳ кунед. Аммо бо филтри ҳунарии худ, шумо мағраи хушбахтии худ ҳастед ва вақте, ки шумо барои ҷустуҷӯи ихроҷ дар коди худ сарф мекунед, аз дақиқии шумо вобаста хоҳад буд. Барои кам кардани вақти ислоҳи шумо, мо бояд ҳангоми таҳияи филтрҳо ба усулҳои ошкор кардани ихроҷ назар кунем. Илова бар ин, он метавонад рӯй диҳад, ки ихроҷ танҳо вақте зоҳир мешавад, ки филтр дар системаи воқеӣ татбиқ карда мешавад, ки дар он шумораи "гумонбарон" метавонад зиёд бошад ва вақти ислоҳи ислоҳот маҳдуд бошад.

Ихроҷи хотира чӣ гуна зоҳир мешавад?

Мантиқан тахмин кардан мумкин аст, ки дар баромади барнома боло фоизи афзояндаи хотираи ишғолкардаи барномаи шуморо нишон медиҳад.

Зуҳуроти беруна ин аст, ки дар як лаҳза система ба ҳаракати муш оҳиста посух медиҳад ва экранро оҳиста аз нав кашидан мегирад. Инчунин мумкин аст, ки сабти система афзоиш ёбад ва дар диски сахти шумо ҷой кам кунад. Дар ин ҳолат, барномаи шумо ба таври аҷиб рафтор мекунад, ба фармонҳо ҷавоб намедиҳад, файлро кушода наметавонад ва ғайра.

Барои муайян кардани пайдоиши ихроҷ, мо анализатори хотираро (минбаъд анализатор номида мешавад) истифода мебарем. Ин метавонад бошад Валгринд (хуб мақола дар бораи он) ё дар компилятор сохта шудааст gcc Санитизатори хотира ё ягон чизи дигар. Агар анализатор нишон диҳад, ки дар яке аз филтрҳои графикӣ ихроҷ рух медиҳад, пас ин маънои онро дорад, ки вақти он расидааст, ки яке аз усулҳои дар зер тавсифшуда татбиқ карда шавад.

Усули се санавбар

Тавре ки дар боло зикр гардид, агар ихроҷи хотира вуҷуд дошта бошад, анализатор ба филтр ишора мекунад, ки аз тӯда ҷудокунии хотираро дархост кардааст. Аммо он филтреро, ки баргардонидани онро «фаромӯш кардааст», нишон намедиҳад, ки воқеан гунаҳкор аст. Ҳамин тариқ, анализатор метавонад танҳо тарси моро тасдиқ кунад, аммо решаи онҳоро нишон надиҳад.

Барои муайян кардани ҷойгиршавии филтри "бад" дар график, шумо метавонед бо коҳиш додани график ба миқдори ҳадди ақали гиреҳҳое, ки дар он анализатор ифлосро ошкор мекунад ва филтри мушкилотро дар се санавбар боқимонда ҷойгир кунед.

Аммо он метавонад рӯй диҳад, ки бо кам кардани шумораи филтрҳо дар график, шумо ҷараёни муқаррарии ҳамкории байни филтрҳо ва дигар унсурҳои системаи шуморо халалдор мекунед ва ихроҷ дигар пайдо намешавад. Дар ин ҳолат, ба шумо лозим меояд, ки бо як графикаи пурраи андоза кор кунед ва равиши дар поён овардашударо истифода баред.

Усули изолятсияи слайд

Барои содда кардани муаррифӣ, мо графикеро истифода мебарем, ки аз як занҷири филтрҳо иборат аст. Вай дар расм нишон дода шудааст.

Омӯзиши муҳаррики Mediastreamer2 VoIP. Қисми 12

Графикаи муқаррарӣ, ки дар он дар баробари филтрҳои тайёри медиавӣ, чор филтрҳои ҳунарии F1...F4 аз чор намуди гуногун истифода мешаванд, ки шумо онҳоро кайҳо пеш сохтаед ва ба дурустии онҳо шубҳа надоред. Бо вуҷуди ин, биёед фарз кунем, ки чанде аз онҳо ихроҷи хотира доранд. Барномаи худро барои мониторинги анализатор иҷро карда, мо аз гузориши он мефаҳмем, ки филтри муайян миқдори муайяни хотираро талаб кардааст ва онро чанд маротиба ба тӯдаи N барнагардондааст. Шумо метавонед ба осонӣ тахмин кунед, ки пайванд ба функсияҳои филтри дохилии навъи MS_VOID_SOURCE мавҷуд аст. Вазифаи ӯ гирифтани хотира аз тӯда аст. Филтрҳои дигар бояд онро ба он ҷо баргардонанд. Онхое. факти пошхуриро ошкор мекунем.

Барои муайян кардани он ки дар кадом қисмати қубур бефаъолиятӣ ба ихроҷи хотира оварда расонд, пешниҳод карда мешавад, ки филтри иловагӣ ҷорӣ карда шавад, ки он танҳо паёмҳоро аз вуруд ба баромад интиқол медиҳад, аммо дар айни замон нусхаи паёми вурудиро, ки сабук нест, эҷод мекунад. , балки як "вазнин" муқаррарӣ, пас паёми дар даромадгоҳ гирифташударо пурра нест мекунад. Мо чунин филтрро изолятор меномем. Мо боварӣ дорем, ки азбаски филтр оддӣ аст, дар он ягон ихроҷ нест. Ва боз як хусусияти мусбат - агар мо онро дар ягон ҷои графики худ илова кунем, ин ба кори схема ҳеҷ гуна таъсир намерасонад. Мо филтр-изоляторро дар шакли доира бо занҷири дукарата тасвир мекунем.

Мо дарҳол пас аз филтри манбаи ботил изоляторро фаъол мекунем:
Омӯзиши муҳаррики Mediastreamer2 VoIP. Қисми 12

Мо барномаро бо анализатор боз иҷро мекунем ва мебинем, ки ин дафъа анализатор изоляторро айбдор мекунад. Дар ниҳоят, маҳз ӯ ҳоло блокҳои маълумотро эҷод мекунад, ки баъдан аз ҷониби филтри (ё филтрҳо) номаълум гум мешаванд. Қадами навбатӣ ин аст, ки изоляторро қад-қади занҷир ба тарафи рост, бо як филтр интиқол диҳед ва таҳлилро дубора оғоз кунед. Ҳамин тавр, қадам ба қадам изоляторро ба тарафи рост ҳаракат карда, мо вазъиятеро ба даст меорем, ки дар гузориши навбатии анализатор шумораи блокҳои хотираи "хурда" кам мешавад. Ин маънои онро дорад, ки дар ин марҳила изолятор фавран пас аз филтри мушкилот дар занҷир буд. Агар танҳо як филтри "бад" мавҷуд бошад, он гоҳ ихроҷ тамоман нест мешавад. Ҳамин тариқ, мо филтри мушкилотро (ё яке аз якчанд) локализатсия кардем. Филтрро "сот" карда, мо метавонем ҳаракати изоляторро ба тарафи рост дар баробари занҷир идома диҳем, то он даме, ки ихроҷи хотираро комилан мағлуб кунем.

Татбиқи филтри изоляторӣ

Татбиқи изолятсия ба филтри муқаррарӣ монанд аст. Файли сарлавҳа:

/* Файл 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

Худи филтр:

/* Файл 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)

Усули иваз кардани функсияҳои идоракунии хотира

Барои таҳқиқоти дақиқтар, стримери медиа имкон медиҳад, ки функсияҳои дастрасии хотираро бо худ иваз кунед, ки ба ғайр аз кори асосӣ "Кӣ, дар куҷо ва чаро" -ро сабт мекунад. Се функсия иваз карда мешавад. Ин ба таври зерин анҷом дода мешавад:

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

Ин хусусият дар ҳолатҳое кӯмак мекунад, ки анализатор кори филтрҳоро чунон суст мекунад, ки кори системае, ки дар он схемаи мо сохта шудааст, халалдор мешавад. Дар чунин вазъият шумо бояд аз анализатор даст кашед ва ивазкунии функсияҳоро барои кор бо хотира истифода баред.

Мо алгоритми амалҳоро барои графики оддие баррасӣ кардем, ки шохаҳоро дар бар намегирад. Аммо ин равишро метавон ба мавридҳои дигар татбиқ кард, албатта бо мураккабии бештар, аммо идея ҳамоно боқӣ мемонад.

Дар мақолаи навбатӣ мо масъалаи баҳодиҳии сарборӣ ба тикер ва роҳҳои мубориза бо сарбории аз ҳад зиёди компютерӣ дар стримери медиаро баррасӣ хоҳем кард.

Манбаъ: will.com

Илова Эзоҳ