Ṣiṣawari ẹrọ Mediastreamer2 VoIP. Apa 12

Awọn ohun elo ti awọn article ti wa ni ya lati mi zen ikanni.

Ṣiṣawari ẹrọ Mediastreamer2 VoIP. Apa 12

Ni ikẹhin article, Mo ṣe ileri lati ṣe akiyesi ọrọ ti iṣiro idiyele lori ami-ami ati awọn ọna lati dojuko fifuye iširo ti o pọju ni ṣiṣan media. Ṣugbọn Mo pinnu pe yoo jẹ ọgbọn diẹ sii lati bo awọn ọran ti awọn asẹ iṣẹ n ṣatunṣe aṣiṣe ti o ni ibatan si gbigbe data ati lẹhinna ronu awọn ọran ti iṣapeye iṣẹ.

N ṣatunṣe aṣiṣe awọn asẹ

Lẹhin ti a wo ẹrọ fun gbigbe data ni ṣiṣan media ni nkan ti tẹlẹ, yoo jẹ ọgbọn lati sọrọ nipa awọn ewu ti o farapamọ ninu rẹ. Ọkan ninu awọn ẹya ti ipilẹ “sisan data” ni pe iranti jẹ ipin lati okiti ni awọn asẹ ti o wa ni orisun ti sisan data, ati pe iranti ti ni ominira ati pada si okiti nipasẹ awọn asẹ ti o wa ni opin ṣiṣan naa. ona. Ni afikun, ẹda data titun ati iparun rẹ le waye ni ibikan laarin. Ni gbogbogbo, itusilẹ iranti jẹ ṣiṣe nipasẹ àlẹmọ ti o yatọ ju eyiti o ṣẹda bulọọki data naa.

Lati oju wiwo ti ibojuwo iranti sihin, yoo jẹ ironu fun àlẹmọ, nigbati o ba gba bulọọki titẹ sii, lati pa a run lẹsẹkẹsẹ lẹhin sisẹ, ni ominira iranti, ati lati ṣe agbejade bulọọki tuntun ti a ṣẹda pẹlu data iṣelọpọ. Ni ọran yii, jijo iranti kan ninu àlẹmọ yoo wa ni rọọrun - ti olutupalẹ ba rii jijo kan ninu àlẹmọ, lẹhinna àlẹmọ atẹle ko run awọn bulọọki ti nwọle daradara ati pe aṣiṣe wa ninu rẹ. Ṣugbọn lati oju-ọna ti mimu iṣẹ ṣiṣe giga, ọna yii lati ṣiṣẹ pẹlu awọn bulọọki data kii ṣe iṣelọpọ - o yori si nọmba nla ti awọn iṣẹ lati pin / iranti ọfẹ fun awọn bulọọki data laisi abajade to wulo.

Fun idi eyi, awọn asẹ ṣiṣan media, ni ibere ki o ma ṣe fa fifalẹ sisẹ data, lo awọn iṣẹ ti o ṣẹda awọn ẹda ti o rọrun nigba didakọ awọn ifiranṣẹ (a sọrọ nipa wọn ninu nkan ti tẹlẹ). Awọn iṣẹ wọnyi ṣẹda apẹẹrẹ tuntun ti akọsori ifiranṣẹ nikan nipa “sisopọ” si i Àkọsílẹ data lati ifiranṣẹ “atijọ” ti a daakọ. Bi abajade, awọn akọle meji ti wa ni asopọ si bulọọki data kan ati pe counter itọkasi ni bulọọki data ti pọ si. Ṣugbọn yoo dabi awọn ifiranṣẹ meji. Awọn ifiranṣẹ diẹ sii le wa pẹlu iru bulọọki data “socialized”, fun apẹẹrẹ, àlẹmọ MS_TEE n ṣe agbejade mejila ti iru awọn ẹda ina ni ẹẹkan, pinpin wọn laarin awọn abajade rẹ. Ti gbogbo awọn asẹ ninu pq ba ṣiṣẹ ni deede, ni ipari opo gigun ti epo, counter itọkasi yẹ ki o de odo ati pe iṣẹ itusilẹ iranti yoo pe: ms_ọfẹ(). Ti ipe ko ba waye, lẹhinna nkan iranti yii kii yoo da pada si okiti mọ, i.e. yoo "jo". Iye owo fun lilo awọn adakọ ina ni ipadanu agbara lati pinnu ni irọrun (bii ọran pẹlu awọn adakọ deede) eyiti àlẹmọ ayaworan jẹ iranti jijo.

