Njelajah mesin Mediastreamer2 VoIP. Bagean 1

Materi artikel dijupuk saka sandi saluran zen.

Pambuka

Artikel iki minangka wiwitan saka seri artikel babagan pangolahan media wektu nyata nggunakake mesin Mediastreamer2. Presentasi kasebut bakal melu katrampilan minimal kanggo nggarap terminal Linux lan pemrograman ing basa C.

Mediastreamer2 minangka mesin VoIP ing mburi proyek telpon voip piranti lunak open-source sing populer. telpon. Ing Linphone Mediastreamer2 ngetrapake kabeh fungsi sing ana gandhengane karo swara lan video. Dhaptar rinci fitur mesin bisa dideleng ing kaca Mediastreamer iki. Kode sumber ing kene: GitLab.

Luwih ing teks, kanggo penak, tinimbang tembung Mediastreamer2 kita bakal nggunakake notasi Rusia: "media streamer".

Sajarah penciptaan ora sakabehe jelas, nanging miturut kode sumber, sadurunge nggunakake perpustakaan glib, kang, minangka, diwenehi ing sesambetan adoh bisa karo GStreamer. Dibandhingake karo streamer media sing katon luwih entheng. Versi pisanan Linphone muncul ing taun 2001, mula saiki streamer media wis ana lan berkembang meh 20 taun.

Ing jantung streamer media yaiku arsitektur sing diarani "Alur data" (aliran data). Conto arsitektur kasebut ditampilake ing gambar ing ngisor iki.

Njelajah mesin Mediastreamer2 VoIP. Bagean 1

Ing arsitektur iki, algoritma pangolahan data ora ditemtokake dening kode program, nanging kanthi skema (grafik) kanggo nyambungake fungsi sing bisa diatur kanthi urutan apa wae. Fungsi kasebut diarani saringan.

Arsitektur iki ndadekake iku bisa kanggo ngleksanakake fungsi pangolahan media ing wangun saka pesawat saka saringan disambungake menyang VoIP telpon RTP pangolahan lalu lintas lan skema transmisi.

Kemampuan kanggo nggabungake saringan menyang skema sing sewenang-wenang, pangembangan saringan anyar sing prasaja, implementasi streamer media minangka perpustakaan sing kapisah, ngidini bisa digunakake ing proyek liyane. Kajaba iku, proyek kasebut bisa uga ana ing bidang VoIP, amarga bisa nambah saringan sing digawe dhewe.

Pustaka panyaring sing diwenehake kanthi standar cukup sugih lan, kaya sing wis kasebut, bisa ditambah karo saringan saka desain kita dhewe. Nanging dhisik, ayo njlèntrèhaké saringan sing wis siap digawe karo streamer media. Punika dhaptaripun:

Filter swara

Jupuk lan puter maneh audio

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

Audio enkoding/dekoding

  • G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 Β΅-law: 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 Linear: MS_L16_ENC, MS_L16_DEC
  • Speex: MS_SPEEX_ENC, MS_SPEEX_DEC

