Pagsuhid sa Mediastreamer2 VoIP engine. Bahin 1

Ang materyal sa artikulo gikuha gikan sa akong zen channel.

Pasiuna

Kini nga artikulo mao ang sinugdanan sa serye sa mga artikulo bahin sa real-time nga pagproseso sa media gamit ang Mediastreamer2 engine. Ang presentasyon maglakip sa minimum nga kahanas sa pagtrabaho sa Linux terminal ug programming sa C nga pinulongan.

Ang Mediastreamer2 mao ang VoIP engine luyo sa sikat nga open-source software nga voip phone project. telepono. Sa Linphone Mediastreamer2 nagpatuman sa tanan nga mga gimbuhaton nga may kalabutan sa tunog ug video. Ang usa ka detalyado nga lista sa mga bahin sa makina makita sa kini nga panid sa Mediastreamer. Ang source code ania dinhi: GitLab.

Dugang pa sa teksto, alang sa kasayon, imbes sa pulong Mediastreamer2 atong gamiton ang Russian nga notasyon: "media streamer".

Ang kasaysayan sa paglalang niini dili hingpit nga tin-aw, apan sa paghukom sa source code niini, kaniadto gigamit ang librarya glib, nga, ingon nga kini, nagpakita sa usa ka posible nga layo nga relasyon sa GStreamer. Kung itandi kung diin ang media streamer tan-awon nga labi ka gaan. Ang unang bersyon sa Linphone migawas niadtong 2001, mao nga sa pagkakaron ang media streamer anaa ug milambo sulod sa halos 20 ka tuig.

Sa kasingkasing sa media streamer usa ka arkitektura nga gitawag og "Data flow" (data flow). Ang usa ka pananglitan sa ingon nga arkitektura gipakita sa hulagway sa ubos.

Pagsuhid sa Mediastreamer2 VoIP engine. Bahin 1

Niini nga arkitektura, ang algorithm sa pagproseso sa datos gipiho dili sa usa ka code sa programa, apan pinaagi sa usa ka laraw (graph) alang sa pagkonektar sa mga gimbuhaton nga mahimong gihan-ay sa bisan unsang pagkahan-ay. Kini nga mga gimbuhaton gitawag nga mga filter.

Kini nga arkitektura nagpaposible sa pagpatuman sa media processing functionality sa porma sa usa ka set sa mga filter nga konektado sa VoIP phone RTP traffic processing ug transmission scheme.

Ang abilidad sa paghiusa sa mga pagsala ngadto sa arbitraryong mga laraw, ang yano nga pag-uswag sa bag-ong mga pagsala, ang pagpatuman sa media streamer isip usa ka independenteng bulag nga librarya, nagtugot niini nga gamiton sa ubang mga proyekto. Dugang pa, ang proyekto mahimong naa sa natad sa VoIP, tungod kay posible nga idugang ang mga pagsala nga gihimo sa kaugalingon.

Ang filter nga librarya nga gihatag pinaagi sa default kay dato kaayo ug, sama sa nahisgotan na, mahimong madugangan gamit ang mga filter sa atong kaugalingong disenyo. Apan una, atong ihulagway ang andam na nga mga pagsala nga kauban sa media streamer. Ania ang ilang listahan:

Mga filter sa tunog