Niwọn igba ti awọn olupilẹṣẹ ṣiṣan media jẹ iduro fun wiwa awọn n jo iranti ni awọn asẹ abinibi, o ṣeese kii yoo ni lati ṣatunṣe wọn. Ṣugbọn pẹlu àlẹmọ iṣẹ ọwọ rẹ, iwọ ni tata ti idunnu tirẹ, ati pe akoko ti o lo wiwa awọn n jo ninu koodu rẹ yoo da lori deede rẹ. Lati dinku akoko n ṣatunṣe aṣiṣe rẹ, a nilo lati wo awọn ilana wiwa jijo nigbati o ba n ṣe agbekalẹ awọn asẹ. Ni afikun, o le ṣẹlẹ pe jijo naa yoo farahan ararẹ nikan nigbati a ba lo àlẹmọ ni eto gidi kan, nibiti nọmba ti “awọn ifura” le jẹ nla ati akoko fun n ṣatunṣe aṣiṣe ni opin.

Bawo ni iranti n jo ara rẹ?

O jẹ ọgbọn lati ro pe ninu iṣelọpọ eto oke yoo ṣe afihan ipin ti o pọ si ti iranti ti o gba nipasẹ ohun elo rẹ.

Ifihan ita gbangba yoo jẹ pe ni aaye kan eto naa yoo bẹrẹ lati dahun laiyara si iṣipopada Asin ati laiyara tun iboju naa pada. O tun ṣee ṣe pe log eto yoo dagba, jijẹ aaye lori dirafu lile rẹ. Ni ọran yii, ohun elo rẹ yoo bẹrẹ lati huwa ajeji, ko dahun si awọn aṣẹ, ko le ṣii faili kan, ati bẹbẹ lọ.

Lati ṣawari iṣẹlẹ ti jijo, a yoo lo oluyẹwo iranti (lẹhin eyi tọka si bi olutupalẹ). O le jẹ valgrind (o dara nkan nipa rẹ) tabi ti a ṣe sinu akopọ gcc Iranti imototo tabi ohunkohun miiran. Ti olutupalẹ ba fihan pe jijo kan waye ninu ọkan ninu awọn asẹ ayaworan, lẹhinna eyi tumọ si pe o to akoko lati lo ọkan ninu awọn ọna ti a ṣalaye ni isalẹ.

Mẹta Pines Ọna

Gẹgẹbi a ti sọ loke, ti o ba jẹ jijo iranti kan, olutupalẹ yoo tọka si àlẹmọ ti o beere ipin iranti iranti lati okiti naa. Ṣugbọn kii yoo tọka si àlẹmọ ti “gbagbe” lati da pada, eyiti, ni otitọ, jẹ ẹlẹbi. Nitorinaa, oluyẹwo le jẹrisi awọn ibẹru wa nikan, ṣugbọn kii ṣe afihan gbongbo wọn.

Lati wa ipo ti àlẹmọ “buburu” ninu ayaworan naa, o le lọ nipa didin ayaworan si nọmba ti o kere ju ti awọn apa nibiti olutupalẹ tun ṣe awari jijo kan ki o ṣe agbegbe àlẹmọ iṣoro ni awọn pines mẹta ti o ku.

Ṣugbọn o le ṣẹlẹ pe nipa idinku nọmba awọn asẹ ninu aworan naa, iwọ yoo da ipa ọna ibaraenisepo deede laarin awọn asẹ ati awọn eroja miiran ti eto rẹ ati jijo ko ni han mọ. Ni ọran yii, iwọ yoo ni lati ṣiṣẹ pẹlu iwọn iwọn kikun ati lo ọna ti a ṣe ilana ni isalẹ.

Sisun insulator ọna

Fun ayedero ti igbejade, a yoo lo aworan kan ti o ni ẹwọn kan ti awọn asẹ. O ti han ninu aworan.

Ṣiṣawari ẹrọ Mediastreamer2 VoIP. Apa 12

Aworan deede ninu eyiti, pẹlu awọn asẹ ṣiṣan media ti o ṣetan, awọn asẹ iṣẹ mẹrin F1 ... F4 ni a lo, ti awọn oriṣi mẹrin, eyiti o ṣe ni igba pipẹ sẹhin ati pe ko ni iyemeji nipa titọ wọn. Sibẹsibẹ, jẹ ki a ro pe ọpọlọpọ ninu wọn ni awọn n jo iranti. Nigba ti a ba ṣiṣe eto wa lati ṣe atẹle olutupalẹ, a kọ ẹkọ lati inu ijabọ rẹ pe àlẹmọ kan beere iye iranti kan ati pe ko da pada si opo N ni iye igba. O le ni irọrun gboju pe ọna asopọ yoo wa si awọn iṣẹ àlẹmọ inu ti iru MS_VOID_SOURCE. Iṣẹ rẹ ni lati gba iranti lati okiti. Awọn asẹ miiran gbọdọ da pada sibẹ. Awon. a yoo rii otitọ ti jijo naa.

