Gradivo članka je vzeto iz mojega
Predstavitev
Ta članek je začetek serije člankov o obdelavi medijev v realnem času z uporabo mehanizma Mediastreamer2. Predstavitev bo vključevala minimalna znanja dela na terminalu Linux in programiranja v jeziku C.
Mediastreamer2 je motor VoIP, ki stoji za priljubljenim projektom VoIP telefona z odprtokodno programsko opremo.
Nadalje v besedilu bomo za udobje namesto besede Mediastreamer2 uporabili njeno rusko oznako: "media streamer".
Zgodovina njegovega nastanka ni povsem jasna, a sodeč po izvorni kodi je prej uporabljal knjižnico
V središču medijskega streamerja je arhitektura, imenovana "Data flow" (pretok podatkov). Primer takšne arhitekture je prikazan na spodnji sliki.
V tej arhitekturi algoritem obdelave podatkov ni določen s programsko kodo, temveč s shemo (grafom) za povezovanje funkcij, ki jih je mogoče razporediti v poljubnem vrstnem redu. Te funkcije se imenujejo filtri.
Ta arhitektura omogoča implementacijo funkcionalnosti obdelave medijev v obliki nabora filtrov, povezanih s shemo obdelave in prenosa prometa VoIP telefona RTP.
Zmožnost združevanja filtrov v poljubne sheme, preprost razvoj novih filtrov, implementacija medijskega streamerja kot neodvisne ločene knjižnice omogočajo njegovo uporabo v drugih projektih. Poleg tega je projekt lahko na področju VoIP, saj je možno dodati filtre, ki jih izdela sam.
Knjižnica filtrov, ki je privzeto dobavljena, je precej bogata in jo je, kot že rečeno, mogoče razširiti s filtri lastne zasnove. Najprej pa opišemo že pripravljene filtre, ki so priloženi medijskemu pretakalniku. Tukaj je njihov seznam:
Zvočni filtri
Zajem in predvajanje zvoka
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Izvorni zvok za Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Storitev avdio čakalne vrste (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Storitev zvočne enote (Mac OS X)
- Umetnost (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Predvajalnik datotek (datoteke raw/wav/pcap) (Linux): MS_FILE_PLAYER
- Predvajalnik datotek (raw/wav datoteke) (Windows): MS_WINSND_READ
- Pisanje v datoteko (datoteke wav) (Linux): MS_FILE_REC
- Pisanje v datoteko (datoteke wav) (Windows): MS_WINSND_WRITE
- Zvočna enota 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)
Avdio kodiranje/dekodiranje
- G.711 a-zakon: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 µ-zakon: 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
- Linearni PCM: MS_L16_ENC, MS_L16_DEC
- Govor: MS_SPEEX_ENC, MS_SPEEX_DEC
Obdelava zvoka
- Pretvorba kanala (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konferenca: MS_CONF
- Generator DTMF: MS_DTMF_GEN
- Preklic odmeva (speex): MS_SPEEX_EC
- Izenačevalnik: MS_EQUALIZER
- Mešalnik: MS_MIXER
- Kompenzator izgube paketov (PLC): MS_GENERIC_PLC
- Ponovno vzorčevalnik: MS_RESAMPLE
- Detektor tonov: MS_TONE_DETECTOR
- Nadzor glasnosti in merjenje ravni signala: MS_VOLUME
Video filtri
Zajem in predvajanje videa
- android capture
- android predvajanje
- Zajem AV Foundation (iOS)
- Predvajanje AV Foundation (iOS)
- DirectShow Capture (Windows)
- Predvajanje DrawDib (Windows)
- Zunanje predvajanje - pošiljanje videa na zgornjo plast
- Predvajanje GLX (Linux): MS_GLXVIDEO
- Mire - Sintetična gibljiva slika: MS_MIRE
- Predvajanje OpenGL (Mac OS X)
- Predvajanje OpenGL ES2 (Android)
- Quicktime Capture (Mac OS X)
- Predvajanje SDL: MS_SDL_OUT
- Izhod statične slike: MS_STATIC_IMAGE
- Zajem videa za Linux (V4L) (Linux): MS_V4L
- Zajem videa za Linux 2 (V4L2) (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow) zajem (Windows)
- Video4windows (DirectShow) zajem (Windows CE)
- Zajem videa za Windows (vfw) (Windows)
- Predvajanje XV (Linux)
Video kodiranje/dekodiranje
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, sneg: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (samo dekoder): MS_H264_DEC
- Theora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Video obdelava
- jpeg posnetek
- Pretvornik formata slikovnih pik: MS_PIX_CONV
- Resizer
- Drugi filtri
- Izmenjava podatkovnih blokov med nitmi: MS_ITC_SOURCE, MS_ITC_SINK
- Zbiranje blokov podatkov iz več vhodov v en izhod: MS_JOIN
- RTP sprejem/prenos: MS_RTP_SEND, MS_RTP_RECV
- Kopiranje vhodnih podatkov na več izhodov: MS_TEE
- Končana obremenitev: MS_VOID_SINK
- Vir tišine: MS_VOID_SOURCE
Plugins
Zvočni filtri
- AMR-NB kodirnik/dekoder
- G.729 kodirnik/dekoder
- iLBC kodirnik/dekoder
- Kodirnik/dekoder SILK
Video filtri
- Programski kodirnik H.264
- H.264 V4L2 strojno pospešeni kodirnik/dekodirnik
Po kratkem opisu filtra se prikaže ime tipa, ki se uporabi pri ustvarjanju novega primerka tega filtra. V nadaljevanju se bomo sklicevali na ta seznam.
Namestitev pod Linux Ubuntu
Sedaj bomo namestili medijski streamer v računalnik in z njim zgradili našo prvo aplikacijo.
Namestitev Mediastremer2 na računalnik ali virtualni stroj z Ubuntujem ne zahteva posebnih veščin. Tukaj in spodaj bo simbol "$" označeval ukazno lupino za vnos ukazov. Tisti. če v seznamu vidite ta simbol na začetku vrstice, potem je to vrstica, v kateri so prikazani ukazi, ki se izvajajo v terminalu.
Predpostavlja se, da ima vaš računalnik med koraki v tem članku dostop do interneta.
Namestitev paketa libmediastremer-dev
Zaženite terminal in vnesite ukaz:
$ sudo apt-get update
Za spremembe boste morali vnesti geslo, vnesite ga in upravitelj paketov bo posodobil svoje zbirke podatkov. Po tem morate zagnati:
$ sudo apt-get install libmediastreamer-dev
Potrebni paketi odvisnosti in sama knjižnica pretakanja medijev bodo samodejno preneseni in nameščeni.
Skupna velikost prenesenih paketov deb dependency bo približno 35 MB. Podrobnosti o nameščenem paketu najdete z ukazom:
$ dpkg -s libmediastreamer-dev
Vzorec odgovora:
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/
Namestitev razvojnih orodij
Namestite prevajalnik C in njegova spremljajoča orodja:
$ sudo apt-get install gcc
Rezultat preverimo s poizvedbo po različici prevajalnika:
$ gcc --version
Odgovor bi moral biti nekaj takega:
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.
Gradnja in izvajanje preizkusne aplikacije
Ustvarjamo v domov mapa za naše projekte vadnic, recimo temu mstutorial:
$ mkdir ~/mstutorial
Uporabite svoj najljubši urejevalnik besedil in ustvarite programsko datoteko C, imenovano mstest.c z naslednjo vsebino:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Inicializira medijski streamer, natisne pozdrav in zapusti.
Shranite datoteko in prevedite testno aplikacijo z ukazom:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Upoštevajte, da je vrstica
`pkg-config mediastreamer --libs --cflags`
v narekovajih, ki se nahajajo na tipkovnici na istem mestu kot črka "Ё".
Če datoteka ne vsebuje napak, se bo po prevajanju v imeniku pojavila datoteka mstest. Začnemo program:
$ ./mstest
Rezultat bo tak:
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.
V tem seznamu vidimo sporočila o napakah, ki jih prikaže knjižnica ALSA, ki se uporablja za nadzor zvočne kartice. Razvijalci medijskega streamerja sami verjamejo, da je to normalno. V tem primeru se z njimi neradi strinjamo.
Zdaj smo vsi pripravljeni na delo z medijskim pretakalnikom. Namestili smo knjižnico medijskega pretakalnika, orodje za kompilacijo in s preskusno aplikacijo preverili, ali so orodja konfigurirana in se medijsko pretočno orodje uspešno inicializira.
Naslednji
Vir: www.habr.com