Materi artikel diambil dari saya
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.
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
Inti dari streamer media adalah arsitektur yang disebut "Aliran data" (aliran data). Contoh arsitektur seperti itu ditunjukkan pada gambar di bawah ini.
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
Sumber: www.habr.com