የ Mediastreamer2 VoIP ሞተርን ማሰስ። ክፍል 1

የጽሁፉ ይዘት ከኔ የተወሰደ ነው። የዜን ቻናል.

መግቢያ

ይህ መጣጥፍ Mediastreamer2 ሞተርን በመጠቀም ስለ ቅጽበታዊ ሚዲያ ሂደት ተከታታይ መጣጥፎች መጀመሪያ ነው። የዝግጅት አቀራረቡ በሊኑክስ ተርሚናል ውስጥ የመስራት እና በC ቋንቋ የፕሮግራም አወጣጥ አነስተኛ ችሎታዎችን ያካትታል።

Mediastreamer2 ከታዋቂው የክፍት ምንጭ ሶፍትዌር ቮይፕ ስልክ ፕሮጀክት በስተጀርባ ያለው የቪኦአይፒ ሞተር ነው። ሊንፎን. በLinphone Mediastreamer2 ከድምጽ እና ከቪዲዮ ጋር የተያያዙ ሁሉንም ተግባራትን ተግባራዊ ያደርጋል። ዝርዝር የሞተር ባህሪዎች ዝርዝር በዚህ የ Mediastreamer ገጽ ላይ ሊታይ ይችላል። ምንጭ ኮድ እዚህ አለ፡- GitLab.

በጽሁፉ ውስጥ ለምቾት ሲባል Mediastreamer2 ከሚለው ቃል ይልቅ “ሚዲያ ዥረት ማሰራጫ” የሚለውን የሩስያን መግለጫ እንጠቀማለን።

የፍጥረቱ ታሪክ ሙሉ በሙሉ ግልጽ አይደለም, ነገር ግን በእሱ ምንጭ ኮድ በመመዘን, ቀደም ሲል ቤተ-መጻሕፍትን ይጠቀም ነበር ግሊብ, እሱም እንደ, ሊሆን የሚችል የሩቅ ግንኙነት ላይ ፍንጭ GStreamer. ከየትኛው የሚዲያ ዥረት ማሰራጫው የበለጠ ቀላል ክብደት ካለው ጋር ሲነጻጸር። የመጀመሪያው የሊንፎን ስሪት እ.ኤ.አ. በ 2001 ታየ ፣ ስለሆነም በአሁኑ ጊዜ የሚዲያ ዥረቱ አለ እና ለ 20 ዓመታት ያህል እያደገ ነው።

የሚዲያ ዥረት አስተላላፊው እምብርት ላይ "ዳታ ፍሰት" (የውሂብ ፍሰት) የሚባል አርክቴክቸር አለ። የእንደዚህ አይነት አርክቴክቸር ምሳሌ ከዚህ በታች ባለው ስእል ውስጥ ይታያል.

የ Mediastreamer2 VoIP ሞተርን ማሰስ። ክፍል 1

በዚህ አርክቴክቸር የዳታ ማቀናበሪያ ስልተ ቀመር የሚገለፀው በፕሮግራም ኮድ ሳይሆን በማናቸውም ቅደም ተከተል ሊደረደሩ የሚችሉ ተግባራትን ለማገናኘት እቅድ (ግራፍ) ነው። እነዚህ ተግባራት ማጣሪያዎች ይባላሉ.

ይህ አርክቴክቸር ከVoIP ስልክ RTP ትራፊክ ማቀነባበሪያ እና ማስተላለፊያ እቅድ ጋር በተገናኘ የማጣሪያዎች ስብስብ መልክ የሚዲያ ማቀነባበሪያ ተግባርን ተግባራዊ ለማድረግ ያስችላል።

ማጣሪያዎችን ወደ የዘፈቀደ እቅዶች የማጣመር ችሎታ ፣ የአዳዲስ ማጣሪያዎች ቀላል ልማት ፣ የሚዲያ ዥረት እንደ ገለልተኛ የተለየ ቤተ-መጽሐፍት መተግበር ፣ በሌሎች ፕሮጀክቶች ውስጥ ጥቅም ላይ እንዲውል ያስችለዋል። ከዚህም በላይ ፕሮጀክቱ በራሱ የተሰሩ ማጣሪያዎችን መጨመር ስለሚቻል በቪኦአይፒ መስክ ውስጥ ሊሆን ይችላል.

በነባሪነት የቀረበው የማጣሪያ ቤተ-መጽሐፍት በጣም ሀብታም ነው እናም ቀደም ሲል እንደተገለፀው በራሳችን ንድፍ ማጣሪያዎች ሊራዘም ይችላል። በመጀመሪያ ግን ከመገናኛ ዥረቱ ጋር አብረው የሚመጡትን ዝግጁ የሆኑ ማጣሪያዎችን እንግለጽ። ዝርዝራቸው እነሆ፡-

