{"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\/it\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","title":{"rendered":"Studio del motore VoIP Mediastreamer2. Parte 1","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Il materiale dell'articolo \u00e8 tratto dal mio <noindex><a rel=\"nofollow\" href=\"https:\/\/zen.yandex.ru\/id\/5e3f8e0751f5346faab4fc7a\">canale zen<\/a><\/noindex>.<\/p>\n<h2 id=\"vvedenie\">Introduzione<\/h2>\n<p>Questo articolo \u00e8 l'inizio di una serie di articoli sulla lavorazione in tempo reale dei dati multimediali utilizzando il motore Mediastreamer2. Durante l'esposizione saranno coinvolte competenze minime di lavoro nel terminale Linux e programmazione in linguaggio C.<\/p>\n<p>Mediastreamer2 \u00e8 un motore VoIP che sta alla base del popolare progetto open-source di un telefono VoIP <noindex><a rel=\"nofollow\" href=\"http:\/\/linphone.org\/\">Linphone<\/a><\/noindex>. In Linphone, Mediastreamer2 implementa tutte le funzioni relative a audio e video. Puoi vedere un elenco dettagliato delle funzionalit\u00e0 del motore su questa pagina Mediastreamer. Il codice sorgente \u00e8 disponibile qui: <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.linphone.org\/BC\/public\/mediastreamer2\">GitLab<\/a><\/noindex>.<\/p>\n<p>Nella continuazione del testo, per comodit\u00e0, utilizzeremo la notazione italiana di Mediastreamer2: \u00abmediastreamer\u00bb.<\/p>\n<p>La storia della sua creazione non \u00e8 del tutto chiara, ma a giudicare dal suo codice sorgente, prima utilizzava la libreria <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GLib\">Glib<\/a><\/noindex>, il che ci suggerisce una possibile parentela remota con <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GStreamer\">GStreamer<\/a><\/noindex>. In confronto, il mediastreamer appare pi\u00f9 leggero. La prima versione di Linphone \u00e8 stata lanciata nel 2001, quindi attualmente il mediastreamer esiste e si sviluppa da quasi 20 anni.<\/p>\n<p>Alla base del mediastreamer c'\u00e8 un'architettura chiamata \u00abData flow\u00bb (flusso di dati). Un esempio di tale architettura \u00e8 illustrato nell'immagine qui sotto.<\/p>\n<p><img decoding=\"async\" alt=\"Studio del motore 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>In questa architettura, l'algoritmo di elaborazione dei dati \u00e8 definito non dal codice di programma, ma da uno schema (grafo) di connessione delle funzioni, che possono essere disposte in qualsiasi ordine. Queste funzioni sono chiamate filtri.<\/p>\n<p>Questa architettura consente di realizzare la funzionalit\u00e0 di elaborazione dei media sotto forma di un insieme di filtri collegati in uno schema di elaborazione e trasmissione del traffico RTP del telefono VoIP.<\/p>\n<p>La possibilit\u00e0 di collegare filtri in schemi arbitrari, la semplice creazione di nuovi filtri e l'implementazione del mediastreamer come una libreria autonoma consentono di utilizzarlo anche in altri progetti. Inoltre, il progetto pu\u00f2 essere nel campo del VoIP, poich\u00e9 \u00e8 possibile aggiungere filtri creati autonomamente.<\/p>\n<p>La libreria di filtri fornita di default \u00e8 piuttosto ricca e, come gi\u00e0 detto, pu\u00f2 essere estesa con filtri di propria creazione. Ma prima descriviamo i filtri pronti che vengono forniti insieme al mediastreamer. Ecco il loro elenco:<\/p>\n<h3 id=\"zvukovye-filtry\">Filtri audio<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-zvuka\">Cattura e riproduzione audio<\/h4>\n<ul>\n<li>Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ<\/li>\n<li>Audio nativo Android (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>Riproduttore di file (file raw\/wav\/pcap) (Linux): MS_FILE_PLAYER<\/li>\n<li>Riproduttore di file (file raw\/wav) (Windows): MS_WINSND_READ<\/li>\n<li>Registrazione in file (file wav) (Linux): MS_FILE_REC<\/li>\n<li>Registrazione in file (file wav) (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\">Codifica\/decodifica audio<\/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>PCM Lineare: MS_L16_ENC, MS_L16_DEC<\/li>\n<li>Speex: MS_SPEEX_ENC, MS_SPEEX_DEC<\/li>\n<\/ul>\n<h4 id=\"obrabotka-zvuka\">Elaborazione audio<\/h4>\n<ul>\n<li>Adattatore di canale (mono-&gt;stereo, stereo-&gt;mono): MS_CHANNEL_ADAPTER<\/li>\n<li>Conferenza: MS_CONF<\/li>\n<li>Generatore DTMF: MS_DTMF_GEN<\/li>\n<li>Soppressione dell'eco (speex): MS_SPEEX_EC<\/li>\n<li>Equalizzatore: MS_EQUALIZER<\/li>\n<li>Mixer: MS_MIXER<\/li>\n<li>Compensatore di perdita di pacchetti (PLC): MS_GENERIC_PLC<\/li>\n<li>Risempler: MS_RESAMPLE<\/li>\n<li>Rilevatore di toni: MS_TONE_DETECTOR<\/li>\n<li>Controllo del volume e misurazione del livello del segnale: MS_VOLUME<\/li>\n<\/ul>\n<h3 id=\"filtry-video\">Filtri video<\/h3>\n<h4 id=\"zahvat-i-vosproizvedenie-video\">Acquisizione e riproduzione video<\/h4>\n<ul>\n<li>Acquisizione Android<\/li>\n<li>Riproduzione Android<\/li>\n<li>Acquisizione AV Foundation (iOS)<\/li>\n<li>Riproduzione AV Foundation (iOS)<\/li>\n<li>Acquisizione DirectShow (Windows)<\/li>\n<li>Riproduzione DrawDib (Windows)<\/li>\n<li>Riproduzione esterna \u2014 Invio video al livello superiore<\/li>\n<li>Riproduzione GLX (Linux): MS_GLXVIDEO<\/li>\n<li>Mire \u2014 Immagine in movimento sintetica: MS_MIRE<\/li>\n<li>Riproduzione OpenGL (Mac OS X)<\/li>\n<li>Riproduzione OpenGL ES2 (Android)<\/li>\n<li>Acquisizione Quicktime (Mac OS X)<\/li>\n<li>Riproduzione SDL: MS_SDL_OUT<\/li>\n<li>Uscita immagini statiche: MS_STATIC_IMAGE<\/li>\n<li>Video For Linux (V4L) acquisizione (Linux): MS_V4L<\/li>\n<li>Video For Linux 2 (V4L2) acquisizione (Linux): MS_V4L2_CAPTURE<\/li>\n<li>Video4windows (DirectShow) acquisizione (Windows)<\/li>\n<li>Video4windows (DirectShow) acquisizione (Windows CE)<\/li>\n<li>Video For Windows (vfw) acquisizione (Windows)<\/li>\n<li>XV riproduzione (Linux)<\/li>\n<\/ul>\n<h4 id=\"kodirovaniedekodirovanie-video\">Codifica\/decodifica 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 (decoder solo): 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\">Elaborazione video<\/h4>\n<ul>\n<li>Snapshot JPEG<\/li>\n<li>Convertitore di formato pixel: MS_PIX_CONV<\/li>\n<li>Ridimensionatore<\/li>\n<li>Altri filtri<\/li>\n<li>Scambio di blocchi di dati tra thread: MS_ITC_SOURCE, MS_ITC_SINK<\/li>\n<li>Raccolta di blocchi di dati da pi\u00f9 ingressi a un'uscita: MS_JOIN<\/li>\n<li>Ricezione\/trasmissione RTP: MS_RTP_SEND, MS_RTP_RECV<\/li>\n<li>Copia di dati in ingresso su pi\u00f9 uscite: MS_TEE<\/li>\n<li>Carico coerente: MS_VOID_SINK<\/li>\n<li>Fonte di silenzio: MS_VOID_SOURCE<\/li>\n<\/ul>\n<h3 id=\"plaginy\">Plugin<\/h3>\n<h4 id=\"zvukovye-filtry-1\">Filtri audio<\/h4>\n<ul>\n<li>Codificatore\/decodificatore AMR-NB<\/li>\n<li>Codificatore\/decodificatore G.729<\/li>\n<li>Codificatore\/decodificatore iLBC<\/li>\n<li>Codificatore\/decodificatore SILK<br \/>\n<h4 id=\"filtry-video\">Filtri video<\/h4>\n<\/li>\n<li>Codificatore software H.264<\/li>\n<li>Codificatore\/decodificatore H.264 V4L2 con accelerazione hardware<\/li>\n<\/ul>\n<p>Dopo una breve descrizione del filtro viene mostrato il nome del tipo che viene utilizzato per creare una nuova istanza di questo filtro. In seguito ci riferiremo a questo elenco.<\/p>\n<h2 id=\"ustanovka-pod-linux-ubuntu\">Installazione su Linux Ubuntu<\/h2>\n<p>Ora procederemo con l'installazione del media streamer sul computer e creeremo la nostra prima applicazione con esso.<\/p>\n<p>L'installazione di Mediastremer2 su un computer o una macchina virtuale con Ubuntu non richiede abilit\u00e0 particolari. Qui e di seguito, il simbolo \u00ab$\u00bb denoter\u00e0 il prompt della shell per l'inserimento dei comandi. Cio\u00e8, se nel listing vedi questo simbolo all'inizio della riga, significa che \u00e8 una riga in cui sono mostrati i comandi da eseguire nel terminale.<\/p>\n<p>Si presume che durante l'esecuzione delle azioni descritte in questo articolo, il vostro computer abbia accesso a Internet.<\/p>\n<h4 id=\"ustanovka-paketa-libmediastremer-dev\">Installazione del pacchetto libmediastremer-dev<\/h4>\n<p>Apriamo il terminale e digitiamo il comando:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get update<\/code><\/pre>\n<p>Verr\u00e0 richiesto di inserire la password per apportare modifiche; digitela e il gestore dei pacchetti aggiorner\u00e0 i suoi database. Dopo di che, \u00e8 necessario eseguire:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install libmediastreamer-dev<\/code><\/pre>\n<p>Saranno scaricati e installati automaticamente i pacchetti di dipendenza necessari e la libreria del media streamer.<\/p>\n<p>La dimensione totale dei pacchetti deb di dipendenza scaricati sar\u00e0 di circa 35 MB. I dettagli sul pacchetto installato possono essere ottenuti con il comando:<\/p>\n<pre><code class=\"bash\">$ dpkg -s libmediastreamer-dev<\/code><\/pre>\n<p>Esempio di risposta:<\/p>\n<pre><code class=\"bash\">Package: libmediastreamer-dev\nStatus: install ok installed\nPriority: optional\nSection: libdevel\nInstalled-Size: 244\nMaintainer: Sviluppatori Ubuntu &lt;ubuntu-devel-discuss@lists.ubuntu.com&gt;\nArchitecture: amd64\nSource: linphone\nVersion: 3.6.1-2.5\nDepends: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev\nDescription: Libreria media del telefono web Linphone - file di sviluppo\nLinphone \u00e8 un telefono internet audio e video che utilizza il protocollo SIP. Dispone di un'interfaccia GTK+ e console, include una vasta gamma di codec audio e video, e offre funzionalit\u00e0 di messaggistica IM.\n.\nQuesto pacchetto contiene le librerie di sviluppo per gestire le operazioni media.\nOriginal-Maintainer: Debian VoIP Team &lt;pkg-voip-maintainers@lists.alioth.debian.org&gt;\nHomepage: http:\/\/www.linphone.org\/\n<\/code><\/pre>\n<h4 id=\"ustanovka-instrumentov-razrabotki\">Installazione degli strumenti di sviluppo<\/h4>\n<p>Installiamo il compilatore C e gli strumenti correlati:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install gcc<\/code><\/pre>\n<p>Controlliamo il risultato richiedendo la versione del compilatore:<\/p>\n<pre><code class=\"bash\">$ gcc --version<\/code><\/pre>\n<p>La risposta dovrebbe essere simile a questa:<\/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.\nQuesto \u00e8 software libero; consultare il sorgente per le condizioni di copia. Non esiste NESSUNA\ngaranzia; nemmeno per COMMERCIABILIT\u00c0 o IDONEIT\u00c0 PER UN PARTICOLARE SCOPO.<\/code><\/pre>\n<h4 id=\"sborka-i-zapusk-probnogo-prilozheniya\">Compilazione e avvio dell'applicazione di prova<\/h4>\n<p>Creiamo in <em>home<\/em> una cartella per i nostri progetti di studio, chiamandola <em>mstutorial<\/em>:<\/p>\n<pre><code class=\"bash\">$ mkdir ~\/mstutorial<\/code><\/pre>\n<p>Utilizzate il vostro editor di testo preferito e create un file di programma in C chiamato <em>mstest.c<\/em> con il seguente contenuto:<\/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>Esso inizializza il media streamer, stampa un saluto e termina l'esecuzione.<\/p>\n<p>Salviamo il file e compiliamo l'applicazione di test con il comando:<\/p>\n<pre><code class=\"bash\">$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>Si prega di notare che la stringa<\/p>\n<pre><code class=\"bash\">`pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>\u00e8 racchiuso tra virgolette, che si trovano sulla tastiera nello stesso posto della lettera \u00ab\u0401\u00bb.<\/p>\n<p>Se il file non contiene errori, dopo la compilazione apparir\u00e0 un file <em>mstest<\/em>. Eseguiamo il programma:<\/p>\n<pre><code class=\"bash\">$ .\\\/mstest<\/code><\/pre>\n<p>Il risultato sar\u00e0 il seguente:<\/p>\n<pre><code class=\"bash\">ALSA lib conf.c:4738:(snd_config_expand) Parametri sconosciuti 0\nALSA lib control.c:954:(snd_ctl_open_noupdate) CTL predefinito non valido:0\nortp-warning-Impossibile collegare il mixer alla scheda: argomento non valido\nALSA lib conf.c:4738:(snd_config_expand) Parametri sconosciuti 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) PCM sconosciuto predefinito:0\nALSA lib conf.c:4738:(snd_config_expand) Parametri sconosciuti 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) PCM sconosciuto predefinito:0\nortp-warning-Strano, la scheda audio HDA Intel PCH sembra non essere in grado di fare nulla, riprovando con plughw...\nMediastreamer \u00e8 pronto.<\/code><\/pre>\n<p>In questo listing vediamo i messaggi di errore generati dalla libreria ALSA, utilizzata per gestire la scheda audio. Gli stessi sviluppatori del mediastreamer considerano questo normale. In questo caso, ci troviamo a dover concordare con loro.<\/p>\n<p>Ora abbiamo tutto pronto per lavorare con il mediastreamer. Abbiamo installato la libreria del mediastreamer, lo strumento di compilazione e, attraverso un'applicazione di prova, abbiamo verificato che gli strumenti siano configurati e che il mediastreamer venga inizializzato con successo.<\/p>\n<p>Nel prossimo <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495728\/\">abbiamo chiarito il corretto completamento dei programmi che utilizzano il mediastreamer.<\/a><\/noindex> creeremo un'applicazione che compila e avvia l'elaborazione del segnale audio in una catena di pi\u00f9 filtri.<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495702\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0438\u0436\u043a\u0430 Mediastreamer2. \u0412 \u0445\u043e\u0434\u0435 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 Linux \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421\u0438. Mediastreamer2 \u044d\u0442\u043e VoIP-\u0434\u0432\u0438\u0436\u043e\u043a, \u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e open-source \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e voip-\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 Linphone. \u0412 Linphone Mediastreamer2 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":77012,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-77011","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Esploriamo il motore VoIP Mediastreamer2. Parte 1 | ProHoster","description":"Il materiale dell'articolo \u00e8 tratto dal mio canale Zen.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/77011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=77011"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/77011\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/77012"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=77011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=77011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=77011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}