Materiali i artikujt është marrë nga kanali im .
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. . 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: .
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 , që na nënkupton një lidhje të mundshme 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ë 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ë.

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