Ukuphonononga injini yeMediastreamer2 VoIP. Icandelo 1

Izinto zenqaku zithathwe kum zen channel.

Intshayelelo

Eli nqaku liyisiqalo sothotho lwamanqaku malunga nokusetyenzwa kwexesha lokwenyani leendaba usebenzisa i-injini ye-Mediastreamer2. Ngexesha lenkcazo-ntetho, izakhono ezincinci zokusebenza kwi-terminal ye-Linux kunye neprogramu ngolwimi lwe-C ziya kusetyenziswa.

I-Mediastreamer2 yinjini yeVoIP ngasemva kweprojekthi yesoftware yefowuni evulekileyo Ifowuni. I-Linphone Mediastreamer2 isebenzisa yonke imisebenzi enxulumene nomsindo kunye nevidiyo. Uluhlu oluneenkcukacha lwamandla enjini lunokubonwa kweli phepha leMediastreamer. Ikhowudi yomthombo nantsi: GitLab.

Ukuqhubela phambili kwisicatshulwa, ukwenzela ukuba kube lula, endaweni yegama elithi Mediastreamer2 siya kusebenzisa i-notation yayo yesiRashiya: "mediastreamer".

Imbali yokudalwa kwayo ayicacanga ngokupheleleyo, kodwa ngokujonga ikhowudi yomthombo wayo, isetyenziswe ngaphambili kwithala leencwadi glib, ebonakala ngathi isinika unxibelelwano olunokwenzeka olukude kunye GStreamer. Xa kuthelekiswa, i-media streamer ibonakala ilula ngakumbi. Inguqulo yokuqala ye-Linphone yavela kwi-2001, ngoko okwangoku i-media streamer ikhona kwaye iphuhlisa phantse iminyaka engama-20.

I-media streamer isekelwe kwisakhiwo esibizwa ngokuba yi "Data flow". Umzekelo woyilo loyilo uboniswe kumzobo ongezantsi.

Ukuphonononga injini yeMediastreamer2 VoIP. Icandelo 1

Kulo zakhiwo, i-algorithm yokucubungula idatha ichazwe kungekhona ngekhowudi yeprogram, kodwa ngomzobo (igrafu) yemisebenzi yokudibanisa enokuthi ihlelwe naluphi na umyalelo. Le misebenzi ibizwa ngokuba zizihluzi.

Olu lwakhiwo lwenza kube lula ukuphumeza umsebenzi wokucubungula imidiya ngendlela yesethi yezihluzi eziqhagamshelwe kwisekethe yokucubungula kunye nokuhambisa i-RTP ye-traffic yefowuni yeVoIP.

Ukukwazi ukudibanisa izihluzi kwizicwangciso ezichaseneyo, uphuhliso olulula lwezihluzi ezintsha, kunye nokuphunyezwa kosasazo lweendaba njengethala leencwadi elizimeleyo elivumela ukuba lisetyenziswe kwezinye iiprojekthi. Ngaphezu koko, iprojekthi ingaba kwintsimi yeVoIP, kuba kunokwenzeka ukongeza izihlungi ezenziwe nguwe.

Ithala leencwadi lokucoca elihlala lihleli lityebile kwaye, njengoko sele kukhankanyiwe, linokwandiswa ngezihluzi zoyilo lwethu. Kodwa okokuqala, siza kuchaza iifilitha esele zilungile eziza ne-media streamer. Nalu uluhlu lwabo:

Izihluzi zesandi

