{"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\/de\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","title":{"rendered":"Studieren des VoIP-Engines Mediastreamer2. Teil 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Der Artikelinhalt stammt von meinem <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">Zen-Kanal<\/a><\/noindex>.<\/p>\n<h2 id=\"vvedenie\">Einf\u00fchrung<\/h2>\n<p>Dieser Artikel ist der Beginn einer Artikelreihe \u00fcber die Echtzeitverarbeitung von Mediendaten mit der Mediastreamer2-Engine. Im Verlauf der Darstellung werden minimale Kenntnisse in der Arbeit mit dem Linux-Terminal und Programmierung in C eingesetzt.<\/p>\n<p>Mediastreamer2 ist eine VoIP-Engine, die dem beliebten Open-Source-Projekt einer VoIP-Telefonsoftware zugrunde liegt. <noindex><a rel=\"nofollow\" href=\"http:\/\/linphone.org\/\">Linphone<\/a><\/noindex>. In Linphone implementiert Mediastreamer2 alle Funktionen, die mit Audio und Video zusammenh\u00e4ngen. Eine ausf\u00fchrliche Liste der Funktionen der Engine finden Sie auf dieser Mediastreamer-Seite. Der Quellcode ist hier verf\u00fcgbar: <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.linphone.org\/BC\/public\/mediastreamer2\">GitLab<\/a><\/noindex>.<\/p>\n<p>Im weiteren Verlauf des Textes werden wir zur Vereinfachung anstelle des Begriffs Mediastreamer2 die russische Bezeichnung \u201e\u043c\u0435\u0434\u0438\u0430\u0441\u0442\u0440\u0438\u043c\u0435\u0440\u201c verwenden.<\/p>\n<p>Die Entstehungsgeschichte ist nicht ganz klar, aber judging by its source code, it previously used the library <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GLib\">Glib<\/a><\/noindex>, was auf eine m\u00f6gliche entfernte Verwandtschaft mit <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GStreamer\">GStreamer<\/a><\/noindex>hindeutet. Im Vergleich dazu wirkt der Mediastreamer leichter. Die erste Version von Linphone erschien im Jahr 2001, sodass der Mediastreamer nun seit fast 20 Jahren existiert und sich weiterentwickelt.<\/p>\n<p>Der Mediastreamer basiert auf einer Architektur, die als \u201eData flow\u201c (Datenfluss) bezeichnet wird. Ein Beispiel f\u00fcr eine solche Architektur ist im untenstehenden Bild dargestellt.<\/p>\n<p><img decoding=\"async\" alt=\"Studieren des VoIP-Engines Mediastreamer2. Teil 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 dieser Architektur wird der Algorithmus zur Datenverarbeitung nicht durch Code, sondern durch ein Diagramm (Graf) der Verbindung von Funktionen definiert, die in beliebiger Reihenfolge angeordnet werden k\u00f6nnen. Diese Funktionen werden Filter genannt.<\/p>\n<p>Eine solche Architektur erm\u00f6glicht es, die Funktionalit\u00e4t der Medienverarbeitung in Form einer Reihe von Filtern zu realisieren, die in einem Verarbeitungs- und \u00dcbertragungsschema f\u00fcr RTP-Verkehr eines VoIP-Telefons verbunden sind.<\/p>\n<p>Die M\u00f6glichkeit, Filter in beliebigen Schemen zu verbinden, die einfache Entwicklung neuer Filter und die Realisierung des Mediastreamers als eigenst\u00e4ndige Bibliothek erm\u00f6glichen es, ihn auch in anderen Projekten zu verwenden. Dabei kann das Projekt im Bereich VoIP liegen, da die M\u00f6glichkeit besteht, selbstgebaute Filter hinzuzuf\u00fcgen.<\/p>\n<p>Die standardm\u00e4\u00dfig bereitgestellte Filterbibliothek ist recht umfangreich und kann, wie bereits erw\u00e4hnt, durch selbst entwickelte Filter erg\u00e4nzt werden. Zun\u00e4chst m\u00f6chten wir jedoch die fertigen Filter beschreiben, die zusammen mit dem Mediastreamer geliefert werden. Hier ist deren Liste:<\/p>\n<h3 id=\"zvukovye-filtry\">Audiofilter<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-zvuka\">Aufzeichnung und Wiedergabe von Ton<\/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>Datei-Player (raw\/wav\/pcap Dateien) (Linux): MS_FILE_PLAYER<\/li>\n<li>Datei-Player (raw\/wav Dateien) (Windows): MS_WINSND_READ<\/li>\n<li>Aufnahme in Datei (wav Dateien) (Linux): MS_FILE_REC<\/li>\n<li>Aufnahme in Datei (wav Dateien) (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\">Kodierung\/Dekodierung von Audio<\/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>Lineare 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\">Audioverarbeitung<\/h4>\n<ul>\n<li>Kanalanpassung (mono-&gt;stereo, stereo-&gt;mono): MS_CHANNEL_ADAPTER<\/li>\n<li>Konferenz: MS_CONF<\/li>\n<li>DTMF-Generator: MS_DTMF_GEN<\/li>\n<li>Hallunterdr\u00fcckung (speex): MS_SPEEX_EC<\/li>\n<li>Equalizer: MS_EQUALIZER<\/li>\n<li>Mixer: MS_MIXER<\/li>\n<li>Paketverlustkompensation (PLC): MS_GENERIC_PLC<\/li>\n<li>Resampler: MS_RESAMPLE<\/li>\n<li>Tondetektor: MS_TONE_DETECTOR<\/li>\n<li>Lautst\u00e4rkeregelung und Pegelmessung: MS_VOLUME<\/li>\n<\/ul>\n<h3 id=\"filtry-video\">Video-Filter<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-video\">Videoaufzeichnung und -wiedergabe<\/h4>\n<ul>\n<li>Android-Aufzeichnung<\/li>\n<li>Android-Wiedergabe<\/li>\n<li>AV Foundation Aufzeichnung (iOS)<\/li>\n<li>AV Foundation Wiedergabe (iOS)<\/li>\n<li>DirectShow Aufzeichnung (Windows)<\/li>\n<li>DrawDib Wiedergabe (Windows)<\/li>\n<li>Externe Wiedergabe \u2013 Video an oberste Ebene senden<\/li>\n<li>GLX Wiedergabe (Linux): MS_GLXVIDEO<\/li>\n<li>Mire \u2013 Synthesebild: MS_MIRE<\/li>\n<li>OpenGL Wiedergabe (Mac OS X)<\/li>\n<li>OpenGL ES2 Wiedergabe (Android)<\/li>\n<li>Quicktime Aufzeichnung (Mac OS X)<\/li>\n<li>SDL Wiedergabe: MS_SDL_OUT<\/li>\n<li>Ausgabe statischer Bilder: MS_STATIC_IMAGE<\/li>\n<li>Video f\u00fcr Linux (V4L) Aufzeichnung (Linux): MS_V4L<\/li>\n<li>Video f\u00fcr Linux 2 (V4L2) Aufzeichnung (Linux): MS_V4L2_CAPTURE<\/li>\n<li>Video4Windows (DirectShow) Aufzeichnung (Windows)<\/li>\n<li>Video4Windows (DirectShow) Aufzeichnung (Windows CE)<\/li>\n<li>Video f\u00fcr Windows (vfw) Aufzeichnung (Windows)<\/li>\n<li>XV Wiedergabe (Linux)<\/li>\n<\/ul>\n<h4 id=\"kodirovaniedekodirovanie-video\">Video-Encoding\/Decoding<\/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 (nur Dekoder): 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\">Videoverarbeitung<\/h4>\n<ul>\n<li>JPEG Snapshot<\/li>\n<li>Pixelformat-Konverter: MS_PIX_CONV<\/li>\n<li>Resizer<\/li>\n<li>Weitere Filter<\/li>\n<li>Datenblockaustausch zwischen Threads: MS_ITC_SOURCE, MS_ITC_SINK<\/li>\n<li>Datenblockzusammenf\u00fchrung von mehreren Eing\u00e4ngen zu einem Ausgang: MS_JOIN<\/li>\n<li>RTP Empfang\/\u00dcbertragung: MS_RTP_SEND, MS_RTP_RECV<\/li>\n<li>Eingabedaten an mehrere Ausg\u00e4nge kopieren: MS_TEE<\/li>\n<li>Koh\u00e4rente Ladung: MS_VOID_SINK<\/li>\n<li>Stille Quelle: MS_VOID_SOURCE<\/li>\n<\/ul>\n<h3 id=\"plaginy\">Plugins<\/h3>\n<h4 id=\"zvukovye-filtry-1\">Audiofilter<\/h4>\n<ul>\n<li>AMR-NB Kodierer\/Dekodierer<\/li>\n<li>G.729 Kodierer\/Dekodierer<\/li>\n<li>iLBC Kodierer\/Dekodierer<\/li>\n<li>SILK Kodierer\/Dekodierer<br \/>\n<h4 id=\"filtry-video\">Video-Filter<\/h4>\n<\/li>\n<li>H.264 Software-Kodierer<\/li>\n<li>H.264 V4L2 Kodierer\/Dekodierer mit Hardwarebeschleunigung<\/li>\n<\/ul>\n<p>Nach einer kurzen Beschreibung des Filters wird der Typnamen angezeigt, der bei der Erstellung einer neuen Instanz dieses Filters verwendet wird. In der weiteren Diskussion werden wir uns auf diese Liste beziehen.<\/p>\n<h2 id=\"ustanovka-pod-linux-ubuntu\">Installation unter Linux Ubuntu<\/h2>\n<p>Nun werden wir den Mediastrimmer auf den Computer installieren und unsere erste Anwendung damit erstellen.<\/p>\n<p>Die Installation von Mediastremer2 auf einem Computer oder einer virtuellen Maschine unter Ubuntu erfordert keine besonderen F\u00e4higkeiten. Im Folgenden wird das Zeichen &#171;$&#187; als das Shell-Eingabeaufforderungssymbol zur Eingabe von Befehlen verwendet. Das hei\u00dft, wenn Sie in der Liste dieses Symbol am Anfang einer Zeile sehen, bedeutet das, dass dies eine Zeile mit den auszuf\u00fchrenden Befehlen im Terminal ist.<\/p>\n<p>Es wird vorausgesetzt, dass Ihr Computer w\u00e4hrend der Durchf\u00fchrung der in diesem Artikel beschriebenen Aktionen Zugriff auf das Internet hat.<\/p>\n<h4 id=\"ustanovka-paketa-libmediastremer-dev\">Installation des Pakets libmediastremer-dev<\/h4>\n<p>Starten Sie das Terminal und geben Sie den Befehl ein:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get update<\/code><\/pre>\n<p>Es wird nach einem Passwort f\u00fcr die \u00c4nderung gefragt, geben Sie es ein, und der Paketmanager wird seine Datenbanken aktualisieren. Anschlie\u00dfend m\u00fcssen Sie Folgendes ausf\u00fchren:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install libmediastreamer-dev<\/code><\/pre>\n<p>Notwendige Abh\u00e4ngigkeitspakete und die Mediastrimmer-Bibliothek werden automatisch heruntergeladen und installiert.<\/p>\n<p>Die Gesamtdatenmenge der heruntergeladenen deb-Pakete f\u00fcr Abh\u00e4ngigkeiten betr\u00e4gt etwa 35 MB. Die Details zum installierten Paket k\u00f6nnen mit dem Befehl abgefragt werden:<\/p>\n<pre><code class=\"bash\">$ dpkg -s libmediastreamer-dev<\/code><\/pre>\n<p>Beispielantwort:<\/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-Webphone-Medienbibliothek - Entwicklungsdateien\nLinphone ist ein Audio- und Video-Internettelefon, das das SIP-Protokoll verwendet. Es\nhat eine GTK+- und Konsolenschnittstelle, bietet eine gro\u00dfe Auswahl an Audio- und Video-Codecs und umfasst IM-Funktionen.\n.\nDieses Paket enth\u00e4lt die Entwicklungsbibliotheken f\u00fcr die Verarbeitung von Mediendaten.\nOriginal-Maintainer: Debian VoIP Team \nHomepage: http:\/\/www.linphone.org\/\n<\/code><\/pre>\n<h4 id=\"ustanovka-instrumentov-razrabotki\">Installation der Entwicklungstools<\/h4>\n<p>Installieren Sie den C-Compiler und die zugeh\u00f6rigen Werkzeuge:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install gcc<\/code><\/pre>\n<p>\u00dcberpr\u00fcfen Sie das Ergebnis, indem Sie die Version des Compilers abfragen:<\/p>\n<pre><code class=\"bash\">$ gcc --version<\/code><\/pre>\n<p>Die Antwort sollte etwa so aussehen:<\/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.\nDies ist kostenlose Software; siehe die Quelle f\u00fcr die Kopierbedingungen. Es gibt keine\nGarantie; nicht einmal f\u00fcr die MARKTG\u00c4NGIGKEIT oder FITNESS F\u00dcR EINEN BESTIMMTEN ZWECK.<\/code><\/pre>\n<h4 id=\"sborka-i-zapusk-probnogo-prilozheniya\">Bau und Ausf\u00fchrung einer Testanwendung<\/h4>\n<p>Erstellen Sie in <em>home<\/em> einen Ordner f\u00fcr unsere Lernprojekte, den wir <em>mstutorial<\/em>:<\/p>\n<pre><code class=\"bash\">$ mkdir ~\/mstutorial<\/code><\/pre>\n<p>Verwenden Sie Ihren bevorzugten Texteditor und erstellen Sie eine C-Programmdatei mit dem Namen <em>mstest.c<\/em> mit folgendem Inhalt:<\/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>Es f\u00fchrt die Initialisierung des Mediastrimmers durch, gibt eine Begr\u00fc\u00dfung aus und beendet die Ausf\u00fchrung.<\/p>\n<p>Wir speichern die Datei und kompilieren die Testanwendung mit dem Befehl:<\/p>\n<pre><code class=\"bash\">$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>Bitte beachten Sie, dass die Zeile<\/p>\n<pre><code class=\"bash\">`pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>in Anf\u00fchrungszeichen gesetzt ist, die sich auf der Tastatur an der gleichen Stelle wie der Buchstabe &#171;\u0401&#187; befinden.<\/p>\n<p>Wenn die Datei keine Fehler enth\u00e4lt, wird nach der Kompilierung im Verzeichnis die Datei <em>mstest<\/em>erzeugt. Wir starten das Programm:<\/p>\n<pre><code class=\"bash\">$ .\/mstest<\/code><\/pre>\n<p>Das Ergebnis wird wie folgt sein:<\/p>\n<pre><code class=\"bash\">ALSA lib conf.c:4738:(snd_config_expand) Unbekannte Parameter 0\nALSA lib control.c:954:(snd_ctl_open_noupdate) Ung\u00fcltiger CTL default:0\nortp-warning-Konnte Mixer nicht an Karte anh\u00e4ngen: Ung\u00fcltiges Argument\nALSA lib conf.c:4738:(snd_config_expand) Unbekannte Parameter 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unbekannte PCM default:0\nALSA lib conf.c:4738:(snd_config_expand) Unbekannte Parameter 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unbekannte PCM default:0\nortp-warning-Es scheint, dass die Soundkarte HDA Intel PCH nichts kann, es wird mit plughw neu versucht...\nMediastreamer ist bereit.<\/code><\/pre>\n<p>In dieser Auflistung sehen wir Fehlermeldungen, die von der ALSA-Bibliothek ausgegeben werden, die zur Steuerung der Soundkarte verwendet wird. Die Entwickler des Mediastreamers halten das f\u00fcr normal. In diesem Fall m\u00fcssen wir ihnen zustimmen.<\/p>\n<p>Jetzt sind wir bereit, mit dem Mediastreamer zu arbeiten. Wir haben die Mediastreamer-Bibliothek, das Kompilierungswerkzeug installiert und \u00fcberpr\u00fcft mit einer Testanwendung, dass die Werkzeuge konfiguriert sind und der Mediastreamer erfolgreich initialisiert wird.<\/p>\n<p>Im n\u00e4chsten <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495728\/\">Artikel<\/a><\/noindex> Wir werden eine Anwendung erstellen, die die Verarbeitung des Audiosignals in einer Kette aus mehreren Filtern implementiert.<\/p>\n<p>Quelle: <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.1.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\/de\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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\udd47Wir lernen die VoIP-Engine Mediastreamer2 kennen. Teil 1 - ProHoster","description":"Das Material des Artikels stammt von meinem Zen-Kanal.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/77011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=77011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/77011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/77012"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=77011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=77011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=77011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}