Ferkenne de Mediastreamer2 VoIP-motor. Diel 1

It materiaal fan it artikel is nommen út myn zen kanaal.

Ynlieding

Dit artikel is it begjin fan in searje artikels oer realtime mediaferwurking mei de Mediastreamer2-motor. Tidens de presintaasje sille minimale feardigens yn wurkjen yn 'e Linux-terminal en programmearjen yn' e C-taal wurde brûkt.

Mediastreamer2 is de VoIP-motor efter it populêre iepen-boarne voip-tillefoansoftwareprojekt telefoan. Linphone Mediastreamer2 ymplementearret alle funksjes yn ferbân mei audio en fideo. In detaillearre list mei motormooglikheden is te sjen op dizze Mediastreamer-side. De boarnekoade is hjir: GitLab.

Fierder yn 'e tekst sille wy foar it gemak ynstee fan it wurd Mediastreamer2 de Russyske notaasje brûke: "mediastreamer".

De skiednis fan syn skepping is net hielendal dúdlik, mar te beoardieljen op syn boarnekoade, brûkte it earder de bibleteek glib, dy't ús liket te hingjen op in mooglike fiere relaasje mei GStreamer. Yn ferliking sjocht de mediastreamer lichter út. De earste ferzje fan Linphone ferskynde yn 2001, dus op it stuit hat de mediastreamer hast 20 jier bestien en ûntwikkele.

De mediastreamer is basearre op in arsjitektuer neamd "Data flow". In foarbyld fan sa'n arsjitektuer wurdt werjûn yn de figuer hjirûnder.

Ferkenne de Mediastreamer2 VoIP-motor. Diel 1

Yn dizze arsjitektuer wurdt it gegevensferwurkingsalgoritme net spesifisearre troch programmakoade, mar troch in diagram (grafyk) fan ferbinende funksjes dy't yn elke folchoarder kinne wurde regele. Dizze funksjes wurde filters neamd.

Dizze arsjitektuer makket it mooglik om de funksjonaliteit fan mediaferwurking te ymplementearjen yn 'e foarm fan in set filters ferbûn yn in sirkwy foar it ferwurkjen en oerdragen fan RTP-ferkear fan in VoIP-tillefoan.

De mooglikheid om filters te ferbinen yn willekeurige skema's, ienfâldige ûntwikkeling fan nije filters, en ymplemintaasje fan 'e mediastreamer as in ûnôfhinklike aparte bibleteek kinne it brûkt wurde yn oare projekten. Boppedat kin it projekt op it mêd fan VoIP wêze, om't it mooglik is om filters ta te foegjen makke troch josels.

De standert filterbibleteek is frij ryk en, lykas al neamd, kin wurde útwreide mei filters fan ús eigen ûntwerp. Mar earst sille wy de klearmakke filters beskriuwe dy't komme mei de mediastreamer. Hjir is har list:

Lûdfilters

