Mediastreamer2 VoIP dvigatelini o'rganish. 1-qism

Maqolaning materiali mendan olingan zen kanali.

kirish

Ushbu maqola Mediastreamer2 dvigatelidan foydalangan holda real vaqtda mediani qayta ishlashga oid maqolalar seriyasining boshlanishidir. Taqdimot Linux terminalida ishlash va C tilida dasturlash bo'yicha minimal ko'nikmalarni o'z ichiga oladi.

Mediastreamer2 mashhur ochiq kodli dasturiy ta'minot voip telefon loyihasi ortidagi VoIP dvigatelidir. Linfon. Linphone Mediastreamer2-da ovoz va video bilan bog'liq barcha funktsiyalarni amalga oshiradi. Dvigatel xususiyatlarining batafsil ro'yxatini ushbu Mediastreamer sahifasida ko'rish mumkin. Manba kodi bu yerda: GitLab.

Keyinchalik matnda, qulaylik uchun, Mediastreamer2 so'zi o'rniga biz uning ruscha yozuvidan foydalanamiz: "media streamer".

Uning yaratilish tarixi to'liq aniq emas, lekin uning manba kodiga ko'ra, u ilgari kutubxonadan foydalangan glib, go'yo u bilan mumkin bo'lgan uzoq munosabatlarga ishora qiladi GStreamer. Bu bilan solishtirganda, media strimeri engilroq ko'rinadi. Linphone-ning birinchi versiyasi 2001 yilda paydo bo'lgan, shuning uchun hozirgi vaqtda media-strimer deyarli 20 yil davomida mavjud va rivojlanmoqda.

