Raksta materiÄls Åemts no mana
Ievads
Å is raksts ir rakstu sÄrijas sÄkums par multivides apstrÄdi reÄllaikÄ, izmantojot programmu Mediastreamer2. PrezentÄcijas laikÄ tiks iesaistÄ«tas minimÄlÄs prasmes strÄdÄt Linux terminÄlÄ un programmÄt C valodÄ.
Mediastreamer2 ir VoIP dzinÄjs aiz populÄrÄ atvÄrtÄ pirmkoda programmatÅ«ras VoIP tÄlruÅa projekta.
TÄlÄk tekstÄ ÄrtÄ«bas labad vÄrda Mediastreamer2 vietÄ izmantosim tÄ krievu valodas apzÄ«mÄjumu: āmedia streamerā.
TÄs izveides vÄsture nav lÄ«dz galam skaidra, taÄu, spriežot pÄc avota koda, tÄ iepriekÅ” izmantoja bibliotÄku
Multivides straumÄtÄja centrÄ ir arhitektÅ«ra, ko sauc par "Datu plÅ«smu" (datu plÅ«sma). Å Ädas arhitektÅ«ras piemÄrs ir parÄdÄ«ts attÄlÄ zemÄk.
Å ajÄ arhitektÅ«rÄ datu apstrÄdes algoritms tiek norÄdÄ«ts nevis ar programmas kodu, bet gan ar shÄmu (grafiku) funkciju savienoÅ”anai, kuras var sakÄrtot jebkurÄ secÄ«bÄ. Å Ä«s funkcijas sauc par filtriem.
Å Ä« arhitektÅ«ra ļauj Ä«stenot multivides apstrÄdes funkcionalitÄti filtru komplekta veidÄ, kas savienots ar VoIP tÄlruÅa RTP trafika apstrÄdes un pÄrraides shÄmu.
IespÄja apvienot filtrus patvaļīgÄs shÄmÄs, vienkÄrÅ”a jaunu filtru izstrÄde, multivides straumÄtÄja kÄ neatkarÄ«gas atseviŔķas bibliotÄkas ievieÅ”ana ļauj to izmantot citos projektos. TurklÄt projekts var bÅ«t VoIP jomÄ, jo ir iespÄjams pievienot paÅ”u izgatavotus filtrus.
Filtru bibliotÄka, kas tiek nodroÅ”inÄta pÄc noklusÄjuma, ir diezgan bagÄta, un, kÄ jau minÄts, to var papildinÄt ar mÅ«su paÅ”u izstrÄdÄtiem filtriem. Bet vispirms aprakstÄ«sim gatavos filtrus, kas tiek piegÄdÄti kopÄ ar multivides straumÄtÄju. Å eit ir viÅu saraksts:
SkaÅas filtri
Audio uztverÅ”ana un atskaÅoÅ”ana
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Android sÄkotnÄjÄ skaÅa (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Audio rindas pakalpojums (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Audio vienības pakalpojums (Mac OS X)
- MÄksla (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Failu atskaÅotÄjs (raw/wav/pcap faili) (Linux): MS_FILE_PLAYER
- Failu atskaÅotÄjs (raw/wav faili) (Windows): MS_WINSND_READ
- RakstÄ«t failÄ (wav faili) (Linux): MS_FILE_REC
- Rakstiet failÄ (wav failos) (Windows): MS_WINSND_WRITE
- Mac audio bloks (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 skaÅa (Windows)
Audio kodÄÅ”ana/dekodÄÅ”ana
- G.711 a-likums: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 Āµ-likums: 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
- LineÄrais PCM: MS_L16_ENC, MS_L16_DEC
- Speks: MS_SPEEX_ENC, MS_SPEEX_DEC
SkaÅas apstrÄde
- KanÄla pÄrveidoÅ”ana (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konference: MS_CONF
- DTMF ģenerators: MS_DTMF_GEN
- Atbalss atcelŔana (speex): MS_SPEEX_EC
- Ekvalaizers: MS_EQUALIZER
- Mikseris: MS_MIXER
- PakeŔu zudumu kompensators (PLC): MS_GENERIC_PLC
- Resampler: MS_RESAMPLE
- ToÅa detektors: MS_TONE_DETECTOR
- Skaļuma kontrole un signÄla lÄ«meÅa mÄrÄ«Å”ana: MS_VOLUME
Video filtri
Video uzÅemÅ”ana un atskaÅoÅ”ana
- Android uztverŔana
- android atskaÅoÅ”ana
- AV Foundation uztverŔana (iOS)
- AV Foundation atskaÅoÅ”ana (iOS)
- DirectShow Capture (Windows)
- DrawDib atskaÅoÅ”ana (Windows)
- ÄrÄjÄ atskaÅoÅ”ana ā video nosÅ«tÄ«Å”ana uz augÅ”Äjo slÄni
- GLX atskaÅoÅ”ana (Linux): MS_GLXVIDEO
- Mire ā sintÄtisks kustÄ«gs attÄls: MS_MIRE
- OpenGL atskaÅoÅ”ana (Mac OS X)
- OpenGL ES2 atskaÅoÅ”ana (Android)
- Quicktime Capture (Mac OS X)
- SDL atskaÅoÅ”ana: MS_SDL_OUT
- StatiskÄ attÄla izvade: MS_STATIC_IMAGE
- Videoklipa uztverŔanai Linux (V4L) (Linux): MS_V4L
- Videoklips operÄtÄjsistÄmai Linux 2 (V4L2) tverÅ”anai (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow) tverŔana (Windows)
- Video4windows (DirectShow) tverŔana (Windows CE)
- Videoklipu uzÅemÅ”ana operÄtÄjsistÄmai Windows (vfw) (Windows)
- XV atskaÅoÅ”ana (Linux)
Video kodÄÅ”ana/dekodÄÅ”ana
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, sniegs: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (tikai dekodÄtÄjam): MS_H264_DEC
- Teora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Video apstrÄde
- jpeg momentuzÅÄmums
- Pikseļu formÄta pÄrveidotÄjs: MS_PIX_CONV
- IzmÄra mainÄ«tÄjs
- Citi filtri
- Datu bloku apmaiÅa starp pavedieniem: MS_ITC_SOURCE, MS_ITC_SINK
- Datu bloku apkopoÅ”ana no vairÄkÄm ieejÄm vienÄ izvadÄ: MS_JOIN
- RTP saÅemÅ”ana/pÄrsÅ«tÄ«Å”ana: MS_RTP_SEND, MS_RTP_RECV
- Ievades datu kopÄÅ”ana uz vairÄkÄm izejÄm: MS_TEE
- PÄrtraukta ielÄde: MS_VOID_SINK
- Klusuma avots: MS_VOID_SOURCE
SpraudÅi
SkaÅas filtri
- AMR-NB kodÄtÄjs/dekodÄtÄjs
- G.729 kodÄtÄjs/dekodÄtÄjs
- iLBC kodÄtÄjs/dekodÄtÄjs
- SILK kodÄtÄjs/dekodÄtÄjs
Video filtri
- H.264 programmatÅ«ras kodÄtÄjs
- H.264 V4L2 aparatÅ«ras paÄtrinÄts kodÄtÄjs/dekodÄtÄjs
PÄc Ä«sa filtra apraksta tiek parÄdÄ«ts tÄ veida nosaukums, kas tiek izmantots, veidojot jaunu Ŕī filtra gadÄ«jumu. TÄlÄk mÄs atsauksimies uz Å”o sarakstu.
InstalÄÅ”ana operÄtÄjsistÄmÄ Linux Ubuntu
Tagad mÄs datorÄ instalÄsim multivides straumÄtÄju un ar to izveidosim savu pirmo lietojumprogrammu.
Mediastremer2 instalÄÅ”anai datorÄ vai virtuÄlajÄ maŔīnÄ, kurÄ darbojas Ubuntu, nav nepiecieÅ”amas Ä«paÅ”as prasmes. Å eit un zemÄk simbols "$" apzÄ«mÄs Äaulas uzvedni komandu ievadÄ«Å”anai. Tie. ja sarakstÄ jÅ«s redzat Å”o simbolu rindas sÄkumÄ, tad Ŕī ir rinda, kurÄ tiek parÄdÄ«ts, ka komandas tiek izpildÄ«tas terminÄlÄ«.
Tiek pieÅemts, ka Å”ajÄ rakstÄ minÄto darbÄ«bu laikÄ jÅ«su datoram ir piekļuve internetam.
Libmediastremer-dev pakotnes instalÄÅ”ana
Palaidiet terminÄli un ierakstiet komandu:
$ sudo apt-get update
Lai veiktu izmaiÅas, jums tiks prasÄ«ta parole, ievadiet to, un pakotÅu pÄrvaldnieks atjauninÄs savas datu bÄzes. PÄc tam jums jÄskrien:
$ sudo apt-get install libmediastreamer-dev
NepiecieÅ”amÄs atkarÄ«bas pakotnes un pati multivides straumÄtÄja bibliotÄka tiks automÄtiski lejupielÄdÄta un instalÄta.
LejupielÄdÄto atkarÄ«bas deb pakotÅu kopÄjais lielums bÅ«s aptuveni 35 MB. SÄ«kÄku informÄciju par instalÄto pakotni var atrast ar komandu:
$ dpkg -s libmediastreamer-dev
Atbildes piemÄrs:
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/
AttÄ«stÄ«bas rÄ«ku instalÄÅ”ana
InstalÄjiet C kompilatoru un ar to saistÄ«tos rÄ«kus:
$ sudo apt-get install gcc
MÄs pÄrbaudÄm rezultÄtu, vaicÄjot kompilatora versiju:
$ gcc --version
Atbildei vajadzÄtu bÅ«t apmÄram Å”Ädai:
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.
IzmÄÄ£inÄjuma lietojumprogrammas izveide un palaiÅ”ana
MÄs veidojam iekÅ”Ä mÄjas mapi mÅ«su apmÄcÄ«bas projektiem, sauksim to mstutorial:
$ mkdir ~/mstutorial
Izmantojiet savu iecienÄ«tÄko teksta redaktoru un izveidojiet C programmas failu ar nosaukumu mstest.c ar Å”Ädu saturu:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Tas inicializÄ multivides straumÄtÄju, izdrukÄ sveicienu un iziet.
SaglabÄjiet failu un kompilÄjiet testa lietojumprogrammu ar komandu:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Å emiet vÄrÄ, ka lÄ«nija
`pkg-config mediastreamer --libs --cflags`
ieliktas pÄdiÅÄs, kas atrodas uz tastatÅ«ras tajÄ paÅ”Ä vietÄ, kur burts "Š".
Ja failÄ nav kļūdu, pÄc kompilÄcijas direktorijÄ parÄdÄ«sies fails mstest. MÄs sÄkam programmu:
$ ./mstest
RezultÄts bÅ«s Å”Äds:
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.
Å ajÄ sarakstÄ mÄs redzam kļūdu ziÅojumus, ko parÄda ALSA bibliotÄka, to izmanto skaÅas kartes vadÄ«Å”anai. PaÅ”i mediju straumÄtÄja izstrÄdÄtÄji uzskata, ka tas ir normÄli. Å ajÄ gadÄ«jumÄ mÄs viÅiem nelabprÄt piekrÄ«tam.
Tagad mÄs visi esam gatavi darbam ar multivides straumÄtÄju. MÄs esam instalÄjuÅ”i multivides straumÄtÄja bibliotÄku, kompilÄcijas rÄ«ku, un, izmantojot izmÄÄ£inÄjuma lietojumprogrammu, pÄrbaudÄ«jÄm, vai rÄ«ki ir konfigurÄti un multivides straumÄtÄjs tiek veiksmÄ«gi inicializÄts.
NÄkamais
Avots: www.habr.com