Inachunguza injini ya Mediastreamer2 VoIP. Sehemu ya 1

Nyenzo za kifungu zimechukuliwa kutoka kwangu chaneli ya zen.

Utangulizi

Makala haya ni mwanzo wa mfululizo wa makala kuhusu uchakataji wa midia ya wakati halisi kwa kutumia injini ya Mediastreamer2. Uwasilishaji utahusisha ujuzi wa chini wa kufanya kazi katika terminal ya Linux na programu katika lugha ya C.

Mediastreamer2 ni injini ya VoIP nyuma ya mradi maarufu wa programu huria ya voIP ya simu. simu. Katika Linphone Mediastreamer2 inatekeleza kazi zote zinazohusiana na sauti na video. Orodha ya kina ya vipengele vya injini inaweza kuonekana kwenye ukurasa huu wa Mediastreamer. Nambari ya chanzo iko hapa: GitLab.

Zaidi katika maandishi, kwa urahisi, badala ya neno Mediastreamer2 tutatumia notation yake ya Kirusi: "media streamer".

Historia ya uumbaji wake sio wazi kabisa, lakini kwa kuzingatia msimbo wake wa chanzo, hapo awali ilitumia maktaba glib, ambayo, kama ilivyokuwa, inaashiria uhusiano wa mbali unaowezekana na GStreamer. Ikilinganishwa na ambayo kipeperushi cha media kinaonekana kuwa nyepesi zaidi. Toleo la kwanza la Linphone lilionekana mnamo 2001, kwa hivyo kwa sasa utiririshaji wa media upo na unaendelea kwa karibu miaka 20.

Katika moyo wa kipeperushi cha media kuna usanifu unaoitwa "Data flow" (mtiririko wa data). Mfano wa usanifu huo unaonyeshwa kwenye takwimu hapa chini.

Inachunguza injini ya Mediastreamer2 VoIP. Sehemu ya 1

Katika usanifu huu, algorithm ya usindikaji wa data imeelezwa si kwa kanuni ya programu, lakini kwa mpango (grafu) ya kuunganisha kazi ambazo zinaweza kupangwa kwa utaratibu wowote. Kazi hizi huitwa filters.

Usanifu huu unawezesha kutekeleza utendakazi wa uchakataji wa midia kwa namna ya seti ya vichujio vilivyounganishwa kwenye mpango wa usindikaji na uwasilishaji wa trafiki wa simu ya VoIP RTP.

Uwezo wa kuchanganya vichungi katika miradi ya kiholela, ukuzaji rahisi wa vichungi vipya, utekelezaji wa kipeperushi cha media kama maktaba huru tofauti, ruhusu itumike katika miradi mingine. Zaidi ya hayo, mradi unaweza kuwa katika uwanja wa VoIP, kwani inawezekana kuongeza vichungi vilivyotengenezwa na wewe mwenyewe.

Maktaba ya kichujio inayotolewa na chaguo-msingi ni tajiri sana na, kama ilivyotajwa tayari, inaweza kupanuliwa kwa vichujio vya muundo wetu wenyewe. Lakini kwanza, hebu tueleze vichungi vilivyotengenezwa tayari ambavyo vinakuja na kipeperushi cha media. Hii hapa orodha yao:

Vichungi vya sauti

