{"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\/da\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","title":{"rendered":"L\u00e6re VoIP-motoren Mediastreamer2. Del 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Materialet i artiklen er taget fra min <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">zen-kanal<\/a><\/noindex>.<\/p>\n<h2 id=\"vvedenie\">Introduktion<\/h2>\n<p>Denne artikel er begyndelsen p\u00e5 en serie om realtidsbehandling af mediedata ved hj\u00e6lp af Mediastreamer2-motoren. I l\u00f8bet af teksten vil der blive brugt minimale f\u00e6rdigheder til arbejde i Linux-terminalen og programmering i C.<\/p>\n<p>Mediastreamer2 er en VoIP-motor, der er kernen i det popul\u00e6re open-source projekt til software VoIP-telefoner. <noindex><a rel=\"nofollow\" href=\"http:\/\/linphone.org\/\">Linphone<\/a><\/noindex>. I Linphone implementerer Mediastreamer2 alle funktioner relateret til lyd og video. En detaljeret liste over motorens funktioner kan ses p\u00e5 denne side om Mediastreamer. Kildekoden findes her: <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.linphone.org\/BC\/public\/mediastreamer2\">GitLab<\/a><\/noindex>.<\/p>\n<p>For convenience, instead of the word Mediastreamer2, we will use its Danish notation: &laquo;mediastreamer&raquo;.<\/p>\n<p>Historien om dets oprettelse er ikke helt klar, men if\u00f8lge dens kildekode brugte den tidligere biblioteket <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GLib\">Glib<\/a><\/noindex>, hvilket antyder, at der kunne v\u00e6re et muligt fjernt sl\u00e6gtskabsforhold til <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GStreamer\">GStreamer<\/a><\/noindex>. I sammenligning med dette ser mediastreamer mere letv\u00e6gtsagtig ud. Den f\u00f8rste version af Linphone blev lanceret i 2001, s\u00e5 i \u00f8jeblikket har mediastreamer eksisteret og udviklet sig i n\u00e6sten 20 \u00e5r.<\/p>\n<p>The mediastreamer is based on an architecture called &laquo;Data flow&raquo;. An example of such architecture is illustrated in the figure below.<\/p>\n<p><img decoding=\"async\" alt=\"L\u00e6re VoIP-motoren Mediastreamer2. Del 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>I denne arkitektur angives dataforarbejdningsalgoritmen ikke af programkoden, men af en skitse (graf) af forbindelsen mellem funktionerne, som kan arrangeres i vilk\u00e5rlig r\u00e6kkef\u00f8lge. Disse funktioner kaldes filtre.<\/p>\n<p>Denne arkitektur g\u00f8r det muligt at implementere mediebehandlingens funktionalitet som et s\u00e6t af filtre, der er forbundet i et behandlings- og RTP-trafikoverf\u00f8rselsdiagram for VoIP-telefonen.<\/p>\n<p>Muligheden for at forbinde filtre i vilk\u00e5rlige skemaer, let udvikling af nye filtre og implementeringen af mediastreamer som et selvst\u00e6ndigt bibliotek, g\u00f8r det muligt at bruge det ogs\u00e5 i andre projekter. Desuden kan projektet v\u00e6re inden for VoIP, da der er mulighed for at tilf\u00f8je h\u00e5ndlavede filtre.<\/p>\n<p>Det default leverede filterbibliotek er temmelig rigt og som allerede n\u00e6vnt kan det udvides med selvudviklede filtre. Men f\u00f8rst skal vi beskrive de f\u00e6rdige filtre, der leveres sammen med mediastreameren. Her er deres liste:<\/p>\n<h3 id=\"zvukovye-filtry\">Lydfiltre<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-zvuka\">Optagelse og afspilning af lyd<\/h4>\n<ul>\n<li>Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ<\/li>\n<li>Android native lyd (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>Filafspiller (raw\/wav\/pcap filer) (Linux): MS_FILE_PLAYER<\/li>\n<li>Filafspiller (raw\/wav filer) (Windows): MS_WINSND_READ<\/li>\n<li>Optagelse i fil (wav filer) (Linux): MS_FILE_REC<\/li>\n<li>Optagelse i fil (wav filer) (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\">Kodning\/dekodning af lyd<\/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>Line\u00e6r 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\">Lydbehandling<\/h4>\n<ul>\n<li>Kanalomdannelse (mono-&gt;stereo, stereo-&gt;mono): MS_CHANNEL_ADAPTER<\/li>\n<li>Konference: MS_CONF<\/li>\n<li>DTMF-generator: MS_DTMF_GEN<\/li>\n<li>Ekkoundertrykkelse (speex): MS_SPEEX_EC<\/li>\n<li>Equalizer: MS_EQUALIZER<\/li>\n<li>Mixer: MS_MIXER<\/li>\n<li>Pakke tab kompensator (PLC): MS_GENERIC_PLC<\/li>\n<li>Resampler: MS_RESAMPLE<\/li>\n<li>Tone detektor: MS_TONE_DETECTOR<\/li>\n<li>Lydstyring og niveau m\u00e5ling: MS_VOLUME<\/li>\n<\/ul>\n<h3 id=\"filtry-video\">Videofiltre<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-video\">Optagelse og afspilning af video<\/h4>\n<ul>\n<li>Android optagelse<\/li>\n<li>Android afspilning<\/li>\n<li>AV Foundation optagelse (iOS)<\/li>\n<li>AV Foundation afspilning (iOS)<\/li>\n<li>DirectShow optagelse (Windows)<\/li>\n<li>DrawDib afspilning (Windows)<\/li>\n<li>External afspilning \u2014 Send video til \u00f8verste niveau<\/li>\n<li>GLX afspilning (Linux): MS_GLXVIDEO<\/li>\n<li>Mire \u2014 Syntetisk bev\u00e6gende billede: MS_MIRE<\/li>\n<li>OpenGL afspilning (Mac OS X)<\/li>\n<li>OpenGL ES2 afspilning (Android)<\/li>\n<li>Quicktime optagelse (Mac OS X)<\/li>\n<li>SDL afspilning: MS_SDL_OUT<\/li>\n<li>Output af statiske billeder: MS_STATIC_IMAGE<\/li>\n<li>Video For Linux (V4L) optagelse (Linux): MS_V4L<\/li>\n<li>Video For Linux 2 (V4L2) optagelse (Linux): MS_V4L2_CAPTURE<\/li>\n<li>Video4windows (DirectShow) optagelse (Windows)<\/li>\n<li>Video4windows (DirectShow) optagelse (Windows CE)<\/li>\n<li>Video For Windows (vfw) optagelse (Windows)<\/li>\n<li>XV afspilning (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 (kun 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\">Videobehandling<\/h4>\n<ul>\n<li>JPEG snapshot<\/li>\n<li>Pixel format konverter: MS_PIX_CONV<\/li>\n<li>Resizer<\/li>\n<li>Andre filtre<\/li>\n<li>Data blok overf\u00f8rsel mellem tr\u00e5de: MS_ITC_SOURCE, MS_ITC_SINK<\/li>\n<li>Samling af datablokke fra flere indgange til \u00e9n udgang: MS_JOIN<\/li>\n<li>RTP modtagelse\/afsendelse: MS_RTP_SEND, MS_RTP_RECV<\/li>\n<li>Kopiering af inddata til flere udgange: MS_TEE<\/li>\n<li>Konsistent belastning: MS_VOID_SINK<\/li>\n<li>Stille kilde: MS_VOID_SOURCE<\/li>\n<\/ul>\n<h3 id=\"plaginy\">Plugins<\/h3>\n<h4 id=\"zvukovye-filtry-1\">Lydfiltre<\/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\">Videofiltre<\/h4>\n<\/li>\n<li>H.264 software encoder<\/li>\n<li>H.264 V4L2 encoder\/decoder med hardware acceleration<\/li>\n<\/ul>\n<p>Efter den korte beskrivelse af filteret vises typenavn, der bruges ved oprettelse af en ny instans af dette filter. I det f\u00f8lgende vil vi referere til denne liste.<\/p>\n<h2 id=\"ustanovka-pod-linux-ubuntu\">Installation under Linux Ubuntu<\/h2>\n<p>Now we will perform the installation of the media streamer on the computer and assemble our first application with it.<\/p>\n<p>Installing Mediastreamer2 on a computer or virtual machine running Ubuntu does not require special skills. Here and below, the symbol &laquo;$&raquo; will denote the shell prompt for entering commands. That is, if you see this symbol at the beginning of a line in the listing, it means this line shows commands to execute in the terminal.<\/p>\n<p>It is assumed that during the actions described in this article, your computer has access to the Internet.<\/p>\n<h4 id=\"ustanovka-paketa-libmediastremer-dev\">Installing the package libmediastremer-dev<\/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 for a password to make changes, enter it and the package manager will update its databases. After this, 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 itself will be automatically downloaded and installed.<\/p>\n<p>The total size of the downloaded deb packages of dependencies will be about 35 MB. You can find out details about the installed package with the command:<\/p>\n<pre><code class=\"bash\">$ dpkg -s libmediastreamer-dev<\/code><\/pre>\n<p>Eksempel p\u00e5 svar:<\/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 accompanying tools:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install gcc<\/code><\/pre>\n<p>We check the result by querying the compiler version:<\/p>\n<pre><code class=\"bash\">$ gcc --version<\/code><\/pre>\n<p>The response should be something like this:<\/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 the sample application<\/h4>\n<p>We create in <em>home<\/em> a folder for our learning 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> med f\u00f8lgende indhold:<\/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 then terminates 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>Bem\u00e6rk, at linjen<\/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 &laquo;\u0401&raquo; is.<\/p>\n<p>Hvis filen ikke indeholder fejl, vil der efter kompileringen blive oprettet en fil i kataloget <em>mstest<\/em>. Vi starter programmet:<\/p>\n<pre><code class=\"bash\">$ .\/mstest<\/code><\/pre>\n<p>Resultatet vil v\u00e6re s\u00e5dan:<\/p>\n<pre><code class=\"bash\">ALSA lib conf.c:4738:(snd_config_expand) Ukendte parametre 0\nALSA lib control.c:954:(snd_ctl_open_noupdate) Ugyldig CTL default:0\nortp-warning-Kunne ikke vedh\u00e6fte mixer til kort: Ugyldigt argument\nALSA lib conf.c:4738:(snd_config_expand) Ukendte parametre 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Ukendt PCM default:0\nALSA lib conf.c:4738:(snd_config_expand) Ukendte parametre 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Ukendt PCM default:0\nortp-warning-M\u00e6rkeligt, lydkort HDA Intel PCH ser ikke ud til at v\u00e6re i stand til noget, pr\u00f8ver med plughw...\nMediastreamer er klar.<\/code><\/pre>\n<p>I denne liste ser vi fejlmeddelelser, som ALSA-biblioteket genererer, det bruges til at styre lydkortet. Selve udviklerne af mediastreameren mener, at dette er normalt. I dette tilf\u00e6lde vil vi ufrivilligt v\u00e6re enige med dem.<\/p>\n<p>Nu er vi klar til at arbejde med mediastreameren. Vi har installeret mediastreamer-biblioteket, kompilationsv\u00e6rkt\u00f8jet og har med et pr\u00f8veprogram tjekket, at v\u00e6rkt\u00f8jerne er konfigureret, og mediastreameren initialiseres med succes.<\/p>\n<p>I n\u00e6ste <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495728\/\">artikel<\/a><\/noindex> vi vil skabe en applikation, der vil samle og udf\u00f8re behandling af lydsignalet i en k\u00e6de af flere filtre.<\/p>\n<p>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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\udd47Udforsker VoIP-motoren Mediastreamer2. Del 1 | ProHoster","description":"Materialet i artiklen er taget fra min Zen-kanal.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/77011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=77011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/77011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/77012"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=77011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=77011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=77011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}