Mediastreamer2 VoIP кыймылдаткычын изилдөө. 1-бөлүк

Макаланын материалы менин zen каналы.

тааныштыруу

Бул макала Mediastreamer2 кыймылдаткычын колдонуу менен реалдуу убакытта медиа иштетүү жөнүндө макалалардын сериясынын башталышы болуп саналат. Презентация Linux терминалында иштөө жана Си тилинде программалоо боюнча минималдуу көндүмдөрдү камтыйт.

Mediastreamer2 популярдуу ачык булак программалык VoIP телефон долбоорунун артында VoIP кыймылдаткычы болуп саналат. телефон. Linphone Mediastreamer2 үн жана видео менен байланышкан бардык функцияларды ишке ашырат. Кыймылдаткыч өзгөчөлүктөрүнүн толук тизмесин бул Mediastreamer баракчасынан көрүүгө болот. Булак коду бул жерде: GitLab.

Андан ары текстте Mediastreamer2 сөзүнүн ордуна биз анын орусча белгисин колдонобуз: “media streamer”.

Анын жаралуу тарыхы толугу менен ачык-айкын эмес, бирок анын баштапкы коду боюнча, ал мурда китепкананы колдонгон glibменен мүмкүн болгон алыскы мамилени кыйытууда GStreamer. Буга салыштырмалуу медиа агымчы жеңилирээк көрүнөт. Linphone биринчи версиясы 2001-жылы пайда болгон, ошондуктан учурда медиа стример бар жана дээрлик 20 жылдан бери өнүгүп жатат.

Медиа стримердин жүрөгүндө "Data flow" (маалымат агымы) деп аталган архитектура турат. Мындай архитектуранын мисалы төмөндөгү сүрөттө көрсөтүлгөн.

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)
  • Arts (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Файл ойноткуч (raw/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
  • Resizer
  • Башка чыпкалар
  • Жиптердин ортосунда маалымат блокторун алмашуу: 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

Керектүү көз карандылык топтомдору жана медиа агымдын китепканасынын өзү автоматтык түрдө жүктөлүп, орнотулат.

Жүктөлгөн көз карандылык деп топтомдорунун жалпы көлөмү болжол менен 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.

Сыноо колдонмосун түзүү жана иштетүү

Биз жаратабыз үй биздин окуу долбоорлорубуз үчүн папка, келгиле, аны чакыралы mstutorial:

$ 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 китепканасы көрсөткөн ката билдирүүлөрүн көрөбүз, ал үн картасын башкаруу үчүн колдонулат. Медиа стримерди иштеп чыгуучулар өздөрү бул нормалдуу көрүнүш деп эсептешет. Мындай учурда биз алар менен каалабай макул болобуз.

Эми баарыбыз медиа агым менен иштөөгө даярбыз. Биз медиа агымчы китепканасын, компиляция куралын орнотуп, сыноо тиркемесин колдонуп, куралдар конфигурацияланганын жана медиа агымчы ийгиликтүү инициализацияланганын текшердик.

Кийинки макала биз бир нече чыпкалардын чынжырында аудио сигналды иштеп чыгууну иштете турган тиркемени түзөбүз.

Source: www.habr.com