Verken die Mediastreamer2 VoIP-enjin. Deel 1

Die materiaal van die artikel is geneem uit my zen-kanaal.

Inleiding

Hierdie artikel is die begin van 'n reeks artikels oor intydse mediaverwerking met behulp van die Mediastreamer2-enjin. Die aanbieding sal die minimum vaardighede behels om in die Linux-terminaal en programmering in die C-taal te werk.

Mediastreamer2 is die VoIP-enjin agter die gewilde oopbronsagteware-voip-telefoonprojek. Linfoon. In Linphone implementeer Mediastreamer2 alle funksies wat met klank en video verband hou. 'n Gedetailleerde lys van enjinkenmerke kan op hierdie Mediastreamer-bladsy gesien word. Die bronkode is hier: GitLab.

Verder in die teks sal ons gerieflikheidshalwe in plaas van die woord Mediastreamer2 sy Russiese notasie gebruik: "mediastreamer".

Die geskiedenis van die skepping daarvan is nie heeltemal duidelik nie, maar te oordeel aan die bronkode het dit voorheen die biblioteek gebruik Glip, wat as 't ware sinspeel op 'n moontlike verre verhouding met Kon. In vergelyking daarmee lyk die mediastreamer ligter. Die eerste weergawe van Linphone het in 2001 verskyn, so op die oomblik bestaan ​​en ontwikkel die mediastreamer vir byna 20 jaar.

Die kern van die mediastreamer is 'n argitektuur genaamd "Datavloei" (datavloei). 'n Voorbeeld van so 'n argitektuur word in die figuur hieronder getoon.

Verken die Mediastreamer2 VoIP-enjin. Deel 1

In hierdie argitektuur word die dataverwerkingsalgoritme nie deur 'n programkode gespesifiseer nie, maar deur 'n skema (grafiek) vir die koppeling van funksies wat in enige volgorde gerangskik kan word. Hierdie funksies word filters genoem.

Hierdie argitektuur maak dit moontlik om die mediaverwerkingsfunksie te implementeer in die vorm van 'n stel filters wat gekoppel is aan die VoIP-telefoon RTP-verkeerverwerking en -transmissieskema.

Die vermoë om filters in arbitrêre skemas te kombineer, die eenvoudige ontwikkeling van nuwe filters, die implementering van die mediastreamer as 'n onafhanklike aparte biblioteek, laat dit in ander projekte gebruik word. Boonop kan die projek op die gebied van VoIP wees, aangesien dit moontlik is om filters wat deur u self gemaak is, by te voeg.

Die filterbiblioteek wat by verstek verskaf word, is redelik ryk en, soos reeds genoem, kan dit uitgebrei word met filters van ons eie ontwerp. Maar eers, kom ons beskryf die gereedgemaakte filters wat saam met die mediastreamer kom. Hier is hul lys:

Klank filters

