Að kanna Mediastreamer2 VoIP vélina. 1. hluti

Efni greinarinnar er tekið úr mínum zen rás.

Inngangur

Þessi grein er upphaf á röð greina um rauntíma fjölmiðlavinnslu með Mediastreamer2 vélinni. Kynningin mun fela í sér lágmarksfærni til að vinna í Linux flugstöðinni og forritun á C tungumálinu.

Mediastreamer2 er VoIP vélin á bak við hið vinsæla opna hugbúnaðar voip símaverkefni. síma. Í Linphone útfærir Mediastreamer2 allar aðgerðir sem tengjast hljóði og myndböndum. Ítarlegan lista yfir eiginleika vélarinnar má sjá á þessari Mediastreamer síðu. Kóðinn er hér: GitLab.

Nánar í textanum, til hægðarauka, í stað orðsins Mediastreamer2 munum við nota rússneska merkingu þess: „mediastreamer“.

Saga sköpunar þess er ekki alveg skýr, en miðað við frumkóðann notaði það áður bókasafnið glib, sem sem sagt gefur í skyn hugsanleg fjarlæg tengsl við GStreamer. Í samanburði við það lítur fjölmiðlastraumurinn út fyrir að vera léttari. Fyrsta útgáfan af Linphone birtist árið 2001, þannig að í augnablikinu er fjölmiðlastraumurinn til og þróast í næstum 20 ár.

Í hjarta fjölmiðlastraumsins er arkitektúr sem kallast "Data flow" (gagnaflæði). Dæmi um slíkan arkitektúr er sýnt á myndinni hér að neðan.

Að kanna Mediastreamer2 VoIP vélina. 1. hluti

Í þessum arkitektúr er gagnavinnslu reikniritið ekki tilgreint með forritskóða, heldur með kerfi (graf) til að tengja aðgerðir sem hægt er að raða í hvaða röð sem er. Þessar aðgerðir eru kallaðar síur.

Þessi arkitektúr gerir það mögulegt að innleiða fjölmiðlavinnsluvirkni í formi setts af síum tengdum í kerfi til að vinna og senda RTP umferð í VoIP síma.

Hæfni til að sameina síur í handahófskenndar kerfi, einföld þróun nýrra sía, innleiðing fjölmiðlastraumsins sem sjálfstætt sérstakt bókasafn, gerir það kleift að nota það í öðrum verkefnum. Þar að auki getur verkefnið verið á sviði VoIP, þar sem hægt er að bæta við síum sem gerðar eru sjálfur.

Síusafnið sem fylgir sjálfgefið er nokkuð ríkt og eins og áður hefur komið fram er hægt að stækka það með síum af okkar eigin hönnun. En fyrst skulum við lýsa tilbúnu síunum sem fylgja fjölmiðlastraumspilaranum. Hér er listi þeirra:

Hljóðsíur

