{"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":"Untersuchung des VoIP-Engines Mediastreamer2. Teil 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Der Inhalt dieses Artikels 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 Auftakt zu einer Reihe von Artikeln \u00fcber die Echtzeitverarbeitung von Mediendaten mit dem Mediastreamer2-Framework. Dabei sind grundlegende Kenntnisse im Umgang mit dem Linux-Terminal und in der Programmiersprache C erforderlich.<\/p>\n<p>Mediastreamer2 ist eine VoIP-Engine, die der Grundlage des beliebten Open-Source-Projekts des VoIP-Telefons dient. <noindex><a rel=\"nofollow\" href=\"http:\/\/linphone.org\/\">Linphone<\/a><\/noindex>. In Linphone implementiert Mediastreamer2 alle Funktionen im Zusammenhang mit Audio und Video. Eine detaillierte 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 dessen deutsche Bezeichnung verwenden: \u201eMediastreamer\u201c.<\/p>\n<p>Die Geschichte seiner Entstehung ist nicht ganz klar, aber judging by seinem Quellcode hat er zuvor die Bibliothek <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>hinweist. Im Vergleich zu diesem erscheint der Mediastreamer als leichter. Die erste Version von Linphone erschien im Jahr 2001, sodass der Mediastreamer nun schon fast 20 Jahre existiert und sich weiterentwickelt.<\/p>\n<p>Die Grundlage des Mediastreamers bildet eine Architektur, die als \u201eData flow\u201c (Datenfluss) bezeichnet wird. Ein Beispiel f\u00fcr eine solche Architektur ist in der Abbildung unten dargestellt.<\/p>\n<p><img decoding=\"async\" alt=\"Untersuchung 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 Programmcode, sondern durch ein Schema (Graph) zum Verbinden von Funktionen definiert, die in beliebiger Reihenfolge angeordnet werden k\u00f6nnen. Diese Funktionen werden als Filter bezeichnet.<\/p>\n<p>Eine solche Architektur erm\u00f6glicht die Implementierung der Medienverarbeitung als eine Reihe von Filtern, die in einem Schema zur Verarbeitung und \u00dcbertragung von RTP-Verkehr f\u00fcr VoIP-Telefone verbunden sind.<\/p>\n<p>Die M\u00f6glichkeit, Filter in beliebige Schemata zu verbinden, die einfache Entwicklung neuer Filter und die Implementierung des Medienstreamers als eigenst\u00e4ndige Bibliothek erm\u00f6glichen die Nutzung auch in anderen Projekten. Dabei kann das Projekt im Bereich VoIP sein, da die M\u00f6glichkeit besteht, selbst entwickelte Filter hinzuzuf\u00fcgen.<\/p>\n<p>Die standardm\u00e4\u00dfig mitgelieferte Bibliothek von Filtern ist bereits recht umfangreich und wie bereits erw\u00e4hnt, kann sie durch selbst entwickelte Filter erweitert werden. Doch zun\u00e4chst beschreiben wir die fertigen Filter, die mit dem Medienstreamer geliefert werden. Hier ist ihre Liste:<\/p>\n<h3 id=\"zvukovye-filtry\">Audio-Filter<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-zvuka\">Aufnahme und Wiedergabe von Audio<\/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>Medien (Linux): MS_ARTS_WRITE, MS_ARTS_READ<\/li>\n<li>DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ<\/li>\n<li>Dateiwiedergabe (raw\/wav\/pcap Dateien) (Linux): MS_FILE_PLAYER<\/li>\n<li>Dateiwiedergabe (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\">Audio-Codierung\/Dekodierung<\/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>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>Kanalumwandlung (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>Echo-Unterdr\u00fcckung (speex): MS_SPEEX_EC<\/li>\n<li>Equalizer: MS_EQUALIZER<\/li>\n<li>Mixer: MS_MIXER<\/li>\n<li>Packet Loss Compensation (PLC): MS_GENERIC_PLC<\/li>\n<li>Resampler: MS_RESAMPLE<\/li>\n<li>Ton-Detektor: 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\">Videoaufnahme und -wiedergabe<\/h4>\n<ul>\n<li>Android Aufnahme<\/li>\n<li>Android Wiedergabe<\/li>\n<li>AV Foundation Aufnahme (iOS)<\/li>\n<li>AV Foundation Wiedergabe (iOS)<\/li>\n<li>DirectShow Aufnahme (Windows)<\/li>\n<li>DrawDib Wiedergabe (Windows)<\/li>\n<li>Externe Wiedergabe \u2013 Video an die oberste Ebene senden<\/li>\n<li>GLX-Wiedergabe (Linux): MS_GLXVIDEO<\/li>\n<li>Mire \u2014 Synthetisches Bewegungbild: MS_MIRE<\/li>\n<li>OpenGL-Wiedergabe (Mac OS X)<\/li>\n<li>OpenGL ES2-Wiedergabe (Android)<\/li>\n<li>Quicktime-Aufnahme (Mac OS X)<\/li>\n<li>SDL-Wiedergabe: MS_SDL_OUT<\/li>\n<li>Ausgabe von statischen Bildern: MS_STATIC_IMAGE<\/li>\n<li>Video For Linux (V4L) Aufnahme (Linux): MS_V4L<\/li>\n<li>Video For Linux 2 (V4L2) Aufnahme (Linux): MS_V4L2_CAPTURE<\/li>\n<li>Video4windows (DirectShow) Aufnahme (Windows)<\/li>\n<li>Video4windows (DirectShow) Aufnahme (Windows CE)<\/li>\n<li>Video For Windows (vfw) Aufnahme (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 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\">Videoverarbeitung<\/h4>\n<ul>\n<li>JPEG-Snapshot<\/li>\n<li>Pixel-Format-Konverter: MS_PIX_CONV<\/li>\n<li>Resize-Filter<\/li>\n<li>Andere Filter<\/li>\n<li>Datenblock-Austausch zwischen Threads: MS_ITC_SOURCE, MS_ITC_SINK<\/li>\n<li>Zusammenf\u00fchrung von Datenbl\u00f6cken 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 auf mehrere Ausg\u00e4nge kopieren: MS_TEE<\/li>\n<li>Konsistenter Payload: MS_VOID_SINK<\/li>\n<li>Stillen-Quelle: MS_VOID_SOURCE<\/li>\n<\/ul>\n<h3 id=\"plaginy\">Plugins<\/h3>\n<h4 id=\"zvukovye-filtry-1\">Audio-Filter<\/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\">Video-Filter<\/h4>\n<\/li>\n<li>H.264 Software-Encoder<\/li>\n<li>H.264 V4L2 Encoder\/Decoder mit Hardwarebeschleunigung<\/li>\n<\/ul>\n<p>Nach einer kurzen Beschreibung des Filters wird der Typname angezeigt, der bei der Erstellung einer neuen Instanz dieses Filters verwendet wird. In der weiteren Ausf\u00fchrung werden wir uns auf diese Liste beziehen.<\/p>\n<h2 id=\"ustanovka-pod-linux-ubuntu\">Installation unter Linux Ubuntu<\/h2>\n<p>Jetzt werden wir den Medienstremer auf dem Computer installieren und unsere erste Anwendung damit erstellen.<\/p>\n<p>Die Installation von Mediastreamer2 auf einem Computer oder einer virtuellen Maschine mit Ubuntu erfordert keine besonderen F\u00e4higkeiten. Hier und im Folgenden wird das Symbol \u201e$\u201c als Aufforderung der Shell zur Eingabe von Befehlen verwendet. Das hei\u00dft, wenn Sie in der Auflistung dieses Symbol am Anfang einer Zeile sehen, bedeutet das, dass es sich um eine Zeile handelt, in der die Befehle zum Ausf\u00fchren im Terminal gezeigt werden.<\/p>\n<p>Es wird vorausgesetzt, dass Ihr Computer w\u00e4hrend der Ausf\u00fchrung der in diesem Artikel beschriebenen Aktionen Zugang zum 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 \u00c4nderungen gefragt, geben Sie es ein, und der Paketmanager aktualisiert seine Datenbanken. Danach sollten Sie Folgendes ausf\u00fchren:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install libmediastreamer-dev<\/code><\/pre>\n<p>Die erforderlichen Abh\u00e4ngigkeitspakete und die Medienstremer-Bibliothek werden automatisch heruntergeladen und installiert.<\/p>\n<p>Die Gesamtheit der heruntergeladenen Abh\u00e4ngigkeit-Pakete wird etwa 35 MB betragen. Informationen \u00fcber das installierte Paket k\u00f6nnen Sie mit dem Befehl abrufen:<\/p>\n<pre><code class=\"bash\">$ dpkg -s libmediastreamer-dev<\/code><\/pre>\n<p>Beispielantwort:<\/p>\n<pre><code class=\"bash\">Paket: libmediastreamer-dev\nStatus: installiert ok\nPriorit\u00e4t: optional\nKategorie: libdevel\nInstallierte Gr\u00f6\u00dfe: 244\nBetreuer: Ubuntu-Entwickler \nArchitektur: amd64\nQuelle: linphone\nVersion: 3.6.1-2.5\nAbh\u00e4ngigkeiten: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev\nBeschreibung: Medienbibliothek von Linphone Web-Telefon - Entwicklungsdateien\nLinphone ist ein Audio- und Video-Internettelefon, das das SIP-Protokoll verwendet. Es hat eine GTK+- und Konsolenschnittstelle, umfasst eine gro\u00dfe Vielfalt an Audio- und Video-Codecs und bietet IM-Funktionen.\n.\nDieses Paket enth\u00e4lt die Entwicklungsbibliotheken f\u00fcr die Medienoperationen.\nUrspr\u00fcnglicher Betreuer: Debian VoIP-Team \nHomepage: http:\/\/www.linphone.org\/\n<\/code><\/pre>\n<h4 id=\"ustanovka-instrumentov-razrabotki\">Installation der Entwicklungstools<\/h4>\n<p>Wir installieren den C-Compiler und die dazugeh\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 anfragen:<\/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 freie Software; siehe die Quelle f\u00fcr die Kopierbedingungen. Es gibt KEINE\nGarantie, nicht einmal f\u00fcr MARKTF\u00c4HIGKEIT oder EIGNUNG F\u00dcR EINEN BESTIMMTEN ZWECK.<\/code><\/pre>\n<h4 id=\"sborka-i-zapusk-probnogo-prilozheniya\">Kompilierung und Ausf\u00fchrung einer Testanwendung<\/h4>\n<p>Wir erstellen im <em>home<\/em> Ordner f\u00fcr unsere \u00dcbungsprojekte und nennen ihn <em>mstutorial<\/em>:<\/p>\n<pre><code class=\"bash\">$ mkdir ~\/mstutorial<\/code><\/pre>\n<p>Nutzen 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>Er initialisiert den Mediastreamer, gibt eine Begr\u00fc\u00dfung aus und beendet die Ausf\u00fchrung.<\/p>\n<p>Speichern Sie die Datei und kompilieren Sie 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>Beachten Sie, dass die Zeile<\/p>\n<pre><code class=\"bash\">`pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>eingeschlossen in Anf\u00fchrungszeichen, die sich auf der Tastatur an der gleichen Stelle wie der Buchstabe \u201e\u0401\u201c befinden.<\/p>\n<p>Wenn die Datei fehlerfrei ist, wird nach der Kompilierung eine Datei im Verzeichnis erscheinen, die <em>mstest<\/em>hei\u00dft. F\u00fchren Sie das Programm aus:<\/p>\n<pre><code class=\"bash\">$ .\/mstest<\/code><\/pre>\n<p>Das Ergebnis wird wie folgt aussehen:<\/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-Warnung-Konnte Mixer nicht mit Karte verbinden: 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-Warnung-Merkw\u00fcrdig, der Soundkarte HDA Intel PCH scheint nichts zu k\u00f6nnen, versuche es mit plughw erneut...\nMediastreamer ist bereit.<\/code><\/pre>\n<p>In diesem Listing sehen wir Fehlermeldungen, die von der ALSA-Bibliothek ausgegeben werden, die zur Steuerung der Soundkarte verwendet wird. Die Entwickler des Media Streamers halten dies f\u00fcr normal. In diesem Fall m\u00fcssen wir uns ihnen anschlie\u00dfen.<\/p>\n<p>Jetzt sind wir bereit, mit dem Media Streamer zu arbeiten. Wir haben die Media Streamer-Bibliothek und das Kompilierungswerkzeug installiert und mit einer Testanwendung \u00fcberpr\u00fcft, dass die Werkzeuge konfiguriert sind und der Media Streamer 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 das Audio-Signal in einer Kette aus mehreren Filtern sammelt und verarbeitet.<\/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 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\/de\/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=\"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. \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\/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. Einleitung Diese Artikelreihe ist der Beginn einer Serie \u00fcber die Echtzeitverarbeitung von Mediendaten mit der Mediastreamer2-Engine. Bei der Darstellung werden grundlegende Kenntnisse in der Linux-Terminalnutzung und Programmierung in C erforderlich sein. Mediastreamer2 ist eine VoIP-Engine, die der Grundlage des beliebten Open-Source-Projekts des VoIP-Telefons Linphone dient. In Linphone implementiert Mediastreamer2 alle Funktionen.","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. \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\/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"},"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}]}}