{"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\/et\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","title":{"rendered":"Uurime VoIP-mootorit Mediastreamer2. Osa 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Artikli sisu on p\u00e4rit minu <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">zen-kanalist<\/a><\/noindex>.<\/p>\n<h2 id=\"vvedenie\">Sissejuhatus<\/h2>\n<p>See artikkel on algusartiklite seeriast, mis k\u00e4sitleb reaalajas meediateabe t\u00f6\u00f6tlemist Mediastreamer2 mootoriga. Teema k\u00e4sitlemisel on vajalikud p\u00f5hioskused Linuxi terminali kasutamisel ja C keeles programmeerimisel.<\/p>\n<p>Mediastreamer2 on VoIP-mootor, mis on aluseks populaarsele avatud l\u00e4htekoodiga VoIP-telefoniprojektile <noindex><a rel=\"nofollow\" href=\"http:\/\/linphone.org\/\">Linphone<\/a><\/noindex>. Linphone's Mediastreamer2 rakendab k\u00f5iki heliga ja videoga seotud funktsioone. Mootori v\u00f5imaluste \u00fcksikasjaliku loendi leiate Mediastreameri lehelt. Allika kood on siin: <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.linphone.org\/BC\/public\/mediastreamer2\">GitLab<\/a><\/noindex>.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435, \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043b\u043e\u0432\u0430 Mediastreamer2 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0443\u0441\u0441\u043a\u0443\u044e \u043d\u043e\u0442\u0430\u0446\u0438\u044e: &#171;\u043c\u0435\u0434\u0438\u0430\u0441\u0442\u0440\u0438\u043c\u0435\u0440&#187;.<\/p>\n<p>Selle loomise ajalugu ei ole t\u00e4iesti selge, kuid arvestades selle l\u00e4htekoodi, on varasemalt kasutatud raamatukogu <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GLib\">Glib<\/a><\/noindex>, mis viitab meile v\u00f5imaliku kauge suguluse olemasolule <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GStreamer\">GStreamer<\/a><\/noindex>. V\u00f5rreldes temaga n\u00e4eb mediast streamer v\u00e4lja kergem. Esimene versioon Linphone\u2019ist ilmus 2001. aastal, seega on mediastreamer olemas ja areneb k\u00e4esoleval hetkel v\u00e4hem kui 20 aastat.<\/p>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u043c\u0435\u0434\u0438\u0430\u0441\u0442\u0440\u0438\u043c\u0435\u0440\u0430 \u043b\u0435\u0436\u0438\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f &#171;Data flow&#187; (\u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445). \u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d \u043d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 \u043d\u0438\u0436\u0435.<\/p>\n<p><img decoding=\"async\" alt=\"Uurime VoIP-mootorit Mediastreamer2. Osa 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>Selles arhitektuuris m\u00e4\u00e4ratakse andmete t\u00f6\u00f6tlemise algoritm mitte programmikoodiga, vaid funktsioonide \u00fchendamise skeemiga (graaf), mida saab \u00fcles ehitada igas j\u00e4rjestuses. Nende funktsioonide nimetatakse filtriteks.<\/p>\n<p>Selline arhitektuur v\u00f5imaldab rakendada meedia t\u00f6\u00f6tlemise funktsionaalsust filtrite kogumina, mis on \u00fchendatud VoIP-telefonide RTP-liiklust t\u00f6\u00f6tleva ja edastava skeemiga.<\/p>\n<p>Filtreid on v\u00f5imalik \u00fchendada vabalt skeemidesse, uute filtrite lihtne v\u00e4ljat\u00f6\u00f6tamine ning mediastreamer'i elluviimine iseseisva eraldi teegina, v\u00f5imaldab selle kasutamist ka teistes projektides. Lisaks v\u00f5ib projekt olla VoIP valdkonnas, kuna on v\u00f5imalik lisada k\u00e4sitsi valmistatud filtreid.<\/p>\n<p>Vaikimisi tarnitav filtrite teek on piisavalt rikas ja nagu juba \u00f6eldud, v\u00f5ib seda laiendada oma arendatud filtritega. Kuid k\u00f5igepealt kirjeldame valmis filtreid, mis tarnitakse koos mediastreamer'iga. Siin on nende nimekiri:<\/p>\n<h3 id=\"zvukovye-filtry\">Helifiltrid<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-zvuka\">Heli salvestamine ja esitamine<\/h4>\n<ul>\n<li>Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ<\/li>\n<li>Androidi kohalik heli (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ<\/li>\n<li>Audio Queue Service (Mac OS X): MS_AQ_WRITE, MS_AQ_READ<\/li>\n<li>Audio Unit Service (Mac OS X)<\/li>\n<li>Helid (Linux): MS_ARTS_WRITE, MS_ARTS_READ<\/li>\n<li>DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ<\/li>\n<li>Failide m\u00e4ngija (raw\/wav\/pcap failid) (Linux): MS_FILE_PLAYER<\/li>\n<li>Failide m\u00e4ngija (raw\/wav failid) (Windows): MS_WINSND_READ<\/li>\n<li>Faili salvestamine (wav failid) (Linux): MS_FILE_REC<\/li>\n<li>Faili salvestamine (wav failid) (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\">Heli kodeerimine\/dekodeerimine<\/h4>\n<ul>\n<li>G.711 a-seadus: MS_ALAW_DEC, MS_ALAW_ENC<\/li>\n<li>G.711 \u00b5-seadus: 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>Lineaarne PCM: MS_L16_ENC, MS_L16_DEC<\/li>\n<li>Speex: MS_SPEEX_ENC, MS_SPEEX_DEC<\/li>\n<\/ul>\n<h4 id=\"obrabotka-zvuka\">Heli t\u00f6\u00f6tlemine<\/h4>\n<ul>\n<li>Kanali muundamine (mono-&gt;stereo, stereo-&gt;mono): MS_CHANNEL_ADAPTER<\/li>\n<li>Konverents: MS_CONF<\/li>\n<li>DTMF generaator: MS_DTMF_GEN<\/li>\n<li>Kaja summutamine (speex): MS_SPEEX_EC<\/li>\n<li>Ekvalaiser: MS_EQUALIZER<\/li>\n<li>Mikser: MS_MIXER<\/li>\n<li>Pakettide kaotsimineku kompensaator (PLC): MS_GENERIC_PLC<\/li>\n<li>Uuesti n\u00e4idik: MS_RESAMPLE<\/li>\n<li>Heli detektor: MS_TONE_DETECTOR<\/li>\n<li>Heli k\u00f5vemuse juhtimine ja signaali taseme m\u00f5\u00f5tmine: MS_VOLUME<\/li>\n<\/ul>\n<h3 id=\"filtry-video\">Videofilterid<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-video\">Video haaramine ja esitamine<\/h4>\n<ul>\n<li>Androidi haaramine<\/li>\n<li>Androidi esitamine<\/li>\n<li>AV Foundation haaramine (iOS)<\/li>\n<li>AV Foundation esitamine (iOS)<\/li>\n<li>DirectShow haaramine (Windows)<\/li>\n<li>DrawDib esitamine (Windows)<\/li>\n<li>V\u00e4line esitamine \u2014 Video saatmine \u00fclemisele tasemele<\/li>\n<li>GLX esitamine (Linux): MS_GLXVIDEO<\/li>\n<li>Mire \u2014 s\u00fcnteetiline liikuva pildi esitamine: MS_MIRE<\/li>\n<li>OpenGL esitamine (Mac OS X)<\/li>\n<li>OpenGL ES2 esitamine (Android)<\/li>\n<li>Quicktime salvestamine (Mac OS X)<\/li>\n<li>SDL esitamine: MS_SDL_OUT<\/li>\n<li>Staaticute piltide v\u00e4ljund: MS_STATIC_IMAGE<\/li>\n<li>Video Linuxi jaoks (V4L) salvestamine (Linux): MS_V4L<\/li>\n<li>Video Linuxi jaoks 2 (V4L2) salvestamine (Linux): MS_V4L2_CAPTURE<\/li>\n<li>Video4windows (DirectShow) salvestamine (Windows)<\/li>\n<li>Video4windows (DirectShow) salvestamine (Windows CE)<\/li>\n<li>Windowsi video (vfw) salvestamine (Windows)<\/li>\n<li>XV esitamine (Linux)<\/li>\n<\/ul>\n<h4 id=\"kodirovaniedekodirovanie-video\">Video kodeerimine\/dekodeerimine<\/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 (ainult dekooder): 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\">Video t\u00f6\u00f6tlemine<\/h4>\n<ul>\n<li>JPEG hetkefoto<\/li>\n<li>Piksli vormingu konverter: MS_PIX_CONV<\/li>\n<li>Resize<\/li>\n<li>Muud filtrid<\/li>\n<li>Andmeplokkide vahetamine l\u00f5imede vahel: MS_ITC_SOURCE, MS_ITC_SINK<\/li>\n<li>Andmeplokkide kogumine mitmest sisendist \u00fchte v\u00e4ljundisse: MS_JOIN<\/li>\n<li>RTP vastuv\u00f5tt\/edastamine: MS_RTP_SEND, MS_RTP_RECV<\/li>\n<li>Sisendi koopiate edastamine mitmele v\u00e4ljundile: MS_TEE<\/li>\n<li>S\u00fcnkroniseeritud koormus: MS_VOID_SINK<\/li>\n<li>Vaikuse allikas: MS_VOID_SOURCE<\/li>\n<\/ul>\n<h3 id=\"plaginy\">Pluginad<\/h3>\n<h4 id=\"zvukovye-filtry-1\">Helifiltrid<\/h4>\n<ul>\n<li>AMR-NB kodeerija\/dekoodeerija<\/li>\n<li>G.729 kodeerija\/dekoodeerija<\/li>\n<li>iLBC kodeerija\/dekoodeerija<\/li>\n<li>SILK kodeerija\/dekoodeerija<br \/>\n<h4 id=\"filtry-video\">Videofilterid<\/h4>\n<\/li>\n<li>H.264 tarkvaraline kodeerija<\/li>\n<li>H.264 V4L2 kodeerija\/dekoodeerija riistvaralise kiirendusega<\/li>\n<\/ul>\n<p>Filtri l\u00fchikokkuv\u00f5tte j\u00e4rel kuvatakse t\u00fc\u00fcbi nimi, mida kasutatakse selle filtrielemendi loomisel. Edasi viidates nimetame seda nimekirja.<\/p>\n<h2 id=\"ustanovka-pod-linux-ubuntu\">Paigaldamine Linux Ubuntu s\u00fcsteemi<\/h2>\n<p>N\u00fc\u00fcd paigaldame meedia striimimise tarkvara arvutisse ja loome sellega oma esimese rakenduse.<\/p>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Mediastremer2 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Ubuntu \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0441\u043e\u0431\u044b\u0445 \u043d\u0430\u0432\u044b\u043a\u043e\u0432. \u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c &#171;$&#187; \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438 shell \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u0432 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435.<\/p>\n<p>Eeldatakse, et nende k\u00e4skude k\u00e4itamise ajal on teie arvutil juurdep\u00e4\u00e4s Internetile.<\/p>\n<h4 id=\"ustanovka-paketa-libmediastremer-dev\">Paketi libmediastremer-dev paigaldamine<\/h4>\n<p>Avame terminali ja sisestame k\u00e4su:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get update<\/code><\/pre>\n<p>K\u00fcsinud parooli muudatuste tegemiseks, sisestage see ja pakihaldur uuendab oma andmebaase. Seej\u00e4rel tuleb t\u00e4ita:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install libmediastreamer-dev<\/code><\/pre>\n<p>N\u00f5utavad s\u00f5ltuvuspaketid ja meedia striimimise teek installitakse automaatselt.<\/p>\n<p>Allalaaditud deb-s\u00f5ltuvuste kogumaht on umbes 35 MB. Teavet installitud paketi kohta saab vaadata k\u00e4suga:<\/p>\n<pre><code class=\"bash\">$ dpkg -s libmediastreamer-dev<\/code><\/pre>\n<p>N\u00e4idis vastus:<\/p>\n<pre><code class=\"bash\">Pakett: libmediastreamer-dev\nOleku: install OK installed\nPrioriteet: valikuline\nJaotis: libdevel\nInstallitud suurus: 244\nHooldaja: Ubuntu Developers \nArhitektuur: amd64\nAllikas: linphone\nVersioon: 3.6.1-2.5\nS\u00f5ltuvused: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev\nKirjeldus: Linphone veebitelefoni meediakogu - arendusfailid\nLinphone on SIP-protokolli kasutav audio- ja videotelefon. Sellel\non GTK+ ja konsooli liides, see sisaldab suurt valikut audio- ja videokoodekeid\nning pakub IM-funktsioone.\n.\nSee pakett sisaldab arendusteegi, mis k\u00e4sitleb meediaoperatsioone.\nAlgne hooldaja: Debian VoIP Team \nAvaleht: http:\/\/www.linphone.org\/\n<\/code><\/pre>\n<h4 id=\"ustanovka-instrumentov-razrabotki\">Arendust\u00f6\u00f6riistade installimine<\/h4>\n<p>Installime C keele kompilaatori ja sellega seotud t\u00f6\u00f6riistad:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install gcc<\/code><\/pre>\n<p>Kontrollime tulemust, k\u00fcsi kompilaatori versiooni:<\/p>\n<pre><code class=\"bash\">$ gcc --version<\/code><\/pre>\n<p>Vastus peaks olema umbes selline:<\/p>\n<pre><code class=\"bash\">gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609\nKopeerimis\u00f5igusi (C) 2015 Free Software Foundation, Inc.\nSee on tasuta tarkvara; vt allikat koopiate tingimuste jaoks. GARANTEERITUD EI OLE;\nmitte \u00fckski \u00e4ritsemise v\u00f5i konkreetse eesm\u00e4rgi sobivuse garantii.<\/code><\/pre>\n<h4 id=\"sborka-i-zapusk-probnogo-prilozheniya\">Prooviprogrammi koostamine ja k\u00e4ivitamine<\/h4>\n<p>Loome kausta <em>home<\/em> meie \u00f5ppeprojektide jaoks, nimetame selle <em>mstutorial<\/em>:<\/p>\n<pre><code class=\"bash\">$ mkdir ~\/mstutorial<\/code><\/pre>\n<p>Kasutage oma lemmik tekstiredaktorit ja looge C-programmi fail nimega <em>mstest.c<\/em> j\u00e4rgnevate sisuga:<\/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>See initsialiseerib mediastreameri, kuvab tervituse ja l\u00f5petab t\u00f6\u00f6.<\/p>\n<p>Salvestame faili ja kompileerime testrakenduse k\u00e4suga:<\/p>\n<pre><code class=\"bash\">$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>Pange t\u00e4hele, et rida<\/p>\n<pre><code class=\"bash\">`pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>\u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0435 \u0442\u0430\u043c \u0436\u0435 \u0433\u0434\u0435 \u0438 \u0431\u0443\u043a\u0432\u0430 &#171;\u0401&#187;.<\/p>\n<p>Kui fail ei sisalda vigu, siis p\u00e4rast kompileerimist ilmub katalooge fail <em>mstest<\/em>. K\u00e4ivitame programmi:<\/p>\n<pre><code class=\"bash\">$ .\/mstest<\/code><\/pre>\n<p>Tulemus on j\u00e4rgmine:<\/p>\n<pre><code class=\"bash\">ALSA lib conf.c:4738:(snd_config_expand) Tundmatud parameetrid 0\nALSA lib control.c:954:(snd_ctl_open_noupdate) Kehtetu CTL default:0\nortp-warning - Ei saanud mikserit kaardile kinnitada: Kehtetu argument\nALSA lib conf.c:4738:(snd_config_expand) Tundmatud parameetrid 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Tundmatu PCM default:0\nALSA lib conf.c:4738:(snd_config_expand) Tundmatud parameetrid 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Tundmatu PCM default:0\nortp-warning - Veider, et helikaart HDA Intel PCH ei tundu olevat millegiks v\u00f5imeline, proovime uuesti plughw...\nMediastreamer on valmis.<\/code><\/pre>\n<p>Selles loendis n\u00e4eme ALSA teekide genereeritavaid veateateid, mis on m\u00f5eldud helikaardi haldamiseks. Meedia voogesituse arendajad usuvad, et see on normaalne. Sel juhul peame kahjuks nendega n\u00f5ustuma.<\/p>\n<p>N\u00fc\u00fcd on meil k\u00f5ik valmis meedia voogesitajaga t\u00f6\u00f6tamiseks. Oleme installinud voogesituse teegi, kompileerimise t\u00f6\u00f6riista ja prooviklassi rakenduse, et kontrollida, et t\u00f6\u00f6riistad on seadistatud ja voogesitaja on edukalt algatatud.<\/p>\n<p>J\u00e4rgmisel <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495728\/\">artiklis<\/a><\/noindex> loome rakenduse, mis kogub ja k\u00e4ivitab helisignaali t\u00f6\u00f6tlemise mitmest filtrist koosnevas ahelas.<\/p>\n<p>Allikas: <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 4.9.10 - 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. \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\" \/>\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\/et\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/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\udd47Tutvume VoIP-mootoriga Mediastreamer2. Osa 1 | ProHoster","description":"Artikli sisu on p\u00e4rit minu Dzen-kanalist. Sissejuhatus See artikkel on esimene osa artiklite sarjast reaalajas meedia t\u00f6\u00f6tlemisest Mediastreamer2 mootoriga. Esituse k\u00e4igus vajatakse minimaalset Linuxi terminali ja C-programmeerimise oskust. Mediastreamer2 on VoIP-mootor, mis on aluseks populaarsele avatud koodi VoIP-telefoniprojekti Linphone. Linphone rakendab Mediastreamer2 k\u00f5iki funktsioone.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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. \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","og:url":"https:\/\/prohoster.info\/et\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/77011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=77011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/77011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/77012"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=77011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=77011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=77011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}