U materiale di l'articulu hè pigliatu da u mo
Introduzione
Questu articulu hè u principiu di una seria di articuli nantu à u prucessu di media in tempu reale cù u mutore Mediastreamer2. Durante a presentazione, e cumpetenze minime in u travagliu in u terminal Linux è a prugrammazione in a lingua C seranu usate.
Mediastreamer2 hè u mutore VoIP daretu à u famosu prughjettu di u software di u telefuninu VoIP open-source
In più in u testu, per comodità, invece di a parolla Mediastreamer2 useremu a so notazione russa: "mediastreamer".
A storia di a so creazione ùn hè micca sanu chjara, ma à ghjudicà da u so codice fonte, prima usava a biblioteca
U media streamer hè basatu annantu à una architettura chjamata "Data flow". Un esempiu di tali architettura hè mostratu in a figura sottu.
In questa architettura, l'algoritmu di trattamentu di dati ùn hè micca specificatu da u codice di u prugramma, ma da un diagramma (graficu) di funzioni di cunnessione chì ponu esse disposti in ogni ordine. Sti funzioni sò chjamati filtri.
Questa architettura permette di implementà a funziunalità di processazione media in forma di un settore di filtri cunnessi in un circuitu per processà è trasmette u trafficu RTP di un telefunu VoIP.
A capacità di cunnette i filtri in schemi arbitrarii, u sviluppu simplice di novi filtri, è l'implementazione di u media streamer cum'è una biblioteca separata indipendente permettenu di esse usatu in altri prughjetti. Inoltre, u prugettu pò esse in u campu di VoIP, postu chì hè pussibule aghjunghje filtri fatti da sè stessu.
A biblioteca di filtri predeterminata hè abbastanza ricca è, cum'è digià dettu, pò esse allargata cù filtri di u nostru propiu disignu. Ma prima, descriveremu i filtri pronti chì venenu cù u media streamer. Eccu a so lista:
Filtri di sonu
Cattura è riproduzione audio
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Sonu nativu Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Audio Queue Service (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Serviziu di unità audio (Mac OS X)
- Arti (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- File player (file raw/wav/pcap) (Linux): MS_FILE_PLAYER
- File player (file raw/wav) (Windows): MS_WINSND_READ
- Scrivite in u schedariu (fichi wav) (Linux): MS_FILE_REC
- Scrivite in u schedariu (fichi wav) (Windows): MS_WINSND_WRITE
- Mac Audio Unit (Mac OS X)
- MME (Windows)
- OSS (Linux): MS_OSS_WRITE, MS_OSS_READ
- PortAudio (Mac OS X)
- PulseAudio (Linux): MS_PULSE_WRITE, MS_PULSE_READ
- Windows Sound (Windows)
Codificazione / decodificazione audio
- G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 µ-law: MS_ULAW_DEC, MS_ULAW_ENC
- G.722: MS_G722_DEC, MS_G722_ENC
- G.726: MS_G726_32_ENC, MS_G726_24_ENC, MS_G726_16_ENC
- GSM: MS_GSM_DEC, MS_GSM_ENC
- PCM lineare: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Trattamentu audio
- Cunversione di u canali (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Cunferenza: MS_CONF
- Generatore DTMF: MS_DTMF_GEN
- Annulazione di l'eco (speex): MS_SPEEX_EC
- Equalizzatore: MS_EQUALIZER
- Mixer : MS_MIXER
- Compensatore di perdita di pacchettu (PLC): MS_GENERIC_PLC
- Resampler: MS_RESAMPLE
- Rilevatore di tonu: MS_TONE_DETECTOR
- Controlu di u voluminu è misurazione di u livellu di u signale: MS_VOLUME
Filtri Video
Cattura è riproduzione di video
- cattura Android
- Riproduzione Android
- AV Foundation Capture (iOS)
- Riproduzione di AV Foundation (iOS)
- Cattura DirectShow (Windows)
- Riproduzione DrawDib (Windows)
- Riproduzione esterna - Mandate video à u livellu più altu
- Riproduzione GLX (Linux): MS_GLXVIDEO
- Mire - Stampa sintetica in muvimentu: MS_MIRE
- Riproduzione OpenGL (Mac OS X)
- Riproduzione OpenGL ES2 (Android)
- Quicktime capture (Mac OS X)
- Riproduzione SDL: MS_SDL_OUT
- Output d'imaghjini statichi: MS_STATIC_IMAGE
- Video Per Linux (V4L) cattura (Linux): MS_V4L
- Video Per Linux 2 (V4L2) cattura (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow) cattura (Windows)
- Cattura Video4windows (DirectShow) (Windows CE)
- Video per Windows (vfw) cattura (Windows)
- Riproduzione XV (Linux)
Codificazione / decodificazione di video
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Neve: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (solu decoder): MS_H264_DEC
- Theora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Trattamentu Video
- Snapshot JPEG
- Convertitore di furmatu di pixel: MS_PIX_CONV
- Resizer
- Altri filtri
- Scambiu di blocchi di dati trà i fili: MS_ITC_SOURCE, MS_ITC_SINK
- Raccolta di blocchi di dati da più input à una output: MS_JOIN
- Ricezione / trasmissione RTP: MS_RTP_SEND, MS_RTP_RECV
- Copia di dati di input à parechje outputs: MS_TEE
- Carica currispondente: MS_VOID_SINK
- Fonte di silenziu: MS_VOID_SOURCE
Plugins
Filtri di sonu
- Encoder/decoder AMR-NB
- G.729 encoder / decoder
- codificatore / decodificatore iLBC
- Encoder/decoder SILK
Filtri Video
- Codificatore di u software H.264
- Encoder / decoder H.264 V4L2 cù accelerazione hardware
Dopu una breve descrizzione di u filtru, u nome di u tipu hè indicatu, chì hè utilizatu quandu crea una nova istanza di stu filtru. In a discussione seguente, avemu da riferite à sta lista.
Installazione sottu Linux Ubuntu
Avà avemu da stallà u media streamer nant'à u vostru urdinatore, è custruisce a nostra prima applicazione cun ella.
L'installazione di Mediastremer2 nantu à un urdinatore o una macchina virtuale chì esegue Ubuntu ùn richiede micca cumpetenze speciali. Quì è quì sottu, u simbulu "$" denotarà u prompt di shell per inserisce cumandamenti. Quelli. se in u listinu vede stu simbulu à u principiu di una linea, allora questu significa chì questu hè una linea chì mostra i cumandamenti per esse eseguiti in u terminal.
Hè presumitu chì mentre eseguite i passi descritti in questu articulu, u vostru urdinatore hà accessu à Internet.
Installazione di u pacchettu libmediastromer-dev
Lanciate u terminal è scrive u cumandimu:
$ sudo apt-get update
Vi sarà dumandatu una password per fà cambiamenti; inserite è u gestore di pacchetti aghjurnà a so basa di dati. Dopu questu avete bisognu di fà:
$ sudo apt-get install libmediastreamer-dev
I pacchetti di dipendenza necessarii è a libreria media streamer stessu seranu scaricati è installati automaticamente.
A dimensione tutale di i pacchetti di dependenza di deb scaricati serà di circa 35 MB. I dettagli nantu à u pacchettu installatu ponu esse truvati cù u cumandimu:
$ dpkg -s libmediastreamer-dev
Esempiu di risposta:
Package: libmediastreamer-dev
Status: install ok installed
Priority: optional
Section: libdevel
Installed-Size: 244
Maintainer: Ubuntu Developers <[email protected]>
Architecture: amd64
Source: linphone
Version: 3.6.1-2.5
Depends: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev
Description: Linphone web phone's media library - development files
Linphone is an audio and video internet phone using the SIP protocol. It
has a GTK+ and console interface, includes a large variety of audio and video
codecs, and provides IM features.
.
This package contains the development libraries for handling media operations.
Original-Maintainer: Debian VoIP Team <[email protected]>
Homepage: http://www.linphone.org/
Installazione di Strumenti di Sviluppu
Installa u compilatore C è i so strumenti chì l'accumpagnanu:
$ sudo apt-get install gcc
Cuntrollamu u risultatu dumandendu a versione di compilatore:
$ gcc --version
A risposta deve esse qualcosa cum'è questu:
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Custruisce è gestisce una applicazione di prova
Creemu in casa cartulare per i nostri prughjetti educativi, chjamemu mstutorial:
$ mkdir ~/mstutorial
Aduprate u vostru editore di testu favuritu è create un schedariu di prugramma C chjamatu mstest.c cù u seguenti cuntenutu:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Inizializza u streamer di media, stampa un salutu, è finisce l'esecuzione.
Salvà u schedariu è compile l'applicazione di prova cù u cumandimu:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Per piacè nutate chì a linea
`pkg-config mediastreamer --libs --cflags`
chjusu in virgulette, chì si trovanu nantu à u teclatu in u stessu locu cum'è a lettera "Y".
Se u schedariu ùn cuntene errori, dopu a compilazione, u schedariu apparirà in u cartulare mstest. Eseguimu u prugramma:
$ ./mstest
U risultatu serà cusì:
ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib control.c:954:(snd_ctl_open_noupdate) Invalid CTL default:0
ortp-warning-Could not attach mixer to card: Invalid argument
ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default:0
ALSA lib conf.c:4738:(snd_config_expand) Unknown parameters 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Unknown PCM default:0
ortp-warning-Strange, sound card HDA Intel PCH does not seems to be capable of anything, retrying with plughw...
Mediastreamer is ready.
In questu listinu vedemu i missaghji di errore generati da a biblioteca ALSA, chì hè utilizata per cuntrullà a carta di sonu. I sviluppatori di i media streamer stessi credenu chì questu hè normale. In questu casu, avemu inevitabbilmente d'accordu cun elli.
Avà simu pronti à travaglià cù u media streamer. Avemu installatu a biblioteca di media streamer, l'uttellu di compilazione, è hà utilizatu una applicazione di mostra per verificà chì l'arnesi sò stati cunfigurati è u media streamer inizializatu bè.
Dopu
Source: www.habr.com