Pagkuha ug pag-playback sa audio

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Lumad nga tingog sa Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Serbisyo sa Audio Queue (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Serbisyo sa Unit sa Audio (Mac OS X)
  • Mga Sining (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • File player (raw/wav/pcap files) (Linux): MS_FILE_PLAYER
  • File player (raw/wav files) (Windows): MS_WINSND_READ
  • Pagsulat sa file (wav files) (Linux): MS_FILE_REC
  • Pagsulat sa file (wav files) (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 encoding/decoding

  • G.711 usa ka balaod: 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
  • Linear nga PCM: MS_L16_ENC, MS_L16_DEC
  • Speex: MS_SPEEX_ENC, MS_SPEEX_DEC

Pagproseso sa tingog

  • Pagkabig sa channel (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Komperensya: MS_CONF
  • DTMF Generator: MS_DTMF_GEN
  • Pagkansela sa echo (speex): MS_SPEEX_EC
  • Equalizer: MS_EQUALIZER
  • Mixer: MS_MIXER
  • Packet Loss Compensator (PLC): MS_GENERIC_PLC
  • Resampler: MS_RESAMPLE
  • Detektor sa tono: MS_TONE_DETECTOR
  • Pagkontrol sa volume ug pagsukod sa lebel sa signal: MS_VOLUME

Mga filter sa video

Pagkuha ug pag-playback sa video

  • pagkuha sa android
  • android playback
  • Pagkuha sa AV Foundation (iOS)
  • AV Foundation playback (iOS)
  • Pagkuha sa DirectShow (Windows)
  • DrawDib playback (Windows)
  • External playback - Pagpadala og video sa ibabaw nga layer
  • GLX playback (Linux): MS_GLXVIDEO
  • Mire - Sintetikong naglihok nga hulagway: MS_MIRE
  • OpenGL playback (Mac OS X)
  • OpenGL ES2 playback (Android)
  • Quicktime Capture (Mac OS X)
  • SDL playback: MS_SDL_OUT
  • Static nga hulagway nga output: MS_STATIC_IMAGE
  • Video Para sa Linux (V4L) pagkuha (Linux): MS_V4L
  • Video Para sa Linux 2 (V4L2) pagkuha (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) pagkuha (Windows)
  • Video4windows (DirectShow) pagkuha (Windows CE)
  • Video Para sa Windows (vfw) pagkuha (Windows)
  • XV playback (Linux)

Video encoding/decoding

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

Pagproseso sa video

  • jpeg snapshot
  • Pixel format converter: MS_PIX_CONV
  • Resizer
  • Uban pang mga filter
  • Pagbayloay sa mga bloke sa datos tali sa mga hilo: MS_ITC_SOURCE, MS_ITC_SINK
  • Pagkolekta sa mga bloke sa datos gikan sa daghang mga input ngadto sa usa ka output: MS_JOIN
  • RTP nakadawat/nagpadala: MS_RTP_SEND, MS_RTP_RECV
  • Pagkopya sa input data ngadto sa daghang mga output: MS_TEE
  • Gihunong nga load: MS_VOID_SINK
  • Hilum nga Tinubdan: MS_VOID_SOURCE

Mga plugin

Mga filter sa tunog

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

    Mga filter sa video

  • H.264 software encoder
  • H.264 V4L2 hardware accelerated encoder/decoder

Pagkahuman sa usa ka mubo nga paghulagway sa filter, ang ngalan sa tipo gipakita, nga gigamit kung maghimo usa ka bag-ong pananglitan sa kini nga filter. Sa mosunod, atong hisgotan kini nga listahan.

Pag-instalar ubos sa Linux Ubuntu

Karon among i-install ang media streamer sa kompyuter ug tukuron ang among una nga aplikasyon niini.

Ang pag-instalar sa Mediastremer2 sa usa ka kompyuter o virtual machine nga nagpadagan sa Ubuntu wala magkinahanglan og bisan unsang espesyal nga kahanas. Dinhi ug sa ubos, ang simbolo nga "$" magpaila sa shell prompt alang sa pagsulod sa mga sugo. Mga. kung sa lista makita nimo kini nga simbolo sa sinugdanan sa linya, nan kini ang linya diin ang mga mando gipakita nga gipatuman sa terminal.

Gituohan nga sa mga lakang niini nga artikulo, ang imong kompyuter adunay access sa Internet.

Pag-instalar sa libmediastremer-dev nga pakete

Ilunsad ang terminal ug i-type ang command:

$ sudo apt-get update

Pangutan-on ka alang sa usa ka password aron makahimo mga pagbag-o, isulod kini ug ang tagdumala sa pakete mag-update sa mga database niini. Pagkahuman niana, kinahanglan nimo nga modagan:

$ sudo apt-get install libmediastreamer-dev

Ang gikinahanglan nga dependency packages ug ang media streamer library mismo awtomatikong ma-download ug ma-install.

Ang kinatibuk-ang gidak-on sa na-download nga dependency deb packages mahimong gibana-bana nga 35 MB. Ang mga detalye bahin sa na-install nga pakete makit-an sa mando:

$ dpkg -s libmediastreamer-dev

Pananglitan sa tubag:

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/

Pag-instalar sa mga himan sa pagpalambo

I-install ang C compiler ug ang kauban nga mga himan niini:

$ sudo apt-get install gcc

Atong susihon ang resulta pinaagi sa pagpangutana sa bersyon sa compiler:

$ gcc --version

Ang tubag kinahanglan nga ingon niini:

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.

Pagtukod ug Pagpadagan sa Trial Application

Naghimo kami sa home folder para sa atong mga proyekto sa pagtudlo, tawgon nato kini mstutorial:

$ mkdir ~/mstutorial

Gamita ang imong paborito nga text editor ug paghimo ug C program file nga gitawag mstest.c uban sa mosunod nga sulod:

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

Nagsugod kini sa media streamer, nag-imprinta og usa ka pagtimbaya, ug paggawas.

I-save ang file ug i-compile ang test application gamit ang command:

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

Timan-i nga ang linya

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

gilakip sa mga marka sa kinutlo, nga nahimutang sa keyboard sa parehas nga lugar sa letra nga "Ё".

Kung ang file wala’y mga sayup, unya pagkahuman sa pag-compile usa ka file ang makita sa direktoryo mstest. Atong sugdan ang programa:

$ ./mstest

Ang resulta mahimong sama niini:

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.

Sa kini nga lista, nakita namon ang mga mensahe sa sayup nga gipakita sa librarya sa ALSA, gigamit kini aron makontrol ang sound card. Ang mga nag-develop sa media streamer mismo nagtuo nga kini normal. Sa kini nga kaso, kami nagpanuko nga mouyon kanila.

Karon andam na kaming tanan nga magtrabaho kauban ang streamer sa media. Among gi-install ang media streamer library, ang compilation tool, ug gamit ang trial application, gipamatud-an nga ang mga himan na-configure ug ang media streamer malampusong nagsugod.

Sunod artikulo maghimo kami usa ka aplikasyon nga magtigum ug magpadagan sa pagproseso sa usa ka signal sa audio sa usa ka kadena sa daghang mga pagsala.

Source: www.habr.com