Artikkelin materiaali on otettu minun
Esittely
Tämä artikkeli on artikkelisarjan alku, joka käsittelee reaaliaikaista mediankäsittelyä Mediastreamer2-moottorin avulla. Esitys sisältää vähimmäistaidot työskennellä Linux-päätteellä ja ohjelmointi C-kielellä.
Mediastreamer2 on VoIP-moottori suositun avoimen lähdekoodin VoIP-puhelinprojektin takana.
Edelleen tekstissä käytämme mukavuuden vuoksi sanan Mediastreamer2 sijasta sen venäjänkielistä merkintää: "media streamer".
Sen luomishistoria ei ole täysin selvä, mutta lähdekoodin perusteella se käytti kirjastoa aiemmin
Mediastreamerin ytimessä on arkkitehtuuri nimeltä "Data flow" (datavirta). Esimerkki tällaisesta arkkitehtuurista on esitetty alla olevassa kuvassa.
Tässä arkkitehtuurissa tietojenkäsittelyalgoritmia ei määritetä ohjelmakoodilla, vaan kaaviolla (kaaviolla) funktioiden yhdistämiseksi, jotka voidaan järjestää mihin tahansa järjestykseen. Näitä toimintoja kutsutaan suodattimiksi.
Tämä arkkitehtuuri mahdollistaa mediankäsittelytoiminnallisuuden toteuttamisen VoIP-puhelimen RTP-liikenteen käsittely- ja siirtomalliin kytkettyjen suodattimien muodossa.
Mahdollisuus yhdistää suodattimia mielivaltaisiin malleihin, uusien suodattimien yksinkertainen kehittäminen, mediasuojien toteuttaminen itsenäisenä erillisenä kirjastona mahdollistavat sen käytön muissa projekteissa. Lisäksi projekti voi olla VoIP-alalla, koska siihen on mahdollista lisätä itse tehtyjä suodattimia.
Oletuksena toimitettu suodatinkirjasto on melko rikas ja, kuten jo mainittiin, voidaan laajentaa omilla suunnittelemillamme suodattimilla. Mutta ensin kuvataan valmiita suodattimia, jotka tulevat mediastriimin mukana. Tässä on heidän luettelonsa:
Äänisuodattimet
Äänen sieppaus ja toisto
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Androidin alkuperäinen ääni (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Äänijonopalvelu (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Ääniyksikköpalvelu (Mac OS X)
- Taiteet (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Tiedostosoitin (raw/wav/pcap-tiedostot) (Linux): MS_FILE_PLAYER
- Tiedostosoitin (raw/wav-tiedostot) (Windows): MS_WINSND_READ
- Kirjoita tiedostoon (wav-tiedostot) (Linux): MS_FILE_REC
- Kirjoita tiedostoon (wav-tiedostot) (Windows): MS_WINSND_WRITE
- Mac-ääniyksikkö (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
- Windowsin ääni (Windows)
Äänen koodaus/dekoodaus
- G.711 a-laki: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 µ-laki: 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
- Lineaarinen PCM: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Äänenkäsittely
- Kanavan muunnos (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konferenssi: MS_CONF
- DTMF-generaattori: MS_DTMF_GEN
- Kaiunpoisto (speex): MS_SPEEX_EC
- Taajuuskorjain: MS_EQUALIZER
- Mikseri: MS_MIXER
- Packet Loss Compensator (PLC): MS_GENERIC_PLC
- Resampler: MS_RESAMPLE
- Äänentunnistin: MS_TONE_DETECTOR
- Äänenvoimakkuuden säätö ja signaalitason mittaus: MS_VOLUME
Videosuodattimet
Videon kaappaus ja toisto
- Android-kaappaus
- Android-toisto
- AV Foundation -kaappaus (iOS)
- AV Foundation -toisto (iOS)
- DirectShow Capture (Windows)
- DrawDib-toisto (Windows)
- Ulkoinen toisto - Videon lähettäminen ylimmälle tasolle
- GLX-toisto (Linux): MS_GLXVIDEO
- Mire - Synteettinen liikkuva kuva: MS_MIRE
- OpenGL-toisto (Mac OS X)
- OpenGL ES2 -toisto (Android)
- Quicktime Capture (Mac OS X)
- SDL-toisto: MS_SDL_OUT
- Staattisen kuvan lähtö: MS_STATIC_IMAGE
- Videon sieppaus Linuxille (V4L) (Linux): MS_V4L
- Videon sieppaus Linux 2:lle (V4L2) (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow) -kaappaus (Windows)
- Video4windows (DirectShow) -kaappaus (Windows CE)
- Video for Windows (vfw) -kaappaus (Windows)
- XV-toisto (Linux)
Videon koodaus/dekoodaus
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, lumi: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (vain dekooderi): MS_H264_DEC
- Teoria: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Videon käsittely
- jpeg tilannekuva
- Pikselimuodon muuntaja: MS_PIX_CONV
- Koon muuttaja
- Muut suodattimet
- Tietolohkojen vaihto säikeiden välillä: MS_ITC_SOURCE, MS_ITC_SINK
- Tietolohkojen kerääminen useista tuloista yhteen lähtöön: MS_JOIN
- RTP-vastaanotto/lähetys: MS_RTP_SEND, MS_RTP_RECV
- Tulotietojen kopiointi useisiin lähtöihin: MS_TEE
- Lopetettu lataus: MS_VOID_SINK
- Hiljaisuuden lähde: MS_VOID_SOURCE
Плагины
Äänisuodattimet
- AMR-NB kooderi/dekooderi
- G.729 kooderi/dekooderi
- iLBC-kooderi/dekooderi
- SILK-kooderi/dekooderi
Videosuodattimet
- H.264-ohjelmistokooderi
- H.264 V4L2 laitteistokiihdytetty enkooderi/dekooderi
Suodattimen lyhyen kuvauksen jälkeen näytetään tyypin nimi, jota käytetään luotaessa uutta tämän suodattimen esiintymää. Seuraavassa viitataan tähän luetteloon.
Asennus Linux Ubuntuun
Nyt asennamme median streamerin tietokoneelle ja rakennamme ensimmäisen sovelluksemme sen avulla.
Mediastremer2:n asentaminen tietokoneeseen tai virtuaalikoneeseen, jossa on Ubuntu, ei vaadi erityisiä taitoja. Tässä ja alla symboli "$" tarkoittaa komentotulkkikehotetta komentojen syöttämiseksi. Nuo. Jos listauksessa näet tämän symbolin rivin alussa, tämä on rivi, jolla komennot näytetään suoritettavan päätteessä.
Oletetaan, että tämän artikkelin vaiheiden aikana tietokoneellasi on pääsy Internetiin.
Libmediastremer-dev-paketin asentaminen
Käynnistä pääte ja kirjoita komento:
$ sudo apt-get update
Sinulta kysytään salasanaa muutosten tekemiseen, syötä se ja paketinhallinta päivittää tietokantansa. Sen jälkeen sinun on suoritettava:
$ sudo apt-get install libmediastreamer-dev
Tarvittavat riippuvuuspaketit ja mediastriimauskirjasto ladataan ja asennetaan automaattisesti.
Ladattujen riippuvuusdeb-pakettien kokonaiskoko on noin 35 Mt. Asennetun paketin tiedot löytyvät komennolla:
$ dpkg -s libmediastreamer-dev
Vastausesimerkki:
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/
Kehitystyökalujen asennus
Asenna C-kääntäjä ja sen mukana tulevat työkalut:
$ sudo apt-get install gcc
Tarkistamme tuloksen kysymällä kääntäjän versiota:
$ gcc --version
Vastauksen pitäisi olla jotain tällaista:
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.
Kokeilusovelluksen luominen ja suorittaminen
Luomme sisään koti kansio opetusprojekteihimme, kutsukaamme sitä mtutorial:
$ mkdir ~/mstutorial
Käytä suosikkitekstieditoriasi ja luo C-ohjelmatiedosto nimeltä mstest.c jolla on seuraava sisältö:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Se alustaa median streamerin, tulostaa tervehdyksen ja poistuu.
Tallenna tiedosto ja käännä testisovellus komennolla:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Huomaa, että linja
`pkg-config mediastreamer --libs --cflags`
lainausmerkeissä, jotka sijaitsevat näppäimistössä samassa paikassa kuin kirjain "Ё".
Jos tiedosto ei sisällä virheitä, hakemistoon ilmestyy tiedosto kääntämisen jälkeen mstest. Aloitamme ohjelman:
$ ./mstest
Tulos tulee olemaan tällainen:
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.
Tässä luettelossa näemme virheilmoitukset, jotka ALSA-kirjasto näyttää, sitä käytetään äänikortin ohjaamiseen. Mediastriimin kehittäjät itse uskovat tämän olevan normaalia. Tässä tapauksessa olemme vastahakoisesti samaa mieltä heidän kanssaan.
Nyt olemme kaikki valmiita työskentelemään median streamerin kanssa. Olemme asentaneet median streamer-kirjaston, käännöstyökalun ja varmistaneet kokeilusovelluksella, että työkalut on määritetty ja mediasuoratoisto käynnistyy onnistuneesti.
Seuraava
Lähde: will.com