{"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":"Esploriamo il 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 segna l'inizio di una serie dedicata all'elaborazione dei media in tempo reale utilizzando il motore Mediastreamer2. Durante l'esposizione verranno utilizzate competenze minime di utilizzo del terminale Linux e di programmazione in linguaggio C.<\/p>\n<p>Mediastreamer2 \u00e8 un motore VoIP alla base di un popolare progetto open-source per telefoni VoIP. <noindex><a rel=\"nofollow\" href=\"http:\/\/linphone.org\/\">Linphone<\/a><\/noindex>. In Linphone, Mediastreamer2 implementa tutte le funzioni relative a audio e video. Un elenco dettagliato delle funzionalit\u00e0 del motore \u00e8 disponibile su questa pagina dedicata a Mediastreamer. Il codice sorgente si trova qui: <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.linphone.org\/BC\/public\/mediastreamer2\">GitLab<\/a><\/noindex>.<\/p>\n<p>Nel testo seguente, 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 codice sorgente, in precedenza utilizzava la libreria <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GLib\">Glib<\/a><\/noindex>, il che suggerisce una possibile parentela remota con <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/GStreamer\">GStreamer<\/a><\/noindex>. Rispetto a quest'ultimo, 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 questa architettura \u00e8 mostrato nell'immagine sottostante.<\/p>\n<p><img decoding=\"async\" alt=\"Esploriamo il 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 quest'architettura, l'algoritmo di elaborazione dei dati \u00e8 definito non da codice sorgente, ma da uno schema (grafico) di connessione delle funzioni, che possono essere disposte in qualsiasi ordine. Queste funzioni sono chiamate filtri.<\/p>\n<p>Questa architettura consente di implementare la funzionalit\u00e0 di elaborazione multimediale sotto forma di un insieme di filtri connessi in uno schema di elaborazione e trasmissione del traffico RTP di un telefono VoIP.<\/p>\n<p>La possibilit\u00e0 di connettere i filtri in schemi arbitrari, la semplice creazione di nuovi filtri e l'implementazione del mediastreamer come una libreria separata autonoma consentono di utilizzarlo anche in altri progetti. Inoltre, il progetto pu\u00f2 appartenere all'ambito VoIP, poich\u00e9 \u00e8 possibile aggiungere filtri creati a mano.<\/p>\n<p>La libreria di filtri fornita di default \u00e8 abbastanza ricca e, come gi\u00e0 detto, pu\u00f2 essere ampliata con filtri di propria creazione. Ma iniziamo a descrivere i filtri predefiniti che vengono forniti insieme al mediastreamer. Ecco la loro lista:<\/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>Servizio Audio Queue (Mac OS X): MS_AQ_WRITE, MS_AQ_READ<\/li>\n<li>Servizio Audio Unit (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 su file (file wav) (Linux): MS_FILE_REC<\/li>\n<li>Registrazione su file (file wav) (Windows): MS_WINSND_WRITE<\/li>\n<li>Unit\u00e0 Audio Mac (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>Conversione 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 perdite pacchetti (PLC): MS_GENERIC_PLC<\/li>\n<li>Risampler: MS_RESAMPLE<\/li>\n<li>Rilevatore di toni: MS_TONE_DETECTOR<\/li>\n<li>Controllo volume e misurazione livello 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 Invia 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>Acquisizione Video For Linux (V4L) (Linux): MS_V4L<\/li>\n<li>Acquisizione Video For Linux 2 (V4L2) (Linux): MS_V4L2_CAPTURE<\/li>\n<li>Acquisizione Video4windows (DirectShow) (Windows)<\/li>\n<li>Acquisizione Video4windows (DirectShow) (Windows CE)<\/li>\n<li>Acquisizione Video For Windows (vfw) (Windows)<\/li>\n<li>Riproduzione XV (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 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 in un'uscita: MS_JOIN<\/li>\n<li>Ricezione\/trasmissione RTP: MS_RTP_SEND, MS_RTP_RECV<\/li>\n<li>Copiare i 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 utilizzato per creare una nuova istanza di questo filtro. D'ora in poi faremo riferimento a questo elenco.<\/p>\n<h2 id=\"ustanovka-pod-linux-ubuntu\">Installazione su Linux Ubuntu<\/h2>\n<p>Ora procederemo all'installazione del mediastreamer sul computer e creeremo la nostra prima applicazione con esso.<\/p>\n<p>L'installazione di Mediastreamer2 su computer o macchina virtuale con sistema operativo Ubuntu non richiede particolari abilit\u00e0. Da questo momento in poi, il simbolo \u00ab$\u00bb indicher\u00e0 il prompt della shell per l'immissione dei comandi. Cio\u00e8, se nel listing vedete questo simbolo all'inizio della riga, significa che si tratta della riga in cui sono mostrati i comandi da eseguire nel terminale.<\/p>\n<p>Si presuppone che, durante l'esecuzione delle azioni descritte in questo articolo, il tuo 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>Ti verr\u00e0 richiesta una password per apportare modifiche, inseriscila e il gestore pacchetti aggiorner\u00e0 i suoi database. Dopo di che, esegui:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install libmediastreamer-dev<\/code><\/pre>\n<p>I pacchetti di dipendenza necessari e la libreria del mediastreamer verranno scaricati e installati automaticamente.<\/p>\n<p>La dimensione totale dei pacchetti deb delle dipendenze scaricati sar\u00e0 di circa 35 MB. Puoi scoprire ulteriori dettagli sul pacchetto installato 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: Ubuntu Developers \nArchitecture: amd64\nSource: linphone\nVersion: 3.6.1-2.5\nDepends: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev\nDescription: Libreria media per il telefono web Linphone - file di sviluppo\nLinphone \u00e8 un telefono internet audio e video che utilizza il protocollo SIP. Ha un'interfaccia GTK+ e console, include una grande variet\u00e0 di codec audio e video e fornisce funzionalit\u00e0 di messaggistica istantanea.\n.\nQuesto pacchetto contiene le librerie di sviluppo per la gestione delle operazioni multimediali.\nOriginal-Maintainer: Debian VoIP Team \nHomepage: http:\/\/www.linphone.org\/\n<\/code><\/pre>\n<h4 id=\"ustanovka-instrumentov-razrabotki\">Installazione degli strumenti di sviluppo<\/h4>\n<p>Procediamo installando il compilatore C e gli strumenti correlati:<\/p>\n<pre><code class=\"bash\">$ sudo apt-get install gcc<\/code><\/pre>\n<p>Verifichiamo il risultato richiedendo la versione del compilatore:<\/p>\n<pre><code class=\"bash\">$ gcc --version<\/code><\/pre>\n<p>La risposta dovrebbe essere pi\u00f9 o meno 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 un software libero; vedere la sorgente per le condizioni di copia. Non c'\u00e8 nessuna\ngaranzia; neppure di commerciabilit\u00e0 o idoneit\u00e0 per uno scopo particolare.<\/code><\/pre>\n<h4 id=\"sborka-i-zapusk-probnogo-prilozheniya\">Compilazione e avvio di un'applicazione di prova<\/h4>\n<p>Creiamo nella <em>home<\/em> una cartella per i nostri progetti didattici, chiamandola <em>mstutorial<\/em>:<\/p>\n<pre><code class=\"bash\">$ mkdir ~\/mstutorial<\/code><\/pre>\n<p>Usa il tuo editor di testo preferito e crea un file per il programma 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>Questo file inizializza il media streamer, stampa un messaggio di 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>Nota che la riga<\/p>\n<pre><code class=\"bash\">`pkg-config mediastreamer --libs --cflags`<\/code><\/pre>\n<p>\u00e8 racchiuso tra virgolette, che si trovano sulla tastiera nella stessa posizione della lettera \u00ab\u0401\u00bb.<\/p>\n<p>Se il file non contiene errori, dopo la compilazione apparir\u00e0 nel catalogo il file <em>mstest<\/em>. Avviamo 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 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 default:0\nALSA lib conf.c:4738:(snd_config_expand) Parametri sconosciuti 0\nALSA lib pcm.c:2266:(snd_pcm_open_noupdate) PCM sconosciuto default:0\nortp-warning-Strano, la scheda audio HDA Intel PCH sembra non essere capace di nulla, riprovando con plughw...\nMediastreamer \u00e8 pronto.<\/code><\/pre>\n<p>In questo elenco vediamo i messaggi di errore restituiti dalla libreria ALSA, utilizzata per gestire la scheda audio. Gli stessi sviluppatori del media streamer ritengono che sia normale. In questo caso, ci troviamo costretti a concordare con loro.<\/p>\n<p>Ora abbiamo tutto pronto per lavorare con il media streamer. Abbiamo installato la libreria del media streamer, lo strumento di compilazione e con un'applicazione di prova abbiamo verificato che gli strumenti siano configurati e che il media streamer si inizializzi correttamente.<\/p>\n<p>Nella prossima <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495728\/\">articolo<\/a><\/noindex> creeremo un'applicazione che raccoglier\u00e0 e avvier\u00e0 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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0437\u044f\u0442 \u0441 \u043c\u043e\u0435\u0433\u043e \u0434\u0437\u0435\u043d-\u043a\u0430\u043d\u0430\u043b\u0430. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0438\u0436\u043a\u0430 Mediastreamer2. \u0412 \u0445\u043e\u0434\u0435 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 Linux \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421\u0438. Mediastreamer2 \u044d\u0442\u043e VoIP-\u0434\u0432\u0438\u0436\u043e\u043a, \u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e open-source \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e voip-\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 Linphone. \u0412 Linphone Mediastreamer2 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/izuchaem-voip-dvizhok-mediastreamer2-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"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. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0438\u0436\u043a\u0430 Mediastreamer2. \u0412 \u0445\u043e\u0434\u0435 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 Linux \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421\u0438. Mediastreamer2 \u044d\u0442\u043e VoIP-\u0434\u0432\u0438\u0436\u043e\u043a, \u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e open-source \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e voip-\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 Linphone. \u0412 Linphone Mediastreamer2 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/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. Introduzione Questo articolo \u00e8 l'inizio di una serie di articoli sulla elaborazione in tempo reale dei dati multimediali utilizzando il motore Mediastreamer2. Durante l'esposizione saranno necessarie minime competenze nell'uso del terminale Linux e nella programmazione in linguaggio C. Mediastreamer2 \u00e8 un motore VoIP che sta alla base del popolare progetto open-source del telefono VoIP Linphone. In Linphone, Mediastreamer2 implementa tutte le funzionalit\u00e0.","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. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u0440\u0435\u0430\u043b\u0442\u0430\u0439\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u0435\u0434\u0438\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0438\u0436\u043a\u0430 Mediastreamer2. \u0412 \u0445\u043e\u0434\u0435 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 Linux \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421\u0438. Mediastreamer2 \u044d\u0442\u043e VoIP-\u0434\u0432\u0438\u0436\u043e\u043a, \u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e open-source \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e voip-\u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430 Linphone. \u0412 Linphone Mediastreamer2 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438","og:url":"https:\/\/prohoster.info\/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"},"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}]}}