Eksplorimi i motorit VoIP Mediastreamer2. Pjesa 1

Materiali i artikujt është marrë nga kanali im Dzen.

Hyrje

Ky kët artikulli është fillimi i një serie artikujsh mbi përpunimin e mediave në kohë reale me ndihmën e motorit Mediastreamer2. Gjatë trajtimit do të përdoren aftësi minimale të punës në terminalin Linux dhe programimit në gjuhën C.

Mediastreamer2 është një motor VoIP, që qëndron në zemër të projektit popullor open-source të telefonit VoIP. Linphone. Në Linphone, Mediastreamer2 implementon të gjitha funksionet që lidhen me tingullin dhe videon. Një listë e detajuar e mundësive të motorit mund të shihet në këtë faqe Mediastreamer. Kodi burimor ndodhet këtu: GitLab.

MĂ« pas nĂ« tekst, pĂ«r tĂ« lehtĂ«suar, nĂ« vend tĂ« fjalĂ«s Mediastreamer2, do tĂ« pĂ«rdorim emrin e tij nĂ« gjuhĂ«n ruse: Â«ĐŒĐ”ĐŽĐžĐ°ŃŃ‚Ń€ĐžĐŒĐ”Ń€Â» (mediastreamer).

Historia e krijimit të tij nuk është plotësisht e qartë, por sipas kodit të tij burimor, ai ka përdorur më parë bibliotekën Glib, që na nënkupton një lidhje të mundshme 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ë për momentin, mediastreamer ekziston dhe zhvillohet për afro 20 vjet.

Në thelb, mediastreamer mbështetet në një arkitekturë të quajtur «Data flow» (rrjedha e të dhënave). Një shembull i kësaj arkitekte është ilustruar në figuren më poshtë.

Eksplorimi i motorit VoIP Mediastreamer2. Pjesa 1

Në këtë arkitekturë, algoritmi i përpunimit të të dhënave përcaktohet jo nga kodi programues, por nga një skemë (graf) lidhjeje të funksioneve, të cilat mund të rregullohen në çdo rend. Këto funksione quhen filtra.

Kjo arkitekturë lejon implementimin e funksionalitetit të përpunimit të mediave si një grup filtrash, të lidhura në një skemë të përpunimit dhe transmetimit të RTP-së për telefonin VoIP.

Mundësia për të lidhur filtrat në skema të rastësishme, zhvillimi i lehtë i filtrave të rinj, implementimi i mediastreamer si një bibliotekë të veçantë të pavarur, lejojnë përdorimin e tij edhe në projekte të tjera. Projekti mund të jetë në fushën e VoIP, pasi ekziston mundësia për të shtuar filtra të zhvilluar vetë.

Biblioteka e filtrave e ofruar nga parazgjedhja është mjaft e pasur dhe siç është thënë më parë, mund të zgjerohet me filtra të zhvilluar nga vetë. Por fillimisht do të përshkruajmë filtrat e gatshëm, të cilat vijnë me mediastreamer. Ja lista e tyre:

Filtrat e tingullit

