Eksplorimi i motorit VoIP Mediastreamer2. Pjesa 1

Materiali i artikullit është marrë nga kanali im zen.

Hyrje

Ky artikull është fillimi i një serie artikujsh mbi përpunimin e mediave në kohë reale duke përdorur motorin Mediastreamer2. Në përshkrim do të përfshihen aftësi minimale në terminallin Linux dhe programimin në gjuhën C.

Mediastreamer2 është një motor VoIP që qëndron në zemër të projektit të njohur open-source të telefonit VoIP. Linphone. Në Linphone, Mediastreamer2 implementon të gjitha funksionet e lidhura me audio dhe video. Një listë të detajuar të mundësive të motorit mund ta shihni në këtë faqe Mediastreamer. Kodi burimor gjendet këtu: GitLab.

Më tej në tekst, për lehtësi, në vend të fjalës Mediastreamer2 do të përdorim notacionin e tij shqiptar: «mediastreamer».

Historia e krijimit të tij nuk është krejt e qartë, por sipas kodit të tij burimor, më parë përdorte bibliotekën Glib, e cila na sugjeron një mundësi lidhjeje të largët me GStreamer. Në krahasim me të, mediastreamer duket më i lehtë. Versioni i parë i Linphone u shfaq në vitin 2001, kështu që aktualisht, mediastreamer ekziston dhe zhvillohet prej gati 20 vjetësh.

Arsy është e bazuar në një strukturë të quajtur "Data flow" (rrjedha e të dhënave). Një shembull i kësaj strukture është paraqitur në ilustrimin më poshtë.

Eksplorimi i motorit VoIP Mediastreamer2. Pjesa 1

Në këtë strukturë, algoritmi i përpunimit të të dhënave caktohet jo nga kodi programor, por nga një diagram (graf) lidhjeje të funksioneve, të cilat mund të organizohen në çdo rend. Këto funksione quhen filtrat.

Një strukturë e tillë lejon realizimin e funksionalitetit të përpunimit të mediave në formën e një grumbulli filtrash, të lidhur në një skemë përpunimi dhe transmetimi të trafik të RTP për telefonin VoIP.

Mundësia për të lidhur filtrat në skema të ndryshme, zhvillimi i lehtë i filtrave të rinj, dhe realizimi i mediastream-it si një bibliotekë e pavarur, e mundëson atë të përdoret edhe në projekte të tjera. Projekti mund të jetë në fushën e VoIP, pasi ka mundësinë për të shtuar filtrat e krijuar nga vetë përdoruesi.

Biblioteka e filtrave e ofruar si standard është mjaft e pasur dhe, siç është përmendur më parë, mund të zgjerohet me filtrat e zhvilluar vetë. Por së pari, le të përshkruajmë filtrat e gatshëm, të cilat ofrohen së bashku me mediastream-in. Ja lista e tyre:

Filtra audio

