Ịchọgharị igwe Mediastreamer2 VoIP. Nkeji 1

A na-ewepụta ihe nke isiokwu ahụ site na nke m zen ọwa.

Okwu Mmalite

Edemede a bụ mmalite nke usoro akụkọ gbasara nhazi mgbasa ozi n'ezie site na iji igwe Mediastreamer2. Ngosipụta a ga-agụnye nkà kacha nta nke ịrụ ọrụ na Linux Terminal na mmemme n'asụsụ C.

Mediastreamer2 bụ igwe VoIP n'azụ ọrụ ekwentị voip ngwanrọ mepere emepe ama ama. Ihe anakpo. Na Linphone Mediastreamer2 na-arụ ọrụ niile metụtara ụda na vidiyo. Enwere ike ịhụ ndepụta zuru ezu nke njirimara injin na ibe Mediastreamer a. Koodu isi mmalite dị ebe a: GitLab.

N'ịga n'ihu na ederede, maka ịdị mma, kama okwu Mediastreamer2 anyị ga-eji nrịbama Russia ya: "media streamer".

Akụkọ ihe mere eme nke okike ya abụghị nke doro anya, mana ikpe site na koodu isi mmalite ya, ọ na-ejibu ọbá akwụkwọ ahụ glib, nke, dị ka a pụrụ isi kwuo ya, na-egosi mmekọrịta dị anya ga-ekwe omume GStreamer. N'iji ya tụnyere nke mgbasa ozi mgbasa ozi na-ele anya karịa. Ụdị mbụ nke Linphone pụtara na 2001, yabụ ugbu a, mgbasa ozi mgbasa ozi dị ma na-etolite ihe fọrọ nke nta ka ọ bụrụ afọ 20.

N'ime obi nke mgbasa ozi mgbasa ozi bụ ụlọ ọrụ a na-akpọ "Data flow" (data flow). E gosipụtara ihe atụ nke ihe owuwu dị otú ahụ na foto dị n'okpuru.

Ịchọgharị igwe Mediastreamer2 VoIP. Nkeji 1

N'ime ihe owuwu a, a na-akọwapụta algorithm nhazi data ọ bụghị site na koodu mmemme, kama site na atụmatụ (graph) maka njikọ ọrụ nke enwere ike ịhazi n'usoro ọ bụla. A na-akpọ ọrụ ndị a nzacha.

Ihe owuwu a na-eme ka o kwe omume iji mejuputa ọrụ nhazi mgbasa ozi n'ụdị nhazi ihe nzacha jikọtara na atụmatụ nhazi okporo ụzọ na nnyefe RTP ekwentị VoIP.

Ikike ijikọta ihe nzacha n'ime atụmatụ aka ike, mmepe dị mfe nke nzacha ọhụrụ, mmejuputa mgbasa ozi mgbasa ozi dị ka ọbá akwụkwọ dị iche iche nke onwe, na-enye ohere ka e jiri ya rụọ ọrụ ndị ọzọ. Ọzọkwa, ọrụ ahụ nwere ike ịbụ na mpaghara VoIP, ebe ọ bụ na ọ ga-ekwe omume ịgbakwunye nzacha nke onwe ya mere.

Ọbá akwụkwọ nzacha ewepụtara na ndabara bara ụba nke ukwuu yana, dịka ekwurula, enwere ike ịgbatị ya site na nzacha nke imewe nke anyị. Mana nke mbụ, ka anyị kọwapụta ihe nzacha emebere nke na-abịa na iyi mgbasa ozi. Nke a bụ ndepụta ha:

Ihe nzacha ụda

