Menjelajahi mesin VoIP Mediastreamer2. Bagian 1

Materi artikel diambil dari saya saluran Zen.

pengenalan

Artikel ini adalah awal dari serangkaian artikel tentang pemrosesan media waktu nyata menggunakan mesin Mediastreamer2. Presentasi akan melibatkan keterampilan minimum bekerja di terminal Linux dan pemrograman dalam bahasa C.

Mediastreamer2 adalah mesin VoIP di belakang proyek telepon voip perangkat lunak sumber terbuka yang populer. telepon. Di Linphone Mediastreamer2 mengimplementasikan semua fungsi yang berhubungan dengan suara dan video. Daftar detail fitur engine dapat dilihat di halaman Mediastreamer ini. Kode sumber ada di sini: GitLab.

Lebih jauh dalam teks, untuk kenyamanan, alih-alih kata Mediastreamer2, kami akan menggunakan notasi Rusia: "streamer media".

Sejarah pembuatannya tidak sepenuhnya jelas, tetapi dilihat dari kode sumbernya, sebelumnya menggunakan perpustakaan Fasih, yang, seolah-olah, mengisyaratkan kemungkinan hubungan yang jauh dengan GStreamer. Dibandingkan dengan media streamer yang terlihat lebih ringan. Linphone versi pertama muncul pada tahun 2001, jadi saat ini media streamer sudah ada dan berkembang selama hampir 20 tahun.

Inti dari streamer media adalah arsitektur yang disebut "Aliran data" (aliran data). Contoh arsitektur seperti itu ditunjukkan pada gambar di bawah ini.

Menjelajahi mesin VoIP Mediastreamer2. Bagian 1

Dalam arsitektur ini, algoritme pemrosesan data ditentukan bukan oleh kode program, tetapi oleh skema (grafik) untuk menghubungkan fungsi yang dapat diatur dalam urutan apa pun. Fungsi-fungsi ini disebut filter.

Arsitektur ini memungkinkan untuk mengimplementasikan fungsi pemrosesan media dalam bentuk sekumpulan filter yang terhubung ke skema pemrosesan dan transmisi lalu lintas RTP telepon VoIP.

Kemampuan untuk menggabungkan filter ke dalam skema arbitrer, pengembangan sederhana dari filter baru, implementasi streamer media sebagai perpustakaan terpisah yang independen, memungkinkannya untuk digunakan dalam proyek lain. Selain itu, proyeknya bisa di bidang VoIP, karena dimungkinkan untuk menambahkan filter yang dibuat sendiri.

Pustaka filter yang disediakan secara default cukup kaya dan, seperti yang telah disebutkan, dapat diperluas dengan filter desain kami sendiri. Tapi pertama-tama, mari kita jelaskan filter siap pakai yang disertakan dengan streamer media. Inilah daftar mereka:

Filter suara

Pengambilan dan pemutaran audio

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Suara asli Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Layanan Antrean 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
  • Pemutar file (file mentah/wav/pcap) (Linux): MS_FILE_PLAYER
  • Pemutar file (file mentah/wav) (Windows): MS_WINSND_READ
  • Tulis ke file (file wav) (Linux): MS_FILE_REC
  • Tulis ke file (file wav) (Windows): MS_WINSND_WRITE
  • Unit Audio Mac (Mac OS X)
  • MME (jendela)
  • OSS (Linux): MS_OSS_WRITE, MS_OSS_READ
  • PortAudio (Mac OS X)
  • PulseAudio (Linux): MS_PULSE_WRITE, MS_PULSE_READ
  • Suara Windows (Windows)

Enkode/dekode audio

  • G.711 a-law: 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
  • Spesifikasi: MS_SPEEX_ENC, MS_SPEEX_DEC