Audio opname en ôfspieljen

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Native Android-lûd (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)
  • Keunst (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Triemspiler (raw/wav/pcap-bestannen) (Linux): MS_FILE_PLAYER
  • Triemspiler (raw/wav-bestannen) (Windows): MS_WINSND_READ
  • Skriuw nei triem (wav-bestannen) (Linux): MS_FILE_REC
  • Skriuw nei triem (wav-bestannen) (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)

Audio kodearring / dekodearring

  • 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

Sound ferwurking

  • Kanaalkonverzje (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Konferinsje: MS_CONF
  • DTMF-generator: MS_DTMF_GEN
  • Echo-annulering (speex): MS_SPEEX_EC
  • Equalizer: MS_EQUALIZER
  • Mixer: MS_MIXER
  • Pakketferlieskompensator (PLC): MS_GENERIC_PLC
  • Resampler: MS_RESAMPLE
  • Toandetektor: MS_TONE_DETECTOR
  • Folume kontrôle en mjitting fan sinjaalnivo: MS_VOLUME

Fideo filters

Fideo opnimme en ôfspielje

  • Android capture
  • Android ôfspieljen
  • AV Foundation Capture (iOS)
  • AV Foundation ôfspielje (iOS)
  • DirectShow capture (Windows)
  • DrawDib-ôfspielje (Windows)
  • Eksterne ôfspieljen - Stjoer fideo nei it boppeste nivo
  • GLX-ôfspieling (Linux): MS_GLXVIDEO
  • Mire - Syntetyske bewegende ôfbylding: MS_MIRE
  • OpenGL-ôfspielje (Mac OS X)
  • OpenGL ES2-ôfspielje (Android)
  • Quicktime capture (Mac OS X)
  • SDL-ôfspieling: MS_SDL_OUT
  • Utfier fan statyske ôfbyldings: MS_STATIC_IMAGE
  • Fideo foar Linux (V4L) capture (Linux): MS_V4L
  • Fideo foar Linux 2 (V4L2) opname (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) capture (Windows)
  • Video4windows (DirectShow) capture (Windows CE)
  • Fideo foar Windows (vfw) capture (Windows)
  • XV-ôfspieling (Linux)

Fideokodearring / dekodearring

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

Video ferwurking

  • JPEG snapshot
  • Konverter fan pikselformaat: MS_PIX_CONV
  • Resizer
  • Oare filters
  • Utwikseling fan gegevensblokken tusken diskusjes: MS_ITC_SOURCE, MS_ITC_SINK
  • Samling fan gegevensblokken fan meardere yngongen nei ien útfier: MS_JOIN
  • RTP-ûntfangst/útstjoering: MS_RTP_SEND, MS_RTP_RECV
  • It kopiearjen fan ynfiergegevens nei meardere útgongen: MS_TEE
  • Oerienkommende lading: MS_VOID_SINK
  • Boarne stilte: MS_VOID_SOURCE

Plugins

Lûdfilters

  • AMR-NB encoder / decoder
  • G.729 encoder / decoder
  • iLBC encoder / decoder
  • SILK encoder / decoder

    Fideo filters

  • H.264 software encoder
  • H.264 V4L2 encoder / decoder mei hardware fersnelling

Nei in koarte beskriuwing fan it filter wurdt de typenamme werjûn, dy't brûkt wurdt by it meitsjen fan in nije eksimplaar fan dit filter. Yn de folgjende diskusje sille wy ferwize nei dizze list.

Ynstallaasje ûnder Linux Ubuntu

No sille wy de mediastreamer op jo kompjûter ynstallearje en ús earste applikaasje dêrmei bouwe.

It ynstallearjen fan Mediastremer2 op in kompjûter of firtuele masine dy't Ubuntu draait hat gjin spesjale feardigens nedich. Hjir en hjirûnder sil it symboal "$" de shell-prompt oanjaan foar it ynfieren fan kommando's. Dy. as jo yn 'e list dit symboal sjogge oan it begjin fan in rigel, dan betsjut dit dat dit in rigel is dy't kommando's sjen lit dy't moatte wurde útfierd yn 'e terminal.

Der wurdt fan útgien dat by it útfieren fan de stappen beskreaun yn dit artikel, jo kompjûter hat tagong ta it ynternet.

It ynstallearjen fan it pakket libmediastromer-dev

Start de terminal en typ it kommando:

$ sudo apt-get update

Jo wurde frege om in wachtwurd om wizigingen te meitsjen; Fier it yn en de pakketbehearder sil syn databases bywurkje. Nei dit moatte jo dwaan:

$ sudo apt-get install libmediastreamer-dev

De nedige ôfhinklikenspakketten en de mediastreamerbibleteek sels wurde automatysk ynladen en ynstalleare.

De totale grutte fan ynladen deb-ôfhinklikenspakketten sil sawat 35 MB wêze. Details oer it ynstalleare pakket kinne fûn wurde mei it kommando:

$ dpkg -s libmediastreamer-dev

Foarbyld fan antwurd:

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/

Ynstallaasje fan Untwikkelingsark

Ynstallearje de C-kompiler en syn byhearrende ark:

$ sudo apt-get install gcc

Wy kontrolearje it resultaat troch de kompilatorferzje oan te freegjen:

$ gcc --version

It antwurd moat sa'n ding wêze:

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.

It bouwen en útfieren fan in proefapplikaasje

Wy meitsje yn thús map foar ús edukative projekten, litte wy it neame mstutorial:

$ mkdir ~/mstutorial

Brûk jo favorite tekstbewurker en meitsje in C-programmabestân neamd mstest.c mei de folgjende ynhâld:

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

It inisjalisearret de mediastreamer, drukt in groet ôf en foltôget de útfiering.

Bewarje it bestân en kompilearje de testapplikaasje mei it kommando:

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

Tink derom dat de line

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

ynsletten yn oanhalingstekens, dy't lizze op it toetseboerd op itselde plak as de letter "Y".

As it bestân gjin flaters befettet, dan sil it bestân nei kompilaasje ferskine yn 'e map mstest. Litte wy it programma útfiere:

$ ./mstest

It resultaat sil sa wêze:

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.

Yn dizze list sjogge wy flaterberjochten oanmakke troch de ALSA-bibleteek, dy't brûkt wurdt om de lûdskaart te kontrolearjen. De ûntwikkelders fan 'e mediastreamer sels leauwe dat dit normaal is. Yn dit gefal sille wy ûnûntkomber mei har iens wêze.

No binne wy ​​​​klear om te wurkjen mei de mediastreamer. Wy ynstalleare de mediastreamerbibleteek, it kompilaasjeark, en brûkten in foarbyldapplikaasje om te ferifiearjen dat de ark binne konfigureare en de mediastreamer mei sukses inisjalisearre.

Folgjende artikel wy sille in applikaasje oanmeitsje dy't audiosinjaalferwurking sil sammelje en útfiere yn in keatling fan ferskate filters.

Boarne: www.habr.com