Njide ọdịyo na ịkpọghachi ya

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Ụda ala gam akporo (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Ọrụ Queue Audio (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Ọrụ Unit Audio (Mac OS X)
  • Nkà (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Ihe ọkpụkpọ faịlụ (faịlụ raw/wav/pcap) (Linux): MS_FILE_PLAYER
  • Ihe ọkpụkpọ faịlụ (faịlụ raw/wav) (Windows): MS_WINSND_READ
  • Dee na faịlụ (faịlụ wav) (Linux): MS_FILE_REC
  • Dee na faịlụ (faịlụ wav) (Windows): MS_WINSND_WRITE
  • Ngalaba Audio 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
  • Windows Sound (Windows)

Ndozi/nkọwapụta ọdịyo

  • G.711 iwu: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-iwu: 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
  • Okwu: MS_SPEEX_ENC, MS_SPEEX_DEC

Nhazi ụda

  • Ntụgharị ọwa (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Ọgbakọ: MS_CONF
  • Onye nrụpụta DTMF: MS_DTMF_GEN
  • Nkagbu Echo (speex): MS_SPEEX_EC
  • Ihe nhazi: MS_EQUALIZER
  • Ngwakọta: MS_MIXER
  • Nkwụghachi ụgwọ mfu nke ngwugwu (PLC): MS_GENERIC_PLC
  • Ihe nlere anya: MS_RESAMPLE
  • Ihe nchọpụta ụda: MS_TONE_DETECTOR
  • Njikwa olu na nha ọkwa mgbama: MS_VOLUME

Ihe nzacha vidiyo

Edede vidiyo na ịkpọghachi ya

  • android ijide
  • android playback
  • AV Foundation weghara (iOS)
  • AV Foundation playback (iOS)
  • Ngosipụta DirectShow (Windows)
  • DrawDib playback (Windows)
  • Ngwugharị mpụga - Na-eziga vidiyo na akwa elu
  • Ngwugharị GLX (Linux): MS_GLXVIDEO
  • Mire - Foto na-akpụ akpụ sịntetik: MS_MIRE
  • Mepee ọkpụkpọ GL (Mac OS X)
  • Mepee GL ES2 ọkpụkpọ (Android)
  • Njide ngwa ngwa (Mac OS X)
  • Njigharị SDL: MS_SDL_OUT
  • Mbupute onyonyo kwụ ọtọ: MS_STATIC_IMAGE
  • Vidiyo Maka Linux (V4L) ijide (Linux): MS_V4L
  • Vidiyo Maka Linux 2 (V4L2) ijide (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) weghara (Windows)
  • Video4windows (DirectShow) weghara (Windows CE)
  • Vidiyo Maka Windows (vfw) ijide (Windows)
  • Nkpọghachi XV (Linux)

Ndozi vidiyo/ngbanwe

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

Nhazi vidiyo

  • foto jpeg
  • Ọkpụkpọ Pixel ntụgharị: MS_PIX_CONV
  • Resizer
  • Ihe nzacha ndị ọzọ
  • Mgbanwe nke ngọngọ data n'etiti eri: MS_ITC_SOURCE, MS_ITC_SINK
  • Ịnakọta ngọngọ nke data site na ntinye ọtụtụ gaa na otu mmepụta: MS_JOIN
  • RTP nata/ebufe: MS_RTP_SEND, MS_RTP_RECV
  • Na-eṅomi data ntinye n'ọtụtụ mpụta: MS_TEE
  • Ibu kwụsịrị: MS_VOID_SINK
  • Isi mmalite nke ịgbachi nkịtị: MS_VOID_SOURCE

Ngwa mgbakwunye

Ihe nzacha ụda

  • AMR-NB ihe ngbanwe / ihe ngbanwe
  • G.729 ihe ngbanwe / ihe ngbanwe
  • iLBC koodu / ihe ngbanwe
  • Ihe mkpuchi SILK / ihe ngbanwe

    Ihe nzacha vidiyo

  • H.264 koodu nzuzo
  • H.264 V4L2 ihe ngbanwe ngwaike agbakwunyere / ihe ngbanwe

Mgbe nkọwa dị mkpirikpi nke nzacha ahụ gasịrị, a na-egosipụta aha ụdị ahụ, nke a na-eji eme ihe mgbe ị na-emepụta ihe ọhụrụ nke nzacha a. N'ime ihe na-esote, anyị ga-ezo aka na ndepụta a.

Nwụnye n'okpuru Linux Ubuntu

Ugbu a, anyị ga-wụnye media streamer na kọmputa na-eji ya wuo anyị ngwa mbụ anyị.

Ịwụnye Mediastremer2 na kọmpụta ma ọ bụ igwe mebere na-agba Ubuntu anaghị achọ nka pụrụ iche. N'ebe a na n'okpuru, akara "$" ga-egosi ngwa ngwa shei maka itinye iwu. Ndị ahụ. Ọ bụrụ na n'ime ndepụta ahụ ị na-ahụ akara a na mmalite nke ahịrị, mgbe ahụ, nke a bụ ahịrị nke egosiri iwu na-egbu na njedebe.

A na-eche na n'oge usoro nke isiokwu a, kọmputa gị nwere ohere ịntanetị.

Ịwụnye ngwugwu libmediastremer-dev

Mwepụta ọnụ ma pịnye iwu:

$ sudo apt-get update

A ga-ajụ gị maka paswọọdụ iji mee mgbanwe, tinye ya na njikwa ngwugwu ga-emelite ọdụ data ya. Mgbe nke ahụ gasịrị, ịkwesịrị ịgba ọsọ:

$ sudo apt-get install libmediastreamer-dev

A ga-ebudata ma tinye ngwungwu ndabere dị mkpa na ọba akwụkwọ mgbasa ozi n'onwe ya.

Ngụkọta nha nke ngwungwu ndabere ndabere ebudatara ga-abụ ihe dịka 35 MB. Enwere ike ịchọta nkọwa gbasara ngwugwu arụnyere na iwu a:

$ dpkg -s libmediastreamer-dev

Ihe atụ zaa:

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/

Ịwụnye akụrụngwa mmepe

Wụnye C compiler na ngwaọrụ ndị so ya:

$ sudo apt-get install gcc

Anyị na-elele nsonaazụ ya site n'ịjụ ụdị nke mkpokọta:

$ gcc --version

Azịza ya kwesịrị ịdị ka nke a:

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.

Iwuli ma na-agba ọsọ ngwa nnwale

Anyị na-emepụta home nchekwa maka nkuzi nkuzi anyị, ka anyị kpọọ ya amstutorial:

$ mkdir ~/mstutorial

Jiri nchịkọta akụkọ ederede ọkacha mmasị gị wee mepụta faịlụ mmemme C a na-akpọ mstest.c ya na ọdịnaya ndị a:

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

Ọ na-ebido mgbasa ozi mgbasa ozi, bipụta ekele, wee pụọ.

Chekwaa faịlụ ahụ wee jiri iwu a chịkọta ngwa nnwale:

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

Rịba ama na ahịrị ahụ

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

agbakwunyere na akara ngụ, nke dị na ahụigodo n'otu ebe dị na mkpụrụedemede "Ё".

Ọ bụrụ na faịlụ ahụ enweghị njehie, mgbe ahụ, mgbe chịkọtara faịlụ ga-apụta na ndekọ mstest. Anyị na-amalite mmemme:

$ ./mstest

Nsonaazụ ga-adị ka nke a:

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.

N'ime ndepụta a, anyị na-ahụ ozi ezighi ezi nke ọbá akwụkwọ ALSA gosipụtara, a na-eji ya ejikwa kaadị ụda. Ndị mmepe nke mgbasa ozi mgbasa ozi n'onwe ha kwenyere na nke a bụ ihe nkịtị. N'okwu a, anyị anaghị ekweta na ha.

Ugbu a, anyị niile edozila ịrụ ọrụ na mgbasa ozi mgbasa ozi. Anyị etinyela ọbá akwụkwọ mgbasa ozi streamer, ngwá ọrụ nchịkọta, yana iji ngwa nnwale, gosikwara na ahaziri ngwaọrụ ndị ahụ na mgbasa ozi mgbasa ozi na-amalite nke ọma.

Osote ederede anyị ga-emepụta ngwa ga-agbakọta ma na-agba ọsọ nhazi nke mgbaàmà ọdịyo n'ime agbụ nke ọtụtụ nzacha.

isi: www.habr.com