Hljóðupptaka og spilun

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Android innbyggt hljóð (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Audio Queue Service (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Hljóðeiningaþjónusta (Mac OS X)
  • Listir (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Skráaspilari (raw/wav/pcap skrár) (Linux): MS_FILE_PLAYER
  • Skráaspilari (raw/wav skrár) (Windows): MS_WINSND_READ
  • Skrifaðu í skrá (wav skrár) (Linux): MS_FILE_REC
  • Skrifaðu í skrá (wav skrár) (Windows): MS_WINSND_WRITE
  • Mac hljóðeining (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 hljóð (Windows)

Hljóðkóðun/afkóðun

  • G.711 a-lög: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-lögmál: 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
  • Línulegt PCM: MS_L16_ENC, MS_L16_DEC
  • Speex: MS_SPEEX_ENC, MS_SPEEX_DEC

Hljóðvinnsla

  • Rásarbreyting (ein->stereo, hljómtæki->mónó): MS_CHANNEL_ADAPTER
  • Ráðstefna: MS_CONF
  • DTMF rafall: MS_DTMF_GEN
  • Bergmálshætta (speex): MS_SPEEX_EC
  • Tónjafnari: MS_EQUALIZER
  • Blandari: MS_MIXER
  • Packet Loss Compensator (PLC): MS_GENERIC_PLC
  • Endursýnismaður: MS_RESAMPLE
  • Tónskynjari: MS_TONE_DETECTOR
  • Hljóðstyrkstýring og mæling á hljóðstyrk: MS_VOLUME

Vídeó síur

Myndbandsupptaka og spilun

  • Android handtaka
  • Android spilun
  • AV Foundation capture (iOS)
  • AV Foundation spilun (iOS)
  • DirectShow Capture (Windows)
  • DrawDib spilun (Windows)
  • Ytri spilun - Sendir myndband í efsta lagið
  • GLX spilun (Linux): MS_GLXVIDEO
  • Mire - Tilbúið hreyfimynd: MS_MIRE
  • OpenGL spilun (Mac OS X)
  • OpenGL ES2 spilun (Android)
  • Quicktime Capture (Mac OS X)
  • SDL spilun: MS_SDL_OUT
  • Statísk myndúttak: MS_STATIC_IMAGE
  • Myndband fyrir Linux (V4L) handtaka (Linux): MS_V4L
  • Myndband fyrir Linux 2 (V4L2) handtaka (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) handtaka (Windows)
  • Video4windows (DirectShow) handtaka (Windows CE)
  • Myndband fyrir Windows (vfw) handtaka (Windows)
  • XV spilun (Linux)

Vídeókóðun/afkóðun

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, snjór: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (aðeins afkóðari): MS_H264_DEC
  • Theora: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Myndbandsvinnsla

  • jpeg skyndimynd
  • Pixel sniðbreytir: MS_PIX_CONV
  • Resizer
  • Aðrar síur
  • Skipti á gagnablokkum á milli þráða: MS_ITC_SOURCE, MS_ITC_SINK
  • Að safna gagnablokkum úr mörgum inntakum í einn úttak: MS_JOIN
  • RTP móttaka/sending: MS_RTP_SEND, MS_RTP_RECV
  • Afritar inntaksgögn á marga útganga: MS_TEE
  • Lokað álag: MS_VOID_SINK
  • Þögn Heimild: MS_VOID_SOURCE

Viðbætur

Hljóðsíur

  • AMR-NB kóðari/afkóðari
  • G.729 kóðari/afkóðari
  • iLBC kóðari/afkóðari
  • SILK kóðari/afkóðari

    Vídeó síur

  • H.264 hugbúnaðarkóðari
  • H.264 V4L2 vélbúnaðarhraðinn kóðari/afkóðari

Eftir stutta lýsingu á síunni birtist nafn tegundarinnar sem er notað þegar nýtt tilvik af þessari síu er búið til. Í því sem hér fer á eftir munum við vísa til þessa lista.

Uppsetning undir Linux Ubuntu

Nú munum við setja upp media streamer á tölvuna og byggja fyrsta forritið okkar með því.

Að setja upp Mediastremer2 á tölvu eða sýndarvél sem keyrir Ubuntu krefst ekki sérstakrar færni. Hér og fyrir neðan mun táknið „$“ tákna skeljabeiðni til að slá inn skipanir. Þeir. ef í skráningunni þú sérð þetta tákn í upphafi línunnar, þá er þetta línan þar sem sýnt er að skipanir séu framkvæmdar í flugstöðinni.

Gert er ráð fyrir að í skrefunum í þessari grein hafi tölvan þín aðgang að internetinu.

Setur upp libmediastremer-dev pakkann

Ræstu flugstöðina og sláðu inn skipunina:

$ sudo apt-get update

Þú verður beðinn um lykilorð til að gera breytingar, sláðu það inn og pakkastjórinn mun uppfæra gagnagrunna sína. Eftir það þarftu að keyra:

$ sudo apt-get install libmediastreamer-dev

Nauðsynlegir ávanapakkar og sjálfkrafa miðlunarstraumsafnið verður sjálfkrafa niðurhalað og sett upp.

Heildarstærð niðurhalaðra deb-pakka fyrir ósjálfstæði verður um það bil 35 MB. Upplýsingar um uppsettan pakka má finna með skipuninni:

$ dpkg -s libmediastreamer-dev

Svar dæmi:

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/

Að setja upp þróunarverkfæri

Settu upp C þýðanda og meðfylgjandi verkfæri:

$ sudo apt-get install gcc

Við athugum niðurstöðuna með því að spyrjast fyrir um þýðandaútgáfuna:

$ gcc --version

Svarið ætti að vera eitthvað á þessa leið:

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.

Byggja og keyra prufuforritið

Við búum til í heim möppu fyrir kennsluverkefnin okkar, við skulum kalla það kennslufræði:

$ mkdir ~/mstutorial

Notaðu uppáhalds textaritilinn þinn og búðu til C forritaskrá sem heitir mstest.c með eftirfarandi innihaldi:

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

Það frumstillir fjölmiðlastrauminn, prentar kveðju og hættir.

Vistaðu skrána og settu saman prófunarforritið með skipuninni:

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

Athugið að línan

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

innan gæsalappa, sem eru staðsettar á lyklaborðinu á sama stað og stafurinn „Ё“.

Ef skráin inniheldur ekki villur, þá mun skrá birtast í möppunni eftir samantekt mstest. Við byrjum prógrammið:

$ ./mstest

Útkoman verður svona:

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.

Í þessari skráningu sjáum við villuboðin sem ALSA bókasafnið sýnir, það er notað til að stjórna hljóðkortinu. Hönnuðir fjölmiðlastraumsins telja sjálfir að þetta sé eðlilegt. Í þessu tilfelli erum við treglega sammála þeim.

Nú erum við öll að fara að vinna með fjölmiðlastreymi. Við höfum sett upp fjölmiðlastreymisafnið, söfnunartólið, og með því að nota prufuforrit, staðfestum við að verkfærin séu stillt og miðlunarstraumurinn frumstillir með góðum árangri.

Næst grein við munum búa til forrit sem mun setja saman og keyra vinnslu hljóðmerkis í keðju nokkurra sía.

Heimild: www.habr.com