Lati pinnu ninu apakan wo ni opo gigun ti epo ti o wa ni aiṣedeede ti o yori si jijo iranti, o ni imọran lati ṣafihan àlẹmọ afikun ti o rọrun lati yi awọn ifiranṣẹ pada lati titẹ sii si iṣelọpọ, ṣugbọn ni akoko kanna ṣẹda ẹda ti ifiranṣẹ titẹ sii ti kii ṣe ina. , ṣugbọn kuku deede “eru” kan, lẹhinna paarẹ ifiranṣẹ ti o gba ni ẹnu-ọna patapata. A yoo pe iru àlẹmọ ni insulator. A gbagbọ pe niwọn igba ti àlẹmọ rọrun, ko si jijo ninu rẹ. Ati ohun-ini rere diẹ sii - ti a ba ṣafikun nibikibi ninu aworan wa, eyi kii yoo ni ipa lori iṣẹ ti Circuit ni eyikeyi ọna. A yoo ṣe apejuwe àlẹmọ-isolator ni irisi Circle kan pẹlu iyika meji.

A tan-an ipinya lẹsẹkẹsẹ lẹhin àlẹmọ orisun void:
Ṣiṣawari ẹrọ Mediastreamer2 VoIP. Apa 12

A tun ṣe eto naa pẹlu olutupalẹ lẹẹkansi, ati pe a rii pe ni akoko yii olutupalẹ yoo jẹbi insulator naa. Lẹhinna, o jẹ ẹniti o ṣẹda awọn bulọọki ti data bayi, eyiti o sọnu lẹhinna nipasẹ àlẹmọ aibikita aimọ (tabi awọn asẹ). Igbesẹ ti o tẹle ni lati gbe insulator lẹgbẹẹ ẹwọn si apa ọtun, nipasẹ àlẹmọ kan, ki o tun bẹrẹ itupalẹ lẹẹkansi. Nitorinaa, ni igbese nipa igbese gbigbe ipinya si apa ọtun, a yoo gba ipo kan nibiti ninu ijabọ atunnkanka atẹle nọmba ti awọn bulọọki iranti “ti jo” yoo dinku. Eyi tumọ si pe ni ipele yii insulator wa ninu pq lẹsẹkẹsẹ lẹhin àlẹmọ iṣoro naa. Ti àlẹmọ “buburu” kan ṣoṣo ba wa, lẹhinna jijo naa yoo parẹ lapapọ. Nitorinaa, a ṣe agbegbe àlẹmọ iṣoro naa (tabi ọkan ninu ọpọlọpọ). Nini “ti o wa titi” àlẹmọ, a le tẹsiwaju lati gbe ipinya si apa ọtun lẹgbẹẹ pq titi a o fi ṣẹgun awọn n jo iranti patapata.

Imuse ti ohun isolator àlẹmọ

Imuse isolator dabi àlẹmọ deede. Faili akọsori:

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

Àlẹmọ funrararẹ:

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

Ọna fun rirọpo awọn iṣẹ iṣakoso iranti

Fun diẹ ẹ sii abele iwadi, awọn media streamer pese ni agbara lati ropo iranti wiwọle awọn iṣẹ pẹlu ara rẹ, eyi ti, ni afikun si awọn akọkọ iṣẹ, yoo gba silẹ "Ta, nibo ati idi ti". Awọn iṣẹ mẹta ti rọpo. Eyi ni a ṣe bi atẹle:

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

Ẹya yii ṣe iranlọwọ ni awọn ọran nibiti olutupalẹ fa fifalẹ iṣẹ ti awọn asẹ tobẹẹ ti iṣẹ ṣiṣe ti eto ninu eyiti a ti kọ Circuit wa ni idilọwọ. Ni iru ipo bẹẹ, o ni lati fi olutupalẹ silẹ ki o lo fidipo awọn iṣẹ fun ṣiṣẹ pẹlu iranti.

A ti ṣe akiyesi algorithm kan ti awọn iṣe fun iwọn ti o rọrun ti ko ni awọn ẹka. Ṣugbọn ọna yii le ṣee lo si awọn ọran miiran, dajudaju pẹlu idiju diẹ sii, ṣugbọn ero naa wa kanna.

Ninu nkan ti o tẹle, a yoo wo ọran ti iṣiro idiyele lori ami ami kan ati awọn ọna lati koju ẹru iširo ti o pọju ni ṣiṣan media kan.

orisun: www.habr.com

Fi ọrọìwòye kun