{"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\/en\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","title":{"rendered":"Exploring the VoIP engine Mediastreamer2. Part 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>The article material is taken from my <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">Zen channel<\/a><\/noindex>.<\/p>\n<h2 id=\"vvedenie\">Introduction<\/h2>\n<p>This article begins a series on real-time media data processing using the Mediastreamer2 engine. It will require basic Linux terminal skills and some programming knowledge in C.<\/p>\n<p>Mediastreamer2 is a VoIP engine that underpins the popular open-source VoIP phone project. <noindex><a rel=\"nofollow\" href=\"http:\/\/linphone.org\/\">Linphone<\/a><\/noindex>. In Linphone, Mediastreamer2 implements all functions related to audio and video. A detailed list of the engine's capabilities can be seen on this Mediastreamer page. The source code is available here: <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.linphone.org\/BC\/public\/mediastreamer2\">GitLab<\/a><\/noindex>.<\/p>\n<p>In the text below, for convenience, we will use the Russian notation for Mediastreamer2: \u201c\u043c\u0435\u0434\u0438\u0430\u0441\u0442\u0440\u0438\u043c\u0435\u0440.\u201d<\/p>\n<p>The history of its creation is not entirely clear, but judging by its source code, it previously used the library <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GLib\">Glib<\/a><\/noindex>, which hints at a possible distant relationship with <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GStreamer\">GStreamer<\/a><\/noindex>. Compared to which, Mediastreamer appears to be more lightweight. The first version of Linphone was released in 2001, so Mediastreamer has been around and evolving for nearly 20 years.<\/p>\n<p>The core of the media streamer is based on an architecture called \u201cData flow.\u201d An example of such an architecture is shown in the figure below.<\/p>\n<p><img decoding=\"async\" alt=\"Exploring the VoIP engine Mediastreamer2. Part 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 this architecture, the data processing algorithm is defined not by program code but by a diagram (graph) of the connection of functions, which can be arranged in any order. These functions are called filters.<\/p>\n<p>This architecture allows implementing media processing functionality as a set of filters connected in a scheme for processing and transmitting RTP traffic of a VoIP phone.<\/p>\n<p>The ability to connect filters in arbitrary schemes, the ease of developing new filters, and the implementation of Mediastreamer as a standalone library enable its use in other projects. Moreover, the project can be in the VoIP field, as there is an option to add custom-made filters.<\/p>\n<p>The default library of filters is quite rich and, as mentioned earlier, can be extended with filters of custom development. But first, let's describe the ready-made filters that come with Mediastreamer. Here's the list:<\/p>\n<h3 id=\"zvukovye-filtry\">Audio Filters<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-zvuka\">Capture and playback of 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>Arts (Linux): MS_ARTS_WRITE, MS_ARTS_READ<\/li>\n<li>DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ<\/li>\n<li>File Player (raw\/wav\/pcap files) (Linux): MS_FILE_PLAYER<\/li>\n<li>File Player (raw\/wav files) (Windows): MS_WINSND_READ<\/li>\n<li>File Recording (wav files) (Linux): MS_FILE_REC<\/li>\n<li>File Recording (wav files) (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 Encoding\/Decoding<\/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>Linear 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\">Audio Processing<\/h4>\n<ul>\n<li>Channel Conversion (mono-&gt;stereo, stereo-&gt;mono): MS_CHANNEL_ADAPTER<\/li>\n<li>Conference: MS_CONF<\/li>\n<li>DTMF Generator: MS_DTMF_GEN<\/li>\n<li>Echo Suppression (speex): MS_SPEEX_EC<\/li>\n<li>Equalizer: MS_EQUALIZER<\/li>\n<li>Mixer: MS_MIXER<\/li>\n<li>Packet Loss Concealment (PLC): MS_GENERIC_PLC<\/li>\n<li>Resampler: MS_RESAMPLE<\/li>\n<li>Tone Detector: MS_TONE_DETECTOR<\/li>\n<li>Volume Control and Signal Level Measurement: MS_VOLUME<\/li>\n<\/ul>\n<h3 id=\"filtry-video\">Video Filters<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-video\">Video Capture and Playback<\/h4>\n<ul>\n<li>Android Capture<\/li>\n<li>Android Playback<\/li>\n<li>AV Foundation Capture (iOS)<\/li>\n<li>AV Foundation Playback (iOS)<\/li>\n<li>DirectShow Capture (Windows)<\/li>\n<li>DrawDib Playback (Windows)<\/li>\n<li>External Playback \u2014 Sending Video to the Top Layer<\/li>\n<li>GLX Playback (Linux): MS_GLXVIDEO<\/li>\n<li>Mire \u2014 Synthetic Moving Picture: MS_MIRE<\/li>\n<li>OpenGL Playback (Mac OS X)<\/li>\n<li>OpenGL ES2 Playback (Android)<\/li>\n<li>Quicktime Capture (Mac OS X)<\/li>\n<li>SDL Playback: MS_SDL_OUT<\/li>\n<li>Static Image Output: MS_STATIC_IMAGE<\/li>\n<li>Video For Linux (V4L) Capture (Linux): MS_V4L<\/li>\n<li>Video For Linux 2 (V4L2) Capture (Linux): MS_V4L2_CAPTURE<\/li>\n<li>Video4Windows (DirectShow) Capture (Windows)<\/li>\n<li>Video4Windows (DirectShow) Capture (Windows CE)<\/li>\n<li>Video For Windows (vfw) Capture (Windows)<\/li>\n<li>XV Playback (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 (decoder only): 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 Processing<\/h4>\n<ul>\n<li>JPEG Snapshot<\/li>\n<li>Pixel Format Converter: MS_PIX_CONV<\/li>\n<li>Resizer<\/li>\n<li>Other Filters<\/li>\n<li>Data Block Exchange Between Threads: MS_ITC_SOURCE, MS_ITC_SINK<\/li>\n<li>Collecting Data Blocks from Multiple Inputs into One Output: MS_JOIN<\/li>\n<li>RTP Receive\/Send: MS_RTP_SEND, MS_RTP_RECV<\/li>\n<li>Copying Input Data to Multiple Outputs: MS_TEE<\/li>\n<li>Coherent Load: MS_VOID_SINK<\/li>\n<li>Silence Source: MS_VOID_SOURCE<\/li>\n<\/ul>\n<h3 id=\"plaginy\">Plugins<\/h3>\n<h4 id=\"zvukovye-filtry-1\">Audio Filters<\/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 Filters<\/h4>\n<\/li>\n<li>H.264 Software Encoder<\/li>\n<li>H.264 V4L2 Encoder\/Decoder with Hardware Acceleration<\/li>\n<\/ul>\n<p>The type name used for creating a new instance of this filter is shown after the brief filter description. In the subsequent text, we will refer to this list.<\/p>\n<h2 id=\"ustanovka-pod-linux-ubuntu\">Installation under Linux Ubuntu<\/h2>\n<p>Now we will install the media streamer on the computer and build our first application with it.<\/p>\n<p>Installing Mediastremer2 on a computer or virtual machine running Ubuntu does not require special skills. Here and below, the symbol \u201c$\u201d will denote the shell prompt for command input. That is, if you see this symbol at the beginning of a line in the listing, it means this line shows the commands to be executed in the terminal.<\/p>\n<p>It is assumed that during the execution of the actions described in this article, your computer has access to the Internet.<\/p>\n<h4 id=\"ustanovka-paketa-libmediastremer-dev\">Installing the libmediastremer-dev package<\/h4>\n<p>We open the terminal and type the command:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get update<\/code><\/pre>\n<p>You will be prompted to enter a password for making changes; enter it and the package manager will update its databases. After that, you need to execute:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install libmediastreamer-dev<\/code><\/pre>\n<p>The necessary dependency packages and the media streamer library will be automatically downloaded and installed.<\/p>\n<p>The total size of the downloaded deb dependency packages will be approximately 35 MB. Details about the installed package can be obtained using the command:<\/p>\n<pre><code class=\"bash\">$ dpkg -s libmediastreamer-dev<\/code><\/pre>\n<p>Example response:<\/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 an audio and video internet phone using the SIP protocol. It\nhas a GTK+ and console interface, includes a large variety of audio and video\ncodecs, and provides IM features.\n.\nThis package contains the development libraries for handling media operations.\nOriginal-Maintainer: Debian VoIP Team \nHomepage: http:\/\/www.linphone.org\/\n<\/code><\/pre>\n<h4 id=\"ustanovka-instrumentov-razrabotki\">Installing development tools<\/h4>\n<p>We install the C compiler and its related tools:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install gcc<\/code><\/pre>\n<p>Check the result by querying the version of the compiler:<\/p>\n<pre><code class=\"bash\">$ gcc --version<\/code><\/pre>\n<p>The response should be approximately as follows:<\/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.\nThis is free software; see the source for copying conditions.  There is NO\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.<\/code><\/pre>\n<h4 id=\"sborka-i-zapusk-probnogo-prilozheniya\">Building and running a test application<\/h4>\n<p>We create in <em>home<\/em> a folder for our training projects, let's call it <em>mstutorial<\/em>:<\/p>\n<pre><code class=\"bash\">$ mkdir ~\/mstutorial<\/code><\/pre>\n<p>Use your favorite text editor to create a C program file named <em>mstest.c<\/em> with the following content:<\/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>It initializes the media streamer, prints a greeting, and ends execution.<\/p>\n<p>Save the file and compile the test application with the command:<\/p>\n<pre><code class=\"bash\">$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>Note that the line<\/p>\n<pre><code class=\"bash\">`pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>is enclosed in quotes, which are located on the keyboard where the letter \u201c\u0401\u201d is.<\/p>\n<p>If the file has no errors, then after compilation a file will appear in the directory <em>mstest<\/em>. Let's run the program:<\/p>\n<pre><code class=\"bash\">$ .\\\/mstest<\/code><\/pre>\n<p>The result will be as follows:<\/p>\n<pre><code class=\"bash\">ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0\nALSA lib control.c:954:(snd_ctl_open_noupdate) Invalid CTL default:0\nortp-warning-Could not attach mixer to card: Invalid argument\nALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default:0\nALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default:0\nortp-warning-Strange, sound card HDA Intel PCH does not seem to be capable of anything, retrying with plughw...\nMediastreamer is ready.<\/code><\/pre>\n<p>In this listing, we see error messages produced by the ALSA library, which is used for managing the sound card. The mediastreamer developers consider this to be normal. In this case, we reluctantly agree with them.<\/p>\n<p>Now we are all set to work with the mediastreamer. We have installed the mediastreamer library, the compilation tool, and verified through a test application that the tools are configured, and the mediastreamer initializes successfully.<\/p>\n<p>In the next <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495728\/\">article<\/a><\/noindex> we will create an application that will collect and process sound signals in a chain of several filters.<\/p>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495702\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0438\u0436\u043a\u0430 Mediastreamer2. \u0412 \u0445\u043e\u0434\u0435 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 Linux \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421\u0438. Mediastreamer2 \u044d\u0442\u043e VoIP-\u0434\u0432\u0438\u0436\u043e\u043a, \u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e open-source \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e voip-\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 Linphone. \u0412 Linphone Mediastreamer2 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":77012,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-77011","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - 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\/en\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\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\/en\/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\udd47Exploring the VoIP engine Mediastreamer2. Part 1 | ProHoster","description":"The content of the article is taken from my Zen channel.","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","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\/en\/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\/en\/wp-json\/wp\/v2\/posts\/77011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=77011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/77011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/77012"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=77011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=77011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=77011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}