Artikli materjal on saadud minu .
Sissejuhatus
See artikkel on algus seeriale artikleid reaalajas meediaandmete töötlemisest Mediastreamer2 mootori abil. Teksti esitamiseks on vaja minimaalset Linuxi terminali ja C keele programmeerimisoskust.
Mediastreamer2 on VoIP-mootor, mis on populaarse avatud lĂ€htekoodiga VoIP-telefoni projekti aluseks. . Linphone'i sees rakendab Mediastreamer2 kĂ”iki heliga ja videoga seotud funktsioone. Mootori funktsioonide ĂŒksikasjalikku loetelu saab vaadata sellel lehel Mediastreamer. Allikakood on siin: .
Edasi tekstis, mugavuse huvides, kasutame Mediastreamer2 asemel selle vene nime: «midiastreamer».
Selle loomise ajalugu ei ole pÀris selge, kuid tema allikakoodi pÔhjal on nÀha, et ta kasutas varem raamatukogu , mis vihjab meile vÔimaliku kaugema sugulusesse . VÔrreldes sellega nÀeb midiastreamer vÀlja kergem. Esimene Linphone'i versioon ilmus 2001. aastal, seega on midiastreamer praegu eksisteerinud ja arenemas peaaegu 20 aastat.
Midiastreameri aluseks on arhitektuur, mida nimetatakse âData flowâ (andmevoog). Sellise arhitektuuri nĂ€ide on kujutatud alloleval pildil.