Kapja dhe riprodhimi i zërit

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • TĂ« dhĂ«na audio native Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • ShĂ«rbimi Audio Queue (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • ShĂ«rbimi Audio Unit (Mac OS X)
  • Arts (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • LuajtĂ«s skedujsh (raw/wav/pcap skeduj) (Linux): MS_FILE_PLAYER
  • LuajtĂ«s skedujsh (raw/wav skeduj) (Windows): MS_WINSND_READ
  • Regjistrimi nĂ« skedull (wav skeduj) (Linux): MS_FILE_REC
  • Regjistrimi nĂ« skedull (wav skeduj) (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)

Kodi/dekodimi i zërit

  • G.711 a-zakon: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 ”-zakon: 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
  • Linera PCM: MS_L16_ENC, MS_L16_DEC
  • Speex: MS_SPEEX_ENC, MS_SPEEX_DEC

Përpunimi i zërit

  • PĂ«rkthimi i kanalit (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Konferenca: MS_CONF
  • Gjeneratori DTMF: MS_DTMF_GEN
  • PĂ«rzgjidhja e jehonĂ«s (speex): MS_SPEEX_EC
  • Ekvalajzeri: MS_EQUALIZER
  • Mikseri: MS_MIXER
  • Kompensatori i humbjes sĂ« paketave (PLC): MS_GENERIC_PLC
  • RisĂ«mpeluesi: MS_RESAMPLE
  • Detektori i tonit: MS_TONE_DETECTOR
  • Kontrolli i zhurmĂ«s dhe matja e nivelit tĂ« sinjalit: MS_VOLUME

Filtër video

Kapja dhe riprodhimi i videos

  • Kapja Android
  • Riprodhimi Android
  • Kapja AV Foundation (iOS)
  • Riprodhimi AV Foundation (iOS)
  • DirectShow kapje (Windows)
  • DrawDib riprodhimi (Windows)
  • Riprodhimi tĂ« jashtĂ«m — DĂ«rgimi i videos nĂ« nivelin e lartĂ«
  • GLX riprodhimi (Linux): MS_GLXVIDEO
  • Mire — Imazh lĂ«vizĂ«s sintetik: MS_MIRE
  • OpenGL riprodhimi (Mac OS X)
  • OpenGL ES2 riprodhimi (Android)
  • Quicktime kapje (Mac OS X)
  • SDL riprodhimi: MS_SDL_OUT
  • ShpĂ«rndarja e imazheve statike: MS_STATIC_IMAGE
  • Video pĂ«r Linux (V4L) kapje (Linux): MS_V4L
  • Video pĂ«r Linux 2 (V4L2) kapje (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) kapje (Windows)
  • Video4windows (DirectShow) kapje (Windows CE)
  • Video pĂ«r Windows (vfw) kapje (Windows)
  • XV riprodhimi (Linux)

Kodeking/dekodeking i videos

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (vetĂ«m dekodues): MS_H264_DEC
  • Theora: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Përpunimi i videos

  • JPEG snapshot
  • Konvertuesi i formatit tĂ« pikselit: MS_PIX_CONV
  • Rreshtoni
  • FiltĂ«r tĂ« tjerĂ«
  • ShkĂ«mbimi i blloqeve tĂ« dhĂ«nash midis gjurmave: MS_ITC_SOURCE, MS_ITC_SINK
  • Grumbullimi i blloqeve tĂ« dhĂ«nash nga disa hyrje nĂ« njĂ« dalje: MS_JOIN
  • RTP pranimi/dĂ«rgimi: MS_RTP_SEND, MS_RTP_RECV
  • Kopjimi i tĂ« dhĂ«nave hyrĂ«se nĂ« disa dalje: MS_TEE
  • NgarkesĂ« e koordinuar: MS_VOID_SINK
  • Burimi i heshtjes: MS_VOID_SOURCE

Plugins

Filtra audio

  • AMR-NB kodek/dekodek
  • G.729 kodek/dekodek
  • iLBC kodek/dekodek
  • SILK kodek/dekodek

    Filtër video

  • H.264 kodek programatik
  • H.264 V4L2 kodek/dekodek me ndihmĂ« harduake

Pas një përshkrim të shkurtër të filtrit, tregohet emri i llojit që përdoret gjatë krijimit të një ekzemplar të ri të këtij filtri. Në vazhdim, ne do të referohemi në këtë listë.

Instalimi në Linux Ubuntu

Tani do të kryejmë instalimin e mediastreamer në kompjuter dhe do të ndërtosh aplikacionin tonë të parë me të.

Instalimi i Mediastremer2 nĂ« kompjuter ose makinĂ« virtuale qĂ« drejton Ubuntu nuk kĂ«rkon aftĂ«si tĂ« veçanta. KĂ«tu dhe mĂ« poshtĂ«, simboli “$” do tĂ« shĂ«rbejĂ« si njĂ« tregues i shell-it pĂ«r futjen e komandave. DomethĂ«nĂ«, nĂ«se nĂ« listĂ«n shihni kĂ«tĂ« simbol nĂ« fillim tĂ« rreshtit, atĂ«herĂ« ky Ă«shtĂ« rreshti qĂ« tregon komandat pĂ«r t'u ekzekutuar nĂ« terminal.

Supozohen që gjatë kryerjes së veprimeve të përshkruara në këtë artikull, kompjuteri juaj ka qasje në internet.

Instalimi i paketës libmediastremer-dev

Nisni terminalin dhe shkruani komandën:

$ sudo apt-get update

Do të kërkohet fjalëkalimi për të bërë ndryshime, shkruani atë dhe menaxheri i paketave do të përditësojë bazat e tij. Pas kësaj, duhet të kryeni:

$ sudo apt-get install libmediastreamer-dev

Paketat e nevojshme të varësive dhe vetë biblioteka e mediastreamer-it do të shkarkohen dhe instalohen automatikisht.

Madhësia e përgjithshme e paketave deb të shkarkuara të varësive do të jetë rreth 35 MB. Detajet mbi paketën e instaluar mund të merren me komandën:

$ dpkg -s libmediastreamer-dev

Shembulli i përgjigjes:

Paketa: libmediastreamer-dev
Statusi: instalohet me sukses
Prioriteti: opsional
Section: libdevel
Madhësia e instaluar: 244
Mantenuesi: Zhvilluesit e Ubuntu 
Arkitektura: amd64
Burimi: linphone
Versioni: 3.6.1-2.5
Varet nga: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev
Përshkrimi: Biblioteka mediatike e telefonit web Linphone - skedarë zhvillimi
Linphone është një telefon interneti audio dhe video që përdor protokollin SIP. Ai
ka një ndërfaqe GTK+ dhe konsolë, përfshin një gamë të gjerë kodekësh audio dhe video
në dispozicion, dhe ofron veçori IM.
.
Kjo paketë përmban bibliotekat zhvillimore për menaxhimin e operacioneve mediatike.
Mantenuesi origjinal: Ekipa VoIP e Debian 
Faqja kryesore: http://www.linphone.org/

Instalimi i mjeteve të zhvillimit

Po instalohet kompilatori C dhe mjetet e tjera përkatëse:

$ sudo apt-get install gcc

Kontrollojmë rezultatin, duke kërkuar versionin e kompilatorit:

$ gcc --version

Përgjigja duhet të jetë diçka si:

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Kopje (C) 2015 Fondacioni i Softuerit të Lirë, Inc.
Ky Ă«shtĂ« softuer i lirĂ«; shih burimin pĂ«r kushtet e kopjimit. Nuk ka GARANCIGJË; as pĂ«r TREGTUESHMËRI apo PËRPOJTYRIMIN E VEÇANTË.

Ndërtimi dhe ekzekutimi i aplikacionit provues

Krijojmë në home një dosje për projektet tona mësimore, do ta quajmë mstutorial:

$ mkdir ~/mstutorial

Përdorni redaktorin tuaj të preferuar për të krijuar një skedar C-programi me emrin mstest.c me përmbajtjen e mëposhtme:

#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
  ms_init();
  printf ("Mediastreamer is ready.n");
}

Ai kryen inicializimin e mediastreamer-it, printon një përshëndetje dhe përfundon ekzekutimin.

Ruajmë skedarin dhe kompilojmë aplikacionin e testit me komandën:

$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`

Vini re se rreshti

`pkg-config mediastreamer --libs --cflags`

është brenda thonjëzave, të cilat ndodhen në tastierë aty ku është letra «Ё».

Nëse skedari nuk përmban gabime, pas kompilimit do të shfaqet një skedar mstest. Ekzekutojmë programin:

$ ./mstest

Rezultati do të jetë si më poshtë:

ALSA lib conf.c:4738:(snd_config_expand) Parametra të panjohur 0
ALSA lib control.c:954:(snd_ctl_open_noupdate) CTL e pavlefshme default:0
ortp-warning-Nuk mundëm të lidhim mixer-in me kartën: Argument i pavlefshëm
ALSA lib conf.c:4738:(snd_config_expand) Parametra të panjohur 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) PCM i panjohur default:0
ALSA lib conf.c:4738:(snd_config_expand) Parametra të panjohur 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) PCM i panjohur default:0
ortp-warning-ÇuditĂ«risht, kartela e zĂ«rit HDA Intel PCH duket se nuk Ă«shtĂ« nĂ« gjendje tĂ« bĂ«jĂ« asgjĂ«, po pĂ«rpiqemi pĂ«rsĂ«ri me plughw...
Mediastreamer është gati.

Në këtë listë shohim mesazhe gabimi që jep biblioteka ALSA, e cila përdoret për menaxhimin e kartës audio. Vetë zhvilluesit e mediastreamerit mendojnë se është normale. Në këtë rast, do të pajtohemi me ta me dëshirë.

Tani kemi gjithçka gati për të punuar me mediastreamerin. Ne kemi instaluar bibliotekën e mediastreamerit, mjetin e kompjilimit dhe kemi verifikuar me një aplikacion provues se mjetet janë të konfigurara dhe mediastreameri është inicializuar me sukses.

Në të ardhmen artikullin ne do të krijojmë një aplikacion që do të mbledhë dhe nisi përpunimin e sinjalit audio në një zinxhir me disa filtra.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster