Vekolîna motora VoIP ya Mediastreamer2. Beş 1

Madeya gotarê ji min hatiye girtin kanala zen.

Pîrozbahiyê

Ev gotar destpêka rêzek gotaran e li ser hilberandina medyayê ya rast-ê ku motora Mediastreamer2 bikar tîne. Di dema pêşkêşiyê de, jêhatîbûna hindiktirîn di xebata di termînala Linux de û bernamekirina bi zimanê C-ê dê were bikar anîn.

Mediastreamer2 motora VoIP-ê ye ku li pişt projeya nermalava têlefonê voip-çavkaniya vekirî ya populer e telefonê. Linphone Mediastreamer2 hemî fonksiyonên têkildarî deng û vîdyoyê pêk tîne. Navnîşek berfireh a kapasîteyên motorê dikare li ser vê rûpelê Mediastreamer were dîtin. Koda çavkaniyê li vir e: GitLab.

Zêdetir di nivîsê de, ji bo rehetiyê, li şûna peyva Mediastreamer2 em ê nîşana wê ya rûsî bikar bînin: "mediastreamer".

Dîroka afirandina wê bi tevahî ne diyar e, lê li gorî koda çavkaniya wê dadbar kirin, berê pirtûkxane bikar anî glib, ku dixuye ku ji me re têkiliyek dûr a muhtemel bi me re destnîşan dike GStreamer. Di berhevdanê de, weşana medyayê siviktir xuya dike. Guhertoya yekem a Linphone di 2001-an de xuya bû, ji ber vê yekê di vê gavê de weşana medyayê hema hema 20 sal e heye û pêşve diçe.

Weşana medyayê li ser mîmariyek bi navê "herikîna daneyan" pêk tê. Mînakek mîmariyek weha di wêneya jêrîn de tê xuyang kirin.

Vekolîna motora VoIP ya Mediastreamer2. Beş 1

Di vê mîmariyê de, algorîtmaya hilberandina daneyê ne bi koda bernameyê, lê ji hêla diagramek (grafîk) fonksiyonên girêdanê ve ku dikare bi her rêzê were saz kirin, tête diyar kirin. Ji van fonksîyonan re fîlter tê gotin.

Ev mîmarî dihêle ku meriv fonksiyona pêvajoyek medyayê di forma komek fîlteran de ku bi navgîniyek ve girêdayî ye ji bo hilanîn û veguheztina seyrûsefera RTP ya têlefonek VoIP-ê pêk bîne.

Qabiliyeta girêdana fîlteran di pileyên kêfî de, pêşkeftina hêsan a fîlterên nû, û bicîhkirina stêrka medyayê wekî pirtûkxaneyek veqetandî ya serbixwe dihêle ku ew di projeyên din de were bikar anîn. Wekî din, proje dikare di qada VoIP-ê de be, ji ber ku gengaz e ku meriv fîlterên ku ji hêla xwe ve hatî çêkirin lê zêde bike.

Pirtûkxaneya fîlterê ya xwerû pir dewlemend e û, wekî ku berê hatî behs kirin, dikare bi fîlterên sêwirana me ve were berfireh kirin. Lê pêşî, em ê fîlterên hazir ên ku bi stêrka medyayê re têne rave bikin. Li vir lîsteya wan e:

Parzûnên deng

