Омӯзиши муҳаррики Mediastreamer2 VoIP. Қисми 1

Материали макола аз ман гирифта шудааст канали zen.

Муқаддима

Ин мақола оғози як силсила мақолаҳо дар бораи коркарди ВАО дар вақти воқеӣ бо истифода аз муҳаррики Mediastreamer2 мебошад. Муаррифӣ малакаҳои ҳадди ақали кор дар терминали Linux ва барномасозӣ бо забони Сиро дар бар мегирад.

Mediastreamer2 муҳаррики VoIP дар паси лоиҳаи маъмули нармафзори воип телефони кушода аст. Линфон. Дар Linphone Mediastreamer2 ҳама вазифаҳои марбут ба садо ва видеоро амалӣ мекунад. Рӯйхати муфассали хусусиятҳои муҳаррикро дар ин саҳифаи Mediastreamer дидан мумкин аст. Рамзи манбаъ ин ҷост: Гуглаб.

Минбаъд дар матн, барои роҳат, ба ҷои калимаи Mediastreamer2 мо қайди русии онро истифода хоҳем кард: “media streamer”.

Таърихи офариниши он комилан равшан нест, аммо аз рӯи коди сарчашмааш, он қаблан аз китобхона истифода мешуд Глиб, ки, чунон ки гуё, ишора ба муносибати дур имконпазир бо GStreamer. Дар муқоиса бо он, стримери медиа сабуктар менамояд. Аввалин версияи Linphone дар соли 2001 пайдо шуд, бинобар ин, дар айни замон стримери медиа вуҷуд дорад ва тақрибан 20 сол инкишоф меёбад.

Дар маркази стримери медиа меъморӣ бо номи "Ҷараёни додаҳо" (ҷараёни додаҳо) ҷойгир аст. Намунаи чунин меъморӣ дар расми зер нишон дода шудааст.

Омӯзиши муҳаррики Mediastreamer2 VoIP. Қисми 1

Дар ин меъморӣ алгоритми коркарди додаҳо на бо коди барномавӣ, балки бо схема (график) барои пайваст кардани функсияҳое, ки бо дилхоҳ тартиб ҷойгир карда мешаванд, муайян карда мешавад. Ин вазифаҳоро филтрҳо меноманд.

Ин меъморӣ имкон медиҳад, ки функсияи коркарди ВАО дар шакли маҷмӯи филтрҳо ба нақшаи коркард ва интиқоли трафики VoIP телефони RTP пайваст карда шавад.

Қобилияти муттаҳид кардани филтрҳо ба схемаҳои худсарона, таҳияи оддии филтрҳои нав, татбиқи стримери медиа ҳамчун китобхонаи мустақил, имкон медиҳад, ки он дар дигар лоиҳаҳо истифода шавад. Ғайр аз он, лоиҳа метавонад дар соҳаи VoIP бошад, зеро он имкон дорад, ки филтрҳои аз ҷониби худ сохташуда илова карда шаванд.

Китобхонаи филтр, ки бо нобаёнӣ дода мешавад, хеле бой аст ва, тавре ки аллакай зикр гардид, метавонад бо филтрҳои тарҳи худи мо васеъ карда шавад. Аммо аввал, биёед филтрҳои тайёреро, ки бо стримери медиа меоянд, тавсиф кунем. Ин аст рӯйхати онҳо:

Филтрҳои садо