Kapja dhe riprodhimi i tingullit

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Tingulli native i Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • ShĂ«rbimi i Audio Queue (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • ShĂ«rbimi i NjĂ«sisĂ« Audio (Mac OS X)
  • Arts (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Shkarkuesi i skedarĂ«ve (raw/wav/pcap) (Linux): MS_FILE_PLAYER
  • Shkarkuesi i skedarĂ«ve (raw/wav) (Windows): MS_WINSND_READ
  • Regjistrimi nĂ« skedar (wav) (Linux): MS_FILE_REC
  • Regjistrimi nĂ« skedar (wav) (Windows): MS_WINSND_WRITE
  • NjĂ«sia Audio e Mac (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
  • ZĂ«ri i Windows (Windows)

Kodimi/dekodimi i zërit

  • G.711 a-lege: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 ”-lege: 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
  • IKM lineare: 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
  • ShkĂ«putja e jehonĂ«s (speex): MS_SPEEX_EC
  • Ekualizuesi: MS_EQUALIZER
  • Mikseri: MS_MIXER
  • Kompenzatori i humbjes sĂ« paketeve (PLC): MS_GENERIC_PLC
  • RĂ«reshimi: MS_RESAMPLE
  • Detektori i tonĂ«ve: MS_TONE_DETECTOR
  • Kontrolli i volumit dhe matja e nivelit tĂ« sinjalit: MS_VOLUME

Filtrat e videos

Kapja dhe riprodhimi i videos

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

Kodi/dekodi i videos

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

Përpunimi i videos

  • Shtypja JPEG
  • Kursi i formatit tĂ« pikselit: MS_PIX_CONV
  • RipĂ«rmasimi
  • Filtra tĂ« tjerĂ«
  • ShkĂ«mbimi i bllokave tĂ« tĂ« dhĂ«nave midis fijeve: MS_ITC_SOURCE, MS_ITC_SINK
  • Grumbullimi i bllokave tĂ« tĂ« dhĂ«nave nga disa hyrje nĂ« njĂ« dalje: MS_JOIN
  • Pranimi/dĂ«rgimi RTP: MS_RTP_SEND, MS_RTP_RECV
  • Kopjimi i tĂ« dhĂ«nave hyrĂ«se nĂ« disa dalje: MS_TEE
  • Ngarkesa e harmonizuar: MS_VOID_SINK
  • Burimi i heshtjes: MS_VOID_SOURCE

Plugins

Filtrat e tingullit

  • Koder/dekoder AMR-NB
  • Koder/dekoder G.729
  • Koder/dekoder iLBC
  • Koder/dekoder SILK

    Filtrat e videos

  • Koder pĂ«r H.264 programor
  • Koder/dekoder H.264 V4L2 me pĂ«rshpejtim harduerik

Pas përshkrimit të shkurtër të filtrit tregohet emri i tipit që përdoret për krijimin e 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-it në kompjuter dhe do të ndërtojmë aplikacionin tonë të parë me të.

Instalimi i Mediastremer2 në kompjuterin ose makinën virtuale që drejton Ubuntu nuk kërkon aftësi të veçanta. Nga këtu e tutje, simboli «$» do të përfaqësojë ftesën e shell-it për hyrjen e komandave. Pra, nëse në listimin e komandave e shihni këtë simbol në fillim të rreshtit, do të thotë se është rreshti ku shihen komandat për t'u ekzekutuar në terminal.

Supozimi është se gjatë kryerjes së veprimeve të përshkruara në këtë artikull, kompjuteri juaj ka qasje në rrjetin e Internetit.

Instalimi i paketës libmediastremer-dev

Hapni terminalin dhe shkruani komandën:

$ sudo apt-get update

Do t'ju kërkohet një fjalëkalim për të bërë ndryshime, shkruani atë dhe menaxheri i pakove do të azhurnohet. Pasi të bëhet kjo, duhet të ekzekutoni:

$ sudo apt-get install libmediastreamer-dev

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

Madhësia e përgjithshme e pakove 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:

Paketë: libmediastreamer-dev
Status: instaluar
Prioritet: opsional
Sekcija: libdevel
Madhësia e instaluar: 244
Menaxheri: Zhvilluesit e Ubuntu <ubuntu-devel-discuss@lists.ubuntu.com>
Arkitektura: amd64
Burimi: linphone
Versioni: 3.6.1-2.5
Varësitë: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev
Përshkrimi: Biblioteka e medias së telefonit në internet Linphone - skedarët e zhvillimit
Linphone është një telefon audio dhe video në internet që përdor protokollin SIP. Ai
ka një ndërfaqe GTK+ dhe konsolë, përfshin një gamë të gjerë kodekesh audio dhe video
dhe ofron karakteristika IM.
.
Kjo paketë përmban bibliotekat e zhvillimit për trajtimin e operacioneve mediale.
Menaxheri Origjinal: Ekipi VoIP i Debian-it <pkg-voip-maintainers@lists.alioth.debian.org>
Homepage: http://www.linphone.org/

Instalimi i mjeteve të zhvillimit

Instaloni kompilatorin C dhe mjetet e tij shoqëruese:

$ sudo apt-get install gcc

Kontrolloni rezultatin duke kërkuar versionin e kompilatorit:

$ gcc --version

Përgjigjja duhet të jetë diçka e tillë:

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Fondacioni i Lirë i Softuerit, Inc.
Ky është softuer i lirë; shihni burimin për kushte kopjimi. Nuk ka
garanci; as pĂ«r TREGTARSHMËRI apo PASTRUESMËRI MË TË PËRKOSHMË.

Ndërtimi dhe lançimi i aplikacionit provues

Krijoni në home një folder për projektet tona mësimore, ta quajmë mstutorial:

$ mkdir ~/mstutorial

Përdorni redaktorin tuaj të preferuar të tekstit dhe krijoni një skedë C 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.

Ruani skedën dhe kompiloni aplikacionin provues me komandën:

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

Vërejtje, se rreshti

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

është e rrethuar me thonjëza, të cilat ndodhen në tastierë atje ku ndodhet letra «Ё».

Nëse skedari nuk ka gabime, atëherë pas kompilimit në katalog do të shfaqet skedari mstest. Të fillojmë 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 i pavlefshëm default:0
ortp-warning-Nuk mund të bashkohen mikseri me kartë: 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-Cuditshme, karta e zërit HDA Intel PCH nuk duket se është në gjendje t'i bëjë asgjë, duke provuar sërish me plughw...
Mediastreamer është gati.

Në këtë listing ne shohim mesazhet e gabimeve që jep biblioteka ALSA, e cila përdoret për menaxhimin e kartës së zërit. Vetë zhvilluesit e mediastreamer-it e konsiderojnë këtë si normale. Ne në këtë rast do të pajtohemi me ta, përveçse pa dëshirë.

Tani kemi gjithçka gati për të punuar me mediastreamer-in. Ne kemi instaluar biblioteken e mediastreamer-it, mjetin e kompjilimit dhe me anë të një aplikacioni prove verifikojmë se mjetet janë të konfiguruara dhe mediastreamer-in është inicializuar me sukses.

Në artikullin e ardhshëm artikulli ynë ne do të krijojmë një aplikacion që do të mbledhë dhe aktivizojë procesimin e sinjalit audio në një zinxhir të disa filtrave.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster