Mediastreamer2:n VoIP-moottorin tutkiminen. Osa 1

Artikkelin materiaali on otettu minun zen kanava.

Esittely

Tämä artikkeli on artikkelisarjan alku, joka käsittelee reaaliaikaista mediankäsittelyä Mediastreamer2-moottorin avulla. Esitys sisältää vähimmäistaidot työskennellä Linux-päätteellä ja ohjelmointi C-kielellä.

Mediastreamer2 on VoIP-moottori suositun avoimen lähdekoodin VoIP-puhelinprojektin takana. puhelin. Linphonessa Mediastreamer2 toteuttaa kaikki ääneen ja videoon liittyvät toiminnot. Yksityiskohtainen luettelo moottorin ominaisuuksista on nähtävissä tällä Mediastreamer-sivulla. Lähdekoodi on tässä: GitLab.

Edelleen tekstissä käytämme mukavuuden vuoksi sanan Mediastreamer2 sijasta sen venäjänkielistä merkintää: "media streamer".

Sen luomishistoria ei ole täysin selvä, mutta lähdekoodin perusteella se käytti kirjastoa aiemmin liukas, joka ikään kuin vihjaa mahdolliseen etäiseen suhteeseen GStreamer. Mihin verrattuna mediastriimi näyttää kevyemmältä. Linphonen ensimmäinen versio ilmestyi vuonna 2001, joten tällä hetkellä mediastreameri on olemassa ja sitä kehitetään lähes 20 vuotta.

Mediastreamerin ytimessä on arkkitehtuuri nimeltä "Data flow" (datavirta). Esimerkki tällaisesta arkkitehtuurista on esitetty alla olevassa kuvassa.

Mediastreamer2:n VoIP-moottorin tutkiminen. Osa 1

Tässä arkkitehtuurissa tietojenkäsittelyalgoritmia ei määritetä ohjelmakoodilla, vaan kaaviolla (kaaviolla) funktioiden yhdistämiseksi, jotka voidaan järjestää mihin tahansa järjestykseen. Näitä toimintoja kutsutaan suodattimiksi.

Tämä arkkitehtuuri mahdollistaa mediankäsittelytoiminnallisuuden toteuttamisen VoIP-puhelimen RTP-liikenteen käsittely- ja siirtomalliin kytkettyjen suodattimien muodossa.

Mahdollisuus yhdistää suodattimia mielivaltaisiin malleihin, uusien suodattimien yksinkertainen kehittäminen, mediasuojien toteuttaminen itsenäisenä erillisenä kirjastona mahdollistavat sen käytön muissa projekteissa. Lisäksi projekti voi olla VoIP-alalla, koska siihen on mahdollista lisätä itse tehtyjä suodattimia.

Oletuksena toimitettu suodatinkirjasto on melko rikas ja, kuten jo mainittiin, voidaan laajentaa omilla suunnittelemillamme suodattimilla. Mutta ensin kuvataan valmiita suodattimia, jotka tulevat mediastriimin mukana. Tässä on heidän luettelonsa:

Äänisuodattimet

Äänen sieppaus ja toisto

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Androidin alkuperäinen ääni (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Äänijonopalvelu (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Ääniyksikköpalvelu (Mac OS X)
  • Taiteet (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Tiedostosoitin (raw/wav/pcap-tiedostot) (Linux): MS_FILE_PLAYER
  • Tiedostosoitin (raw/wav-tiedostot) (Windows): MS_WINSND_READ
  • Kirjoita tiedostoon (wav-tiedostot) (Linux): MS_FILE_REC
  • Kirjoita tiedostoon (wav-tiedostot) (Windows): MS_WINSND_WRITE
  • Mac-ääniyksikkö (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
  • Windowsin ääni (Windows)

Äänen koodaus/dekoodaus

  • G.711 a-laki: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-laki: 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
  • Lineaarinen PCM: MS_L16_ENC, MS_L16_DEC
  • Speex: MS_SPEEX_ENC, MS_SPEEX_DEC

Äänenkäsittely

  • Kanavan muunnos (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Konferenssi: MS_CONF
  • DTMF-generaattori: MS_DTMF_GEN
  • Kaiunpoisto (speex): MS_SPEEX_EC
  • Taajuuskorjain: MS_EQUALIZER
  • Mikseri: MS_MIXER
  • Packet Loss Compensator (PLC): MS_GENERIC_PLC
  • Resampler: MS_RESAMPLE
  • Äänentunnistin: MS_TONE_DETECTOR
  • Äänenvoimakkuuden säätö ja signaalitason mittaus: MS_VOLUME

Videosuodattimet

Videon kaappaus ja toisto

  • Android-kaappaus
  • Android-toisto
  • AV Foundation -kaappaus (iOS)
  • AV Foundation -toisto (iOS)
  • DirectShow Capture (Windows)
  • DrawDib-toisto (Windows)
  • Ulkoinen toisto - Videon lähettäminen ylimmälle tasolle
  • GLX-toisto (Linux): MS_GLXVIDEO
  • Mire - Synteettinen liikkuva kuva: MS_MIRE
  • OpenGL-toisto (Mac OS X)
  • OpenGL ES2 -toisto (Android)
  • Quicktime Capture (Mac OS X)
  • SDL-toisto: MS_SDL_OUT
  • Staattisen kuvan lähtö: MS_STATIC_IMAGE
  • Videon sieppaus Linuxille (V4L) (Linux): MS_V4L
  • Videon sieppaus Linux 2:lle (V4L2) (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) -kaappaus (Windows)
  • Video4windows (DirectShow) -kaappaus (Windows CE)
  • Video for Windows (vfw) -kaappaus (Windows)
  • XV-toisto (Linux)

Videon koodaus/dekoodaus

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, lumi: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (vain dekooderi): MS_H264_DEC
  • Teoria: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Videon käsittely

  • jpeg tilannekuva
  • Pikselimuodon muuntaja: MS_PIX_CONV
  • Koon muuttaja
  • Muut suodattimet
  • Tietolohkojen vaihto säikeiden välillä: MS_ITC_SOURCE, MS_ITC_SINK
  • Tietolohkojen kerääminen useista tuloista yhteen lähtöön: MS_JOIN
  • RTP-vastaanotto/lähetys: MS_RTP_SEND, MS_RTP_RECV
  • Tulotietojen kopiointi useisiin lähtöihin: MS_TEE
  • Lopetettu lataus: MS_VOID_SINK
  • Hiljaisuuden lähde: MS_VOID_SOURCE

Плагины

Äänisuodattimet

  • AMR-NB kooderi/dekooderi
  • G.729 kooderi/dekooderi
  • iLBC-kooderi/dekooderi
  • SILK-kooderi/dekooderi

    Videosuodattimet

  • H.264-ohjelmistokooderi
  • H.264 V4L2 laitteistokiihdytetty enkooderi/dekooderi

Suodattimen lyhyen kuvauksen jälkeen näytetään tyypin nimi, jota käytetään luotaessa uutta tämän suodattimen esiintymää. Seuraavassa viitataan tähän luetteloon.

Asennus Linux Ubuntuun

Nyt asennamme median streamerin tietokoneelle ja rakennamme ensimmäisen sovelluksemme sen avulla.

Mediastremer2:n asentaminen tietokoneeseen tai virtuaalikoneeseen, jossa on Ubuntu, ei vaadi erityisiä taitoja. Tässä ja alla symboli "$" tarkoittaa komentotulkkikehotetta komentojen syöttämiseksi. Nuo. Jos listauksessa näet tämän symbolin rivin alussa, tämä on rivi, jolla komennot näytetään suoritettavan päätteessä.

Oletetaan, että tämän artikkelin vaiheiden aikana tietokoneellasi on pääsy Internetiin.

Libmediastremer-dev-paketin asentaminen

Käynnistä pääte ja kirjoita komento:

$ sudo apt-get update

Sinulta kysytään salasanaa muutosten tekemiseen, syötä se ja paketinhallinta päivittää tietokantansa. Sen jälkeen sinun on suoritettava:

$ sudo apt-get install libmediastreamer-dev

Tarvittavat riippuvuuspaketit ja mediastriimauskirjasto ladataan ja asennetaan automaattisesti.

Ladattujen riippuvuusdeb-pakettien kokonaiskoko on noin 35 Mt. Asennetun paketin tiedot löytyvät komennolla:

$ dpkg -s libmediastreamer-dev

Vastausesimerkki:

Package: libmediastreamer-dev
Status: install ok installed
Priority: optional
Section: libdevel
Installed-Size: 244
Maintainer: Ubuntu Developers <[email protected]>
Architecture: amd64
Source: linphone
Version: 3.6.1-2.5
Depends: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev
Description: Linphone web phone's media library - development files
Linphone is an audio and video internet phone using the SIP protocol. It
has a GTK+ and console interface, includes a large variety of audio and video
codecs, and provides IM features.
.
This package contains the development libraries for handling media operations.
Original-Maintainer: Debian VoIP Team <[email protected]>
Homepage: http://www.linphone.org/

Kehitystyökalujen asennus

Asenna C-kääntäjä ja sen mukana tulevat työkalut:

$ sudo apt-get install gcc

Tarkistamme tuloksen kysymällä kääntäjän versiota:

$ gcc --version

Vastauksen pitäisi olla jotain tällaista:

gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Kokeilusovelluksen luominen ja suorittaminen

Luomme sisään koti kansio opetusprojekteihimme, kutsukaamme sitä mtutorial:

$ mkdir ~/mstutorial

Käytä suosikkitekstieditoriasi ja luo C-ohjelmatiedosto nimeltä mstest.c jolla on seuraava sisältö:

#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
  ms_init();
  printf ("Mediastreamer is ready.n");
}

Se alustaa median streamerin, tulostaa tervehdyksen ja poistuu.

Tallenna tiedosto ja käännä testisovellus komennolla:

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

Huomaa, että linja

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

lainausmerkeissä, jotka sijaitsevat näppäimistössä samassa paikassa kuin kirjain "Ё".

Jos tiedosto ei sisällä virheitä, hakemistoon ilmestyy tiedosto kääntämisen jälkeen mstest. Aloitamme ohjelman:

$ ./mstest

Tulos tulee olemaan tällainen:

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.

Tässä luettelossa näemme virheilmoitukset, jotka ALSA-kirjasto näyttää, sitä käytetään äänikortin ohjaamiseen. Mediastriimin kehittäjät itse uskovat tämän olevan normaalia. Tässä tapauksessa olemme vastahakoisesti samaa mieltä heidän kanssaan.

Nyt olemme kaikki valmiita työskentelemään median streamerin kanssa. Olemme asentaneet median streamer-kirjaston, käännöstyökalun ja varmistaneet kokeilusovelluksella, että työkalut on määritetty ja mediasuoratoisto käynnistyy onnistuneesti.

Seuraava статье luomme sovelluksen, joka kokoaa ja suorittaa audiosignaalin käsittelyn useiden suodattimien ketjussa.

Lähde: will.com