Materiali i artikullit është marrë nga ime
Paraqitje
Ky artikull është fillimi i një serie artikujsh rreth përpunimit të mediave në kohë reale duke përdorur motorin Mediastreamer2. Prezantimi do të përfshijë aftësitë minimale të punës në terminalin Linux dhe programimin në gjuhën C.
Mediastreamer2 është motori VoIP që qëndron pas projektit popullor të softuerit me burim të hapur Voip telefonit.
Më tej në tekst, për lehtësi, në vend të fjalës Mediastreamer2 do të përdorim shënimin e saj rus: "transmetues media".
Historia e krijimit të saj nuk është plotësisht e qartë, por duke gjykuar nga kodi i saj burimor, ajo përdori më parë bibliotekën
Në zemër të transmetuesit të medias është një arkitekturë e quajtur "Rrjedha e të dhënave" (rrjedha e të dhënave). Një shembull i një arkitekture të tillë është paraqitur në figurën më poshtë.
Në këtë arkitekturë, algoritmi i përpunimit të të dhënave nuk specifikohet nga një kod programi, por nga një skemë (grafiku) për lidhjen e funksioneve që mund të organizohen në çdo mënyrë. Këto funksione quhen filtra.
Kjo arkitekturë bën të mundur zbatimin e funksionalitetit të përpunimit të mediave në formën e një grupi filtrash të lidhur me skemën e përpunimit dhe transmetimit të trafikut RTP të telefonit VoIP.
Aftësia për të kombinuar filtrat në skema arbitrare, zhvillimi i thjeshtë i filtrave të rinj, zbatimi i transmetuesit të medias si një bibliotekë e pavarur e veçantë, e lejojnë atë të përdoret në projekte të tjera. Për më tepër, projekti mund të jetë në fushën e VoIP, pasi është e mundur të shtohen filtra të bërë nga vetja.
Biblioteka e filtrave e ofruar si parazgjedhje është mjaft e pasur dhe, siç u përmend tashmë, mund të zgjerohet me filtra të dizajnit tuaj. Por së pari, le të përshkruajmë filtrat e gatshëm që vijnë me transmetuesin e medias. Këtu është lista e tyre:
Filtrat e zërit
Kapja dhe riprodhimi i audios
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Tingulli origjinal i Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Shërbimi i radhës së audios (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Shërbimi i njësisë audio (Mac OS X)
- Artet (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Luajtësi i skedarëve (skedarë raw/wav/pcap) (Linux): MS_FILE_PLAYER
- Luajtësi i skedarëve (skedarët raw/wav) (Windows): MS_WINSND_READ
- Shkruani në skedar (skedarët wav) (Linux): MS_FILE_REC
- Shkruaj në skedar (skedarët wav) (Windows): MS_WINSND_WRITE
- Njësia e audios 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
- Tingulli i Windows (Windows)
Kodimi/dekodimi i audios
- G.711 a-ligj: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 μ-ligji: 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 lineare: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Përpunimi i zërit
- Konvertimi i kanalit (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konferenca: MS_CONF
- Gjeneratori DTMF: MS_DTMF_GEN
- Anulimi i jehonës (speex): MS_SPEEX_EC
- Barazuesi: MS_EQUALIZER
- Përzierës: MS_MIXER
- Kompensuesi i humbjes së paketave (PLC): MS_GENERIC_PLC
- Remostruesi: MS_RESAMPLE
- Detektori i tonit: MS_TONE_DETECTOR
- Kontrolli i volumit dhe matja e nivelit të sinjalit: MS_VOLUME
Filtrat e videove
Kapja dhe riprodhimi i videos
- kapja android
- riprodhimi android
- Regjistrimi i fondacionit AV (iOS)
- Riprodhimi i fondacionit AV (iOS)
- DirectShow Capture (Windows)
- Riprodhimi i DrawDib (Windows)
- Riprodhimi i jashtëm - Dërgimi i videos në shtresën e sipërme
- Riprodhimi GLX (Linux): MS_GLXVIDEO
- Mire - Fotografi lëvizëse sintetike: MS_MIRE
- Riprodhimi i OpenGL (Mac OS X)
- Riprodhimi i OpenGL ES2 (Android)
- Quicktime Capture (Mac OS X)
- Riprodhimi SDL: MS_SDL_OUT
- Dalja statike e imazhit: MS_STATIC_IMAGE
- Regjistrimi i videos për Linux (V4L) (Linux): MS_V4L
- Regjistrimi i videos për Linux 2 (V4L2) (Linux): MS_V4L2_CAPTURE
- Regjistrimi i Video4windows (DirectShow) (Windows)
- Regjistrimi i Video4windows (DirectShow) (Windows CE)
- Regjistrimi i videos për Windows (vfw) (Windows)
- Riprodhimi XV (Linux)
Kodimi/dekodimi i videos
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Bora: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (vetëm dekoder): MS_H264_DEC
- Theora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Përpunimi i videos
- fotografi jpeg
- Konvertuesi i formatit pixel: MS_PIX_CONV
- Ndryshues i madhësisë
- Filtra të tjerë
- Shkëmbimi i blloqeve të të dhënave ndërmjet temave: MS_ITC_SOURCE, MS_ITC_SINK
- Mbledhja e blloqeve të të dhënave nga hyrje të shumta në një dalje të vetme: MS_JOIN
- Marrja/transmetimi i RTP: MS_RTP_SEND, MS_RTP_RECV
- Kopjimi i të dhënave hyrëse në dalje të shumta: MS_TEE
- Ngarkesa e përfunduar: MS_VOID_SINK
- Burimi i heshtjes: MS_VOID_SOURCE
plugins
Filtrat e zërit
- Enkoder/dekoder AMR-NB
- G.729 kodues/dekoder
- Enkoder/dekoder iLBC
- Enkoder/dekoder SILK
Filtrat e videove
- kodues i softuerit H.264
- H.264 V4L2 kodues/dekoder i përshpejtuar i harduerit
Pas një përshkrimi të shkurtër të filtrit, shfaqet emri i llojit, i cili përdoret kur krijohet një shembull i ri i këtij filtri. Në vijim do t'i referohemi kësaj liste.
Instalimi nën Linux Ubuntu
Tani do të instalojmë transmetuesin e medias në kompjuter dhe do të ndërtojmë aplikacionin tonë të parë me të.
Instalimi i Mediastremer2 në një kompjuter ose makinë virtuale që funksionon Ubuntu nuk kërkon ndonjë aftësi të veçantë. Këtu dhe më poshtë, simboli "$" do të tregojë kërkesën e guaskës për futjen e komandave. Ato. nëse në listë e shihni këtë simbol në fillim të rreshtit, atëherë kjo është linja në të cilën komandat tregohen të ekzekutohen në terminal.
Supozohet se gjatë hapave në këtë artikull, kompjuteri juaj ka qasje në internet.
Instalimi i paketës libmediastremer-dev
Hapni terminalin dhe shkruani komandën:
$ sudo apt-get update
Do t'ju kërkohet një fjalëkalim për të bërë ndryshime, futeni atë dhe menaxheri i paketave do të përditësojë bazat e të dhënave të tij. Pas kësaj, ju duhet të vraponi:
$ sudo apt-get install libmediastreamer-dev
Paketat e nevojshme të varësisë dhe vetë biblioteka e transmetuesit të medias do të shkarkohen dhe instalohen automatikisht.
Madhësia totale e paketave të shkarkimit të deb varësisë do të jetë afërsisht 35 MB. Detajet rreth paketës së instaluar mund të gjenden me komandën:
$ dpkg -s libmediastreamer-dev
Shembulli i përgjigjes:
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/
Instalimi i mjeteve të zhvillimit
Instaloni përpiluesin C dhe mjetet e tij shoqëruese:
$ sudo apt-get install gcc
Ne kontrollojmë rezultatin duke kërkuar versionin e përpiluesit:
$ gcc --version
Përgjigja duhet të jetë diçka si kjo:
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.
Ndërtimi dhe ekzekutimi i aplikacionit provë
Ne krijojmë në shtëpi dosje për projektet tona tutoriale, le ta quajmë atë mstutoriale:
$ mkdir ~/mstutorial
Përdorni redaktuesin tuaj të preferuar të tekstit dhe krijoni një skedar programi C të quajtur mstest.c me përmbajtjen e mëposhtme:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Ai inicializon transmetuesin e medias, printon një përshëndetje dhe del.
Ruani skedarin dhe përpiloni aplikacionin e testimit me komandën:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Vini re se linja
`pkg-config mediastreamer --libs --cflags`
të mbyllura në thonjëza, të cilat ndodhen në tastierë në të njëjtin vend me shkronjën "Ё".
Nëse skedari nuk përmban gabime, atëherë pas përpilimit një skedar do të shfaqet në drejtori mstest. Ne fillojmë programin:
$ ./mstest
Rezultati do të jetë si ky:
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.
Në këtë listë, ne shohim mesazhet e gabimit që shfaq biblioteka ALSA, përdoret për të kontrolluar kartën e zërit. Vetë zhvilluesit e transmetuesit të medias besojnë se kjo është normale. Në këtë rast, ne pajtohemi me ta.
Tani jemi gati të punojmë me transmetuesin e medias. Ne kemi instaluar bibliotekën e transmetuesit të medias, mjetin e përpilimit dhe duke përdorur një aplikacion provë, kemi verifikuar që mjetet janë konfiguruar dhe transmetuesi i medias inicializohet me sukses.
Tjetra
Burimi: www.habr.com