Oudio-opname en -speel

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Android-inheemse klank (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Oudiowagdiens (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Oudio-eenheiddiens (Mac OS X)
  • Kuns (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Lêerspeler (raw/wav/pcap-lêers) (Linux): MS_FILE_PLAYER
  • Lêerspeler (raw/wav-lêers) (Windows): MS_WINSND_READ
  • Skryf na lêer (wav-lêers) (Linux): MS_FILE_REC
  • Skryf na lêer (wav-lêers) (Windows): MS_WINSND_WRITE
  • Mac oudio-eenheid (Mac OS X)
  • MME (Windows)
  • OSS (Linux): MS_OSS_WRITE, MS_OSS_READ
  • PortAudio (Mac OS X)
  • PulseOudio (Linux): MS_PULSE_WRITE, MS_PULSE_READ
  • Windows Sound (Windows)

Oudio-enkodering/dekodering

  • G.711 a-wet: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-wet: 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
  • Lineêre PCM: MS_L16_ENC, MS_L16_DEC
  • Speeks: MS_SPEEX_ENC, MS_SPEEX_DEC

Klankverwerking

  • Kanaalomskakeling (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Konferensie: MS_CONF
  • DTMF-opwekker: MS_DTMF_GEN
  • Eggo-kansellasie (speeks): MS_SPEEX_EC
  • Equalizer: MS_EQUALIZER
  • Menger: MS_MIXER
  • Pakkieverlieskompenseerder (PLC): MS_GENERIC_PLC
  • Hermonster: MS_RESAMPLE
  • Toondetektor: MS_TONE_DETECTOR
  • Volumebeheer en seinvlakmeting: MS_VOLUME

Video filters

Video-opname en -speel

  • android vaslegging
  • Android afspeel
  • AV Foundation capture (iOS)
  • AV Foundation-afspeel (iOS)
  • DirectShow Capture (Windows)
  • DrawDib-terugspeel (Windows)
  • Eksterne afspeel - Stuur video na die boonste laag
  • GLX-terugspeel (Linux): MS_GLXVIDEO
  • Mire - Sintetiese bewegende prentjie: MS_MIRE
  • OpenGL-afspeel (Mac OS X)
  • OpenGL ES2 afspeel (Android)
  • Quicktime Capture (Mac OS X)
  • SDL-terugspeel: MS_SDL_OUT
  • Statiese beelduitvoer: MS_STATIC_IMAGE
  • Video vir Linux (V4L) vaslegging (Linux): MS_V4L
  • Video vir Linux 2 (V4L2) vaslegging (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) vasvang (Windows)
  • Video4windows (DirectShow) vaslegging (Windows CE)
  • Video vir Windows (vfw) vaslegging (Windows)
  • XV afspeel (Linux)

Video-enkodering/dekodering

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, sneeu: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (slegs dekodeerder): MS_H264_DEC
  • Theora: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Video verwerking

  • jpeg momentopname
  • Pixel formaat omskakelaar: MS_PIX_CONV
  • Resizer
  • Ander filters
  • Uitruil van datablokke tussen drade: MS_ITC_SOURCE, MS_ITC_SINK
  • Versamel datablokke van veelvuldige insette na 'n enkele uitset: MS_JOIN
  • RTP ontvang/stuur: MS_RTP_SEND, MS_RTP_RECV
  • Kopieer insetdata na veelvuldige uitsette: MS_TEE
  • Beëindigde vrag: MS_VOID_SINK
  • Stilte Bron: MS_VOID_SOURCE

Inproppe

Klank filters

  • AMR-NB enkodeerder/dekodeerder
  • G.729 enkodeerder/dekodeerder
  • iLBC enkodeerder/dekodeerder
  • SILK enkodeerder/dekodeerder

    Video filters

  • H.264 sagteware enkodeerder
  • H.264 V4L2 hardeware versnelde enkodeerder/dekodeerder

Na 'n kort beskrywing van die filter, word die naam van die tipe gewys, wat gebruik word wanneer 'n nuwe instansie van hierdie filter geskep word. In wat volg, sal ons na hierdie lys verwys.

Installasie onder Linux Ubuntu

Nou sal ons die mediastreamer op die rekenaar installeer en ons eerste toepassing daarmee bou.

Die installering van Mediastremer2 op 'n rekenaar of virtuele masjien met Ubuntu vereis geen spesiale vaardighede nie. Hier en onder sal die simbool "$" die dopprompt vir die invoer van opdragte aandui. Dié. as jy in die lys hierdie simbool aan die begin van die reël sien, dan is dit die reël waarin opdragte gewys word om in die terminale uitgevoer te word.

Daar word aanvaar dat u rekenaar tydens die stappe in hierdie artikel toegang tot die internet het.

Die installering van die libmediastremer-dev-pakket

Begin die terminale en tik die opdrag:

$ sudo apt-get update

Jy sal gevra word vir 'n wagwoord om veranderinge aan te bring, voer dit in en die pakketbestuurder sal sy databasisse opdateer. Daarna moet jy hardloop:

$ sudo apt-get install libmediastreamer-dev

Die nodige afhanklikheidspakkette en die mediastreamer-biblioteek self sal outomaties afgelaai en geïnstalleer word.

Die totale grootte van die afgelaaide afhanklikheidsdeb-pakkette sal ongeveer 35 MB wees. Besonderhede oor die geïnstalleerde pakket kan gevind word met die opdrag:

$ dpkg -s libmediastreamer-dev

Antwoord voorbeeld:

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/

Die installering van ontwikkelingsinstrumente

Installeer die C-samesteller en sy gepaardgaande gereedskap:

$ sudo apt-get install gcc

Ons kontroleer die resultaat deur die samestellerweergawe navraag te doen:

$ gcc --version

Die antwoord moet iets soos volg wees:

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.

Bou en bestuur die proeftoepassing

Ons skep in huis gids vir ons tutoriaalprojekte, kom ons noem dit mstutoriaal:

$ mkdir ~/mstutorial

Gebruik jou gunsteling teksredigeerder en skep 'n C-programlêer genaamd mstest.c met die volgende inhoud:

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

Dit inisialiseer die mediastreamer, druk 'n groet en gaan uit.

Stoor die lêer en stel die toetstoepassing saam met die opdrag:

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

Let daarop dat die lyn

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

ingesluit in aanhalingstekens, wat op die sleutelbord op dieselfde plek as die letter "Ё" geleë is.

As die lêer nie foute bevat nie, sal 'n lêer na samestelling in die gids verskyn mstest. Ons begin die program:

$ ./mstest

Die resultaat sal soos volg wees:

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.

In hierdie lys sien ons die foutboodskappe wat die ALSA-biblioteek vertoon, dit word gebruik om die klankkaart te beheer. Die ontwikkelaars van die mediastreamer glo self dat dit normaal is. In hierdie geval stem ons teësinnig met hulle saam.

Nou is ons almal gereed om met die mediastreamer te werk. Ons het die mediastreamer-biblioteek, die samestellingsnutsding geïnstalleer en met behulp van 'n proeftoepassing geverifieer dat die gereedskap opgestel is en die mediastreamer suksesvol geïnisialiseer.

Volgende Artikel ons sal 'n toepassing skep wat die verwerking van 'n oudiosein in 'n ketting van verskeie filters sal saamstel en uitvoer.

Bron: will.com