Mediastreamer2 VoIP motorra arakatzen. 1. zatia

Artikuluaren materiala niretik hartua da zen kanala.

Sarrera

Artikulu hau Mediastreamer2 motorra erabiliz denbora errealeko multimedia prozesatzeari buruzko artikulu sorta baten hasiera da. Aurkezpenean Linux terminalean lan egiteko eta C hizkuntzan programatzeko gutxieneko trebetasunak izango dira.

Mediastreamer2 VoIP motorra da kode irekiko software voip telefono proiektu ezagunaren atzean. mugikorra. Linphone Mediastreamer2-k soinuarekin eta bideoarekin lotutako funtzio guztiak ezartzen ditu. Motorren ezaugarrien zerrenda zehatza Mediastreamer orri honetan ikus daiteke. Iturburu kodea hemen dago: GitLab.

Testuan aurrerago, erosotasunerako, Mediastreamer2 hitzaren ordez bere errusierazko idazkera erabiliko dugu: “media streamer”.

Bere sorreraren historia ez dago guztiz argia, baina iturburu-kodea ikusita, aurretik liburutegia erabiltzen zuen glib, eta horrek, nolabait, urrutiko harreman posible bat igartzen du GStreamer. Komunikabide-streamer-ak arinagoa dirudien aldean. Linphone-ren lehen bertsioa 2001ean agertu zen, beraz, une honetan komunikabide-streamer-a ia 20 urtez existitzen da eta garatzen da.

Media streamer-aren muinean "Data flow" (datuen fluxua) izeneko arkitektura dago. Horrelako arkitektura baten adibidea beheko irudian ageri da.

Mediastreamer2 VoIP motorra arakatzen. 1. zatia

Arkitektura honetan, datuak prozesatzeko algoritmoa ez da programa-kode batek zehazten, baizik eta edozein ordenatan antolatu daitezkeen funtzioak konektatzeko eskema (grafiko) baten bidez. Funtzio horiei iragazki deitzen zaie.

Arkitektura honek multimedia prozesatzeko funtzionaltasuna ezartzea ahalbidetzen du VoIP telefonoaren RTP trafikoaren prozesatzeko eta transmisio eskemari konektatutako iragazki multzo baten moduan.

Iragazkiak eskema arbitrarioetan konbinatzeko gaitasunak, iragazki berrien garapen sinpleak, multimedia-streamer-a liburutegi independente independente gisa ezartzeak beste proiektu batzuetan erabiltzeko aukera ematen dute. Gainera, proiektua VoIP arlokoa izan daiteke, norberak egindako iragazkiak gehitzeko aukera baitago.

Lehenespenez hornitutako iragazkien liburutegia nahiko aberatsa da eta, esan bezala, gure diseinu propioko iragazkiekin heda daiteke. Baina lehenik eta behin, deskriba ditzagun multimedia-erreproduzigailuarekin batera datozen prest egindako iragazkiak. Hona hemen haien zerrenda:

Soinu-iragazkiak

