Ihlola injini ye-Mediastreamer2 VoIP. Ingxenye 1

Indaba ye-athikili ithathwe kweyami ishaneli zen.

Isingeniso

Lesi sihloko siyisiqalo sochungechunge lwama-athikili mayelana nokucutshungulwa kwemidiya yesikhathi sangempela kusetshenziswa injini ye-Mediastreamer2. Isethulo sizobandakanya amakhono amancane okusebenza kutheminali ye-Linux kanye nohlelo ngolimi lwe-C.

I-Mediastreamer2 iyinjini ye-VoIP ngemuva kwephrojekthi yocingo ye-voip yesoftware edumile yomthombo ovulekile. I-Linphone. Ku-Linphone Mediastreamer2 isebenzisa yonke imisebenzi ehlobene nomsindo nevidiyo. Uhlu oluningiliziwe lwezici zenjini lungabonakala kuleli khasi leMediastreamer. Ikhodi yomthombo ilapha: I-GitLab.

Ngokuqhubekayo embhalweni, ukuze kube lula, esikhundleni segama elithi Mediastreamer2 sizosebenzisa ukuphawula kwayo kwesiRashiya: "i-media streamer".

Umlando wokudalwa kwayo awucacile ngokuphelele, kodwa uma sibheka ikhodi yomthombo, ike yasebenzisa umtapo wolwazi ngaphambilini I-Glib, okuyinto, njengokungathi, ebonisa ubuhlobo obukude obungenzeka I-GStreamer. Uma kuqhathaniswa ne-media streamer ebukeka ingasindi kakhulu. Inguqulo yokuqala ye-Linphone yavela ngo-2001, ngakho-ke okwamanje i-media streamer ikhona futhi ikhula cishe iminyaka engu-20.

Enhliziyweni yomsakazi wemidiya kunesakhiwo esibizwa ngokuthi "Ukugeleza kwedatha" (ukugeleza kwedatha). Isibonelo sesakhiwo esinjalo siboniswa esithombeni esingezansi.

Ihlola injini ye-Mediastreamer2 VoIP. Ingxenye 1

Kulesi sakhiwo, i-algorithm yokucubungula idatha ayicaciswanga ngekhodi yohlelo, kodwa ngohlelo (igrafu) lokuxhuma imisebenzi engahlelwa nganoma iyiphi indlela. Le misebenzi ibizwa ngokuthi izihlungi.

Lesi sakhiwo senza kube nokwenzeka ukuqalisa ukusebenza kokucubungula imidiya ngendlela yesethi yezihlungi ezixhunywe kuhlelo lwe-VoIP lwefoni ye-RTP yokucubungula nokudlulisa uhlelo.

Ikhono lokuhlanganisa izihlungi zibe izikimu ezingafaneleki, ukuthuthukiswa okulula kwezihlungi ezintsha, ukuqaliswa kokusakaza kwemidiya njengomtapo wezincwadi ozimele ohlukile, kuvumele ukuthi kusetshenziswe kwamanye amaphrojekthi. Ngaphezu kwalokho, iphrojekthi ingaba emkhakheni we-VoIP, njengoba kungenzeka ukwengeza izihlungi ezenziwe ngezandla zomuntu.

Umtapo wokuhlunga ohlinzekwa ngokuzenzakalelayo unothe kakhulu futhi, njengoba sekushiwo, unganwetshwa ngezihlungi zedizayini yakho. Kodwa okokuqala, ake sichaze izihlungi esezilungile eziza ne-media streamer. Nalu uhlu lwabo:

Izihlungi zomsindo

