{"id":77011,"date":"2020-04-07T01:42:55","date_gmt":"2020-04-06T23:42:55","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1"},"modified":"2021-02-16T09:44:41","modified_gmt":"2021-02-16T07:44:41","slug":"izuchaem-voip-dvizhok-mediastreamer2-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","title":{"rendered":"Explor\u00e2nd motorul VoIP Mediastreamer2. Partea 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Materialul articolului provine de pe canalul meu <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">zen<\/a><\/noindex>.<\/p>\n<h2 id=\"vvedenie\">Introducere<\/h2>\n<p>Acest articol este \u00eenceputul unei serii de articole despre procesarea \u00een timp real a datelor media folosind motorul Mediastreamer2. \u00cen timpul expunerii vor fi necesare abilit\u0103\u021bi minime de utilizare a terminalului Linux \u0219i de programare \u00een C.<\/p>\n<p>Mediastreamer2 este un motor VoIP care st\u0103 la baza unui proiect popular open-source de telefonie VoIP. <noindex><a rel=\"nofollow\" href=\"http:\/\/linphone.org\/\">Linphone<\/a><\/noindex>. \u00cen Linphone, Mediastreamer2 implementeaz\u0103 toate func\u021biile legate de audio \u0219i video. O list\u0103 detaliat\u0103 a capacit\u0103\u021bilor motorului poate fi g\u0103sit\u0103 pe aceast\u0103 pagin\u0103 Mediastreamer. Codul surs\u0103 se afl\u0103 aici: <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.linphone.org\/BC\/public\/mediastreamer2\">GitLab<\/a><\/noindex>.<\/p>\n<p>\u00cen continuare, pentru comoditate, vom folosi denumirea \u00een rom\u00e2n\u0103 a cuv\u00e2ntului Mediastreamer2: \u201emidiastreamer\u201d.<\/p>\n<p>Istoria cre\u0103rii sale nu este foarte clar\u0103, dar judec\u00e2nd dup\u0103 codul s\u0103u surs\u0103, a folosit anterior biblioteca <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GLib\">Glib<\/a><\/noindex>, ceea ce sugereaz\u0103 posibila sa leg\u0103tur\u0103 \u00eendep\u0103rtat\u0103 cu <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GStreamer\">GStreamer<\/a><\/noindex>. Comparativ, mediastreamer pare mai u\u0219or. Prima versiune a Linphone a ap\u0103rut \u00een 2001, a\u0219a c\u0103, \u00een prezent, mediastreamer exist\u0103 \u0219i se dezvolt\u0103 de aproape 20 de ani.<\/p>\n<p>La baza mediastreamer-ului se afl\u0103 o arhitectur\u0103 numit\u0103 \u201eData flow\u201d (flux de date). Un exemplu de astfel de arhitectur\u0103 este prezentat \u00een imaginea de mai jos.<\/p>\n<p><img decoding=\"async\" alt=\"Explor\u00e2nd motorul VoIP Mediastreamer2. Partea 1\" src=\"\/wp-content\/uploads\/2020\/04\/b05c34a9ee8c79fb39b439db32239071.jpg\" style=\"display:block;margin: 0 auto;\"><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>\u00cen aceast\u0103 arhitectur\u0103, algoritmul de procesare a datelor este definit nu prin codul de programare, ci printr-un diagram\u0103 (graf) de conectare a func\u021biilor, pe care le po\u021bi organiza \u00een orice ordine. Aceste func\u021bii se numesc filtre.<\/p>\n<p>Aceast\u0103 arhitectur\u0103 permite realizarea func\u021bionalit\u0103\u021bii de procesare a mediilor sub form\u0103 de set de filtre, conectate \u00eentr-o schem\u0103 de procesare \u0219i transmitere a traficului RTP de c\u0103tre telefonul VoIP.<\/p>\n<p>Posibilitatea de a conecta filtrele \u00een scheme arbitrari, dezvoltarea u\u0219oar\u0103 a filtrelor noi \u0219i implementarea mediastreamer-ului ca o bibliotec\u0103 separat\u0103 independent\u0103 permit utilizarea sa \u0219i \u00een alte proiecte. Proiectul poate fi \u00een domeniul VoIP, deoarece exist\u0103 posibilitatea de a ad\u0103uga filtre realizate manual.<\/p>\n<p>Biblioteca de filtre livrat\u0103 implicit este suficient de bogat\u0103 \u0219i, dup\u0103 cum s-a spus, poate fi extins\u0103 cu filtre dezvoltate de utilizatori. Dar mai \u00eent\u00e2i, vom descrie filtrele gata f\u0103cute care sunt furnizate \u00eempreun\u0103 cu mediastreamer-ul. Iat\u0103 lista lor:<\/p>\n<h3 id=\"zvukovye-filtry\">Filtre audio<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-zvuka\">Captur\u0103 \u0219i redare a sunetului<\/h4>\n<ul>\n<li>Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ<\/li>\n<li>Sunet nativ Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ<\/li>\n<li>Serviciul Audio Queue (Mac OS X): MS_AQ_WRITE, MS_AQ_READ<\/li>\n<li>Serviciul Audio Unit (Mac OS X)<\/li>\n<li>Arts (Linux): MS_ARTS_WRITE, MS_ARTS_READ<\/li>\n<li>DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ<\/li>\n<li>Redare fi\u0219iere (raw\/wav\/pcap) (Linux): MS_FILE_PLAYER<\/li>\n<li>Redare fi\u0219iere (raw\/wav) (Windows): MS_WINSND_READ<\/li>\n<li>\u00cenregistrare \u00een fi\u0219ier (wav) (Linux): MS_FILE_REC<\/li>\n<li>\u00cenregistrare \u00een fi\u0219ier (wav) (Windows): MS_WINSND_WRITE<\/li>\n<li>Mac Audio Unit (Mac OS X)<\/li>\n<li>MME (Windows)<\/li>\n<li>OSS (Linux): MS_OSS_WRITE, MS_OSS_READ<\/li>\n<li>PortAudio (Mac OS X)<\/li>\n<li>PulseAudio (Linux): MS_PULSE_WRITE, MS_PULSE_READ<\/li>\n<li>Windows Sound (Windows)<\/li>\n<\/ul>\n<h4 id=\"kodirovaniedekodirovanie-zvuka\">Codificare\/decodificare audio<\/h4>\n<ul>\n<li>G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC<\/li>\n<li>G.711 \u00b5-law: MS_ULAW_DEC, MS_ULAW_ENC<\/li>\n<li>G.722: MS_G722_DEC, MS_G722_ENC<\/li>\n<li>G.726: MS_G726_32_ENC, MS_G726_24_ENC, MS_G726_16_ENC<\/li>\n<li>GSM: MS_GSM_DEC, MS_GSM_ENC<\/li>\n<li>PCM liniar: MS_L16_ENC, MS_L16_DEC<\/li>\n<li>Speex: MS_SPEEX_ENC, MS_SPEEX_DEC<\/li>\n<\/ul>\n<h4 id=\"obrabotka-zvuka\">Procesare audio<\/h4>\n<ul>\n<li>Conversie canal (mono-&gt;stereo, stereo-&gt;mono): MS_CHANNEL_ADAPTER<\/li>\n<li>Conferin\u021b\u0103: MS_CONF<\/li>\n<li>Generator DTMF: MS_DTMF_GEN<\/li>\n<li>Anulare ecou (speex): MS_SPEEX_EC<\/li>\n<li>Equalizator: MS_EQUALIZER<\/li>\n<li>Mixer: MS_MIXER<\/li>\n<li>Compensator pierdere pachete (PLC): MS_GENERIC_PLC<\/li>\n<li>Resampler: MS_RESAMPLE<\/li>\n<li>Detector tonuri: MS_TONE_DETECTOR<\/li>\n<li>Control volum \u0219i m\u0103surare nivel semnal: MS_VOLUME<\/li>\n<\/ul>\n<h3 id=\"filtry-video\">Filtre video<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-video\">Captur\u0103 \u0219i redare video<\/h4>\n<ul>\n<li>Captur\u0103 Android<\/li>\n<li>Redare Android<\/li>\n<li>Captur\u0103 AV Foundation (iOS)<\/li>\n<li>Redare AV Foundation (iOS)<\/li>\n<li>Captur\u0103 DirectShow (Windows)<\/li>\n<li>Redare DrawDib (Windows)<\/li>\n<li>Redare extern\u0103 \u2014 Trimitere video la nivel \u00eenalt<\/li>\n<li>Redare GLX (Linux): MS_GLXVIDEO<\/li>\n<li>Mire \u2014 Imagine sintetic\u0103 \u00een mi\u0219care: MS_MIRE<\/li>\n<li>Redare OpenGL (Mac OS X)<\/li>\n<li>Redare OpenGL ES2 (Android)<\/li>\n<li>Captur\u0103 Quicktime (Mac OS X)<\/li>\n<li>Redare SDL: MS_SDL_OUT<\/li>\n<li>Iesire imagini statice: MS_STATIC_IMAGE<\/li>\n<li>Captur\u0103 Video For Linux (V4L) (Linux): MS_V4L<\/li>\n<li>Captur\u0103 Video For Linux 2 (V4L2) (Linux): MS_V4L2_CAPTURE<\/li>\n<li>Captur\u0103 Video4windows (DirectShow) (Windows)<\/li>\n<li>Captur\u0103 Video4windows (DirectShow) (Windows CE)<\/li>\n<li>Captur\u0103 Video For Windows (vfw) (Windows)<\/li>\n<li>Redare XV (Linux)<\/li>\n<\/ul>\n<h4 id=\"kodirovaniedekodirovanie-video\">Codare\/decodare video<\/h4>\n<ul>\n<li>H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC<\/li>\n<li>H.264 (doar decodor): MS_H264_DEC<\/li>\n<li>Theora: MS_THEORA_ENC, MS_THEORA_DEC<\/li>\n<li>VP8: MS_VP8_ENC, MS_VP8_DEC<\/li>\n<\/ul>\n<h4 id=\"obrabotka-video\">Procesare video<\/h4>\n<ul>\n<li>Instantanee JPEG<\/li>\n<li>Converter format pixel: MS_PIX_CONV<\/li>\n<li>Redimensionare<\/li>\n<li>Alte filtre<\/li>\n<li>Schimb de blocuri de date \u00eentre threaduri: MS_ITC_SOURCE, MS_ITC_SINK<\/li>\n<li>Colectare blocuri de date din mai multe intr\u0103ri \u00eentr-o ie\u0219ire: MS_JOIN<\/li>\n<li>RTP primire\/trimitere: MS_RTP_SEND, MS_RTP_RECV<\/li>\n<li>Copiere date intrare \u00een mai multe ie\u0219iri: MS_TEE<\/li>\n<li>Sarcin\u0103 consistent\u0103: MS_VOID_SINK<\/li>\n<li>Surs\u0103 de t\u0103cere: MS_VOID_SOURCE<\/li>\n<\/ul>\n<h3 id=\"plaginy\">Plugin-uri<\/h3>\n<h4 id=\"zvukovye-filtry-1\">Filtre audio<\/h4>\n<ul>\n<li>Decodor\/encoder AMR-NB<\/li>\n<li>Decodor\/encoder G.729<\/li>\n<li>Decodor\/encoder iLBC<\/li>\n<li>Decodor\/encoder SILK<br \/>\n<h4 id=\"filtry-video\">Filtre video<\/h4>\n<\/li>\n<li>Encoder H.264 software<\/li>\n<li>Decodor\/encoder H.264 V4L2 cu accelerare hardware<\/li>\n<\/ul>\n<p>Dup\u0103 o scurt\u0103 descriere a filtrului apare numele tipului folosit pentru crearea unei noi instan\u021be a acestui filtr. \u00cen continuare, ne vom referi la aceast\u0103 list\u0103.<\/p>\n<h2 id=\"ustanovka-pod-linux-ubuntu\">Instalare pe Linux Ubuntu<\/h2>\n<p>Acum vom efectua instalarea media streamer-ului pe computer \u0219i vom construi prima noastr\u0103 aplica\u021bie cu acesta.<\/p>\n<p>Instalarea Mediastremer2 pe un computer sau pe o ma\u0219in\u0103 virtual\u0103 care ruleaz\u0103 Ubuntu nu necesit\u0103 abilit\u0103\u021bi speciale. Aici \u0219i mai departe, simbolul \u201e$\u201d va indica promptul shell pentru introducerea comenzilor. Adic\u0103, dac\u0103 \u00een listare vede\u021bi acest simbol la \u00eenceputul unui r\u00e2nd, \u00eenseamn\u0103 c\u0103 acea linie con\u021bine comenzile care trebuie executate \u00een terminal.<\/p>\n<p>Se presupune c\u0103, \u00een timpul desf\u0103\u0219ur\u0103rii ac\u021biunilor descrise \u00een acest articol, computerul dumneavoastr\u0103 are acces la re\u021beaua Internet.<\/p>\n<h4 id=\"ustanovka-paketa-libmediastremer-dev\">Instalarea pachetului libmediastremer-dev<\/h4>\n<p>Deschidem terminalul \u0219i tast\u0103m comanda:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get update<\/code><\/pre>\n<p>Va fi solicitat\u0103 parola pentru a efectua modific\u0103ri, introduce\u021bi-o \u0219i managerul de pachete \u00ee\u0219i va actualiza bazele. Dup\u0103 aceasta, trebuie s\u0103 efectua\u021bi:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install libmediastreamer-dev<\/code><\/pre>\n<p>Vor fi desc\u0103rcate \u0219i instalate automat pachetele de dependen\u021b\u0103 necesare \u0219i biblioteca media streamer.<\/p>\n<p>Dimensiunea total\u0103 a pachetelor deb de dependen\u021b\u0103 desc\u0103rcate va fi de aproximativ 35 MB. Detalii despre pachetul instalat pot fi ob\u021binute cu comanda:<\/p>\n<pre><code class=\"bash\">$ dpkg -s libmediastreamer-dev<\/code><\/pre>\n<p>Exemplul de r\u0103spuns:<\/p>\n<pre><code class=\"bash\">Pachet: libmediastreamer-dev\nStare: instalat corect\nPrioritate: op\u021bional\nSec\u021biune: libdevel\nDimensiune-Instalat: 244\n\u00centre\u021bin\u0103tor: Ubuntu Developers \nArhitectur\u0103: amd64\nSurs\u0103: linphone\nVersiune: 3.6.1-2.5\nDepinde: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev\nDescriere: Biblioteca media a telefonului web Linphone - fi\u0219iere pentru dezvoltare\nLinphone este un telefon internet audio \u0219i video care folose\u0219te protocolul SIP. Acesta\nare o interfa\u021b\u0103 GTK+ \u0219i console, include o varietate mare de codecuri audio \u0219i video\n\u0219i furnizeaz\u0103 func\u021bionalit\u0103\u021bi de IM.\n.\nAcest pachet con\u021bine bibliotecile de dezvoltare pentru gestionarea opera\u021biunilor media.\n\u00centre\u021bin\u0103tor-original: Debian VoIP Team \nHomepage: http:\/\/www.linphone.org\/\n<\/code><\/pre>\n<h4 id=\"ustanovka-instrumentov-razrabotki\">Instalarea instrumentelor de dezvoltare<\/h4>\n<p>Instal\u0103m compilatorul C \u0219i instrumentele sale asociate:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install gcc<\/code><\/pre>\n<p>Verific\u0103m rezultatul, cer\u00e2nd versiunea compilatorului:<\/p>\n<pre><code class=\"bash\">$ gcc --version<\/code><\/pre>\n<p>R\u0103spunsul ar trebui s\u0103 fie aproximativ a\u0219a:<\/p>\n<pre><code class=\"bash\">gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609\nCopyright (C) 2015 Free Software Foundation, Inc.\nAcesta este un software liber; vezi sursa pentru condi\u021biile de copiere. Nu exist\u0103\ngaran\u021bie; nu chiar pentru V\u00c2NZARE sau ADECVARE PENTRU UN SCOP ANUMIT.<\/code><\/pre>\n<h4 id=\"sborka-i-zapusk-probnogo-prilozheniya\">Compilarea \u0219i rularea aplica\u021biei de prob\u0103<\/h4>\n<p>Cre\u0103m \u00een <em>home<\/em> un folder pentru proiectele noastre de \u00eenv\u0103\u021bare, s\u0103-l numim <em>mstutorial<\/em>:<\/p>\n<pre><code class=\"bash\">$ mkdir ~\/mstutorial<\/code><\/pre>\n<p>Folosi\u021bi editorul dumneavoastr\u0103 de text preferat \u0219i crea\u021bi un fi\u0219ier C-program cu numele <em>mstest.c<\/em> cu urm\u0103torul con\u021binut:<\/p>\n<pre><code class=\"cpp\">#include \"stdio.h\"\n#include &lt;mediastreamer2\/mscommon.h&gt;\nint main()\n{\n  ms_init();\n  printf (\"Mediastreamer is ready.n\");\n}<\/code><\/pre>\n<p>Acesta efectueaz\u0103 ini\u021bializarea media streamer-ului, afi\u0219eaz\u0103 un mesaj de \u00eent\u00e2mpinare \u0219i finalizeaz\u0103 execu\u021bia.<\/p>\n<p>Salv\u0103m fi\u0219ierul \u0219i compil\u0103m aplica\u021bia de test cu comanda:<\/p>\n<pre><code class=\"bash\">$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>V\u0103 rug\u0103m s\u0103 re\u021bine\u021bi c\u0103 linia<\/p>\n<pre><code class=\"bash\">`pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>este \u00eenchis \u00een ghilimelele care se afl\u0103 pe tastatur\u0103, acolo unde se afl\u0103 \u0219i litera \u201e\u0401\u201d.<\/p>\n<p>Dac\u0103 fi\u0219ierul nu con\u021bine erori, atunci dup\u0103 compilare va ap\u0103rea un fi\u0219ier \u00een director <em>mstest<\/em>. Rul\u0103m programul:<\/p>\n<pre><code class=\"bash\">$ .\\\/mstest<\/code><\/pre>\n<p>Rezultatul va fi astfel:<\/p>\n<pre><code class=\"bash\">ALSA lib conf.c:4738:(snd_config_expand) Parametrii necunoscu\u021bi 0\nALSA lib control.c:954:(snd_ctl_open_noupdate) CTL invalid default:0\nortp-warning-Imposibil de ata\u0219at mixer la card: argument invalid\nALSA lib conf.c:4738:(snd_config_expand) Parametrii necunoscu\u021bi 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) PCM necunoscut default:0\nALSA lib conf.c:4738:(snd_config_expand) Parametrii necunoscu\u021bi 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) PCM necunoscut default:0\nortp-warning-Straniu, placa de sunet HDA Intel PCH nu pare capabil\u0103 de nimic, re\u00eencerc\u00e2nd cu plughw...\nMediastreamer este preg\u0103tit.<\/code><\/pre>\n<p>\u00cen aceast\u0103 list\u0103 vedem mesajele de eroare pe care le returneaz\u0103 biblioteca ALSA, utilizat\u0103 pentru gestionarea pl\u0103cii de sunet. Dezvoltatorii mediastreamerului consider\u0103 c\u0103 aceasta este normal. \u00cen acest caz, suntem nevoi\u021bi s\u0103 fim de acord cu ei.<\/p>\n<p>Acum suntem preg\u0103ti\u021bi s\u0103 lucr\u0103m cu mediastreamerul. Am instalat biblioteca mediastreamer, instrumentul de compilare \u0219i am verificat, folosind aplica\u021bia de testare, c\u0103 instrumentele sunt configurate, iar mediastreamerul se ini\u021bializeaz\u0103 cu succes.<\/p>\n<p>\u00cen urm\u0103toarea <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495728\/\">pe care l-a\u021bi citit<\/a><\/noindex> vom crea o aplica\u021bie care va compila \u0219i va lansa procesarea semnalului audio \u00eentr-un lan\u021b de mai multe filtre.<\/p>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495702\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0438\u0436\u043a\u0430 Mediastreamer2. \u0412 \u0445\u043e\u0434\u0435 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 Linux \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421\u0438. Mediastreamer2 \u044d\u0442\u043e VoIP-\u0434\u0432\u0438\u0436\u043e\u043a, \u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e open-source \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e voip-\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 Linphone. \u0412 Linphone Mediastreamer2 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":77012,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-77011","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0437\u0443\u0447\u0430\u0435\u043c VoIP-\u0434\u0432\u0438\u0436\u043e\u043a Mediastreamer2. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-06T23:42:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-02-16T07:44:41+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Studim motorul VoIP Mediastreamer2. Partea 1 | ProHoster","description":"Materialul articolului este preluat de pe canalul meu de Zen.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0437\u0443\u0447\u0430\u0435\u043c VoIP-\u0434\u0432\u0438\u0436\u043e\u043a Mediastreamer2. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster","og:description":"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-06T23:42:55+00:00","article:modified_time":"2021-02-16T07:44:41+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"77011","title":null,"description":"","keywords":"","keyphrases":null,"primary_term":null,"canonical_url":"","og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:25:30","updated":"2022-09-28 05:33:38","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/77011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=77011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/77011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/77012"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=77011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=77011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=77011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}