Mediastreamer2 VoIP ఇంజిన్‌ను అన్వేషిస్తోంది. 1 వ భాగము

వ్యాసం యొక్క పదార్థం నా నుండి తీసుకోబడింది జెన్ ఛానల్.

పరిచయం

ఈ కథనం Mediastreamer2 ఇంజిన్‌ని ఉపయోగించి నిజ-సమయ మీడియా ప్రాసెసింగ్ గురించి కథనాల శ్రేణికి ప్రారంభం. ప్రెజెంటేషన్‌లో Linux టెర్మినల్‌లో పని చేసే కనీస నైపుణ్యాలు మరియు C భాషలో ప్రోగ్రామింగ్ ఉంటాయి.

Mediastreamer2 అనేది ప్రముఖ ఓపెన్ సోర్స్ సాఫ్ట్‌వేర్ voip ఫోన్ ప్రాజెక్ట్ వెనుక ఉన్న VoIP ఇంజిన్. లిన్ఫోన్. Linphone Mediastreamer2లో సౌండ్ మరియు వీడియోకి సంబంధించిన అన్ని ఫంక్షన్‌లను అమలు చేస్తుంది. ఇంజిన్ లక్షణాల యొక్క వివరణాత్మక జాబితాను ఈ మీడియాస్ట్రీమర్ పేజీలో చూడవచ్చు. సోర్స్ కోడ్ ఇక్కడ ఉంది: GitLab.

టెక్స్ట్‌లో, సౌలభ్యం కోసం, Mediastreamer2 అనే పదానికి బదులుగా మేము దాని రష్యన్ సంజ్ఞామానాన్ని ఉపయోగిస్తాము: “మీడియా స్ట్రీమర్”.

దాని సృష్టి చరిత్ర పూర్తిగా స్పష్టంగా లేదు, కానీ దాని సోర్స్ కోడ్ ద్వారా నిర్ణయించడం, ఇది గతంలో లైబ్రరీని ఉపయోగించింది గ్లిబ్, ఇది ఉన్నట్లుగా, సాధ్యమయ్యే సుదూర సంబంధాన్ని సూచిస్తుంది GStreamer. దీనితో పోలిస్తే మీడియా స్ట్రీమర్ మరింత తేలికగా కనిపిస్తుంది. లిన్‌ఫోన్ యొక్క మొదటి సంస్కరణ 2001లో కనిపించింది, కాబట్టి ప్రస్తుతానికి మీడియా స్ట్రీమర్ దాదాపు 20 సంవత్సరాలు ఉనికిలో ఉంది మరియు అభివృద్ధి చెందుతుంది.

మీడియా స్ట్రీమర్ యొక్క గుండె వద్ద "డేటా ఫ్లో" (డేటా ఫ్లో) అనే ఆర్కిటెక్చర్ ఉంది. అటువంటి నిర్మాణం యొక్క ఉదాహరణ క్రింది చిత్రంలో చూపబడింది.

Mediastreamer2 VoIP ఇంజిన్‌ను అన్వేషిస్తోంది. 1 వ భాగము

ఈ ఆర్కిటెక్చర్‌లో, డేటా ప్రాసెసింగ్ అల్గోరిథం ప్రోగ్రామ్ కోడ్ ద్వారా కాకుండా, ఏ క్రమంలోనైనా అమర్చగలిగే ఫంక్షన్‌లను కనెక్ట్ చేయడానికి పథకం (గ్రాఫ్) ద్వారా పేర్కొనబడుతుంది. ఈ ఫంక్షన్లను ఫిల్టర్లు అంటారు.

ఈ ఆర్కిటెక్చర్ VoIP ఫోన్ RTP ట్రాఫిక్ ప్రాసెసింగ్ మరియు ట్రాన్స్‌మిషన్ స్కీమ్‌కు కనెక్ట్ చేయబడిన ఫిల్టర్‌ల సెట్ రూపంలో మీడియా ప్రాసెసింగ్ కార్యాచరణను అమలు చేయడం సాధ్యం చేస్తుంది.

ఫిల్టర్‌లను ఏకపక్ష పథకాలుగా మిళితం చేసే సామర్థ్యం, ​​కొత్త ఫిల్టర్‌ల యొక్క సరళమైన అభివృద్ధి, మీడియా స్ట్రీమర్‌ను స్వతంత్ర ప్రత్యేక లైబ్రరీగా అమలు చేయడం, ఇతర ప్రాజెక్ట్‌లలో దీనిని ఉపయోగించడానికి అనుమతిస్తుంది. అంతేకాకుండా, ప్రాజెక్ట్ VoIP రంగంలో ఉంటుంది, ఎందుకంటే స్వయంగా తయారు చేసిన ఫిల్టర్లను జోడించడం సాధ్యమవుతుంది.

