Materiali i artikullit është marrë nga kanali im .
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. . 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: .
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 , e cila na sugjeron një mundësi lidhjeje të largët me . 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ë.

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 updateDo 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-devPaketat 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-devShembulli 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 gccKontrollojmë rezultatin, duke kërkuar versionin e kompilatorit:
$ gcc --versionPë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 ~/mstutorialPë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:
$ ./mstestRezultati 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 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