Pemrosesan suara

  • Konversi saluran (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Konferensi: MS_CONF
  • Generator DTMF: MS_DTMF_GEN
  • Pembatalan gema (speex): MS_SPEEX_EC
  • Ekualiser: MS_EQUALIZER
  • Pengaduk: MS_MIXER
  • Kompensator Kehilangan Paket (PLC): MS_GENERIC_PLC
  • Resampler: MS_RESAMPLE
  • Detektor nada: MS_TONE_DETECTOR
  • Kontrol volume dan pengukuran level sinyal: MS_VOLUME

Filter video

Pengambilan dan pemutaran video

  • penangkapan android
  • pemutaran android
  • Pengambilan AV Foundation (iOS)
  • Pemutaran AV Foundation (iOS)
  • Tangkapan DirectShow (Windows)
  • Pemutaran DrawDib (Windows)
  • Pemutaran eksternal - Mengirim video ke lapisan atas
  • Pemutaran GLX (Linux): MS_GLXVIDEO
  • Mire - Gambar bergerak sintetis: MS_MIRE
  • Pemutaran OpenGL (Mac OS X)
  • Pemutaran OpenGL ES2 (Android)
  • Pengambilan Waktu Cepat (Mac OS X)
  • Pemutaran SDL: MS_SDL_OUT
  • Keluaran gambar statis: MS_STATIC_IMAGE
  • Pengambilan Video Untuk Linux (V4L) (Linux): MS_V4L
  • Pengambilan Video Untuk Linux 2 (V4L2) (Linux): MS_V4L2_CAPTURE
  • Pengambilan Video4windows (DirectShow) (Windows)
  • Pengambilan Video4windows (DirectShow) (Windows CE)
  • Pengambilan Video Untuk Windows (vfw) (Windows)
  • Pemutaran XV (Linux)

Penyandiaksaraan/dekode video

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

Pemrosesan video

  • cuplikan jpeg
  • Konverter format piksel: MS_PIX_CONV
  • Pengubah ukuran
  • Filter lainnya
  • Pertukaran blok data antar utas: MS_ITC_SOURCE, MS_ITC_SINK
  • Mengumpulkan blok data dari beberapa input ke satu output: MS_JOIN
  • Penerimaan/transmisi RTP: MS_RTP_SEND, MS_RTP_RECV
  • Menyalin data input ke beberapa output: MS_TEE
  • Beban yang dihentikan: MS_VOID_SINK
  • Sumber Diam: MS_VOID_SOURCE

Plugin

Filter suara

  • Pembuat enkode/dekoder AMR-NB
  • Pembuat enkode/dekoder G.729
  • encoder/dekoder iLBC
  • Pembuat enkode/dekoder SUTRA

    Filter video

  • Pembuat enkode perangkat lunak H.264
  • H.264 V4L2 hardware akselerasi encoder/decoder

Setelah deskripsi singkat tentang filter, nama jenis ditampilkan, yang digunakan saat membuat instance baru dari filter ini. Berikut ini, kami akan merujuk ke daftar ini.

Instalasi di bawah Linux Ubuntu

Sekarang kita akan menginstal media streamer di komputer dan membangun aplikasi pertama kita dengannya.

Menginstal Mediastremer2 di komputer atau mesin virtual yang menjalankan Ubuntu tidak memerlukan keahlian khusus. Di sini dan di bawah, simbol "$" akan menunjukkan prompt shell untuk memasukkan perintah. Itu. jika dalam daftar Anda melihat simbol ini di awal baris, maka ini adalah baris di mana perintah ditampilkan untuk dieksekusi di terminal.

Diasumsikan bahwa selama langkah-langkah dalam artikel ini, komputer Anda memiliki akses ke Internet.

Menginstal paket libmediastremer-dev

Luncurkan terminal dan ketik perintah:

$ sudo apt-get update

Anda akan dimintai kata sandi untuk melakukan perubahan, masukkan dan manajer paket akan memperbarui basis datanya. Setelah itu, Anda perlu menjalankan:

$ sudo apt-get install libmediastreamer-dev

Paket dependensi yang diperlukan dan pustaka streamer media itu sendiri akan diunduh dan diinstal secara otomatis.

Ukuran total paket deb ketergantungan yang diunduh kira-kira 35 MB. Detail tentang paket yang diinstal dapat ditemukan dengan perintah:

$ dpkg -s libmediastreamer-dev

Contoh 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/

Menginstal alat pengembangan

Instal kompiler C dan alat yang menyertainya:

$ sudo apt-get install gcc

Kami memeriksa hasilnya dengan menanyakan versi kompiler:

$ gcc --version

Jawabannya harus seperti ini:

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.

Membangun dan Menjalankan Aplikasi Uji Coba

Kami membuat di rumah folder untuk proyek tutorial kami, sebut saja mtutorial:

$ mkdir ~/mstutorial

Gunakan editor teks favorit Anda dan buat file program C bernama mstest.c dengan konten berikut:

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

Itu menginisialisasi streamer media, mencetak salam, dan keluar.

Simpan file dan kompilasi aplikasi pengujian dengan perintah:

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

Perhatikan bahwa garis

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

diapit tanda kutip, yang terletak di keyboard di tempat yang sama dengan huruf "Ё".

Jika file tidak mengandung kesalahan, maka setelah kompilasi file akan muncul di direktori tes terbaik. Kami memulai program:

$ ./mstest

Hasilnya akan seperti ini:

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.

Dalam daftar ini, kami melihat pesan kesalahan yang ditampilkan perpustakaan ALSA, digunakan untuk mengontrol kartu suara. Pengembang streamer media sendiri percaya bahwa ini normal. Dalam hal ini, kami dengan enggan setuju dengan mereka.

Sekarang kita siap untuk bekerja dengan media streamer. Kami telah menginstal pustaka streamer media, alat kompilasi, dan menggunakan aplikasi uji coba, memverifikasi bahwa alat tersebut telah dikonfigurasi dan streamer media berhasil diinisialisasi.

Berikutnya Artikel kami akan membuat aplikasi yang akan merakit dan menjalankan pemrosesan sinyal audio dalam rangkaian beberapa filter.

Sumber: www.habr.com