Girtina deng û lêdanê

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Dengê xwemalî yê Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Xizmeta Dora Deng (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Xizmeta Yekîneya Deng (Mac OS X)
  • Huner (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Lîstika pelê (pelên raw/wav/pcap) (Linux): MS_FILE_PLAYER
  • Lîstikvanê pelê (pelên raw/wav) (Windows): MS_WINSND_READ
  • Di pelê de (pelên wav) binivîse (Linux): MS_FILE_REC
  • Li pelê binivîse (pelên wav) (Windows): MS_WINSND_WRITE
  • Yekîneya Dengê Mac (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
  • Dengê Windows (Windows)

Şîfrekirina / deşîfrekirina deng

  • G.711 a-qanûn: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 μ-qanûn: 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 Linear: MS_L16_ENC, MS_L16_DEC
  • Speex: MS_SPEEX_ENC, MS_SPEEX_DEC

Pêvajoya dengî

  • Veguherîna kanalê (mono-> stereo, stereo-> mono): MS_CHANNEL_ADAPTER
  • Konferans: MS_CONF
  • jeneratorê DTMF: MS_DTMF_GEN
  • Betalkirina Echo (axaftin): MS_SPEEX_EC
  • Wekhevker: MS_EQUALIZER
  • Mikser: MS_MIXER
  • Tezmînata windabûna pakêtê (PLC): MS_GENERIC_PLC
  • Resampler: MS_RESAMPLE
  • Detektora deng: MS_TONE_DETECTOR
  • Kontrolkirina deng û pîvana asta sînyalê: MS_VOLUME

Parzûnên vîdyoyê

Girtina vîdyoyê û lêdanê

  • Girtina Android
  • playback Android
  • Girtina Weqfa AV (iOS)
  • Lîstika Weqfa AV (iOS)
  • Girtina DirectShow (Windows)
  • Playback DrawDib (Windows)
  • Lîstika derveyî - Vîdyoyê bişînin asta jorîn
  • Lîstika GLX (Linux): MS_GLXVIDEO
  • Mire - Wêneyê tevgerê sentetîk: MS_MIRE
  • Lîstika OpenGL (Mac OS X)
  • Lîstika OpenGL ES2 (Android)
  • Girtina Quicktime (Mac OS X)
  • SDL playback: MS_SDL_OUT
  • Derketina wêneyên statîk: MS_STATIC_IMAGE
  • Vîdyo Ji bo Linux (V4L) girtina (Linux): MS_V4L
  • Vîdyo Ji bo Linux 2 (V4L2) girtina (Linux): MS_V4L2_CAPTURE
  • girtina Video4windows (DirectShow) (Windows)
  • girtina Video4windows (DirectShow) (Windows CE)
  • Vîdyo Ji bo Windows (vfw) girtina (Windows)
  • XV playback (Linux)

Şîfrekirina / şîfrekirina vîdyoyê

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Berf: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (tenê dekoder): MS_H264_DEC
  • Theora: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Pêvajoya vîdyoyê

  • wêneya JPEG
  • Veguherkera formata pixel: MS_PIX_CONV
  • Resizer
  • Parzûnên din
  • Guhertina blokên daneyê di navbera mijaran de: MS_ITC_SOURCE, MS_ITC_SINK
  • Berhevkirina blokên daneyê ji gelek têketinê berbi yek deranê: MS_JOIN
  • Wergirtin / veguheztina RTP: MS_RTP_SEND, MS_RTP_RECV
  • Kopîkirina daneya têketinê li gelek derkanan: MS_TEE
  • Barkirina lihevhatî: MS_VOID_SINK
  • Çavkaniya bêdengiyê: MS_VOID_SOURCE

Plugins

Parzûnên deng

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

    Parzûnên vîdyoyê

  • H.264 şîfreya nermalavê
  • H.264 V4L2 encoder / dekoder bi lezkirina hardware

Piştî ravekek kurt a parzûnê, navê tîpê tê xuyang kirin, ku di dema afirandina mînakek nû ya vê parzûnê de tê bikar anîn. Di nîqaşa jêrîn de em ê behsa vê navnîşê bikin.

Sazkirin di bin Linux Ubuntu de

Naha em ê weşana medyayê li ser komputera we saz bikin û serlêdana xweya yekem pê re ava bikin.

Sazkirina Mediastremer2 li ser komputerek an makîneyek virtual ku Ubuntu dixebitîne jêhatîbûnek taybetî hewce nake. Li vir û li jêr, nîşana "$" dê ji bo têketina fermanan tavilê nîşan bide. Ewan. heke di navnîşê de hûn vê sembolê di destpêka rêzekê de dibînin, wê hingê ev tê vê wateyê ku ev xêzek e ku fermanên ku di termînalê de bêne bicîh kirin nîşan dide.

Tê texmîn kirin ku dema ku gavên ku di vê gotarê de hatine destnîşan kirin bicîh tîne, komputera we gihîştina Înternetê heye.

Sazkirina pakêta libmediastromer-dev

Termînalê bidin destpêkirin û fermanê binivîsin:

$ sudo apt-get update

Dê ji we re şîfreyek were xwestin ku guhartinan bikin; wê têkevin û rêveberê pakêtê dê databasên xwe nûve bike. Piştî vê yekê hûn hewce ne ku bikin:

$ sudo apt-get install libmediastreamer-dev

Pakêtên pêwendiya pêwîst û pirtûkxaneya weşana medyayê bixwe dê bixweber werin dakêşandin û saz kirin.

Mezinahiya giştî ya pakêtên girêdayî deb-ê yên dakêşandî dê bi qasî 35 MB be. Agahiyên li ser pakêta sazkirî bi fermanê têne dîtin:

$ dpkg -s libmediastreamer-dev

Mînak bersiv:

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/

Sazkirina Amûrên Pêşveçûnê

Berhevkarê C û amûrên pêvekirî saz bikin:

$ sudo apt-get install gcc

Em bi daxwaza guhertoya berhevkerê encamê kontrol dikin:

$ gcc --version

Bersiv divê tiştek weha be:

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.

Avakirin û meşandina serîlêdana ceribandinê

Em di nav de çêbikin xane peldanka ji bo projeyên me yên perwerdehiyê, em jê re bibêjin mstutorial:

$ mkdir ~/mstutorial

Edîtorê nivîsa xweya bijare bikar bînin û pelek bernameyek C bi navê xwe biafirînin mstest.c bi naveroka jêrîn:

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

Ew weşana medyayê dest pê dike, silavek çap dike, û darvekirinê diqedîne.

Pelê hilînin û bi fermanê serîlêdana testê berhev bikin:

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

Ji kerema xwe not bikin ku xeta

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

di nav niqteyên ku li ser klavyeyê di heman cîhê tîpa "Y" de cih digirin.

Heke di pelê de xeletî nebe, wê hingê piştî berhevkirinê pel dê di pelrêçê de xuya bibe mstest. Ka em bernameyê bimeşînin:

$ ./mstest

Encam dê wiha be:

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.

Di vê navnîşê de em peyamên xeletiyê yên ku ji hêla pirtûkxaneya ALSA ve hatî çêkirin, ku ji bo kontrolkirina qerta deng tê bikar anîn, dibînin. Pêşdebirên weşana medyayê bixwe bawer dikin ku ev normal e. Di vê rewşê de, em ê bi neçarî bi wan re li hev bikin.

Naha em amade ne ku bi weşana medyayê re bixebitin. Me pirtûkxaneya weşana medyayê, amûra berhevkirinê saz kir, û serîlêdanek nimûne bikar anî da ku verast bikin ku amûr hatine mîheng kirin û weşana medyayê bi serfirazî dest pê kir.

Piştî gotara em ê serîlêdanek biafirînin ku dê di zincîreyek ji çend fîlteran de pêvajoyek sînyala deng berhev bike û bixebite.

Source: www.habr.com