Сабт ва навозиш аудио

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Овози аслии Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Хидмати навбатии аудио (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Хидмати воҳиди аудио (Mac OS X)
  • Санъат (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Плеери файл (файлҳои хом/wav/pcap) (Linux): MS_FILE_PLAYER
  • Плеери файл (файлҳои хом/wav) (Windows): MS_WINSND_READ
  • Ба файл нависед (файлҳои wav) (Linux): MS_FILE_REC
  • Ба файл нависед (файлҳои wav) (Windows): MS_WINSND_WRITE
  • Воҳиди аудиоии 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 садои (Windows)

Рамзгузорӣ/декодкунии аудио

  • G.711 қонун: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-қонун: 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 хатӣ: MS_L16_ENC, MS_L16_DEC
  • Суръат: MS_SPEEX_ENC, MS_SPEEX_DEC

Коркарди садо

  • Табдили канал (моно->стерео, стерео->моно): MS_CHANNEL_ADAPTER
  • Конфронс: MS_CONF
  • Генератори DTMF: MS_DTMF_GEN
  • Бекоркунии акси садо (speex): MS_SPEEX_EC
  • Эквалайзер: MS_EQUALIZER
  • Миксер: MS_MIXER
  • Компенсатори талафоти баста (PLC): MS_GENERIC_PLC
  • Намунадиҳанда: MS_RESAMPLE
  • Детектори оҳанг: MS_TONE_DETECTOR
  • Назорати овоз ва андозагирии сатҳи сигнал: MS_VOLUME

Филтрҳои видео

Сабт ва бозикунии видео

  • забти андроид
  • бозикунии андроид
  • Забти AV Foundation (iOS)
  • Бозии AV Foundation (iOS)
  • DirectShow Capture (Windows)
  • Бозии DrawDib (Windows)
  • Бозии беруна - Ирсоли видео ба қабати боло
  • Бозии GLX (Linux): MS_GLXVIDEO
  • Mire - Тасвири синтетикии ҳаракаткунанда: MS_MIRE
  • Бозии OpenGL (Mac OS X)
  • Бозии OpenGL ES2 (Android)
  • Quicktime Capture (Mac OS X)
  • Бозии SDL: MS_SDL_OUT
  • Натиҷаи тасвири статикӣ: MS_STATIC_IMAGE
  • Видео Барои Linux (V4L) забт (Linux): MS_V4L
  • Видео барои Linux 2 (V4L2) забт (Linux): MS_V4L2_CAPTURE
  • Сабти Video4windows (DirectShow) (Windows)
  • Сабти Video4windows (DirectShow) (Windows CE)
  • Видео Барои Windows (vfw) забт кардан (Windows)
  • Бозии XV (Linux)

Рамзгузорӣ/декодкунии видео

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Барф: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (танҳо декодер): MS_H264_DEC
  • Теора: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Коркарди видео

  • акси jpeg
  • Табдилдиҳандаи формати пиксел: MS_PIX_CONV
  • Резератор
  • Дигар филтрҳо
  • Мубодилаи блокҳои додаҳо байни риштаҳо: MS_ITC_SOURCE, MS_ITC_SINK
  • Ҷамъоварии блокҳои маълумот аз якчанд вуруд ба як баромад: MS_JOIN
  • Қабул/интиқоли RTP: MS_RTP_SEND, MS_RTP_RECV
  • Нусхабардории маълумоти воридотӣ ба якчанд баромадҳо: MS_TEE
  • Сарбории қатъшуда: MS_VOID_SINK
  • Манбаи хомӯшӣ: MS_VOID_SOURCE

Плагинҳо

Филтрҳои садо

  • Рамзгузор/декодер AMR-NB
  • G.729 рамзгузори/декодер
  • Рамзгузор/декодер iLBC
  • Рамзгузор/декодер SILK

    Филтрҳои видео

  • Рамзгузори нармафзори H.264
  • H.264 V4L2 сахтафзор рамзгузорро суръатфизо / декодер

Пас аз тавсифи мухтасари филтр номи намуд нишон дода мешавад, ки ҳангоми сохтани мисоли нави ин филтр истифода мешавад. Дар оянда, мо ба ин рӯйхат муроҷиат хоҳем кард.

Насбкунӣ дар зери Linux Ubuntu

Ҳоло мо стримери медиаро дар компютер насб мекунем ва аввалин барномаи худро бо он бунёд мекунем.

Насб кардани Mediastremer2 дар компютер ё мошини маҷозӣ, ки Ubuntu кор мекунад, ягон малакаи махсусро талаб намекунад. Дар ин ҷо ва дар поён, аломати "$" дархости ҷилдиро барои ворид кардани фармонҳо нишон медиҳад. Онхое. агар дар рӯйхат шумо ин аломатро дар аввали сатр бинед, пас ин сатрест, ки дар он фармонҳо дар терминал иҷро мешаванд.

Тахмин меравад, ки дар давоми қадамҳои ин мақола, компютери шумо ба Интернет дастрасӣ дорад.

Насб кардани бастаи libmediastremer-dev

Терминалро оғоз кунед ва фармонро нависед:

$ sudo apt-get update

Барои ворид кардани тағирот аз шумо парол талаб карда мешавад, онро ворид кунед ва менеҷери бастаҳо пойгоҳи додаҳои худро навсозӣ мекунад. Баъд аз ин, шумо бояд иҷро кунед:

$ sudo apt-get install libmediastreamer-dev

Бастаҳои зарурии вобастагӣ ва худи китобхонаи стримерҳои медиа ба таври худкор зеркашӣ ва насб карда мешаванд.

Андозаи умумии бастаҳои deb аз вобастагии зеркашида тақрибан 35 МБ хоҳад буд. Тафсилотро дар бораи бастаи насбшуда бо фармон пайдо кардан мумкин аст:

$ dpkg -s libmediastreamer-dev

Намунаи ҷавоб:

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/

Насб кардани асбобҳои рушд

Компилятори C ва асбобҳои ҳамроҳи онро насб кунед:

$ sudo apt-get install gcc

Мо натиҷаро тавассути дархости версияи компилятор тафтиш мекунем:

$ gcc --version

Ҷавоб бояд чунин бошад:

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.

Сохта ва ба кор андохтани аризаи озмоишӣ

Мо дар хона папка барои лоиҳаҳои дарсӣ мо, биёед онро даъват таълимӣ:

$ mkdir ~/mstutorial

Муҳаррири матнии дӯстдоштаи худро истифода баред ва файли барномаи C-ро эҷод кунед mstest.c бо мундариҷаи зерин:

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

Он пахшкунандаи медиаро оғоз мекунад, табрикотро чоп мекунад ва мебарояд.

Файлро захира кунед ва барномаи санҷиширо бо фармон тартиб диҳед:

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

Дар хотир доред, ки хати

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

ба нохунак дохил карда мешаванд, ки дар клавиатура дар хамон чо бо харфи «Ё» чойгиранд.

Агар файл хато надошта бошад, пас аз тартиб додан дар директория файл пайдо мешавад mstest. Мо барномаро оғоз мекунем:

$ ./mstest

Натиҷа чунин хоҳад буд:

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.

Дар ин рӯйхат мо паёмҳои хатогиеро мебинем, ки китобхонаи ALSA намоиш медиҳад, он барои идоракунии корти садоӣ истифода мешавад. Худи таҳиягарони медиа-стример боварӣ доранд, ки ин муқаррарӣ аст. Дар ин сурат мо бо дили нохохам бо онхо розй мешавем.

Ҳоло мо ҳама омодаем, ки бо пахшкунандаи медиа кор кунем. Мо китобхонаи стримери медиа, абзори компиляцияро насб кардем ва бо истифода аз як барномаи озмоишӣ тасдиқ кардем, ки асбобҳо танзим шудаанд ва стримери медиа бомуваффақият оғоз мешавад.

Баъдӣ мақола мо барномае месозем, ки коркарди сигнали аудиоиро дар занҷири якчанд филтрҳо ҷамъ ва иҷро кунад.

Манбаъ: will.com