የድምፅ ማጣሪያዎች

የድምጽ ቀረጻ እና መልሶ ማጫወት

  • አልሳ (ሊኑክስ)፡ MS_ALSA_WRITE፣ MS_ALSA_Read
  • የአንድሮይድ ቤተኛ ድምጽ (ሊብሚዲያ)፡ MS_ANDROID_SOUND_WRITE፣ MS_ANDROID_SOUND_READ
  • የድምጽ ወረፋ አገልግሎት (ማክ ኦኤስ ኤክስ)፡ MS_AQ_WRITE፣ MS_AQ_READ
  • የድምጽ ክፍል አገልግሎት (ማክ ኦኤስ ኤክስ)
  • ጥበባት (ሊኑክስ)፡ MS_ARTS_WRITE፣ MS_ARTS_Read
  • ቀጥታ ድምጽ (ዊንዶውስ)፡ MS_WINSNDDS_WRITE፣ MS_WINSNDDS_READ
  • የፋይል ማጫወቻ (ጥሬ/wav/pcap ፋይሎች) (ሊኑክስ)፡ MS_FILE_PLAYER
  • የፋይል ማጫወቻ (ጥሬ/wav ፋይሎች) (ዊንዶውስ)፡ MS_WINSND_READ
  • ወደ ፋይል (የዋቭ ፋይሎች) ይፃፉ (ሊኑክስ)፡ MS_FILE_REC
  • ወደ ፋይል ይፃፉ (የዋቭ ፋይሎች) (ዊንዶውስ)፡ MS_WINSND_WRITE
  • ማክ ኦዲዮ ክፍል (ማክ ኦኤስ ኤክስ)
  • ኤምኤምኢ (ዊንዶውስ)
  • OSS (ሊኑክስ)፡ MS_OSS_WRITE፣ MS_OSS_ማንበብ
  • PortAudio (Mac OS X)
  • PulseAudio (ሊኑክስ)፡ MS_PULSE_WRITE፣ MS_PULSE_ማንበብ
  • ዊንዶውስ ድምጽ (ዊንዶውስ)

የድምጽ ኢንኮዲንግ/መግለጽ

  • 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

የድምጽ ሂደት

  • የሰርጥ ልወጣ (ሞኖ->ስቴሪዮ፣ stereo->ሞኖ)፡ MS_CHANNEL_ADAPTER
  • ጉባኤ፡ MS_CONF
  • DTMF ጀነሬተር፡ MS_DTMF_GEN
  • የኤኮ ስረዛ (speex)፡ MS_SPEEX_EC
  • አመጣጣኝ፡ MS_EQUALIZER
  • ቀላቃይ፡ MS_MIXER
  • የፓኬት ኪሳራ ማካካሻ (PLC)፦ MS_GENERIC_PLC
  • ዳግም ናሙና፡ MS_RESAMPLE
  • ድምጽ ማወቂያ፡ MS_TONE_DETECTOR
  • የድምጽ ቁጥጥር እና የሲግናል ደረጃ መለኪያ፡ MS_VOLUME

የቪዲዮ ማጣሪያዎች

የቪዲዮ ቀረጻ እና መልሶ ማጫወት

  • አንድሮይድ ቀረጻ
  • አንድሮይድ መልሶ ማጫወት
  • AV ፋውንዴሽን መቅረጽ (iOS)
  • AV ፋውንዴሽን መልሶ ማጫወት (iOS)
  • DirectShow ቀረጻ (ዊንዶውስ)
  • DrawDib መልሶ ማጫወት (ዊንዶውስ)
  • ውጫዊ መልሶ ማጫወት - ቪዲዮ ወደ ላይኛው ንብርብር በመላክ ላይ
  • GLX መልሶ ማጫወት (ሊኑክስ)፡ MS_GLXVIDEO
  • Mire - ሰው ሰራሽ ተንቀሳቃሽ ምስል፡ MS_MIRE
  • የጂኤል መልሶ ማጫወት (ማክ ኦኤስ ኤክስ)
  • የGL ES2 መልሶ ማጫወት (አንድሮይድ)
  • ፈጣን ጊዜ ቀረጻ (Mac OS X)
  • የኤስዲኤል መልሶ ማጫወት፡ MS_SDL_OUT
  • የማይንቀሳቀስ ምስል ውፅዓት፡ MS_STATIC_IMAGE
  • ቪዲዮ ለሊኑክስ (V4L) ቀረጻ (ሊኑክስ)፡ MS_V4L
  • ቪዲዮ ለሊኑክስ 2 (V4L2) ቀረጻ (ሊኑክስ)፡ MS_V4L2_CAPTURE
  • Video4windows (DirectShow) ቀረጻ (ዊንዶውስ)
  • Video4windows (DirectShow) ቀረጻ (Windows CE)
  • ቪዲዮ ለዊንዶውስ (vfw) ቀረጻ (ዊንዶውስ)
  • XV መልሶ ማጫወት (ሊኑክስ)

