Nesploraw il-magna VoIP Mediastreamer2. Parti 1

Il-materjal tal-artiklu huwa meħud minn tiegħi kanal zen.

Introduzzjoni

Dan l-artikolu huwa l-bidu ta 'serje ta' artikli dwar l-ipproċessar tal-midja f'ħin reali bl-użu tal-magna Mediastreamer2. Matul il-preżentazzjoni, se jintużaw ħiliet minimi fil-ħidma fit-terminal Linux u l-ipprogrammar fil-lingwa Ċ.

Mediastreamer2 hija l-magna VoIP wara l-proġett ta’ softwer tat-telefon VoIP ta’ sors miftuħ popolari telefon. Linphone Mediastreamer2 jimplimenta l-funzjonijiet kollha relatati mal-awdjo u l-vidjo. Lista dettaljata tal-kapaċitajiet tal-magna tista' tidher fuq din il-paġna ta' Mediastreamer. Il-kodiċi tas-sors qiegħed hawn: GitLab.

Aktar fit-test, għall-konvenjenza, minflok il-kelma Mediastreamer2 se nużaw in-notazzjoni Russa tagħha: "mediastreamer".

L-istorja tal-ħolqien tagħha mhijiex ċara għal kollox, iżda meta wieħed jiġġudika mill-kodiċi tas-sors tiegħu, qabel kien juża l-librerija glib, li jidher li jagħti ħjiel lilna dwar relazzjoni bogħod possibbli ma GStreamer. B'paragun, l-istreamer tal-midja jidher aktar ħafif. L-ewwel verżjoni ta 'Linphone dehret fl-2001, għalhekk bħalissa l-media streamer ilu jeżisti u ilu jiżviluppa għal kważi 20 sena.

Il-media streamer huwa bbażat fuq arkitettura msejħa "Data flow". Eżempju ta 'arkitettura bħal din jidher fil-figura hawn taħt.

Nesploraw il-magna VoIP Mediastreamer2. Parti 1

F'din l-arkitettura, l-algoritmu tal-ipproċessar tad-dejta huwa speċifikat mhux bil-kodiċi tal-programm, iżda b'dijagramma (graff) ta 'funzjonijiet ta' konnessjoni li jistgħu jiġu rranġati fi kwalunkwe ordni. Dawn il-funzjonijiet jissejħu filtri.

Din l-arkitettura tagħmilha possibbli li tiġi implimentata l-funzjonalità tal-ipproċessar tal-midja fil-forma ta 'sett ta' filtri konnessi f'ċirkwit għall-ipproċessar u t-trażmissjoni tat-traffiku RTP ta 'telefon VoIP.

Il-ħila li tikkonnettja filtri fi skemi arbitrarji, żvilupp sempliċi ta 'filtri ġodda, u l-implimentazzjoni tal-media streamer bħala librerija separata indipendenti jippermettu li jintuża fi proġetti oħra. Barra minn hekk, il-proġett jista 'jkun fil-qasam tal-VoIP, peress li huwa possibbli li żżid filtri magħmula minnek innifsek.

Il-librerija tal-filtri default hija pjuttost rikka u, kif diġà ssemma, tista 'titwessa' b'filtri tad-disinn tagħna stess. Imma l-ewwel, aħna se niddeskrivu l-filtri lesti li jiġu mal-media streamer. Hawnhekk hawn il-lista tagħhom:

Filtri tal-ħoss

