Ngajalajah mesin Mediastreamer2 VoIP. Bagian 1

Materi artikel dicokot ti abdi saluran zen.

perkenalan

Artikel ieu mangrupa awal runtuyan artikel ngeunaan ngolah média real-time ngagunakeun mesin Mediastreamer2. Presentasi bakal ngalibetkeun kaahlian minimum damel di terminal Linux sareng program dina basa C.

Mediastreamer2 nyaéta mesin VoIP tukangeun proyék telepon voip software open-source populér. telepon. Dina Linphone Mediastreamer2 implements sagala fungsi nu patali jeung sora jeung video. Daptar lengkep fitur mesin tiasa ditingali dina halaman Mediastreamer ieu. Kodeu sumberna di dieu: GitLab.

Salajengna dina téks, pikeun genah, tinimbang kecap Mediastreamer2 kami bakal ngagunakeun notasi Rusia na: "media streamer".

Sajarah penciptaan na teu sagemblengna jelas, tapi ditilik ku kode sumber na, éta saméméhna dipaké perpustakaan glib, nu, sakumaha anu kasebut, petunjuk dina mungkin hubungan jauh jeung GStreamer. Dibandingkeun sareng anu streamer média katingalina langkung hampang. Versi munggaran Linphone muncul dina taun 2001, janten ayeuna streamer média aya sareng mekar ampir 20 taun.

Dina manah streamer média mangrupa arsitéktur disebut "Data flow" (aliran data). Conto arsitektur sapertos dipidangkeun dina gambar di handap ieu.

Ngajalajah mesin Mediastreamer2 VoIP. Bagian 1

Dina arsitéktur ieu, algoritma ngolah data henteu ditangtukeun ku kode program, tapi ku skéma (grafik) pikeun nyambungkeun fungsi anu tiasa diatur dina urutan naon waé. Fungsi ieu disebut saringan.

Arsitéktur ieu ngamungkinkeun pikeun nerapkeun pungsi ngolah média dina bentuk sakumpulan saringan disambungkeun ka telepon VoIP RTP processing lalulintas sarta skéma transmisi.

Kamampuhan pikeun ngagabungkeun saringan kana skéma wenang, pamekaran saringan énggal, palaksanaan streamer média salaku perpustakaan anu mandiri, ngamungkinkeun éta dianggo dina proyék-proyék sanés. Leuwih ti éta, proyék bisa jadi dina widang VoIP, sabab kasebut nyaéta dimungkinkeun pikeun nambahkeun saringan dijieun ku sorangan.

Perpustakaan filter anu disayogikeun sacara standar cukup beunghar sareng, sakumaha anu parantos disebatkeun, tiasa diperpanjang ku saringan desain urang sorangan. Tapi ke heula, hayu urang ngajelaskeun saringan siap-dijieun anu hadir sareng streamer média. Ieu daptar aranjeunna:

Saringan sora