డిఫాల్ట్‌గా సరఫరా చేయబడిన ఫిల్టర్ లైబ్రరీ చాలా గొప్పది మరియు ఇప్పటికే పేర్కొన్నట్లుగా, మా స్వంత డిజైన్‌తో కూడిన ఫిల్టర్‌లతో పొడిగించవచ్చు. అయితే ముందుగా, మీడియా స్ట్రీమర్‌తో వచ్చే రెడీమేడ్ ఫిల్టర్‌లను వివరించండి. వారి జాబితా ఇక్కడ ఉంది:

సౌండ్ ఫిల్టర్లు

ఆడియో క్యాప్చర్ మరియు ప్లేబ్యాక్

  • అల్సా (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Android స్థానిక ధ్వని (లిబ్మీడియా): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • ఆడియో క్యూ సర్వీస్ (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • ఆడియో యూనిట్ సర్వీస్ (Mac OS X)
  • కళలు (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • డైరెక్ట్‌సౌండ్ (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • ఫైల్ ప్లేయర్ (రా/wav/pcap ఫైల్‌లు) (Linux): MS_FILE_PLAYER
  • ఫైల్ ప్లేయర్ (రా/వావ్ ఫైల్స్) (Windows): MS_WINSND_READ
  • ఫైల్‌కి వ్రాయండి (wav ఫైల్‌లు) (Linux): MS_FILE_REC
  • ఫైల్‌కి వ్రాయండి (wav ఫైల్‌లు) (Windows): MS_WINSND_WRITE
  • Mac ఆడియో యూనిట్ (Mac OS X)
  • MME (Windows)
  • OSS (Linux): MS_OSS_WRITE, MS_OSS_READ
  • పోర్ట్ ఆడియో (Mac OS X)
  • PulseAudio (Linux): MS_PULSE_WRITE, MS_PULSE_READ
  • విండోస్ సౌండ్ (విండోస్)

ఆడియో ఎన్‌కోడింగ్/డీకోడింగ్

  • G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-చట్టం: 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: MS_L16_ENC, MS_L16_DEC
  • స్పీక్స్: MS_SPEEX_ENC, MS_SPEEX_DEC

సౌండ్ ప్రాసెసింగ్

  • ఛానెల్ మార్పిడి (మోనో->స్టీరియో, స్టీరియో->మోనో): MS_CHANNEL_ADAPTER
  • సమావేశం: MS_CONF
  • DTMF జనరేటర్: MS_DTMF_GEN
  • ఎకో రద్దు (స్పీక్స్): MS_SPEEX_EC
  • ఈక్వలైజర్: MS_EQUALIZER
  • మిక్సర్: MS_MIXER
  • ప్యాకెట్ లాస్ కాంపెన్సేటర్ (PLC): MS_GENERIC_PLC
  • పునః నమూనా: MS_RESAMPLE
  • టోన్ డిటెక్టర్: MS_TONE_DETECTOR
  • వాల్యూమ్ నియంత్రణ మరియు సిగ్నల్ స్థాయి కొలత: MS_VOLUME

వీడియో ఫిల్టర్లు

వీడియో క్యాప్చర్ మరియు ప్లేబ్యాక్

  • ఆండ్రాయిడ్ క్యాప్చర్
  • ఆండ్రాయిడ్ ప్లేబ్యాక్
  • AV ఫౌండేషన్ క్యాప్చర్ (iOS)
  • AV ఫౌండేషన్ ప్లేబ్యాక్ (iOS)
  • డైరెక్ట్‌షో క్యాప్చర్ (విండోస్)
  • DrawDib ప్లేబ్యాక్ (Windows)
  • బాహ్య ప్లేబ్యాక్ - పై పొరకు వీడియోను పంపుతోంది
  • GLX ప్లేబ్యాక్ (Linux): MS_GLXVIDEO
  • మిరే - సింథటిక్ కదిలే చిత్రం: MS_MIRE
  • OpenGL ప్లేబ్యాక్ (Mac OS X)
  • OpenGL ES2 ప్లేబ్యాక్ (Android)
  • క్విక్‌టైమ్ క్యాప్చర్ (Mac OS X)
  • SDL ప్లేబ్యాక్: MS_SDL_OUT
  • స్టాటిక్ ఇమేజ్ అవుట్‌పుట్: MS_STATIC_IMAGE
  • Linux కోసం వీడియో (V4L) క్యాప్చర్ (Linux): MS_V4L
  • Linux 2 కోసం వీడియో (V4L2) క్యాప్చర్ (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) క్యాప్చర్ (Windows)
  • Video4windows (DirectShow) క్యాప్చర్ (Windows CE)
  • Windows కోసం వీడియో (vfw) క్యాప్చర్ (Windows)
  • XV ప్లేబ్యాక్ (Linux)

వీడియో ఎన్‌కోడింగ్/డీకోడింగ్

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, మంచు: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (డీకోడర్ మాత్రమే): MS_H264_DEC
  • థియోరా: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

వీడియో ప్రాసెసింగ్

  • jpeg స్నాప్‌షాట్
  • పిక్సెల్ ఫార్మాట్ కన్వర్టర్: MS_PIX_CONV
  • రీసైజర్
  • ఇతర ఫిల్టర్లు
  • థ్రెడ్‌ల మధ్య డేటా బ్లాక్‌ల మార్పిడి: MS_ITC_SOURCE, MS_ITC_SINK
  • బహుళ ఇన్‌పుట్‌ల నుండి ఒకే అవుట్‌పుట్‌కి డేటా బ్లాక్‌లను సేకరిస్తోంది: MS_JOIN
  • RTP స్వీకరించడం/ప్రసారం: MS_RTP_SEND, MS_RTP_RECV
  • ఇన్‌పుట్ డేటాను బహుళ అవుట్‌పుట్‌లకు కాపీ చేస్తోంది: MS_TEE
  • ముగించబడిన లోడ్: MS_VOID_SINK
  • నిశ్శబ్ద మూలం: MS_VOID_SOURCE

ప్లగిన్లు

సౌండ్ ఫిల్టర్లు

  • AMR-NB ఎన్‌కోడర్/డీకోడర్
  • G.729 ఎన్‌కోడర్/డీకోడర్
  • iLBC ఎన్‌కోడర్/డీకోడర్
  • సిల్క్ ఎన్‌కోడర్/డీకోడర్

    వీడియో ఫిల్టర్లు

  • H.264 సాఫ్ట్‌వేర్ ఎన్‌కోడర్
  • H.264 V4L2 హార్డ్‌వేర్ యాక్సిలరేటెడ్ ఎన్‌కోడర్/డీకోడర్

ఫిల్టర్ యొక్క చిన్న వివరణ తర్వాత, రకం పేరు చూపబడుతుంది, ఇది ఈ ఫిల్టర్ యొక్క కొత్త ఉదాహరణను సృష్టించేటప్పుడు ఉపయోగించబడుతుంది. కింది వాటిలో, మేము ఈ జాబితాను సూచిస్తాము.

Linux ఉబుంటు క్రింద ఇన్‌స్టాలేషన్

ఇప్పుడు మేము కంప్యూటర్‌లో మీడియా స్ట్రీమర్‌ను ఇన్‌స్టాల్ చేస్తాము మరియు దానితో మా మొదటి అప్లికేషన్‌ను నిర్మిస్తాము.

ఉబుంటులో నడుస్తున్న కంప్యూటర్ లేదా వర్చువల్ మెషీన్‌లో Mediastremer2ని ఇన్‌స్టాల్ చేయడానికి ప్రత్యేక నైపుణ్యాలు అవసరం లేదు. ఇక్కడ మరియు దిగువన, "$" గుర్తు ఆదేశాలను నమోదు చేయడానికి షెల్ ప్రాంప్ట్‌ను సూచిస్తుంది. ఆ. లిస్టింగ్‌లో మీరు పంక్తి ప్రారంభంలో ఈ చిహ్నాన్ని చూసినట్లయితే, ఇది టెర్మినల్‌లో కమాండ్‌లను అమలు చేయడానికి చూపబడే లైన్.

ఈ కథనంలోని దశల సమయంలో, మీ కంప్యూటర్‌కు ఇంటర్నెట్ యాక్సెస్ ఉందని భావించబడుతుంది.

libmediastremer-dev ప్యాకేజీని ఇన్‌స్టాల్ చేస్తోంది

టెర్మినల్‌ను ప్రారంభించి, ఆదేశాన్ని టైప్ చేయండి:

$ sudo apt-get update

మార్పులు చేయడానికి మిమ్మల్ని పాస్‌వర్డ్ అడుగుతారు, దానిని నమోదు చేయండి మరియు ప్యాకేజీ మేనేజర్ దాని డేటాబేస్‌లను నవీకరిస్తుంది. ఆ తరువాత, మీరు అమలు చేయాలి:

$ sudo apt-get install libmediastreamer-dev

అవసరమైన డిపెండెన్సీ ప్యాకేజీలు మరియు మీడియా స్ట్రీమర్ లైబ్రరీ స్వయంచాలకంగా డౌన్‌లోడ్ చేయబడి, ఇన్‌స్టాల్ చేయబడతాయి.

డౌన్‌లోడ్ చేయబడిన డిపెండెన్సీ డెబ్ ప్యాకేజీల మొత్తం పరిమాణం సుమారుగా 35 MB ఉంటుంది. ఇన్‌స్టాల్ చేయబడిన ప్యాకేజీ గురించిన వివరాలను ఆదేశంతో కనుగొనవచ్చు:

$ dpkg -s libmediastreamer-dev

సమాధానం ఉదాహరణ:

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/

అభివృద్ధి సాధనాలను ఇన్‌స్టాల్ చేస్తోంది

C కంపైలర్ మరియు దానితో పాటుగా ఉన్న సాధనాలను ఇన్‌స్టాల్ చేయండి:

$ sudo apt-get install gcc

మేము కంపైలర్ సంస్కరణను ప్రశ్నించడం ద్వారా ఫలితాన్ని తనిఖీ చేస్తాము:

$ gcc --version

సమాధానం ఇలా ఉండాలి:

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.

ట్రయల్ అప్లికేషన్‌ను రూపొందించడం మరియు అమలు చేయడం

మేము సృష్టిస్తాము హోమ్ మా ట్యుటోరియల్ ప్రాజెక్ట్‌ల కోసం ఫోల్డర్, దానిని పిలుద్దాం మస్టూటోరియల్:

$ mkdir ~/mstutorial

మీకు ఇష్టమైన టెక్స్ట్ ఎడిటర్‌ని ఉపయోగించండి మరియు C ప్రోగ్రామ్ ఫైల్‌ని సృష్టించండి mstest.c కింది కంటెంట్‌తో:

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

ఇది మీడియా స్ట్రీమర్‌ను ప్రారంభిస్తుంది, గ్రీటింగ్‌ను ప్రింట్ చేస్తుంది మరియు నిష్క్రమిస్తుంది.

ఫైల్‌ను సేవ్ చేసి, పరీక్ష అప్లికేషన్‌ను కమాండ్‌తో కంపైల్ చేయండి:

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

లైన్ అని గమనించండి

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

"Ё" అక్షరం ఉన్న ప్రదేశంలో కీబోర్డ్‌పై ఉన్న కొటేషన్ మార్కులతో జతచేయబడింది.

ఫైల్ లోపాలను కలిగి ఉండకపోతే, సంకలనం తర్వాత డైరెక్టరీలో ఫైల్ కనిపిస్తుంది mstest. మేము కార్యక్రమాన్ని ప్రారంభిస్తాము:

$ ./mstest

ఫలితం ఇలా ఉంటుంది:

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.

ఈ జాబితాలో, ALSA లైబ్రరీ ప్రదర్శించే దోష సందేశాలను మేము చూస్తాము, ఇది సౌండ్ కార్డ్‌ను నియంత్రించడానికి ఉపయోగించబడుతుంది. మీడియా స్ట్రీమర్ డెవలపర్లు ఇది సాధారణమని నమ్ముతారు. ఈ సందర్భంలో, మేము వారితో అయిష్టంగానే అంగీకరిస్తాము.

ఇప్పుడు మేము మీడియా స్ట్రీమర్‌తో కలిసి పని చేయడానికి సిద్ధంగా ఉన్నాము. మేము మీడియా స్ట్రీమర్ లైబ్రరీ, కంపైలేషన్ టూల్‌ని ఇన్‌స్టాల్ చేసాము మరియు ట్రయల్ అప్లికేషన్‌ని ఉపయోగించి, సాధనాలు కాన్ఫిగర్ చేయబడిందని మరియు మీడియా స్ట్రీమర్ విజయవంతంగా ప్రారంభించబడిందని ధృవీకరించాము.

తరువాత వ్యాసం మేము అనేక ఫిల్టర్‌ల గొలుసులో ఆడియో సిగ్నల్ యొక్క ప్రాసెసింగ్‌ను సమీకరించి మరియు అమలు చేసే అప్లికేషన్‌ను సృష్టిస్తాము.

మూలం: www.habr.com