Selles arhitektuuris mÀÀratakse andmete töötlemise algoritm mitte programmi koodi, vaid funktsioonide ĂŒhendamise skeemiga (graafikuga), mida saab seada igas jĂ€rjekorras. Neid funktsioone nimetatakse filtriteks.
Selline arhitektuur vĂ”imaldab rakendada meedia töötlemise funktsioone filtrite komplektina, mis on ĂŒhendatud VoIP-telefoni RTP-traffiku töötlemise ja edastamise skeemi.
Filtreid on vĂ”imalik ĂŒhendada meelevaldselt skeemidesse, uute filtrite lihtne arendamine, midiastreameri rakendamine omaette raamatukoguna vĂ”imaldab seda kasutada ka teistes projektides. Samuti vĂ”ib projekt olla VoIP-valdkonnas, kuna on vĂ”imalik lisada ise loodud filtreid.
Vaikeselt tarnitud filtrite raamatukogu on piisavalt rikkalik ja nagu juba öeldud, saab seda laiendada enda arendatud filtritega. Kuid kÔigepealt kirjeldame valmis filtreid, mis tulevad koos midiastreameriga. Siin on nende nimekiri:
Helifiltrid
Heli salvestamine ja taasesitus
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Androidi natiivne heli (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Audio Queue Service (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Audio Unit Service (Mac OS X)
- Arts (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Failide taasesitaja (raw/wav/pcap failid) (Linux): MS_FILE_PLAYER
- Failide taasesitaja (raw/wav failid) (Windows): MS_WINSND_READ
- Faili salvestamine (wav failid) (Linux): MS_FILE_REC
- Faili salvestamine (wav failid) (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)
Heli kodeerimine/dekodeerimine
- G.711 a-ĆŸanr: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 ”-ĆŸanr: 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
- Lineaarne PCM: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Heli töötlemine
- Kanali konverteerimine (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konverents: MS_CONF
- DTMF generaator: MS_DTMF_GEN
- Kaja summutamine (speex): MS_SPEEX_EC
- Ekvalaiser: MS_EQUALIZER
- Mikser: MS_MIXER
- Pakettide kaotuse kompensaator (PLC): MS_GENERIC_PLC
- Uusamplija: MS_RESAMPLE
- Toonide detektor: MS_TONE_DETECTOR
- Heli valimise ja signaali taseme mÔÔtmise sĂŒsteem: MS_VOLUME
Video filtrid
Video salvestamine ja taasesitamine
- Androidi salvestamine
- Androidi taasesitamine
- AV Foundation salvestamine (iOS)
- AV Foundation taasesitamine (iOS)
- DirectShow salvestamine (Windows)
- DrawDib taasesitamine (Windows)
- VĂ€lise taasesitamine â video saatmine ĂŒlemisele tasemele
- GLX taasesitamine (Linux): MS_GLXVIDEO
- Mire â sĂŒnteetiline liikuv pilt: MS_MIRE
- OpenGL taasesitamine (Mac OS X)
- OpenGL ES2 taasesitamine (Android)
- Quicktime salvestamine (Mac OS X)
- SDL taasesitamine: MS_SDL_OUT
- Staaticute piltide vÀljund: MS_STATIC_IMAGE
- Video For Linux (V4L) salvestamine (Linux): MS_V4L
- Video For Linux 2 (V4L2) salvestamine (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow) salvestamine (Windows)
- Video4windows (DirectShow) salvestamine (Windows CE)
- Video For Windows (vfw) salvestamine (Windows)
- XV taasesitamine (Linux)
Video encoding/decoding
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (ainult dekooder): MS_H264_DEC
- Theora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Video töötlemine
- JPEG snapshot
- Pikseliformaadi konverter: MS_PIX_CONV
- MÔÔtmine
- Teised filtrid
- Andmeplokkide vahetamine niitide vahel: MS_ITC_SOURCE, MS_ITC_SINK
- Andmeplokkide kogumine mitmest sisendist ĂŒhe vĂ€ljundi jaoks: MS_JOIN
- RTP vastuvÔtt/saatmine: MS_RTP_SEND, MS_RTP_RECV
- Sisseseadmise andmete kopeerimine mitmele vÀljundile: MS_TEE
- Konsolideeritud koormus: MS_VOID_SINK
- Vaikusallikas: MS_VOID_SOURCE
Pluginad
Helifiltrid
- AMR-NB kodeerija/dekodeerija
- G.729 kodeerija/dekodeerija
- iLBC kodeerija/dekodeerija
- SILK kodeerija/dekodeerija
Video filtrid
- H.264 tarkvaraline kodeerija
- H.264 V4L2 kodeerija/dekodeerija riistvara kiirusel
LĂŒhikese filtri kirjelduse jĂ€rel on nĂ€idatud tĂŒĂŒp, mida kasutatakse uue filtri eksemplari loomisel. Edasi rÀÀgime sellest nimekirjast.
Linux Ubuntu installimine
NĂŒĂŒd teeme mediastreameri paigaldamise arvutisse ja koostame selle abil meie esimesi rakendusi.
Mediastremer2 paigaldamine arvutisse vĂ”i virtuaalmasinasse, mis töötab Ubuntu all, ei nĂ”ua erilisi oskusi. Edasi on sĂŒmbol "$" tĂ€histab shell-i kĂ€skluste sisestamise kutset. St kui nĂ€ete loendis selle sĂŒmboliga algavat rida, tĂ€hendab see, et rida, milles on nĂ€idatud terminalis tĂ€idetavad kĂ€sud.
Eeldatakse, et artiklis kirjeldatud toimingute teostamise ajal on teie arvutil juurdepÀÀs Internetile.
Paketi libmediastremer-dev paigaldamine
KÀivitame terminali ja sisestame kÀsu:
$ sudo apt-get updateKĂŒsite salasĂ”na muudatuste tegemiseks, sisestage see ja pakettide haldur vĂ€rskendab oma andmebaase. PĂ€rast seda tuleb tĂ€ita:
$ sudo apt-get install libmediastreamer-devVajalikud sÔltuvuspaketid ja mediastreameri teek installitakse automaatselt.
Allalaaditud deb-pakettide kogusuurus on umbes 35 MB. Installitud paketi kohta teabe saamiseks kasutage kÀsku:
$ dpkg -s libmediastreamer-devNĂ€ide vastusest:
Pakett: libmediastreamer-dev
Olek: install ok installed
Prioriteet: valikuline
Jaotis: libdevel
Installitud suurus: 244
Hooldaja: Ubuntu arendajad
Arhitektuur: amd64
Allikas: linphone
Versioon: 3.6.1-2.5
SÔltub: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev
Kirjeldus: Linphone'i veebi telefoni meediaraamatukogu - arendusfailid
Linphone on audio- ja videointerneti telefon, mis kasutab SIP protokolli. See
omab GTK+ ja konsoolli liidest, sisaldab suurt hulka audio ja video
koodekeid ning pakub kiirsÔnumite funktsioone.
.
See pakett sisaldab arendusteeke meediaoperatsioonide haldamiseks.
Algne hooldaja: Debian VoIP meeskond
Avaleht: http://www.linphone.org/
Arendustööriistade paigaldamine
Paigaldame C keele kompilaatori ja sellega seotud tööriistad:
$ sudo apt-get install gccKontrollime tulemust, kĂŒsides kompilaatori versiooni:
$ gcc --versionVastus peaks olema umbes jÀrgmine:
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Kopeerimise Ôigused (C) 2015 Free Software Foundation, Inc.
See on tasuta tarkvara; vaadake allika kopeerimise tingimusi. Ei ole
garantii; isegi mitte KAUBANDUSLIKULT RIKKUMISE vÔi TEATAVAD OTSTARBE AED.Proovirakenduse koostamine ja kÀivitamine
Loome kausta home meie Ôppeprojektide jaoks, nimetame selle mstutorial:
$ mkdir ~/mstutorialKasutage oma lemmik tekstiredaktorit ja looge C-programmi fail nimega mstest.c jÀrgmise sisuga:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}See teostab mediastreameri initsialiseerimise, prindib tervituse ja lÔpetab tÀitmise.
Salvestame faili ja kompileerime testrakenduse kÀsuga:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`Pange tÀhele, et rida
`pkg-config mediastreamer --libs --cflags`on ĂŒmbritsetud jutumĂ€rkidega, mis asuvad klaviatuuril seal, kus on tĂ€ht «Đ».
Kui fail ei sisalda vigu, siis pÀrast kompileerimist ilmub katalooge fail mstest. KÀivitage programm:
$ ./mstestTulemus nÀeb vÀlja selline:
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.KÀesolevas loendis nÀeme vigade teadete, mille annab vÀlja ALSA raamatukogu, mida kasutatakse helikaardi haldamiseks. Mediastreameri arendajad peavad seda normaalseks. Me nÔustume nendega sel juhul paratamatult.
NĂŒĂŒd on meil kĂ”ik valmis mediastreameriga töötamiseks. Oleme paigaldanud mediastreameri raamatukogu, kompileerimistööriista ja proovirakenduse abil kontrollinud, et tööriistad on seadistatud ning mediastreamer kĂ€ivitatakse edukalt.
JÀrgmises loome rakenduse, mis kogub ja kÀivitab helisignaali töötlemise mitme filtri ahelas.
Allikas: habr.com