Ukuthatha iaudio kunye nokudlala kwakhona

  • I-Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Isandi semveli se-Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Inkonzo ye-Audio Queue (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Inkonzo yeYunithi yeAudio (Mac OS X)
  • Ubugcisa (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • I-DirectSound (iWindows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Umdlali wefayile (ekrwada/wav/pcap iifayile) (Linux): MS_FILE_PLAYER
  • Umdlali wefayile (iifayile ekrwada/wav) (Windows): MS_WINSND_READ
  • Bhala kwifayile (iifayile ze-wav) (Linux): MS_FILE_REC
  • Bhala kwifayile (iifayile zewav) (Windows): MS_WINSND_WRITE
  • IYunithi yomsindo weMac (Mac OS X)
  • MME (Windows)
  • I-OSS (Linux): MS_OSS_WRITE, MS_OSS_READ
  • I-PortAudio (Mac OS X)
  • I-PulseAudio (Linux): MS_PULSE_WRITE, MS_PULSE_READ
  • Isandi seWindows (iWindows)

Ufakelo lweekhowudi kwi-audio/decoding

  • 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
  • Umgca we-PCM: MS_L16_ENC, MS_L16_DEC
  • Speex: MS_SPEEX_ENC, MS_SPEEX_DEC

Ukuqhubekeka kwesandi

  • Ukuguqulwa kwesitishi (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Inkomfa: MS_CONF
  • DTMF umvelisi: MS_DTMF_GEN
  • Ukurhoxiswa kwe-Echo (speex): MS_SPEEX_EC
  • Umlinganisi: MS_EQUALIZER
  • Umxubi: MS_MIXER
  • I-Packet Los Compensator (PLC): MS_GENERIC_PLC
  • Umzekelo: MS_RESAMPLE
  • Isibonisi sethoni: MS_TONE_DETECTOR
  • Ulawulo lomthamo kunye nenqanaba lomlinganiselo wophawu: MS_VOLUME

Izihluzi zevidiyo

Ukuthatha ividiyo kunye nokudlala kwakhona

  • Ukuthathwa kwe-Android
  • Ukudlala Android
  • I-AV Foundation Capture (iOS)
  • Ukudlala kwakhona kwe-AV Foundation (iOS)
  • DirectShow bamba (Windows)
  • Ukudlala kwakhona kweDrawDib (Windows)
  • Ukudlala kwangaphandle-Thumela ividiyo kwinqanaba eliphezulu
  • Ukudlala kwakhona kwe-GLX (Linux): MS_GLXVIDEO
  • I-Mire-Ukwenziwa komfanekiso oshukumayo: MS_MIRE
  • Ukudlala kwakhona kwe-OpenGL (Mac OS X)
  • Ukudlala kwakhona kwe-OpenGL ES2 (Android)
  • Ukuthathwa ngokukhawuleza (Mac OS X)
  • Ukudlala kwakhona kwe-SDL: MS_SDL_OUT
  • Imveliso yemifanekiso engatshintshiyo: MS_STATIC_IMAGE
  • Ividiyo yeLinux (V4L) thatha (Linux): MS_V4L
  • Ividiyo yeLinux 2 (V4L2) thatha (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) bamba (Windows)
  • Video4windows (DirectShow) bamba (Windows CE)
  • Ividiyo yeeWindows (vfw) thatha (iWindows)
  • XV ukudlala kwakhona (Linux)

Ukufakwa kweekhowudi kwividiyo

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

Ukuqhubekeka kwevidiyo

  • JPEG umfanekiso okhawulezayo
  • Isiguquli sefomathi yePixel: MS_PIX_CONV
  • Resizer
  • Ezinye izihluzi
  • Utshintshiselwano lweebhloko zedatha phakathi kwemisonto: MS_ITC_SOURCE, MS_ITC_SINK
  • Ukuqokelelwa kweebhloko zedatha ukusuka kumagalelo amaninzi kwimveliso enye: MS_JOIN
  • Ulwamkelo/ugqithiso lwe-RTP: MS_RTP_SEND, MS_RTP_RECV
  • Kukotshwa idatha yegalelo kwiziphumo ezininzi: MS_TEE
  • Umthwalo oMatanisiweyo: MS_VOID_SINK
  • Umthombo othi cwaka: MS_VOID_SOURCE

Iiplagi

Izihluzi zesandi

  • I-AMR-NB isifaki khowudi/isidikhowuda
  • G.729 isifaki khowudi/isidikhowuda
  • I-iLBC encoder/decoder
  • I-SILK encoder/decoder

    Izihluzi zevidiyo

  • H.264 umfaki khowudi wesoftware
  • H.264 V4L2 i-encoder/decoder ene-hardware yokukhawulezisa

Emva kwenkcazelo emfutshane yesihluzi, uhlobo lwegama liyaboniswa, elisetyenziswa xa kusenziwa umzekelo omtsha wesi sihluzo. Kule ngxoxo ilandelayo siza kubhekisa kolu luhlu.

Ukufakwa phantsi kweLinux Ubuntu

Ngoku siza kufaka i-media streamer kwikhompyuter yakho kwaye sakhe usetyenziso lwethu lokuqala ngayo.

Ukufaka iMediastremer2 kwikhompyuter okanye kumatshini obonakalayo osebenza Ubuntu ayifuni naziphi na izakhono ezikhethekileyo. Apha nasezantsi, isimboli "$" izakuchaza iqokobhe lomyalelo wokungenisa imiyalelo. Ezo. ukuba kuluhlu ubona olu simboli ekuqaleni komgca, ngoku oku kuthetha ukuba lo mgca ubonisa imiyalelo emayiphunyezwe kwi-terminal.

Kucingelwa ukuba ngelixa usenza la manyathelo achazwe kweli nqaku, ikhompyuter yakho inokufikelela kwi-Intanethi.

Ukufakela iphakheji ye-libmediastromer-dev

Qalisa i-terminal kwaye uchwetheze umyalelo:

$ sudo apt-get update

Uya kucelwa igama eligqithisiweyo ukwenza utshintsho; yifake kwaye umphathi wepakethe uya kuhlaziya idatabase yayo. Emva koko kufuneka wenze:

$ sudo apt-get install libmediastreamer-dev

Iiphakheji eziyimfuneko zokuxhomekeka kunye nethala leencwadi losasazo lwemidiya ngokwalo liya kukhutshelwa kwaye lifakwe ngokuzenzekelayo.

Ubungakanani obupheleleyo beepakethe zokuxhomekeka kwe-deb ezikhutshelweyo ziya kuba malunga ne-35 MB. Iinkcukacha malunga nempahla efakiweyo inokufunyanwa ngomyalelo:

$ dpkg -s libmediastreamer-dev

Umzekelo wokuphendula:

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/

Ukufakela izixhobo zoPhuhliso

Faka i-C compiler kunye nezixhobo ezihamba nayo:

$ sudo apt-get install gcc

Sijonga isiphumo ngokucela inguqulelo yomqokeleli:

$ gcc --version

Impendulo kufuneka ibe ngolu hlobo:

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.

Ukwakha nokusebenzisa isicelo solingo

Sakha ngaphakathi ikhaya ifolda yeeprojekthi zethu zemfundo, masiyibize imfundo:

$ mkdir ~/mstutorial

Sebenzisa umhleli wakho wokubhaliweyo owuthandayo kwaye wenze ifayile yenkqubo ye-C ebizwa mstest.c ngomxholo olandelayo:

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

Iqalisa umsasazi weendaba, iprinte isibuliso, kwaye igqibezele ukuphumeza.

Gcina ifayile kwaye uqokelele isicelo sovavanyo ngomyalelo:

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

Nceda uqaphele ukuba umgca

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

efakwe kumanqaku okucaphula, abekwe kwikhibhodi kwindawo enye nonobumba β€œY”.

Ukuba ifayile ayinaziphene, emva kokuhlanganiswa ifayile iya kubonakala kuluhlu mstest. Masiqhube inkqubo:

$ ./mstest

Isiphumo siya kuba ngolu hlobo:

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.

Kolu luhlu sibona imiyalezo yempazamo eyenziwe yilayibrari ye-ALSA, esetyenziselwa ukulawula ikhadi lesandi. Abaphuhlisi bosasazo lweendaba ngokwabo bakholelwa ukuba oku kuqhelekile. Kule meko, ngokuqinisekileyo siya kuvumelana nabo.

Ngoku sikulungele ukusebenza nomsasazi weendaba. Sifake ilayibrari ye-media streamer, isixhobo sokudibanisa, kwaye sasebenzisa isampuli yesicelo ukuqinisekisa ukuba izixhobo ziqwalaselwe kwaye i-media streamer yaqaliswa ngempumelelo.

Okulandelayo nqaku siya kudala isicelo esiya kuqokelela kwaye siqhube inkqubo yophawu lwesandi kwikhonkco lezihluzo ezininzi.

umthombo: www.habr.com