Media-strimerning markazida "Ma'lumotlar oqimi" (ma'lumotlar oqimi) deb nomlangan arxitektura mavjud. Bunday arxitekturaning namunasi quyidagi rasmda ko'rsatilgan.

Mediastreamer2 VoIP dvigatelini o'rganish. 1-qism

Ushbu arxitekturada ma'lumotlarni qayta ishlash algoritmi dastur kodi bilan emas, balki istalgan tartibda joylashishi mumkin bo'lgan funktsiyalarni ulash sxemasi (grafigi) bilan belgilanadi. Ushbu funktsiyalar filtrlar deb ataladi.

Ushbu arxitektura ommaviy axborot vositalarini qayta ishlash funksiyasini VoIP telefonining RTP trafikni qayta ishlash va uzatish sxemasiga ulangan filtrlar to'plami shaklida amalga oshirish imkonini beradi.

Filtrlarni o'zboshimchalik bilan sxemalarga birlashtirish qobiliyati, yangi filtrlarni oddiy ishlab chiqish, media-strimerni mustaqil alohida kutubxona sifatida amalga oshirish uni boshqa loyihalarda qo'llash imkonini beradi. Bundan tashqari, loyiha VoIP sohasida bo'lishi mumkin, chunki siz o'zingiz yaratgan filtrlarni qo'shishingiz mumkin.

Sukut bo'yicha taqdim etilgan filtr kutubxonasi juda boy va yuqorida aytib o'tilganidek, o'z dizaynimizdagi filtrlar bilan kengaytirilishi mumkin. Lekin, avvalo, media-strimer bilan birga keladigan tayyor filtrlarni tasvirlab beraylik. Mana ularning ro'yxati:

Ovoz filtrlari

Audio yozib olish va tinglash

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Android mahalliy ovozi (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Audio navbat xizmati (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Audio birlik xizmati (Mac OS X)
  • Arts (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Fayl pleyeri (raw/wav/pcap fayllari) (Linux): MS_FILE_PLAYER
  • Fayl pleyeri (raw/wav fayllar) (Windows): MS_WINSND_READ
  • Faylga yozish (wav fayllari) (Linux): MS_FILE_REC
  • Faylga yozish (wav fayllari) (Windows): MS_WINSND_WRITE
  • Mac audio birligi (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 ovozi (Windows)

Ovozni kodlash/dekodlash

  • G.711 qonuni: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 Β΅-qonun: 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
  • Chiziqli PCM: MS_L16_ENC, MS_L16_DEC
  • Tezlik: MS_SPEEX_ENC, MS_SPEEX_DEC

Ovozni qayta ishlash

  • Kanal konvertatsiyasi (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Konferentsiya: MS_CONF
  • DTMF generatori: MS_DTMF_GEN
  • Echo bekor qilish (speex): MS_SPEEX_EC
  • Ekvalayzer: MS_EQUALIZER
  • Mikser: MS_MIXER
  • Paket yo'qotish kompensatori (PLC): MS_GENERIC_PLC
  • Qayta namuna: MS_RESAMPLE
  • Ohang detektori: MS_TONE_DETECTOR
  • Ovoz balandligini boshqarish va signal darajasini o'lchash: MS_VOLUME

Video filtrlar

Videoga olish va ijro etish

  • android suratga olish
  • android ijrosi
  • AV Foundation capture (iOS)
  • AV Foundation ijrosi (iOS)
  • DirectShow Capture (Windows)
  • DrawDib ijrosi (Windows)
  • Tashqi ijro - videoni yuqori qatlamga yuborish
  • GLX ijrosi (Linux): MS_GLXVIDEO
  • Mire - Sintetik harakatlanuvchi rasm: MS_MIRE
  • OpenGL ijrosi (Mac OS X)
  • OpenGL ES2 ijrosi (Android)
  • Quicktime Capture (Mac OS X)
  • SDL ijrosi: MS_SDL_OUT
  • Statik tasvir chiqishi: MS_STATIC_IMAGE
  • Linux uchun video (V4L) suratga olish (Linux): MS_V4L
  • Linux 2 (V4L2) uchun video suratga olish (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) suratga olish (Windows)
  • Video4windows (DirectShow) suratga olish (Windows CE)
  • Windows uchun video (vfw) suratga olish (Windows)
  • XV tinglash (Linux)

Videoni kodlash/dekodlash

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Qor: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (faqat dekoder): MS_H264_DEC
  • Teora: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Videoni qayta ishlash

  • jpeg surati
  • Piksel formatini o'zgartiruvchi: MS_PIX_CONV
  • Rezzer
  • Boshqa filtrlar
  • Ma'lumotlar bloklarini oqimlar o'rtasida almashish: MS_ITC_SOURCE, MS_ITC_SINK
  • Bir nechta kirishdan bitta chiqishga ma'lumotlar bloklarini yig'ish: MS_JOIN
  • RTP qabul qilish/uzatish: MS_RTP_SEND, MS_RTP_RECV
  • Kirish ma'lumotlarini bir nechta chiqishlarga nusxalash: MS_TEE
  • Tugatilgan yuk: MS_VOID_SINK
  • Sukunat manbai: MS_VOID_SOURCE

Plaginlar

Ovoz filtrlari

  • AMR-NB kodlovchi/dekoder
  • G.729 kodlovchi/dekoder
  • iLBC kodlovchi/dekoder
  • SILK kodlovchi/dekoder

    Video filtrlar

  • H.264 dasturiy ta'minot enkoderi
  • H.264 V4L2 apparat tezlashtirilgan kodlovchi/dekoder

Filtrning qisqacha tavsifidan so'ng, ushbu filtrning yangi nusxasini yaratishda foydalaniladigan turning nomi ko'rsatiladi. Quyida biz ushbu ro'yxatga murojaat qilamiz.

Linux Ubuntu ostida o'rnatish

Endi biz media strimerni kompyuterga o'rnatamiz va u bilan birinchi dasturimizni yaratamiz.

Mediastremer2-ni Ubuntu bilan ishlaydigan kompyuter yoki virtual mashinaga o'rnatish hech qanday maxsus ko'nikmalarni talab qilmaydi. Bu erda va pastda "$" belgisi buyruqlarni kiritish uchun qobiq so'rovini bildiradi. Bular. agar ro'yxatda siz ushbu belgini satr boshida ko'rsangiz, u holda terminalda buyruqlar bajarilishi ko'rsatilgan qatordir.

Ushbu maqoladagi qadamlar davomida sizning kompyuteringiz Internetga kirish imkoniga ega deb taxmin qilinadi.

libmediastremer-dev paketini o'rnatish

Terminalni ishga tushiring va buyruqni kiriting:

$ sudo apt-get update

O'zgartirishlar kiritish uchun sizdan parol so'raladi, uni kiriting va paket menejeri ma'lumotlar bazasini yangilaydi. Shundan so'ng siz yugurishingiz kerak:

$ sudo apt-get install libmediastreamer-dev

Zarur bo'lgan bog'liqlik paketlari va media-strimer kutubxonasining o'zi avtomatik ravishda yuklab olinadi va o'rnatiladi.

Yuklab olingan bog'liqlik deb paketlarining umumiy hajmi taxminan 35 MB bo'ladi. O'rnatilgan paket haqida ma'lumotni buyruq bilan topish mumkin:

$ dpkg -s libmediastreamer-dev

Javob misoli:

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/

Rivojlanish vositalarini o'rnatish

C kompilyatorini va unga qo'shimcha vositalarni o'rnating:

$ sudo apt-get install gcc

Natijani kompilyator versiyasini so'rash orqali tekshiramiz:

$ gcc --version

Javob shunday bo'lishi kerak:

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.

Sinov ilovasini yaratish va ishga tushirish

Biz yaratamiz uy o'quv loyihalarimiz uchun papka, keling, uni chaqiraylik mtutorial:

$ mkdir ~/mstutorial

Sevimli matn muharriridan foydalaning va C dasturi faylini yarating mstest.c quyidagi tarkib bilan:

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

U media strimerni ishga tushiradi, salomlashishni chop etadi va chiqadi.

Faylni saqlang va sinov ilovasini buyruq bilan kompilyatsiya qiling:

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

E'tibor bering, chiziq

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

qo'shtirnoq ichiga olinadi, ular klaviaturada "Yo" harfi bilan bir joyda joylashgan.

Agar faylda xatolar bo'lmasa, kompilyatsiya qilingandan so'ng katalogda fayl paydo bo'ladi mstest. Biz dasturni boshlaymiz:

$ ./mstest

Natija shunday bo'ladi:

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.

Ushbu ro'yxatda biz ALSA kutubxonasi ko'rsatadigan xato xabarlarini ko'ramiz, u ovoz kartasini boshqarish uchun ishlatiladi. Media-strimerni ishlab chiquvchilarning o'zlari buni normal holat deb hisoblashadi. Bu holatda biz ular bilan ixtiyoriy ravishda rozi bo'lamiz.

Endi biz barchamiz media strimer bilan ishlashga tayyormiz. Biz media-strimer kutubxonasini, kompilyatsiya vositasini o'rnatdik va sinov ilovasidan foydalanib, asboblar sozlanganligini va media strimeri muvaffaqiyatli ishga tushirilganligini tasdiqladik.

Keyingisi maqola biz bir nechta filtrlar zanjirida audio signalni yig'adigan va qayta ishlaydigan dasturni yaratamiz.

Manba: www.habr.com