{"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\/es\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","title":{"rendered":"Explorando el motor VoIP Mediastreamer2. Parte 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>El material del art\u00edculo fue tomado de mi <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">canal de Zen<\/a><\/noindex>.<\/p>\n<h2 id=\"vvedenie\">Introducci\u00f3n<\/h2>\n<p>Este art\u00edculo es el comienzo de una serie sobre el procesamiento de medios en tiempo real utilizando el motor Mediastreamer2. A lo largo de la exposici\u00f3n se utilizar\u00e1n conocimientos b\u00e1sicos de trabajo en la terminal de Linux y programaci\u00f3n en C.<\/p>\n<p>Mediastreamer2 es un motor VoIP que se encuentra en la base de un popular proyecto de software de c\u00f3digo abierto de tel\u00e9fono VoIP. <noindex><a rel=\"nofollow\" href=\"http:\/\/linphone.org\/\">Linphone<\/a><\/noindex>. En Linphone, Mediastreamer2 implementa todas las funciones relacionadas con el audio y el video. La lista detallada de caracter\u00edsticas del motor se puede ver en esta p\u00e1gina de Mediastreamer. El c\u00f3digo fuente se encuentra aqu\u00ed: <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.linphone.org\/BC\/public\/mediastreamer2\">GitLab<\/a><\/noindex>.<\/p>\n<p>M\u00e1s adelante en el texto, para mayor comodidad, en lugar de la palabra Mediastreamer2 utilizaremos su notaci\u00f3n en espa\u00f1ol: \u00abmediastreamer\u00bb.<\/p>\n<p>La historia de su creaci\u00f3n no est\u00e1 del todo clara, pero seg\u00fan su c\u00f3digo fuente, anteriormente utilizaba la biblioteca <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GLib\">Glib<\/a><\/noindex>, lo que sugiere un posible parentesco lejano con <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GStreamer\">GStreamer<\/a><\/noindex>. En comparaci\u00f3n, el mediastreamer parece ser m\u00e1s ligero. La primera versi\u00f3n de Linphone apareci\u00f3 en 2001, por lo que actualmente el mediastreamer existe y se desarrolla desde hace casi 20 a\u00f1os.<\/p>\n<p>La base del mediastreamer se fundamenta en una arquitectura llamada \u00abData flow\u00bb (flujo de datos). Un ejemplo de dicha arquitectura se muestra en la figura a continuaci\u00f3n.<\/p>\n<p><img decoding=\"async\" alt=\"Explorando el motor VoIP Mediastreamer2. Parte 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>En esta arquitectura, el algoritmo de procesamiento de datos se define no por c\u00f3digo program\u00e1tico, sino por un esquema (gr\u00e1fico) de conexi\u00f3n de funciones, que se pueden organizar en cualquier orden. Estas funciones se llaman filtros.<\/p>\n<p>Esta arquitectura permite implementar la funcionalidad de procesamiento de medios en forma de un conjunto de filtros conectados en un esquema de procesamiento y transmisi\u00f3n de tr\u00e1fico RTP de un tel\u00e9fono VoIP.<\/p>\n<p>La capacidad de conectar filtros en esquemas arbitrarios, el desarrollo sencillo de nuevos filtros y la implementaci\u00f3n del mediastreamer como una biblioteca independiente permiten utilizarlo tambi\u00e9n en otros proyectos. De hecho, el proyecto puede estar en el \u00e1rea de VoIP, ya que existe la posibilidad de a\u00f1adir filtros personalizados.<\/p>\n<p>La biblioteca de filtros suministrada por defecto es bastante rica y, como ya se mencion\u00f3, puede ser ampliada con filtros de desarrollo propio. Pero primero describamos los filtros disponibles que se suministran junto con el mediastreamer. Aqu\u00ed est\u00e1 su lista:<\/p>\n<h3 id=\"zvukovye-filtry\">Filtros de audio<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-zvuka\">Captura y reproducci\u00f3n de audio<\/h4>\n<ul>\n<li>Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ<\/li>\n<li>Sonido nativo de Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ<\/li>\n<li>Servicio de Cola de Audio (Mac OS X): MS_AQ_WRITE, MS_AQ_READ<\/li>\n<li>Servicio de Unidad de Audio (Mac OS X)<\/li>\n<li>Artes (Linux): MS_ARTS_WRITE, MS_ARTS_READ<\/li>\n<li>DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ<\/li>\n<li>Reproductor de archivos (raw\/wav\/pcap archivos) (Linux): MS_FILE_PLAYER<\/li>\n<li>Reproductor de archivos (raw\/wav archivos) (Windows): MS_WINSND_READ<\/li>\n<li>Grabaci\u00f3n en archivo (wav archivos) (Linux): MS_FILE_REC<\/li>\n<li>Grabaci\u00f3n en archivo (wav archivos) (Windows): MS_WINSND_WRITE<\/li>\n<li>Unidad de Audio (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>Sonido de Windows (Windows)<\/li>\n<\/ul>\n<h4 id=\"kodirovaniedekodirovanie-zvuka\">Codificaci\u00f3n\/decodificaci\u00f3n de sonido<\/h4>\n<ul>\n<li>G.711 a-ley: MS_ALAW_DEC, MS_ALAW_ENC<\/li>\n<li>G.711 \u00b5-ley: 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>PCM lineal: MS_L16_ENC, MS_L16_DEC<\/li>\n<li>Speex: MS_SPEEX_ENC, MS_SPEEX_DEC<\/li>\n<\/ul>\n<h4 id=\"obrabotka-zvuka\">Procesamiento de sonido<\/h4>\n<ul>\n<li>Adaptador de canal (mono-&gt;est\u00e9reo, est\u00e9reo-&gt;mono): MS_CHANNEL_ADAPTER<\/li>\n<li>Conferencia: MS_CONF<\/li>\n<li>Generador DTMF: MS_DTMF_GEN<\/li>\n<li>Supresi\u00f3n de eco (speex): MS_SPEEX_EC<\/li>\n<li>Ecualizador: MS_EQUALIZER<\/li>\n<li>Mezclador: MS_MIXER<\/li>\n<li>Compensador de p\u00e9rdida de paquetes (PLC): MS_GENERIC_PLC<\/li>\n<li>Re-sampleador: MS_RESAMPLE<\/li>\n<li>Detector de tonos: MS_TONE_DETECTOR<\/li>\n<li>Control de volumen y medici\u00f3n de nivel de se\u00f1al: MS_VOLUME<\/li>\n<\/ul>\n<h3 id=\"filtry-video\">Filtros de video<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-video\">Captura y reproducci\u00f3n de video<\/h4>\n<ul>\n<li>Captura de Android<\/li>\n<li>Reproducci\u00f3n de Android<\/li>\n<li>Captura de AV Foundation (iOS)<\/li>\n<li>Reproducci\u00f3n de AV Foundation (iOS)<\/li>\n<li>Captura de DirectShow (Windows)<\/li>\n<li>Reproducci\u00f3n de DrawDib (Windows)<\/li>\n<li>Reproducci\u00f3n externa \u2014 Env\u00edo de video al nivel superior<\/li>\n<li>Reproducci\u00f3n de GLX (Linux): MS_GLXVIDEO<\/li>\n<li>Mire \u2014 Imagen en movimiento sint\u00e9tica: MS_MIRE<\/li>\n<li>Reproducci\u00f3n de OpenGL (Mac OS X)<\/li>\n<li>Reproducci\u00f3n de OpenGL ES2 (Android)<\/li>\n<li>Captura de Quicktime (Mac OS X)<\/li>\n<li>Reproducci\u00f3n de SDL: MS_SDL_OUT<\/li>\n<li>Salida de im\u00e1genes est\u00e1ticas: MS_STATIC_IMAGE<\/li>\n<li>Captura de Video para Linux (V4L) (Linux): MS_V4L<\/li>\n<li>Captura de Video para Linux 2 (V4L2) (Linux): MS_V4L2_CAPTURE<\/li>\n<li>Captura de Video4windows (DirectShow) (Windows)<\/li>\n<li>Captura de Video4windows (DirectShow) (Windows CE)<\/li>\n<li>Captura de Video Para Windows (vfw) (Windows)<\/li>\n<li>Reproducci\u00f3n de XV (Linux)<\/li>\n<\/ul>\n<h4 id=\"kodirovaniedekodirovanie-video\">Codificaci\u00f3n\/decodificaci\u00f3n de video<\/h4>\n<ul>\n<li>H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC<\/li>\n<li>H.264 (solo decodificador): 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\">Procesamiento de video<\/h4>\n<ul>\n<li>Instant\u00e1nea JPEG<\/li>\n<li>Convertidor de formato de p\u00edxeles: MS_PIX_CONV<\/li>\n<li>Redimensionador<\/li>\n<li>Otros filtros<\/li>\n<li>Intercambio de bloques de datos entre hilos: MS_ITC_SOURCE, MS_ITC_SINK<\/li>\n<li>Recolecci\u00f3n de bloques de datos desde m\u00faltiples entradas a una salida: MS_JOIN<\/li>\n<li>Recepci\u00f3n\/transmisi\u00f3n RTP: MS_RTP_SEND, MS_RTP_RECV<\/li>\n<li>Copiar datos de entrada a m\u00faltiples salidas: MS_TEE<\/li>\n<li>Carga coherente: MS_VOID_SINK<\/li>\n<li>Fuente de silencio: MS_VOID_SOURCE<\/li>\n<\/ul>\n<h3 id=\"plaginy\">Plugins<\/h3>\n<h4 id=\"zvukovye-filtry-1\">Filtros de audio<\/h4>\n<ul>\n<li>Codificador\/decodificador AMR-NB<\/li>\n<li>Codificador\/decodificador G.729<\/li>\n<li>Codificador\/decodificador iLBC<\/li>\n<li>Codificador\/decodificador SILK<br \/>\n<h4 id=\"filtry-video\">Filtros de video<\/h4>\n<\/li>\n<li>Codificador de software H.264<\/li>\n<li>Codificador\/decodificador H.264 V4L2 con aceleraci\u00f3n de hardware<\/li>\n<\/ul>\n<p>Despu\u00e9s de una breve descripci\u00f3n del filtro, se muestra el nombre del tipo que se utiliza al crear una nueva instancia de este filtro. En lo que sigue, nos referiremos a esta lista.<\/p>\n<h2 id=\"ustanovka-pod-linux-ubuntu\">Instalaci\u00f3n en Linux Ubuntu<\/h2>\n<p>Ahora procederemos a instalar el mediastreamer en la computadora y construyamos nuestra primera aplicaci\u00f3n con \u00e9l.<\/p>\n<p>Instalar Mediastreamer2 en un ordenador o en una m\u00e1quina virtual con Ubuntu no requiere habilidades especiales. Aqu\u00ed y en adelante, el s\u00edmbolo \u00ab$\u00bb ser\u00e1 utilizado para indicar el s\u00edmbolo del shell para introducir comandos. Es decir, si en el listado ves este s\u00edmbolo al inicio de una l\u00ednea, significa que esa l\u00ednea muestra comandos para ejecutar en el terminal.<\/p>\n<p>Se supone que durante la realizaci\u00f3n de las acciones descritas en este art\u00edculo, tu computadora tiene acceso a Internet.<\/p>\n<h4 id=\"ustanovka-paketa-libmediastremer-dev\">Instalaci\u00f3n del paquete libmediastremer-dev<\/h4>\n<p>Abrimos la terminal y tecleamos el comando:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get update<\/code><\/pre>\n<p>Se solicitar\u00e1 la contrase\u00f1a para realizar cambios, introd\u00facela y el gestor de paquetes actualizar\u00e1 sus bases. Despu\u00e9s de esto, hay que ejecutar:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install libmediastreamer-dev<\/code><\/pre>\n<p>Los paquetes de dependencias necesarios y la propia biblioteca del mediastreamer se descargar\u00e1n e instalar\u00e1n autom\u00e1ticamente.<\/p>\n<p>El tama\u00f1o total de los paquetes deb de dependencias descargados ser\u00e1 de aproximadamente 35 MB. Puedes obtener detalles sobre el paquete instalado con el comando:<\/p>\n<pre><code class=\"bash\">$ dpkg -s libmediastreamer-dev<\/code><\/pre>\n<p>Ejemplo de respuesta:<\/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: Biblioteca de medios del tel\u00e9fono web de Linphone - archivos de desarrollo\nLinphone es un tel\u00e9fono de internet de audio y video que usa el protocolo SIP. Tiene una interfaz GTK+ y de consola, incluye una gran variedad de c\u00f3decs de audio y video, y proporciona caracter\u00edsticas de IM.\n.\nEste paquete contiene las bibliotecas de desarrollo para manejar operaciones de medios.\nOriginal-Maintainer: Debian VoIP Team \nHomepage: http:\/\/www.linphone.org\/\n<\/code><\/pre>\n<h4 id=\"ustanovka-instrumentov-razrabotki\">Instalaci\u00f3n de herramientas de desarrollo<\/h4>\n<p>Instalamos el compilador de C y las herramientas asociadas:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install gcc<\/code><\/pre>\n<p>Verificamos el resultado solicitando la versi\u00f3n del compilador:<\/p>\n<pre><code class=\"bash\">$ gcc --version<\/code><\/pre>\n<p>La respuesta debe ser aproximadamente as\u00ed:<\/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.\nEste es software libre; consulta la fuente para conocer las condiciones de copia. No hay\ngarant\u00eda; ni siquiera para la COMERCIALIZACI\u00d3N o la IDONEIDAD PARA UN PROP\u00d3SITO ESPEC\u00cdFICO.<\/code><\/pre>\n<h4 id=\"sborka-i-zapusk-probnogo-prilozheniya\">Construcci\u00f3n y ejecuci\u00f3n de una aplicaci\u00f3n de prueba<\/h4>\n<p>Creamos en <em>home<\/em> una carpeta para nuestros proyectos de aprendizaje, la llamaremos <em>mstutorial<\/em>:<\/p>\n<pre><code class=\"bash\">$ mkdir ~\/mstutorial<\/code><\/pre>\n<p>Utilice su editor de texto favorito y cree un archivo de programa en C llamado <em>mstest.c<\/em> con el siguiente contenido:<\/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>Este inicializa el mediastreamer, imprime un saludo y finaliza la ejecuci\u00f3n.<\/p>\n<p>Guardamos el archivo y compilamos la aplicaci\u00f3n de prueba con el siguiente comando:<\/p>\n<pre><code class=\"bash\">$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>Tenga en cuenta que la l\u00ednea<\/p>\n<pre><code class=\"bash\">`pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>est\u00e1 encerrada entre comillas, que se encuentran en el teclado donde tambi\u00e9n est\u00e1 la letra \u00ab\u0401\u00bb.<\/p>\n<p>Si el archivo no contiene errores, despu\u00e9s de la compilaci\u00f3n aparecer\u00e1 un archivo en el directorio <em>mstest<\/em>. Ejecutamos el programa:<\/p>\n<pre><code class=\"bash\">$ .\/mstest<\/code><\/pre>\n<p>El resultado ser\u00e1 el siguiente:<\/p>\n<pre><code class=\"bash\">ALSA lib conf.c:4738:(snd_config_expand) Par\u00e1metros desconocidos 0\nALSA lib control.c:954:(snd_ctl_open_noupdate) CTL default no v\u00e1lido:0\nortp-warning-No se pudo adjuntar el mezclador a la tarjeta: Argumento no v\u00e1lido\nALSA lib conf.c:4738:(snd_config_expand) Par\u00e1metros desconocidos 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) PCM desconocido default:0\nALSA lib conf.c:4738:(snd_config_expand) Par\u00e1metros desconocidos 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) PCM desconocido default:0\nortp-warning-Raro, parece que la tarjeta de sonido HDA Intel PCH no puede hacer nada, reintentando con plughw...\nMediastreamer est\u00e1 listo.<\/code><\/pre>\n<p>En este listado vemos los mensajes de error que devuelve la biblioteca ALSA, que se utiliza para gestionar la tarjeta de sonido. Los propios desarrolladores del mediastreamer consideran que esto es normal. En este caso, nos veremos forzados a estar de acuerdo con ellos.<\/p>\n<p>Ahora estamos listos para trabajar con el mediastreamer. Hemos instalado la biblioteca del mediastreamer, la herramienta de compilaci\u00f3n y con una aplicaci\u00f3n de prueba hemos comprobado que las herramientas est\u00e1n configuradas y que el mediastreamer se inicializa correctamente.<\/p>\n<p>En la siguiente <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495728\/\">el art\u00edculo<\/a><\/noindex> crearemos una aplicaci\u00f3n que recopile y ejecute el procesamiento de se\u00f1ales de audio en una cadena de varios filtros.<\/p>\n<p>Fuente: <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\/es\/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=\"es_ES\" \/>\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\/es\/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\udd47Explorando el motor VoIP Mediastreamer2. Parte 1 | ProHoster","description":"El material del art\u00edculo proviene de mi canal de Zen.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/77011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=77011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/77011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/77012"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=77011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=77011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=77011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}