{"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\/nl\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","title":{"rendered":"Leren over de VoIP-engine Mediastreamer2. Deel 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Het materiaal van dit artikel is afkomstig van mijn <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">zen-kanaal<\/a><\/noindex>.<\/p>\n<h2 id=\"vvedenie\">Inleiding<\/h2>\n<p>Dit artikel is het begin van een serie artikelen over realtime verwerking van mediagegevens met de Mediastreamer2-engine. Tijdens de uitleg zullen minimale vaardigheden in het gebruik van de Linux-terminal en programmeren in de C-taal vereist zijn.<\/p>\n<p>Mediastreamer2 is een VoIP-engine die de basis vormt van het populaire open-source project van de software VoIP-telefoon. <noindex><a rel=\"nofollow\" href=\"http:\/\/linphone.org\/\">Linphone<\/a><\/noindex>. In Linphone implementeert Mediastreamer2 alle functies met betrekking tot audio en video. Een uitgebreide lijst van mogelijkheden van de engine is te vinden op deze pagina van Mediastreamer. De broncode is hier te vinden: <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.linphone.org\/BC\/public\/mediastreamer2\">GitLab<\/a><\/noindex>.<\/p>\n<p>Verderop in de tekst zullen we, ter vereenvoudiging, in plaats van het woord Mediastreamer2 zijn Nederlandse benaming gebruiken: \u2018mediastreamer\u2019.<\/p>\n<p>De geschiedenis van de ontwikkeling is niet helemaal duidelijk, maar gezien de broncode eerder gebruik maakte van de bibliotheek <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GLib\">Glib<\/a><\/noindex>, suggereert dit een mogelijke verre verwantschap met <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GStreamer\">GStreamer<\/a><\/noindex>. In vergelijking hiermee lijkt mediastreamer veel lichter. De eerste versie van Linphone verscheen in 2001, dus op dit moment bestaat en ontwikkelt mediastreamer zich al bijna 20 jaar.<\/p>\n<p>De mediastreamer is gebaseerd op een architectuur die \u2018Data flow\u2019 (gegevensstroom) wordt genoemd. Een voorbeeld van zo'n architectuur is hieronder afgebeeld.<\/p>\n<p><img decoding=\"async\" alt=\"Leren over de VoIP-engine Mediastreamer2. Deel 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>In deze architectuur wordt het algoritme voor gegevensverwerking niet bepaald door de programmeercode, maar door een diagram (grafiek) van hoe functies met elkaar zijn verbonden, die in om het even welke volgorde kunnen worden opgesteld. Deze functies worden filters genoemd.<\/p>\n<p>Deze architectuur maakt het mogelijk om media-verwerkingsfunctionaliteit te implementeren in de vorm van een set filters, die zijn verbonden in een schema voor de verwerking en overdracht van RTP-verkeer van de VoIP-telefoon.<\/p>\n<p>De mogelijkheid om filters in willekeurige schema's te verbinden, de eenvoudige ontwikkeling van nieuwe filters en de implementatie van de mediastreamer als een aparte bibliotheek, maken het mogelijk om het ook in andere projecten te gebruiken. Bovendien kan het project zich op het gebied van VoIP bevinden, omdat het mogelijk is om zelfgemaakte filters toe te voegen.<\/p>\n<p>De standaardgeleverde filterbibliotheek is behoorlijk uitgebreid en zoals eerder vermeld, kan deze worden uitgebreid met filters die zelf zijn ontwikkeld. Maar laten we eerst de bestaande filters beschrijven die samen met de mediastreamer worden geleverd. Hier is hun lijst:<\/p>\n<h3 id=\"zvukovye-filtry\">Audiobronnen<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-zvuka\">Geluid vastleggen en afspelen<\/h4>\n<ul>\n<li>Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ<\/li>\n<li>Android native sound (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>Arts (Linux): MS_ARTS_WRITE, MS_ARTS_READ<\/li>\n<li>DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ<\/li>\n<li>Bestandspeler (raw\/wav\/pcap bestanden) (Linux): MS_FILE_PLAYER<\/li>\n<li>Bestandspeler (raw\/wav bestanden) (Windows): MS_WINSND_READ<\/li>\n<li>Opname in bestand (wav bestanden) (Linux): MS_FILE_REC<\/li>\n<li>Opname in bestand (wav bestanden) (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\">Coderen\/decoderen van geluid<\/h4>\n<ul>\n<li>G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC<\/li>\n<li>G.711 \u03bc-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>Lineaire 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\">Geluidverwerking<\/h4>\n<ul>\n<li>Kanaalverandering (mono-&gt; stereo, stereo-&gt; mono): MS_CHANNEL_ADAPTER<\/li>\n<li>Conferentie: MS_CONF<\/li>\n<li>DTMF-generator: MS_DTMF_GEN<\/li>\n<li>Echo-onderdrukking (speex): MS_SPEEX_EC<\/li>\n<li>Equalizer: MS_EQUALIZER<\/li>\n<li>Mixer: MS_MIXER<\/li>\n<li>Verlies van pakkettencompensator (PLC): MS_GENERIC_PLC<\/li>\n<li>Resampler: MS_RESAMPLE<\/li>\n<li>Toondetector: MS_TONE_DETECTOR<\/li>\n<li>Volume controle en signaalniveau meting: MS_VOLUME<\/li>\n<\/ul>\n<h3 id=\"filtry-video\">Videofilters<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-video\">Videovangst en -weergave<\/h4>\n<ul>\n<li>Android opname<\/li>\n<li>Android weergave<\/li>\n<li>AV Foundation opname (iOS)<\/li>\n<li>AV Foundation weergave (iOS)<\/li>\n<li>DirectShow opname (Windows)<\/li>\n<li>DrawDib weergave (Windows)<\/li>\n<li>Externe weergave \u2014 Video naar bovenste laag verzenden<\/li>\n<li>GLX weergave (Linux): MS_GLXVIDEO<\/li>\n<li>Mire \u2014 Synthesebeeld: MS_MIRE<\/li>\n<li>OpenGL weergave (Mac OS X)<\/li>\n<li>OpenGL ES2 weergave (Android)<\/li>\n<li>Quicktime opname (Mac OS X)<\/li>\n<li>SDL weergave: MS_SDL_OUT<\/li>\n<li>Weergave van statische afbeeldingen: MS_STATIC_IMAGE<\/li>\n<li>Video Voor Linux (V4L) opname (Linux): MS_V4L<\/li>\n<li>Video Voor Linux 2 (V4L2) opname (Linux): MS_V4L2_CAPTURE<\/li>\n<li>Video4windows (DirectShow) opname (Windows)<\/li>\n<li>Video4windows (DirectShow) opname (Windows CE)<\/li>\n<li>Video Voor Windows (vfw) opname (Windows)<\/li>\n<li>XV weergave (Linux)<\/li>\n<\/ul>\n<h4 id=\"kodirovaniedekodirovanie-video\">Codering \/ decodering van 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 (alleen decoder): 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\">Videoprocessing<\/h4>\n<ul>\n<li>JPEG snapshot<\/li>\n<li>Pixel formaat converter: MS_PIX_CONV<\/li>\n<li>Resizer<\/li>\n<li>Overige filters<\/li>\n<li>Gegevensblokuitwisseling tussen threads: MS_ITC_SOURCE, MS_ITC_SINK<\/li>\n<li>Gegevensblokverzameling van meerdere ingangen naar \u00e9\u00e9n uitgang: MS_JOIN<\/li>\n<li>RTP ontvangst\/verzending: MS_RTP_SEND, MS_RTP_RECV<\/li>\n<li>Kopi\u00ebren van invoergegevens naar meerdere uitgangen: MS_TEE<\/li>\n<li>Consistente belasting: MS_VOID_SINK<\/li>\n<li>Stiltebron: MS_VOID_SOURCE<\/li>\n<\/ul>\n<h3 id=\"plaginy\">Plug-ins<\/h3>\n<h4 id=\"zvukovye-filtry-1\">Audiobronnen<\/h4>\n<ul>\n<li>AMR-NB encoder\/decoder<\/li>\n<li>G.729 encoder\/decoder<\/li>\n<li>iLBC encoder\/decoder<\/li>\n<li>SILK encoder\/decoder<br \/>\n<h4 id=\"filtry-video\">Videofilters<\/h4>\n<\/li>\n<li>H.264 software encoder<\/li>\n<li>H.264 V4L2 encoder\/decoder met hardwareversnelling<\/li>\n<\/ul>\n<p>Na de korte beschrijving van de filter verschijnt de naam van het type dat wordt gebruikt bij het maken van een nieuwe instantie van dit filter. In latere verwijzingen zullen we naar deze lijst verwijzen.<\/p>\n<h2 id=\"ustanovka-pod-linux-ubuntu\">Installatie onder Linux Ubuntu<\/h2>\n<p>Nu gaan we de mediastramer op de computer installeren en onze eerste applicatie ermee bouwen.<\/p>\n<p>Het installeren van Mediastreamer2 op een computer of virtuele machine onder Ubuntu vereist geen bijzondere vaardigheden. Hier en verder worden we met het symbool \u2018$\u2019 aangeduid als de shell prompt voor het invoeren van commando's. Als je deze teken in de lijst ziet aan het begin van een regel, betekent dit dat het een regel is die commando's voor uitvoering in de terminal toont.<\/p>\n<p>We gaan ervan uit dat uw computer tijdens de uitvoering van de stappen die in dit artikel worden beschreven toegang heeft tot het internet.<\/p>\n<h4 id=\"ustanovka-paketa-libmediastremer-dev\">Installatie van het pakket libmediastremer-dev<\/h4>\n<p>We starten de terminal en typen het commando in:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get update<\/code><\/pre>\n<p>Er zal om een wachtwoord gevraagd worden voor het aanbrengen van wijzigingen, voer het in en de pakketbeheerder zal zijn databases bijwerken. Voer daarna het volgende uit:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install libmediastreamer-dev<\/code><\/pre>\n<p>De benodigde afhankelijkheidspakketten en de mediastramerbibliotheek zullen automatisch worden gedownload en ge\u00efnstalleerd.<\/p>\n<p>De totale grootte van de gedownloade deb-pakketten van afhankelijkheden zal ongeveer 35 MB bedragen. U kunt gedetailleerde informatie over het ge\u00efnstalleerde pakket opvragen met het commando:<\/p>\n<pre><code class=\"bash\">$ dpkg -s libmediastreamer-dev<\/code><\/pre>\n<p>Voorbeeld van een antwoord:<\/p>\n<pre><code class=\"bash\">Package: libmediastreamer-dev\nStatus: install ok installed\nPriority: optional\nSection: libdevel\nInstalled-Size: 244\nMaintainer: Ubuntu Developers \nArchitecture: amd64\nSource: linphone\nVersion: 3.6.1-2.5\nDepends: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev\nDescription: Linphone web phone's media library - development files\nLinphone is een audio- en video-internettelefoon die het SIP-protocol gebruikt. Het heeft een GTK+ en console-interface, omvat een grote verscheidenheid aan audio- en video-codecs, en biedt IM-functies.\n.\nDit pakket bevat de ontwikkelingsbibliotheken voor het afhandelen van media-operaties.\nOriginal-Maintainer: Debian VoIP Team \nHomepage: http:\/\/www.linphone.org\/\n<\/code><\/pre>\n<h4 id=\"ustanovka-instrumentov-razrabotki\">Installatie van ontwikkeltools<\/h4>\n<p>We installeren de C-compiler en de bijbehorende tools:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install gcc<\/code><\/pre>\n<p>We controleren het resultaat door de versie van de compiler op te vragen:<\/p>\n<pre><code class=\"bash\">$ gcc --version<\/code><\/pre>\n<p>Het antwoord zou ongeveer als volgt moeten zijn:<\/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.\nDit is gratis software; zie de bron voor kopieervoorwaarden. Er is GEEN\nwaarborg; zelfs niet voor VERHANDELBAARHEID of GESCHIKTHEID VOOR EEN BEPAALD DOEL.<\/code><\/pre>\n<h4 id=\"sborka-i-zapusk-probnogo-prilozheniya\">Bouwen en uitvoeren van de proefapplicatie<\/h4>\n<p>We maken een map voor onze leerprojecten aan in <em>home<\/em> en noemen deze <em>mstutorial<\/em>:<\/p>\n<pre><code class=\"bash\">$ mkdir ~\/mstutorial<\/code><\/pre>\n<p>Gebruik uw favoriete teksteditor en maak een C-programmabestand aan met de naam <em>mstest.c<\/em> met de volgende inhoud:<\/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>Het voert de initialisatie van de mediastramer uit, drukt een begroeting af en be\u00ebindigt de uitvoering.<\/p>\n<p>Sla het bestand op en compileer de testapplicatie met het commando:<\/p>\n<pre><code class=\"bash\">$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>Let op dat de regel<\/p>\n<pre><code class=\"bash\">`pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>is ingesloten in aanhalingstekens, die zich op het toetsenbord bevinden waar ook de letter \u2018\u0401\u2019 staat.<\/p>\n<p>Als het bestand geen fouten bevat, verschijnt er na de compilatie een bestand in de map <em>mstest<\/em>. We starten het programma:<\/p>\n<pre><code class=\"bash\">$ .\\\/mstest<\/code><\/pre>\n<p>Het resultaat zal als volgt zijn:<\/p>\n<pre><code class=\"bash\">ALSA lib conf.c:4738:(snd_config_expand) Onbekende parameters 0\nALSA lib control.c:954:(snd_ctl_open_noupdate) Ongeldige CTL default:0\nortp-warning-Kon mixer niet aan kaart koppelen: Ongeldig argument\nALSA lib conf.c:4738:(snd_config_expand) Onbekende parameters 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Onbekende PCM default:0\nALSA lib conf.c:4738:(snd_config_expand) Onbekende parameters 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Onbekende PCM default:0\nortp-warning-Vreemd, geluidskaart HDA Intel PCH lijkt niet in staat te zijn om iets te doen, opnieuw proberen met plughw...\nMediastreamer is klaar.<\/code><\/pre>\n<p>In deze lijst zien we de foutmeldingen die door de ALSA-bibliotheek worden weergegeven, die gebruikt wordt voor het beheren van de geluidskaart. De ontwikkelaars van de mediastreamer beschouwen dit als normaal. We zullen hen in dit geval gedwongen gelijk geven.<\/p>\n<p>Nu zijn we volledig voorbereid om met de mediastreamer te werken. We hebben de mediastreamer-bibliotheek ge\u00efnstalleerd, de compilatietool, en met behulp van een testapplicatie hebben we gecontroleerd dat de tools zijn ingesteld en dat de mediastreamer succesvol is ge\u00efnitialiseerd.<\/p>\n<p>In de volgende <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495728\/\">artikel<\/a><\/noindex> gaan we een applicatie cre\u00ebren die de verwerking van het audiosignaal in een keten van meerdere filters zal samenstellen en uitvoeren.<\/p>\n<p>Bron: <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.3 - 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\/nl\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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\udd47We bestuderen de VoIP-engine Mediastreamer2. Deel 1 | ProHoster","description":"Het materiaal van dit artikel is afkomstig van mijn Zen-kanaal.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/77011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=77011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/77011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/77012"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=77011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=77011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=77011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}