Nangkep audio sareng playback

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Sora asli Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Layanan Antrian Audio (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Service Unit Audio (Mac OS X)
  • Seni (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Pamuter file (file atah/wav/pcap) (Linux): MS_FILE_PLAYER
  • Pamuter file (file atah / wav) (Windows): MS_WINSND_READ
  • Tulis kana file (file wav) (Linux): MS_FILE_REC
  • Tulis kana file (file wav) (Windows): MS_WINSND_WRITE
  • Unit Audio 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 Sora (Windows)

Encoding / decoding audio

  • G.711 a-hukum: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-hukum: 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 linier: MS_L16_ENC, MS_L16_DEC
  • Speex: MS_SPEEX_ENC, MS_SPEEX_DEC

Ngolah sora

  • Konversi saluran (mono-> stereo, stereo-> mono): MS_CHANNEL_ADAPTER
  • Konférénsi: MS_CONF
  • DTMF generator: MS_DTMF_GEN
  • Echo pembatalan (speex): MS_SPEEX_EC
  • Ékualiser: MS_EQUALIZER
  • Adun: MS_MIXER
  • Packet Loss Compensator (PLC): MS_GENERIC_PLC
  • Resampler: MS_RESAMPLE
  • Detektor nada: MS_TONE_DETECTOR
  • Kontrol volume sareng pangukuran tingkat sinyal: MS_VOLUME

saringan video

Newak video sareng playback

  • newak android
  • playback android
  • AV Foundation capture (ios)
  • Puteran AV Foundation (ios)
  • DirectShow Capture (Windows)
  • Playback DrawDib (Windows)
  • Playback éksternal - Ngirim video ka lapisan luhur
  • GLX playback (Linux): MS_GLXVIDEO
  • Mire - Gambar gerak sintétik: MS_MIRE
  • Puteran OpenGL (Mac OS X)
  • Playback OpenGL ES2 (Android)
  • Quicktime Capture (Mac OS X)
  • playback SDL: MS_SDL_OUT
  • Kaluaran gambar statik: MS_STATIC_IMAGE
  • Video Pikeun Linux Ubuntu (V4L) newak (Linux): MS_V4L
  • Video Pikeun Linux 2 (V4L2) newak (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) ngarebut (Windows)
  • Video4windows (DirectShow) ngarebut (Windows CE)
  • Video Pikeun Windows (vfw) néwak (Windows)
  • Puteran XV (Linux)

Video encoding/decoding

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Salju: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (decoder wungkul): MS_H264_DEC
  • Téori: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Ngolah pidéo

  • jepretan jpeg
  • Konverter format piksel: MS_PIX_CONV
  • Resizer
  • saringan séjén
  • Bursa blok data antara threads: MS_ITC_SOURCE, MS_ITC_SINK
  • Ngumpulkeun blok data tina sababaraha input ka kaluaran tunggal: MS_JOIN
  • RTP nampi / ngirimkeun: MS_RTP_SEND, MS_RTP_RECV
  • Niron data input ka sababaraha kaluaran: MS_TEE
  • beban terminated: MS_VOID_SINK
  • Sumber tiiseun: MS_VOID_SOURCE

Plugins

Saringan sora

  • AMR-NB encoder / decoder
  • G.729 encoder / decoder
  • encoder / decoder iLBC
  • Encoder / decoder sutra

    saringan video

  • H.264 software encoder
  • H.264 V4L2 hardware gancangan encoder / decoder

Saatos katerangan pondok tina saringan, nami jinisna ditampilkeun, anu dianggo nalika nyiptakeun conto anyar tina saringan ieu. Dina naon di handap ieu, urang bakal ngarujuk kana daptar ieu.

Instalasi dina Linux Ubuntu

Ayeuna kami bakal masang streamer média dina komputer sareng ngawangun aplikasi munggaran kami sareng éta.

Masang Mediastremer2 dina komputer atanapi mesin virtual anu ngajalankeun Ubuntu henteu peryogi kaahlian khusus. Di dieu sareng di handap, simbol "$" bakal nunjukkeun paréntah cangkang pikeun ngasupkeun paréntah. Jelema. upami dina daptar anjeun ningali simbol ieu dina awal jalur, maka ieu mangrupikeun garis dimana paréntahna ditingalikeun dieksekusi di terminal.

Hal ieu dianggap yén salila léngkah dina artikel ieu, komputer anjeun boga aksés ka Internet.

Masang pakét libmediastremer-dev

Jalankeun terminal sareng ketik paréntah:

$ sudo apt-get update

Anjeun bakal dipénta sandi pikeun nyieun parobahan, asupkeun eta jeung manajer pakét bakal ngamutahirkeun database na. Saatos éta, anjeun kedah ngajalankeun:

$ sudo apt-get install libmediastreamer-dev

Bungkusan kagumantungan anu diperyogikeun sareng perpustakaan streamer média sorangan bakal otomatis diunduh sareng dipasang.

Ukuran total paket deb dependensi anu diunduh bakal sakitar 35 MB. Rincian ngeunaan pakét anu dipasang tiasa dipendakan nganggo paréntah:

$ dpkg -s libmediastreamer-dev

conto jawaban:

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/

Masang alat pangwangunan

Pasang kompiler C sareng alat anu dibarengan:

$ sudo apt-get install gcc

Urang pariksa hasilna ku querying versi compiler:

$ gcc --version

Jawabanana kedah sapertos kieu:

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.

Ngawangun sareng Ngajalankeun Aplikasi Uji Coba

Urang nyieun di imah folder pikeun proyék tutorial urang, hayu urang sebut wae mstutorial:

$ mkdir ~/mstutorial

Anggo pangropéa téksu karesep anjeun sareng jieun file program C anu disebut mstest.c kalawan eusi handap:

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

Éta ngamimitian streamer média, nyitak salam, sareng kaluar.

Simpen file sareng kompilkeun aplikasi tés nganggo paréntah:

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

Catet yén garis

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

enclosed dina tanda petik, nu lokasina dina keyboard di tempat anu sarua salaku hurup "Ё".

Upami file henteu aya kasalahan, maka saatos kompilasi file bakal muncul dina diréktori mstest. Urang ngamimitian program:

$ ./mstest

Hasilna bakal sapertos kieu:

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.

Dina daptar ieu, urang ningali pesen kasalahan anu dipidangkeun perpustakaan ALSA, dianggo pikeun ngontrol kartu sora. Pamekar média streamer sorangan percaya yén ieu normal. Dina hal ieu, urang horéam satuju sareng maranehna.

Ayeuna urang sadayana siap damel sareng streamer média. Kami parantos masang perpustakaan streamer média, alat kompilasi, sareng nganggo aplikasi uji coba, diverifikasi yén alat-alat éta dikonpigurasi sareng streamer média suksés ngamimitian.

Teras artikel urang bakal nyieun hiji aplikasi nu bakal ngumpul jeung ngajalankeun ngolah sinyal audio dina ranté sababaraha saringan.

sumber: www.habr.com