Uurime VoIP-mootorit Mediastreamer2. Osa 1

Artikli materjal on saadud minu Dzen-kanalist.

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. Linphone'i sees rakendab Mediastreamer2 kĂ”iki heliga ja videoga seotud funktsioone. Mootori funktsioonide ĂŒksikasjalikku loetelu saab vaadata sellel lehel Mediastreamer. Allikakood on siin: GitLab.

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 Glib, mis vihjab meile vÔimaliku kaugema sugulusesse GStreamer. 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.

Uurime VoIP-mootorit Mediastreamer2. Osa 1

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 update

KĂŒ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-dev

Vajalikud 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-dev

NĂ€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 gcc

Kontrollime tulemust, kĂŒsides kompilaatori versiooni:

$ gcc --version

Vastus 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 ~/mstutorial

Kasutage 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:

$ ./mstest

Tulemus 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 artiklis loome rakenduse, mis kogub ja kÀivitab helisignaali töötlemise mitme filtri ahelas.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster