Mediastreamer2 VoIP қозғалтқышын зерттеу. 1 бөлім

Мақала материалы менің сайтымнан алынды zen арнасы.

Кіріспе

Бұл мақала Mediastreamer2 қозғалтқышы арқылы нақты уақыттағы медиа өңдеу туралы мақалалар сериясының басы болып табылады. Презентация Linux терминалында жұмыс істеудің және Си тілінде бағдарламалаудың минималды дағдыларын қамтиды.

Mediastreamer2 - танымал ашық бастапқы бағдарламалық қамтамасыз ету voip телефон жобасының артында тұрған VoIP қозғалтқышы. Линфон. Linphone Mediastreamer2 жүйесінде дыбыс пен бейнеге қатысты барлық функцияларды жүзеге асырады. Қозғалтқыш мүмкіндіктерінің толық тізімін осы Mediastreamer бетінен көруге болады. Бастапқы код мына жерде: GitLab.

Әрі қарай мәтінде ыңғайлы болу үшін Mediastreamer2 сөзінің орнына оның орысша белгісін қолданамыз: «медиа стримері».

Оның құрылу тарихы толығымен анық емес, бірақ оның бастапқы кодына қарағанда, ол бұрын кітапхананы пайдаланған Глиб, бұл, қалай болғанда да, мүмкін алыс қарым-қатынасқа нұсқайды 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
  • Файл ойнатқышы (raw/wav/pcap файлдары) (Linux): MS_FILE_PLAYER
  • Файл ойнатқышы (raw/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 a-заңы: 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

Бейне сүзгілері

Бейне түсіру және ойнату

  • Android түсіру
  • Android ойнату
  • 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

Қажетті тәуелділік бумалары мен медиа ағынды кітапхананың өзі автоматты түрде жүктеледі және орнатылады.

Жүктеп алынған тәуелділік деп аталатын бумалардың жалпы өлшемі шамамен 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 кітапханасы көрсететін қате туралы хабарларды көреміз, ол дыбыс картасын басқару үшін пайдаланылады. Медиа стримерді жасаушылардың өздері бұл қалыпты жағдай деп санайды. Бұл жағдайда біз олармен құлықсыз келісеміз.

Енді бәріміз медиа ағынмен жұмыс істеуге дайынбыз. Біз медиа ағындық кітапханасын, құрастыру құралын орнаттық және сынақ қолданбасын пайдаланып, құралдар конфигурацияланғанын және медиа ағынының сәтті іске қосылатынын тексердік.

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

Ақпарат көзі: www.habr.com