Qbid u daqq tal-awdjo

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Ħoss nattiv ta' Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Servizz ta' Kju Awdjo (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Servizz ta' Unità Awdjo (Mac OS X)
  • Arti (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • File player (fajls mhux maħduma/wav/pcap) (Linux): MS_FILE_PLAYER
  • Plejer tal-fajls (fajls mhux maħduma/wav) (Windows): MS_WINSND_READ
  • Ikteb fil-fajl (fajls wav) (Linux): MS_FILE_REC
  • Ikteb fil-fajl (fajls wav) (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
  • Ħoss tal-Windows (Windows)

Kodifikazzjoni/dekodifikazzjoni tal-awdjo

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

Ipproċessar tal-ħoss

  • Konverżjoni tal-kanal (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Konferenza: MS_CONF
  • Ġeneratur DTMF: MS_DTMF_GEN
  • Kanċellazzjoni tal-eku (speex): MS_SPEEX_EC
  • Ekwalizzatur: MS_EQUALIZER
  • Mixer: MS_MIXER
  • Kumpensatur ta' Telf ta' Pakketti (PLC): MS_GENERIC_PLC
  • Kampjun mill-ġdid: MS_RESAMPLE
  • Detector tat-ton: MS_TONE_DETECTOR
  • Kontroll tal-volum u kejl tal-livell tas-sinjal: MS_VOLUME

Filtri tal-vidjo

Qbid u daqq tal-vidjo

  • Qbid Android
  • Daqq Android
  • Qbid tal-Fondazzjoni AV (iOS)
  • Daqq tal-Fondazzjoni AV (iOS)
  • Qbid DirectShow (Windows)
  • Daqq DrawDib (Windows)
  • Daqq estern - Ibgħat vidjo għall-ogħla livell
  • Daqq GLX (Linux): MS_GLXVIDEO
  • Mire - Stampa sintetika li tiċċaqlaq: MS_MIRE
  • Daqq OpenGL (Mac OS X)
  • Daqq OpenGL ES2 (Android)
  • Qbid Quicktime (Mac OS X)
  • Daqq SDL: MS_SDL_OUT
  • Output ta' immaġini statiċi: MS_STATIC_IMAGE
  • Vidjow Għall Linux (V4L) qbid (Linux): MS_V4L
  • Vidjow Għall Linux 2 (V4L2) qbid (Linux): MS_V4L2_CAPTURE
  • Qbid ta' Video4windows (DirectShow) (Windows)
  • Qbid ta' Video4windows (DirectShow) (Windows CE)
  • Qbid tal-Vidjo Għall-Windows (vfw) (Windows)
  • Daqq XV (Linux)

Kodifikazzjoni/dekodifikazzjoni tal-vidjo

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

Ipproċessar tal-vidjo

  • Snapshot JPEG
  • Konvertitur tal-format tal-pixel: MS_PIX_CONV
  • Resizer
  • Filtri oħra
  • Skambju ta' blokki tad-dejta bejn il-ħjut: MS_ITC_SOURCE, MS_ITC_SINK
  • Ġbir ta' blokki tad-dejta minn inputs multipli għal output wieħed: MS_JOIN
  • Riċeviment/Trażmissjoni RTP: MS_RTP_SEND, MS_RTP_RECV
  • Ikkupjar tad-dejta tal-input għal outputs multipli: MS_TEE
  • Tagħbija Imqabbla: MS_VOID_SINK
  • Sors silenzju: MS_VOID_SOURCE

Plugins

Filtri tal-ħoss

  • Encoder/decoder AMR-NB
  • G.729 encoder/decoder
  • iLBC encoder/decoder
  • Encoder/decoder tal-ĦARIR

    Filtri tal-vidjo

  • Encoder tas-softwer H.264
  • H.264 V4L2 encoder/decoder b'aċċelerazzjoni tal-ħardwer

Wara deskrizzjoni qasira tal-filtru, jintwera l-isem tat-tip, li jintuża meta tinħoloq istanza ġdida ta 'dan il-filtru. Fid-diskussjoni li ġejja se nirreferu għal din il-lista.

Installazzjoni taħt Linux Ubuntu

Issa se ninstallaw il-media streamer fuq il-kompjuter tiegħek u nibnu l-ewwel applikazzjoni tagħna magħha.

L-installazzjoni ta' Mediastremer2 fuq kompjuter jew magna virtwali li taħdem Ubuntu ma teħtieġ l-ebda ħiliet speċjali. Hawn u hawn taħt, is-simbolu "$" se jindika l-pront tal-qoxra għad-dħul tal-kmandi. Dawk. jekk fil-lista tara dan is-simbolu fil-bidu ta 'linja, allura dan ifisser li din hija linja li turi kmandi li għandhom jiġu esegwiti fit-terminal.

Huwa preżunt li waqt li twettaq il-passi deskritti f'dan l-artikolu, il-kompjuter tiegħek għandu aċċess għall-Internet.

Installazzjoni tal-pakkett libmediastromer-dev

Ibda t-terminal u ikteb il-kmand:

$ sudo apt-get update

Inti tintalab password biex tagħmel bidliet; daħħalha u l-maniġer tal-pakketti jaġġorna d-databases tiegħu. Wara dan trid tagħmel:

$ sudo apt-get install libmediastreamer-dev

Il-pakketti tad-dipendenza meħtieġa u l-librerija tal-media streamer innifisha se jitniżżlu u jiġu installati awtomatikament.

Id-daqs totali tal-pakketti tad-dipendenza tad-deb imniżżla se jkun madwar 35 MB. Dettalji dwar il-pakkett installat jistgħu jinstabu bil-kmand:

$ dpkg -s libmediastreamer-dev

Eżempju ta' tweġiba:

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/

Installazzjoni ta' Għodod ta' Żvilupp

Installa l-kompilatur C u l-għodod li jakkumpanjawh:

$ sudo apt-get install gcc

Aħna niċċekkjaw ir-riżultat billi nitolbu l-verżjoni tal-kompilatur:

$ gcc --version

It-tweġiba għandha tkun xi ħaġa bħal din:

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.

Bini u tmexxija ta' applikazzjoni ta' prova

Noħolqu fi dar folder għall-proġetti edukattivi tagħna, ejja nsejħulha mstutorja:

$ mkdir ~/mstutorial

Uża l-editur tat-test favorit tiegħek u oħloq fajl tal-programm C imsejjaħ mstest.c bil-kontenut li ġej:

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

Hija initializes-streamer tal-midja, tipprintja greeting, u tispiċċa l-eżekuzzjoni.

Issejvja l-fajl u kkumpila l-applikazzjoni tat-test bil-kmand:

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

Jekk jogħġbok innota li l-linja

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

magħluqa bil-virgoletti, li jinsabu fuq it-tastiera fl-istess post bħall-ittra “Y”.

Jekk il-fajl ma fihx żbalji, imbagħad wara l-kumpilazzjoni l-fajl jidher fid-direttorju mstest. Ejja nmexxu l-programm:

$ ./mstest

Ir-riżultat se jkun bħal dan:

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.

F'din il-lista naraw messaġġi ta 'żball iġġenerati mil-librerija ALSA, li tintuża biex tikkontrolla l-karta tal-ħoss. L-iżviluppaturi tal-media streamer infushom jemmnu li dan huwa normali. F'dan il-każ, inevitabbilment se naqblu magħhom.

Issa aħna lesti li naħdmu mal-media streamer. Installajna l-librerija tal-media streamer, l-għodda tal-kumpilazzjoni, u użajna applikazzjoni kampjun biex nivverifikaw li l-għodod kienu kkonfigurati u l-media streamer inizjalizzat b'suċċess.

Li jmiss artikolu se noħolqu applikazzjoni li tiġbor u tmexxi l-ipproċessar tas-sinjali tal-awdjo f'katina ta 'diversi filtri.

Sors: www.habr.com