Ukuthwebula umsindo nokudlala

  • I-Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Umsindo womdabu we-Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Isevisi Yomugqa Womsindo (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Isevisi yeyunithi yomsindo (Mac OS X)
  • Ubuciko (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • I-DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Isidlali sefayela (amafayela aluhlaza/wav/pcap) (Linux): MS_FILE_PLAYER
  • Isidlali sefayela (amafayela aluhlaza/wav) (Windows): MS_WINSND_READ
  • Bhala kufayela (amafayela we-wav) (Linux): MS_FILE_REC
  • Bhalela kufayela (amafayela we-wav) (Windows): MS_WINSND_WRITE
  • Iyunithi yomsindo ye-Mac (Mac OS X)
  • I-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
  • I-Windows Sound (iWindows)

Ukufaka ikhodi yomsindo/ukukhipha amakhodi

  • 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
  • I-GSM: MS_GSM_DEC, MS_GSM_ENC
  • I-PCM yomugqa: MS_L16_ENC, MS_L16_DEC
  • I-Speex: MS_SPEEX_ENC, MS_SPEEX_DEC

Ukucutshungulwa komsindo

  • Ukuguqulwa kwesiteshi (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Inkomfa: MS_CONF
  • I-DTMF Generator: MS_DTMF_GEN
  • Ukukhanselwa kwe-Echo (speex): MS_SPEEX_EC
  • Isilinganisi: MS_EQUALIZER
  • Umhlanganisi: MS_MIXER
  • Isinxephezeli Sokulahlekelwa Kwephakethe (PLC): MS_GENERIC_PLC
  • Isampula kabusha: MS_RESAMPLE
  • Isitholi sethoni: MS_TONE_DETECTOR
  • Ukulawulwa kwevolumu nokukalwa kwezinga lesignali: MS_VOLUME

Izihlungi zevidiyo

Ukuthwebula ividiyo nokudlala futhi

  • ukuthwebula kwe-android
  • ukudlala kwe-android
  • Ukuthwebula kwe-AV Foundation (iOS)
  • Ukudlala kwe-AV Foundation (iOS)
  • I-DirectShow Capture (iWindows)
  • Ukudlala kwe-DrawDib (iWindows)
  • Ukudlala kwangaphandle - Ithumela ividiyo kusendlalelo esiphezulu
  • Ukudlala kwe-GLX (Linux): MS_GLXVIDEO
  • I-Mire - Isithombe esinyakazayo sokwenziwa: MS_MIRE
  • Ukudlala kwe-OpenGL (Mac OS X)
  • Ukudlala kwe-OpenGL ES2 (Android)
  • I-Quicktime Capture (Mac OS X)
  • Ukudlala kwe-SDL: MS_SDL_OUT
  • Okukhipha isithombe esimile: MS_STATIC_IMAGE
  • Ukuthwebula kwevidiyo ye-Linux (V4L) (Linux): MS_V4L
  • Ividiyo ye-Linux 2 (V4L2) yokuthwebula (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) bamba (Windows)
  • Video4windows (DirectShow) bamba (Windows CE)
  • Ividiyo Ye-Windows (vfw) yokuthwebula (iWindows)
  • Ukudlala kwe-XV (Linux)

Ukubhala ngekhodi/ukukhipha amakhodi kwevidiyo

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

Ukucutshungulwa kwevidiyo

  • isithombe se-jpeg
  • Isiguquli sefomethi yephikseli: MS_PIX_CONV
  • Yenza kabusha usayizi
  • Ezinye izihlungi
  • Ukushintshaniswa kwamabhulokhi wedatha phakathi kochungechunge: MS_ITC_SOURCE, MS_ITC_SINK
  • Iqoqa amabhulokhi edatha kusuka kokokufaka okuningi kuya kokuphumayo okukodwa: MS_JOIN
  • I-RTP yamukela/hambisa: MS_RTP_SEND, MS_RTP_RECV
  • Ikopisha idatha yokokufaka kokuphumayo okuningi: MS_TEE
  • Umthwalo onqanyuliwe: MS_VOID_SINK
  • Umthombo Wokuthula: MS_VOID_SOURCE

Ama-plugin

Izihlungi zomsindo

  • Isifaki khodi/isikhiphi khodi se-AMR-NB
  • G.729 isifaki khodi/isikhiphi khodi
  • I-iLBC encoder/decoder
  • Isifaki khodi/isikhiphi khodi se-SILK

    Izihlungi zevidiyo

  • H.264 isifaki khodi sesofthiwe
  • H.264 V4L2 hardware esheshisiwe isifaki khodi/isikhiphi khodi

Ngemva kwencazelo emfushane yesihlungi, igama lohlobo liyaboniswa, elisetshenziswa lapho kwakhiwa isenzakalo esisha salesi sihlungi. Kulokhu okulandelayo, sizobhekisela kulolu hlu.

Ukufakwa ngaphansi kwe-Linux Ubuntu

Manje sizofaka i-media streamer kukhompuyutha futhi sakhe uhlelo lwethu lokuqala ngayo.

Ukufaka i-Mediastremer2 kukhompyutha noma emshinini obonakalayo osebenzisa Ubuntu akudingi amakhono akhethekile. Lapha nangezansi, uphawu "$" luzobonisa umyalo wegobolondo wokufaka imiyalo. Labo. uma ohlwini ubona lolu phawu ekuqaleni komugqa, khona-ke lona umugqa lapho imiyalo iboniswa khona ukuze isetshenziswe kutheminali.

Kucatshangwa ukuthi phakathi nezinyathelo ezikulesi sihloko, ikhompuyutha yakho inokufinyelela ku-inthanethi.

Ifaka iphakheji ye-libmediastremer-dev

Yethula itheminali bese uthayipha umyalo:

$ sudo apt-get update

Uzocelwa iphasiwedi yokwenza izinguquko, uyifake futhi umphathi wephakheji uzobuyekeza imininingwane yayo. Ngemuva kwalokho, udinga ukugijima:

$ sudo apt-get install libmediastreamer-dev

Amaphakheji okuncika adingekayo kanye nelabhulali ye-media streamer izolandwa futhi ifakwe ngokuzenzakalelayo.

Isamba sikasayizi wamaphakheji wedeb yokuncika alandiwe azoba cishe ngu-35 MB. Imininingwane mayelana nephakheji efakiwe ingatholakala ngomyalo:

$ dpkg -s libmediastreamer-dev

Isibonelo sempendulo:

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/

Ifaka amathuluzi okuthuthukisa

Faka i-C compiler kanye namathuluzi ahambisana nayo:

$ sudo apt-get install gcc

Sihlola umphumela ngokucela inguqulo yomdidiyeli:

$ gcc --version

Impendulo kufanele ibe kanje:

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 kanye Nokuqalisa Isicelo Sesivivinyo

Sakha ku ikhaya ifolda yamaphrojekthi ethu wokufundisa, masiyibize okokufundisa:

$ mkdir ~/mstutorial

Sebenzisa umhleli wombhalo owuthandayo bese udala ifayela lohlelo C elibizwa mstest.c ngokuqukethwe okulandelayo:

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

Iqala ukusakaza imidiya, iphrinte ukubingelela, bese iyaphuma.

Londoloza ifayela bese uhlanganisa uhlelo lokusebenza lokuhlola ngomyalo:

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

Qaphela ukuthi umugqa

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

kufakwe kuzimpawu zokucaphuna, ezitholakala kukhibhodi endaweni efanayo nohlamvu "Ё".

Uma ifayela lingenawo amaphutha, khona-ke ngemva kokuhlanganiswa ifayela lizovela ohlwini lwemibhalo mstest. Siqala uhlelo:

$ ./mstest

Umphumela uzoba kanje:

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.

Kulolu hlu, sibona imilayezo yephutha eboniswa umtapo wezincwadi we-ALSA, isetshenziselwa ukulawula ikhadi lomsindo. Abathuthukisi bokusakazwa kwabezindaba ngokwabo bakholelwa ukuthi lokhu kujwayelekile. Kulokhu, sivumelana nabo ngokungananazi.

Manje sonke sesilungele ukusebenza nomsakazi wemidiya. Sifake ilabhulali ye-media streamer, ithuluzi lokuhlanganisa, futhi sisebenzisa uhlelo lokusebenza lwesilingo, saqinisekisa ukuthi amathuluzi amisiwe futhi i-media streamer iqalisa ngempumelelo.

Olandelayo isihloko sizodala uhlelo lokusebenza oluzohlanganisa futhi luqalise ukucutshungulwa kwesignali yomsindo ochungechungeni lwezihlungi ezimbalwa.

Source: www.habr.com