Pangolahan swara

  • Konversi saluran (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Konferensi: MS_CONF
  • DTMF Generator: MS_DTMF_GEN
  • Pembatalan gema (speex): MS_SPEEX_EC
  • Ekualiser: MS_EQUALIZER
  • Pengaduk: MS_MIXER
  • Packet Loss Compensator (PLC): MS_GENERIC_PLC
  • Resampler: MS_RESAMPLE
  • Detektor nada: MS_TONE_DETECTOR
  • Kontrol volume lan pangukuran level sinyal: MS_VOLUME

Filter-filter video

Jupuk lan muter maneh video

  • tangkapan android
  • puter maneh android
  • AV Foundation capture (iOS)
  • Puter maneh AV Foundation (iOS)
  • DirectShow Capture (Windows)
  • Puter maneh DrawDib (Windows)
  • Puter maneh eksternal - Ngirim video menyang lapisan ndhuwur
  • Puter maneh GLX (Linux): MS_GLXVIDEO
  • Mire - Gambar obah sintetis: MS_MIRE
  • Puter maneh OpenGL (Mac OS X)
  • Puter maneh OpenGL ES2 (Android)
  • Quicktime Capture (Mac OS X)
  • Puter maneh SDL: MS_SDL_OUT
  • Output gambar statis: MS_STATIC_IMAGE
  • Video Kanggo Linux (V4L) dijupuk (Linux): MS_V4L
  • Video Kanggo Linux 2 (V4L2) dijupuk (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) njupuk (Windows)
  • Video4windows (DirectShow) njupuk (Windows CE)
  • Video For Windows (vfw) capture (Windows)
  • Puter maneh XV (Linux)

Video enkoding/dekoding

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

Pangolahan video

  • gambar jpeg
  • Konverter format piksel: MS_PIX_CONV
  • Resizer
  • Filter liyane
  • Ijol-ijolan pamblokiran data antarane utas: MS_ITC_SOURCE, MS_ITC_SINK
  • Nglumpukake blok data saka pirang-pirang input menyang siji output: MS_JOIN
  • RTP nampa/ngirim: MS_RTP_SEND, MS_RTP_RECV
  • Nyalin data input menyang sawetara output: MS_TEE
  • Mungkasi beban: MS_VOID_SINK
  • Sumber bisu: MS_VOID_SOURCE

Plugins

Filter swara

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

    Filter-filter video

  • Encoder piranti lunak H.264
  • H.264 V4L2 hardware accelerated encoder/decoder

Sawise katrangan singkat babagan panyaring, jeneng jinis ditampilake, sing digunakake nalika nggawe conto anyar saka filter iki. Ing ngisor iki, kita bakal ngrujuk menyang dhaptar iki.

Instalasi ing Linux Ubuntu

Saiki kita bakal nginstal streamer media ing komputer lan mbangun aplikasi pisanan kita karo.

Nginstal Mediastremer2 ing komputer utawa mesin virtual sing nganggo Ubuntu ora mbutuhake katrampilan khusus. Ing kene lan ing ngisor iki, simbol "$" bakal nuduhake pituduh shell kanggo ngetik perintah. Sing. yen ing listing sampeyan ndeleng simbol iki ing wiwitan baris, banjur iki baris kang printah ditampilake kanggo kaleksanan ing terminal.

Dianggep yen sajrone langkah ing artikel iki, komputer sampeyan duwe akses menyang Internet.

Nginstal paket libmediastremer-dev

Bukak terminal lan ketik printah:

$ sudo apt-get update

Sampeyan bakal dijaluk sandhi kanggo nggawe pangowahan, ketik lan manajer paket bakal nganyari database. Sawise iku, sampeyan kudu mbukak:

$ sudo apt-get install libmediastreamer-dev

Paket ketergantungan sing dibutuhake lan perpustakaan streamer media dhewe bakal diundhuh lan diinstal kanthi otomatis.

Ukuran total paket deb dependensi sing diundhuh kira-kira 35 MB. Rincian babagan paket sing diinstal bisa ditemokake kanthi printah:

$ dpkg -s libmediastreamer-dev

Tuladha wangsulan:

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/

Nginstal alat pangembangan

Instal kompiler C lan alat sing diiringi:

$ sudo apt-get install gcc

Kita mriksa asil kanthi takon versi kompiler:

$ gcc --version

Jawabane kudu kaya mangkene:

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.

Mbangun lan Mbukak Aplikasi Trial

Kita nggawe ing ngarep folder kanggo proyek tutorial kita, ayo diarani mstutorial:

$ mkdir ~/mstutorial

Gunakake editor teks favorit lan nggawe file program C disebut mstest.c kanthi isi ing ngisor iki:

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

Iki miwiti streamer media, nyithak salam, lan metu.

Simpen file lan ngumpulake aplikasi tes kanthi printah:

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

Elinga yen baris

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

terlampir ing tandha petik, kang dumunung ing keyboard ing panggonan sing padha karo huruf "Ё".

Yen file ora ngemot kasalahan, banjur sawise kompilasi file bakal katon ing direktori mstest. Kita miwiti program:

$ ./mstest

Asil bakal kaya iki:

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.

Ing listing iki, kita ndeleng pesen kesalahan sing ditampilake perpustakaan ALSA, digunakake kanggo ngontrol kertu swara. Pangembang streamer media dhewe percaya yen iki normal. Ing kasus iki, kita wegah setuju karo wong-wong mau.

Saiki kita wis siap nggarap streamer media. Kita wis nginstal perpustakaan streamer media, alat kompilasi, lan nggunakake aplikasi nyoba, diverifikasi manawa alat kasebut dikonfigurasi lan streamer media diwiwiti kanthi sukses.

Sabanjure artikel kita bakal nggawe aplikasi sing bakal ngumpul lan mbukak pangolahan sinyal audio ing chain sawetara saringan.

Source: www.habr.com