Материјал чланка је преузет са мог .
Увод
Овај чланак је први у серији о обради медија у реалном времену помоћу Mediastreamer2 мотора. Овај туторијал претпоставља минимално познавање терминала. Linux и програмирање у C језику.
Медиастреамер2 је ВоИП мотор иза популарног софтвера отвореног кода за воип телефонски пројекат. . У Линпхоне Медиастреамер2 имплементира све функције везане за звук и видео. Детаљну листу карактеристика мотора можете видети на овој страници Медиастреамер-а. Изворни код је овде: .
Даље у тексту, ради погодности, уместо речи Медиастреамер2 користићемо његову руску нотацију: „медиа стреамер“.
Историја његовог настанка није сасвим јасна, али судећи по изворном коду, претходно је користио библиотеку , што, такорећи, наговештава могућу далеку везу са . У поређењу са којим медијски стример изгледа лакше. Прва верзија Линпхоне-а појавила се 2001. године, тако да тренутно медијски стример постоји и развија се скоро 20 година.
У срцу медијског стримера је архитектура под називом „Проток података“ (проток података). Пример такве архитектуре приказан је на слици испод.

У овој архитектури, алгоритам обраде података није специфициран програмским кодом, већ шемом (графом) за повезивање функција које се могу распоредити било којим редоследом. Ове функције се називају филтери.
Ова архитектура омогућава имплементацију функционалности обраде медија у облику скупа филтера повезаних на шему обраде и преноса РТП саобраћаја ВоИП телефона.
Могућност комбиновања филтера у произвољне шеме, једноставан развој нових филтера, имплементација медијског стримера као независне засебне библиотеке, омогућавају да се користи у другим пројектима. Штавише, пројекат може бити у области ВоИП-а, јер је могуће додати филтере које сами направите.
Библиотека филтера која се подразумевано испоручује је прилично богата и, као што је већ поменуто, може се проширити филтерима нашег сопственог дизајна. Али прво, хајде да опишемо готове филтере који долазе са медијским стримером. Ево њихове листе:
Звучни филтери
Снимање и репродукција звука
- Алса (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Android изворни звук (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Услуга аудио чекања (Мац ОС Кс): МС_АК_ВРИТЕ, МС_АК_РЕАД
- Услуга аудио јединице (Мац ОС Кс)
- Уметност (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- ДиректСаунд (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Плејер датотека (raw/wav/pcap датотеке)Linux): MS_FILE_PLAYER
- Плејер датотека (сирове/вав датотеке)Windows): MS_WINSND_READ
- Снимање у датотеку (wav датотеке) (Linux): MS_FILE_REC
- Снимање у датотеку (wav датотеке) (Windows): MS_WINSND_WRITE
- Мац аудио јединица (Мац ОС Кс)
- ММЕ (Windows)
- ОСС (Linux): MS_OSS_ПИСАЊЕ, MS_OSS_ЧИТАЊЕ
- ПортАудио (Мац ОС Кс)
- ПулсАудио (Linux): MS_PULSE_WRITE, MS_PULSE_READ
- Windows Звук (Windows)
Аудио кодирање/декодирање
- Г.711 а-закон: МС_АЛАВ_ДЕЦ, МС_АЛАВ_ЕНЦ
- Г.711 µ-закон: МС_УЛАВ_ДЕЦ, МС_УЛАВ_ЕНЦ
- Г.722: МС_Г722_ДЕЦ, МС_Г722_ЕНЦ
- G.726: MS_G726_32_ENC, MS_G726_24_ENC, MS_G726_16_ENC
- ГСМ: МС_ГСМ_ДЕЦ, МС_ГСМ_ЕНЦ
- Линеарни ПЦМ: МС_Л16_ЕНЦ, МС_Л16_ДЕЦ
- Брзина: МС_СПЕЕКС_ЕНЦ, МС_СПЕЕКС_ДЕЦ
Обрада звука
- Конверзија канала (моно->стерео, стерео->моно): МС_ЦХАННЕЛ_АДАПТЕР
- Конференција: МС_ЦОНФ
- ДТМФ генератор: МС_ДТМФ_ГЕН
- Поништавање еха (спеек): МС_СПЕЕКС_ЕЦ
- Еквилајзер: МС_ЕКУАЛИЗЕР
- Миксер: МС_МИКСЕР
- Компензатор губитка пакета (ПЛЦ): МС_ГЕНЕРИЦ_ПЛЦ
- Ресамплер: МС_РЕСАМПЛЕ
- Детектор тонова: МС_ТОНЕ_ДЕТЕЦТОР
- Контрола јачине звука и мерење нивоа сигнала: МС_ВОЛУМЕ
Видео филтери
Видео снимање и репродукција
- Android цаптуре
- Android репродукција
- АВ Фоундатион цаптуре (иОС)
- АВ Фоундатион репродукција (иОС)
- DirectShow снимање (Windows)
- Репродукција DrawDib-а (Windows)
- Екстерна репродукција - Слање видео записа на горњи слој
- GLX репродукција (Linux): MS_GLXVIDEO
- Мире - Синтетичка покретна слика: МС_МИРЕ
- ОпенГЛ репродукција (Мац ОС Кс)
- Репродукција OpenGL ES2 (Android)
- Куицктиме Цаптуре (Мац ОС Кс)
- СДЛ репродукција: МС_СДЛ_ОУТ
- Излаз статичне слике: МС_СТАТИЦ_ИМАГЕ
- Видео за Linux (V4L) снимање (Linux): MS_V4L
- Видео за Linux 2 (V4L2) заробљавање (Linux): MS_V4L2_CAPTURE
- Снимање помоћу Video4windows (DirectShow)Windows)
- Снимање помоћу Video4windows (DirectShow)Windows ЦЕ)
- Видео за Windows (vfw) снимање (Windows)
- XV репродукција (Linux)
Видео кодирање/декодирање
- Х.263, Х.263-1998, МП4В-ЕС, ЈПЕГ, МЈПЕГ, снег: МС_МЈПЕГ_ДЕЦ, МС_Х263_ЕНЦ, МС_Х263_ДЕЦ
- Х.264 (само декодер): МС_Х264_ДЕЦ
- Теора: МС_ТХЕОРА_ЕНЦ, МС_ТХЕОРА_ДЕЦ
- ВП8: МС_ВП8_ЕНЦ, МС_ВП8_ДЕЦ
Обрада видео записа
- јпег снимак
- Конвертор формата пиксела: МС_ПИКС_ЦОНВ
- Ресизер
- Остали филтери
- Размена блокова података између нити: МС_ИТЦ_СОУРЦЕ, МС_ИТЦ_СИНК
- Прикупљање блокова података са више улаза на један излаз: МС_ЈОИН
- РТП пријем/пренос: МС_РТП_СЕНД, МС_РТП_РЕЦВ
- Копирање улазних података на више излаза: МС_ТЕЕ
- Завршено оптерећење: МС_ВОИД_СИНК
- Извор тишине: МС_ВОИД_СОУРЦЕ
Плугинс
Звучни филтери
- АМР-НБ кодер/декодер
- Г.729 кодер/декодер
- иЛБЦ кодер/декодер
- СИЛК енкодер/декодер
Видео филтери
- Х.264 софтверски енкодер
- Х.264 В4Л2 хардверски убрзани кодер/декодер
Након кратког описа филтера, приказује се назив типа који се користи приликом креирања нове инстанце овог филтера. У наставку ћемо се осврнути на ову листу.
Инсталација испод Linux Ubuntu
Сада ћемо инсталирати медиа стреамер на рачунар и са њим направити нашу прву апликацију.
Инсталирање Mediastremer2 на рачунар или виртуелну машину која ради Ubuntu Не захтева никакве посебне вештине. Од сада па надаље, симбол „$“ ће означавати командни ред за унос команди. Дакле, ако видите овај симбол на почетку реда у листингу, то значи да тај ред садржи команде које треба извршити у терминалу.
Претпоставља се да током корака у овом чланку ваш рачунар има приступ Интернету.
Инсталирање пакета либмедиастремер-дев
Покрените терминал и откуцајте команду:
$ 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 <ubuntu-devel-discuss@lists.ubuntu.com>
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 <pkg-voip-maintainers@lists.alioth.debian.org>
Homepage: http://www.linphone.org/
Инсталирање развојних алата
Инсталирајте Ц компајлер и пратеће алате:
$ 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Користите свој омиљени уређивач текста и креирајте Ц програмску датотеку под називом мстест.ц са следећим садржајем:
#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Резултат ће бити овакав:
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.У овој листи видимо поруке о грешци које АЛСА библиотека приказује, користи се за контролу звучне картице. Сами програмери медијског стримера сматрају да је то нормално. У овом случају, невољно се слажемо са њима.
Сада смо спремни да радимо са медијским стримером. Инсталирали смо библиотеку стреамера медија, алатку за компилацију и помоћу пробне апликације потврдили да су алати конфигурисани и да ли се медијски стример успешно иницијализује.
Следећи направићемо апликацију која ће саставити и покренути обраду аудио сигнала у ланцу од неколико филтера.
Извор: ввв.хабр.цом