Kunasa sauti na kucheza tena

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Sauti asili ya Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Huduma ya Foleni ya Sauti (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Huduma ya Kitengo cha Sauti (Mac OS X)
  • Sanaa (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Kicheza faili (faili mbichi/wav/pcap) (Linux): MS_FILE_PLAYER
  • Kicheza faili (faili mbichi/wav) (Windows): MS_WINSND_READ
  • Andika kwa faili (faili za wav) (Linux): MS_FILE_REC
  • Andika kwa faili (faili za wav) (Windows): MS_WINSND_WRITE
  • Kitengo cha Sauti cha 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
  • Sauti ya Windows (Windows)

Usimbaji/usimbuaji wa sauti

  • G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 Β΅-sheria: 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 ya mstari: MS_L16_ENC, MS_L16_DEC
  • Speex: MS_SPEEX_ENC, MS_SPEEX_DEC

Usindikaji wa sauti

  • Ubadilishaji wa kituo (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Mkutano: MS_CONF
  • Jenereta ya DTMF: MS_DTMF_GEN
  • Kughairiwa kwa mwangwi (kauli): MS_SPEEX_EC
  • Kisawazisha: MS_EQUALIZER
  • Kichanganyaji: MS_MIXER
  • Kifidia cha Kupoteza Pakiti (PLC): MS_GENERIC_PLC
  • Kiolezo kipya: MS_RESAMPLE
  • Kitambua sauti: MS_TONE_DETECTOR
  • Udhibiti wa sauti na kipimo cha kiwango cha mawimbi: MS_VOLUME

Vichungi vya video

Kurekodi na kucheza video

  • android kukamata
  • uchezaji wa android
  • Ukamataji wa AV Foundation (iOS)
  • Uchezaji wa AV Foundation (iOS)
  • DirectShow Capture (Windows)
  • Uchezaji wa DrawDib (Windows)
  • Uchezaji wa nje - Inatuma video kwenye safu ya juu
  • Uchezaji wa GLX (Linux): MS_GLXVIDEO
  • Mire - Picha ya syntetisk inayosonga: MS_MIRE
  • Uchezaji wa OpenGL (Mac OS X)
  • Uchezaji wa OpenGL ES2 (Android)
  • Ukamataji wa Wakati Haraka (Mac OS X)
  • Uchezaji wa SDL: MS_SDL_OUT
  • Toleo la picha tuli: MS_STATIC_IMAGE
  • Ukamataji wa Video ya Linux (V4L) (Linux): MS_V4L
  • kunasa Video ya Linux 2 (V4L2) (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) kukamata (Windows)
  • Video4windows (DirectShow) kukamata (Windows CE)
  • Video ya Windows (vfw) kukamata (Windows)
  • Uchezaji wa XV (Linux)

Usimbaji/usimbuaji wa video

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

Usindikaji wa video

  • jpeg picha
  • Kigeuzi cha umbizo la pikseli: MS_PIX_CONV
  • Resizer
  • Vichungi vingine
  • Ubadilishanaji wa vizuizi vya data kati ya nyuzi: MS_ITC_SOURCE, MS_ITC_SINK
  • Kukusanya vizuizi vya data kutoka kwa pembejeo nyingi hadi towe moja: MS_JOIN
  • Pokea/sambaza RTP: MS_RTP_SEND, MS_RTP_RECV
  • Kunakili data ya ingizo kwa matokeo mengi: MS_TEE
  • Upakiaji uliokatishwa: MS_VOID_SINK
  • Kimya Chanzo: MS_VOID_SOURCE

Programu-jalizi

Vichungi vya sauti

  • Kisimba/kisimbaji cha AMR-NB
  • G.729 encoder/decoder
  • iLBC encoder/decoder
  • SILK encoder/decoder

    Vichungi vya video

  • H.264 programu ya kusimba
  • H.264 V4L2 maunzi yaliyoharakishwa kwa encoder/decoder

Baada ya maelezo mafupi ya chujio, jina la aina linaonyeshwa, ambalo hutumiwa wakati wa kuunda mfano mpya wa chujio hiki. Katika kile kinachofuata, tutarejelea orodha hii.

Ufungaji chini ya Linux Ubuntu

Sasa tutasakinisha kipeperushi cha media kwenye kompyuta na kuunda programu yetu ya kwanza nayo.

Kufunga Mediastremer2 kwenye kompyuta au mashine pepe inayoendesha Ubuntu haihitaji ujuzi wowote maalum. Hapa na chini, ishara "$" itaashiria ganda la haraka la kuingiza amri. Wale. ikiwa katika orodha unaona ishara hii mwanzoni mwa mstari, basi hii ndiyo mstari ambao amri zinaonyeshwa kutekelezwa kwenye terminal.

Inachukuliwa kuwa wakati wa hatua katika makala hii, kompyuta yako ina upatikanaji wa mtandao.

Inasakinisha kifurushi cha libmediastremer-dev

Zindua terminal na chapa amri:

$ sudo apt-get update

Utaulizwa nenosiri ili kufanya mabadiliko, liweke na msimamizi wa kifurushi atasasisha hifadhidata zake. Baada ya hayo, unahitaji kukimbia:

$ sudo apt-get install libmediastreamer-dev

Vifurushi muhimu vya utegemezi na maktaba ya kipeperushi cha media yenyewe itapakuliwa na kusakinishwa kiotomatiki.

Ukubwa wa jumla wa vifurushi vya deni tegemezi vilivyopakuliwa vitakuwa takriban 35 MB. Maelezo juu ya kifurushi kilichosanikishwa yanaweza kupatikana kwa amri:

$ dpkg -s libmediastreamer-dev

Jibu mfano:

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/

Kuweka zana za maendeleo

Sakinisha mkusanyaji wa C na zana zake zinazoambatana:

$ sudo apt-get install gcc

Tunaangalia matokeo kwa kuuliza toleo la mkusanyaji:

$ gcc --version

Jibu linapaswa kuwa kitu kama hiki:

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.

Kujenga na Kuendesha Maombi ya Jaribio

Tunaunda ndani nyumbani folda ya miradi yetu ya mafunzo, wacha tuiite mstutorial:

$ mkdir ~/mstutorial

Tumia kihariri chako cha maandishi unachopenda na uunde faili ya programu ya C inayoitwa mstest.c na maudhui yafuatayo:

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

Huanzisha kipeperushi cha media, huchapisha salamu, na kuondoka.

Hifadhi faili na ujumuishe programu ya majaribio na amri:

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

Kumbuka kwamba mstari

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

imefungwa kwa alama za nukuu, ambazo ziko kwenye kibodi mahali sawa na barua "Ё".

Ikiwa faili haina makosa, basi baada ya kukusanya faili itaonekana kwenye saraka mstest. Tunaanza programu:

$ ./mstest

Matokeo yake yatakuwa kama hii:

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.

Katika orodha hii, tunaona ujumbe wa makosa ambayo maktaba ya ALSA inaonyesha, hutumiwa kudhibiti kadi ya sauti. Watengenezaji wa utiririshaji wa media wenyewe wanaamini kuwa hii ni kawaida. Katika kesi hii, tunakubaliana nao kwa kusita.

Sasa sote tuko tayari kufanya kazi na kipeperushi cha media. Tumesakinisha maktaba ya kipeperushi cha media, zana ya ujumuishaji, na kwa kutumia programu ya majaribio, tumethibitisha kuwa zana zimesanidiwa na kipeperushi cha media kikianzisha.

Inayofuata Ibara ya tutaunda programu ambayo itakusanyika na kuendesha usindikaji wa ishara ya sauti katika mlolongo wa vichungi kadhaa.

Chanzo: mapenzi.com