Məqalənin materialı məndən götürülmüşdür
Giriş
Bu məqalə Mediastreamer2 mühərrikindən istifadə edərək real vaxt rejimində medianın işlənməsi haqqında bir sıra məqalələrin başlanğıcıdır. Təqdimat Linux terminalında işləmək və C dilində proqramlaşdırma üzrə minimum bacarıqları əhatə edəcək.
Mediastreamer2 məşhur açıq mənbəli proqram voip telefon layihəsinin arxasında duran VoIP mühərrikidir.
Daha sonra mətndə rahatlıq üçün Mediastreamer2 sözünün əvəzinə onun rus dilində qeydindən istifadə edəcəyik: “media streamer”.
Yaradılma tarixi tam aydın deyil, lakin mənbə koduna görə o, əvvəllər kitabxanadan istifadə edirdi
Media axınının mərkəzində "Məlumat axını" (məlumat axını) adlı bir arxitektura dayanır. Belə bir memarlığın nümunəsi aşağıdakı şəkildə göstərilmişdir.
Bu arxitekturada verilənlərin emalı alqoritmi proqram kodu ilə deyil, istənilən ardıcıllıqla düzülə bilən funksiyaları birləşdirən sxem (qrafik) ilə müəyyən edilir. Bu funksiyalara filtrlər deyilir.
Bu arxitektura media emalı funksiyasını VoIP telefon RTP trafikinin emalı və ötürülməsi sxeminə qoşulmuş filtrlər dəsti şəklində həyata keçirməyə imkan verir.
Filtrləri ixtiyari sxemlərdə birləşdirmək imkanı, yeni filtrlərin sadə işlənməsi, media striminin müstəqil ayrıca kitabxana kimi həyata keçirilməsi onu digər layihələrdə istifadə etməyə imkan verir. Bundan əlavə, layihə VoIP sahəsində ola bilər, çünki özünüz tərəfindən hazırlanmış filtrləri əlavə etmək mümkündür.
Varsayılan olaraq təqdim edilən filtr kitabxanası kifayət qədər zəngindir və artıq qeyd edildiyi kimi, öz dizaynımızın filtrləri ilə genişləndirilə bilər. Ancaq əvvəlcə media yayımlayıcı ilə birlikdə gələn hazır filtrləri təsvir edək. Budur onların siyahısı:
Səs filtrləri
Audio tutma və oxutma
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Android yerli səsi (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Audio növbə xidməti (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Audio Vahid Xidməti (Mac OS X)
- İncəsənət (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Fayl pleyeri (raw/wav/pcap faylları) (Linux): MS_FILE_PLAYER
- Fayl pleyeri (raw/wav faylları) (Windows): MS_WINSND_READ
- Fayla yaz (wav faylları) (Linux): MS_FILE_REC
- Fayla yaz (wav faylları) (Windows): MS_WINSND_WRITE
- Mac Audio Unit (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 Səs (Windows)
Audio kodlaşdırma/şifrləmə
- G.711 qanunu: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 µ-qanun: 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
- Xətti PCM: MS_L16_ENC, MS_L16_DEC
- Sürət: MS_SPEEX_ENC, MS_SPEEX_DEC
Səs emalı
- Kanal çevrilməsi (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konfrans: MS_CONF
- DTMF Generator: MS_DTMF_GEN
- Echo ləğvi (sürətli): MS_SPEEX_EC
- Ekvalayzer: MS_EQUALIZER
- Mikser: MS_MIXER
- Paket İtki Kompensatoru (PLC): MS_GENERIC_PLC
- Yenidən nümunə götürən: MS_RESAMPLE
- Ton detektoru: MS_TONE_DETECTOR
- Səs səviyyəsinə nəzarət və siqnal səviyyəsinin ölçülməsi: MS_VOLUME
Video filtrləri
Video çəkmə və oxutma
- android ələ keçirmə
- android oxutma
- AV Foundation ələ keçirmə (iOS)
- AV Foundation oxutma (iOS)
- DirectShow Capture (Windows)
- DrawDib oxutma (Windows)
- Xarici oxutma - Videonun üst təbəqəyə göndərilməsi
- GLX oxutma (Linux): MS_GLXVIDEO
- Mire - Sintetik hərəkətli şəkil: MS_MIRE
- OpenGL oxutma (Mac OS X)
- OpenGL ES2 oxutma (Android)
- Quicktime Capture (Mac OS X)
- SDL oxutma: MS_SDL_OUT
- Statik şəkil çıxışı: MS_STATIC_IMAGE
- Linux (V4L) üçün video (Linux): MS_V4L
- Linux 2 (V4L2) üçün video çəkiliş (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow) çəkmə (Windows)
- Video4windows (DirectShow) çəkmə (Windows CE)
- Windows üçün video (vfw) çəkmə (Windows)
- XV oxutma (Linux)
Video kodlaşdırma/deşifrə
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Qar: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (yalnız dekoder): MS_H264_DEC
- Theora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Videonun işlənməsi
- jpeg snapshot
- Piksel formatı çeviricisi: MS_PIX_CONV
- Resizer
- Digər filtrlər
- Mövzular arasında məlumat bloklarının mübadiləsi: MS_ITC_SOURCE, MS_ITC_SINK
- Çox girişdən bir çıxışa məlumat bloklarının toplanması: MS_JOIN
- RTP qəbulu/ötürməsi: MS_RTP_SEND, MS_RTP_RECV
- Giriş məlumatlarının çoxlu çıxışlara kopyalanması: MS_TEE
- Son yüklənmə: MS_VOID_SINK
- Sükut Mənbəsi: MS_VOID_SOURCE
Plugins
Səs filtrləri
- AMR-NB kodlayıcı/dekoder
- G.729 kodlayıcı/dekoder
- iLBC kodlayıcı/dekoder
- SILK kodlayıcı/dekoder
Video filtrləri
- H.264 proqram kodlayıcısı
- H.264 V4L2 hardware sürətləndirilmiş kodlayıcı/dekoder
Süzgəcin qısa təsvirindən sonra növün adı göstərilir, bu filtrin yeni nümunəsi yaradılarkən istifadə olunur. Bundan sonra bu siyahıya müraciət edəcəyik.
Linux Ubuntu altında quraşdırma
İndi biz media streamer-i kompüterə quraşdıracağıq və onunla ilk tətbiqimizi quracağıq.
Mediastremer2-nin Ubuntu ilə işləyən kompüterdə və ya virtual maşında quraşdırılması heç bir xüsusi bacarıq tələb etmir. Burada və aşağıda "$" simvolu əmrlərin daxil edilməsi üçün qabıq sorğusunu ifadə edəcək. Bunlar. əgər siyahıda sətrin əvvəlində bu simvolu görürsünüzsə, bu, terminalda yerinə yetiriləcək əmrlərin göstərildiyi sətirdir.
Bu məqalədəki addımlar zamanı kompüterinizin İnternetə çıxışı olduğu güman edilir.
libmediastremer-dev paketinin quraşdırılması
Terminalı işə salın və əmri yazın:
$ sudo apt-get update
Dəyişikliklər etmək üçün sizdən parol tələb olunacaq, onu daxil edin və paket meneceri məlumat bazalarını yeniləyəcək. Bundan sonra qaçmaq lazımdır:
$ sudo apt-get install libmediastreamer-dev
Lazımi asılılıq paketləri və media yayımlayıcı kitabxanasının özü avtomatik yüklənəcək və quraşdırılacaq.
Yüklənmiş asılılıq deb paketlərinin ümumi ölçüsü təxminən 35 MB olacaq. Quraşdırılmış paket haqqında təfərrüatları komanda ilə tapmaq olar:
$ dpkg -s libmediastreamer-dev
Cavab nümunəsi:
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/
İnkişaf alətlərinin quraşdırılması
C kompilyatorunu və onu müşayiət edən alətləri quraşdırın:
$ sudo apt-get install gcc
Nəticəni tərtibçi versiyasını sorğulayaraq yoxlayırıq:
$ gcc --version
Cavab belə bir şey olmalıdır:
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.
Sınaq Tətbiqinin qurulması və icrası
Biz yaradırıq ev Dərslik layihələrimiz üçün qovluq, gəlin onu adlandıraq mstutorial:
$ mkdir ~/mstutorial
Sevimli mətn redaktorunuzdan istifadə edin və adlı C proqram faylı yaradın mstest.c aşağıdakı məzmunla:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
O, media yayımlayıcısını işə salır, salamı çap edir və çıxır.
Faylı yadda saxlayın və test proqramını əmrlə tərtib edin:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Qeyd edək ki, xətt
`pkg-config mediastreamer --libs --cflags`
Klaviaturada "Ё" hərfi ilə eyni yerdə yerləşən dırnaq işarələri içərisindədir.
Əgər faylda səhvlər yoxdursa, tərtib edildikdən sonra kataloqda bir fayl görünəcək mtest. Proqrama başlayırıq:
$ ./mstest
Nəticə belə olacaq:
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.
Bu siyahıda ALSA kitabxanasının göstərdiyi səhv mesajlarını görürük, o, səs kartını idarə etmək üçün istifadə olunur. Media striminin tərtibatçıları özləri bunun normal olduğuna inanırlar. Belə olan halda biz onlarla könülsüz razılaşırıq.
İndi hamımız media axını ilə işləməyə hazırıq. Biz media streamer kitabxanasını, kompilyasiya alətini quraşdırdıq və sınaq proqramından istifadə edərək, alətlərin konfiqurasiya edildiyini və media axınının uğurla işə salındığını təsdiq etdik.
Sonrakı
Mənbə: www.habr.com