የቪዲዮ ኢንኮዲንግ/መግለጽ

  • 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 ኢንኮደር/ዲኮደር
  • SILK ኢንኮደር/ዲኮደር

    የቪዲዮ ማጣሪያዎች

  • H.264 ሶፍትዌር ኢንኮደር
  • H.264 V4L2 ሃርድዌር የተጣደፈ ኢንኮደር/ዲኮደር

ከማጣሪያው አጭር መግለጫ በኋላ የዚህ ማጣሪያ አዲስ ምሳሌ ሲፈጠር ጥቅም ላይ የሚውለው የዓይነቱ ስም ይታያል. በሚከተለው ውስጥ, ይህንን ዝርዝር እንጠቅሳለን.

በሊኑክስ ኡቡንቱ ስር መጫን

አሁን በኮምፒዩተር ላይ የሚዲያ ዥረት እንጭነዋለን እና የመጀመሪያውን መተግበሪያችንን በእሱ እንገነባለን።

Mediastremer2ን በኮምፒዩተር ወይም ኡቡንቱን በሚያሄድ ቨርቹዋል ማሽን ላይ መጫን ምንም ልዩ ችሎታ አያስፈልገውም። እዚህ እና በታች፣ "$" የሚለው ምልክት ትዕዛዞችን ለማስገባት የሼል መጠየቂያውን ያሳያል። እነዚያ። በዝርዝሩ ውስጥ ይህንን ምልክት በመስመሩ መጀመሪያ ላይ ካዩ ፣ ይህ በተርሚናል ውስጥ ትእዛዞች እንደሚተገበሩ የሚታየው ይህ መስመር ነው።

በዚህ ጽሑፍ ውስጥ ባሉት ደረጃዎች ኮምፒተርዎ የበይነመረብ መዳረሻ እንዳለው ይገመታል.

የlibmediastremer-dev ጥቅልን በመጫን ላይ

ተርሚናልን ያስጀምሩ እና ትዕዛዙን ይተይቡ:

$ sudo apt-get update

ለውጦችን ለማድረግ የይለፍ ቃል ይጠየቃሉ, ያስገቡት እና የጥቅል አስተዳዳሪው የውሂብ ጎታዎቹን ያዘምናል. ከዚያ በኋላ መሮጥ ያስፈልግዎታል:

$ sudo apt-get install libmediastreamer-dev

አስፈላጊዎቹ የጥገኝነት ፓኬጆች እና የሚዲያ ዥረት ቤተ-መጽሐፍት ራሱ በራስ-ሰር ይወርዳሉ እና ይጫናሉ።

የወረዱ የጥገኝነት ዕዳ ፓኬጆች ጠቅላላ መጠን በግምት 35 ሜባ ይሆናል። ስለተጫነው ጥቅል ዝርዝሮች በትእዛዙ ሊገኙ ይችላሉ-

$ 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 compiler እና ተጓዳኝ መሳሪያዎችን ይጫኑ፡-

$ 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 ቤተ-መጽሐፍት የሚያሳየውን የስህተት መልዕክቶችን እናያለን, የድምፅ ካርዱን ለመቆጣጠር ጥቅም ላይ ይውላል. የመገናኛ ብዙሃን ዥረት አዘጋጆች እራሳቸው ይህ የተለመደ ነው ብለው ያምናሉ. በዚህ ሁኔታ, እኛ ሳይወድ ከነሱ ጋር እንስማማለን.

አሁን ሁላችንም ከመገናኛ ብዙሃን ጋር ለመስራት ተዘጋጅተናል። የሚዲያ ዥረት ማስተናገጃውን፣ የማጠናቀሪያ መሳሪያውን እና የሙከራ መተግበሪያን በመጠቀም መሳሪያዎቹ መዋቀሩን እና የሚዲያ ዥረቱ በተሳካ ሁኔታ መጀመሩን አረጋግጠናል።

ቀጥሎ ጽሑፍ በበርካታ ማጣሪያዎች ሰንሰለት ውስጥ የድምፅ ምልክትን የሚሰበስብ እና የሚያሄድ መተግበሪያ እንፈጥራለን።

ምንጭ: hab.com