Audioa harrapatzea eta erreproduzitzea

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Android jatorrizko soinua (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Audio-ilararen zerbitzua (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Audio Unit Service (Mac OS X)
  • Arteak (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Fitxategi-erreproduzitzailea (raw/wav/pcap fitxategiak) (Linux): MS_FILE_PLAYER
  • Fitxategi-erreproduzitzailea (raw/wav fitxategiak) (Windows): MS_WINSND_READ
  • Idatzi fitxategira (wav fitxategiak) (Linux): MS_FILE_REC
  • Idatzi fitxategira (wav fitxategiak) (Windows): MS_WINSND_WRITE
  • Mac Audio Unitatea (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 Soinua (Windows)

Audio-kodeketa/deskodeketa

  • G.711 legea: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-legea: 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
  • PCM lineala: MS_L16_ENC, MS_L16_DEC
  • Adierazpena: MS_SPEEX_ENC, MS_SPEEX_DEC

Soinuaren tratamendua

  • Kanalen bihurketa (mono->estereo, estereo->mono): MS_CHANNEL_ADAPTER
  • Hitzaldia: MS_CONF
  • DTMF Sortzailea: MS_DTMF_GEN
  • Oihartzuna ezeztatzea (speex): MS_SPEEX_EC
  • Berdinketa: MS_EQUALIZER
  • Nahastailea: MS_MIXER
  • Pakete-galera konpentsatzailea (PLC): MS_GENERIC_PLC
  • Birmoldatzailea: MS_RESAMPLE
  • Tonu-detektagailua: MS_TONE_DETECTOR
  • Bolumen-kontrola eta seinale-maila neurtzea: MS_VOLUME

Bideo-iragazkiak

Bideoa grabatzea eta erreproduzitzea

  • Android harrapaketa
  • Android erreprodukzioa
  • AV Foundation harrapaketa (iOS)
  • AV Foundation erreprodukzioa (iOS)
  • DirectShow Capture (Windows)
  • DrawDib erreprodukzioa (Windows)
  • Kanpoko erreprodukzioa - Bideoa goiko geruzara bidaltzea
  • GLX erreprodukzioa (Linux): MS_GLXVIDEO
  • Mire - Mugitutako argazki sintetikoa: MS_MIRE
  • OpenGL erreprodukzioa (Mac OS X)
  • OpenGL ES2 erreprodukzioa (Android)
  • Quicktime Capture (Mac OS X)
  • SDL erreprodukzioa: MS_SDL_OUT
  • Irudi estatikoko irteera: MS_STATIC_IMAGE
  • Bideoa Linux (V4L) harrapatzeko (Linux): MS_V4L
  • Linux 2 (V4L2) harrapatzeko bideoa (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) kaptura (Windows)
  • Video4windows (DirectShow) kaptura (Windows CE)
  • Windows-erako bideoa (vfw) harrapaketa (Windows)
  • XV erreprodukzioa (Linux)

Bideoen kodeketa/deskodeketa

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

Bideo prozesatzea

  • jpeg argazkia
  • Pixel-formatu bihurgailua: MS_PIX_CONV
  • Tamaina aldatzea
  • Beste iragazki batzuk
  • Hari arteko datu-blokeen trukea: MS_ITC_SOURCE, MS_ITC_SINK
  • Hainbat sarreratako datu-blokeak irteera bakarrera biltzea: MS_JOIN
  • RTP jaso/bidali: MS_RTP_SEND, MS_RTP_RECV
  • Sarrerako datuak irteera anitzetara kopiatzen: MS_TEE
  • Amaitutako karga: MS_VOID_SINK
  • Isiltasuna Iturria: MS_VOID_SOURCE

Pluginak

Soinu-iragazkiak

  • AMR-NB kodetzailea/deskodetzailea
  • G.729 kodetzailea/deskodetzailea
  • iLBC kodetzailea/deskodetzailea
  • SILK kodetzailea/deskodetzailea

    Bideo-iragazkiak

  • H.264 software-kodetzailea
  • H.264 V4L2 hardware-kodetzaile/deskodetzaile bizkortua

Iragazkiaren deskribapen labur baten ondoren, motaren izena erakusten da, iragazki honen instantzia berri bat sortzeko erabiltzen dena. Jarraian, zerrenda honi erreferentzia egingo diogu.

Instalazioa Linux Ubuntu-n

Orain multimedia-streamer-a ordenagailuan instalatuko dugu eta harekin gure lehen aplikazioa eraikiko dugu.

Mediastremer2 Ubuntu exekutatzen duen ordenagailu edo makina birtualean instalatzeak ez du gaitasun berezirik behar. Hemen eta behean, "$" sinboloak komandoak sartzeko shell gonbita adieraziko du. Horiek. zerrendan ikur hau lerroaren hasieran ikusten baduzu, hau da terminalean exekutatu beharreko komandoak erakusten diren lerroa.

Artikulu honetako urratsetan zure ordenagailuak Interneterako sarbidea duela suposatzen da.

libmediastremer-dev paketea instalatzen

Abiarazi terminala eta idatzi komandoa:

$ sudo apt-get update

Aldaketak egiteko pasahitz bat eskatuko zaizu, sartu eta paketeen kudeatzaileak bere datu-baseak eguneratuko ditu. Horren ondoren, exekutatu behar duzu:

$ sudo apt-get install libmediastreamer-dev

Beharrezko mendekotasun paketeak eta multimedia streamer liburutegia bera automatikoki deskargatu eta instalatuko dira.

Deskargatutako mendekotasun-paketeen guztizko tamaina 35 MBkoa izango da gutxi gorabehera. Instalatutako paketeari buruzko xehetasunak komandoarekin aurki daitezke:

$ dpkg -s libmediastreamer-dev

Erantzunaren adibidea:

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/

Garapen tresnak instalatzea

Instalatu C konpilatzailea eta harekin batera doan tresnak:

$ sudo apt-get install gcc

Emaitza egiaztatzen dugu konpiladorearen bertsioa kontsultatuz:

$ gcc --version

Erantzunak honelako zerbait izan beharko luke:

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.

Proba aplikazioa eraikitzea eta martxan jartzea

urtean sortzen dugu hasiera gure tutoretza-proiektuen karpeta, dei diezaiogun mstutoriala:

$ mkdir ~/mstutorial

Erabili zure gogoko testu-editorea eta sortu izeneko C programa fitxategi bat mstest.c eduki honekin:

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

Multimedia erreproduzitzailea hasieratzen du, agur bat inprimatzen du eta irteten da.

Gorde fitxategia eta konpilatu proba aplikazioa komandoarekin:

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

Kontuan izan lerroa

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

komatxoen artean sartuta, teklatuan "Ё" letraren leku berean daudenak.

Fitxategiak akatsik ez badu, konpilatu ondoren fitxategi bat agertuko da direktorioan mstest. Programari hasiera ematen diogu:

$ ./mstest

Emaitza honelakoa izango da:

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.

Zerrenda honetan, ALSA liburutegiak bistaratzen dituen errore-mezuak ikusten ditugu, soinu-txartela kontrolatzeko erabiltzen da. Media streamer-aren garatzaileek beraiek uste dute hori normala dela. Kasu honetan, gogoz kontra bat egiten dugu haiekin.

Orain prest gaude multimedia-streamer-arekin lan egiteko. Media streamer liburutegia instalatu dugu, konpilazio tresna, eta probako aplikazio bat erabiliz, tresnak konfiguratuta daudela eta multimedia streamer-a behar bezala abiarazten dela egiaztatu dugu.

Hurrengoa Artikulu hainbat iragazkitako kate batean audio-seinale baten prozesamendua muntatu eta exekutatuko duen aplikazio bat sortuko dugu.

Iturria: www.habr.com