A cikk anyaga az én .
Bevezetés
Ez a cikk a Mediastreamer2 motor segítségével történő valós idejű médiafeldolgozásról szóló cikkek sorozatának kezdete. A későbbiekben minimális Linux terminál használati és C nyelv programozási ismeretekre lesz szükség.
A Mediastreamer2 egy VoIP-motor, amely a népszerű nyílt forráskódú voip-telefon projekt alapját képezi. . A Linphone-ban a Mediastreamer2 valósítja meg az összes hanggal és videóval kapcsolatos funkciót. A motor lehetőségeinek részletes listáját ezen az oldalon találhatja: Mediastreamer. A forráskód itt található: .
A további szövegben az egyszerűsítés kedvéért a Mediastreamer2 szót orosz megnevezésével, azaz „médiastrímelő”-ként használjuk.
A létrehozásának története nem teljesen világos, de a forráskódja alapján korábban a könyvtárat használta, ami arra utal, hogy lehet valamilyen távoli rokonságban áll a -rel. A médiastrímelő a GStreamer-hez képest könnyebbnek tűnik. A Linphone első verziója 2001-ben jelent meg, így a médiastrímelő már közel 20 éve létezik és fejlődik.
A médiastrímelő alapja a „Data flow” (adatfolyam) nevű architektúra. Az alábbi ábrán egy ilyen architektúra látható.

Ebben az architektúrában az adatfeldolgozás algoritmusát nem programkód határozza meg, hanem a funkciók kapcsolódási sémája (gráfja), amelyet bármilyen sorrendben fel lehet építeni. Ezeket a funkciókat szűrőknek nevezik.
Ez az architektúra lehetővé teszi a médiafeldolgozás funkciójának egy szűrőkészlet formájában való megvalósítását, amelyeket egy RTP-trafik VoIP-telefon feldolgozási és továbbítási sémájában kötnek össze.
A szűrők tetszőleges sémákba való összekapcsolásának lehetősége, az új szűrők egyszerű fejlesztése, és a médiastrímelő önálló könyvtárként való megvalósítása lehetővé teszi, hogy más projektekben is használhassuk. A projekt lehet a VoIP területén, mivel lehetőség van saját készítésű szűrők hozzáadására.
Az alapértelmezett könyvtár a szűrőkből eléggé gazdag, és ahogy már említettük, saját fejlesztésű szűrőkkel is bővíthető. De először is ismertetjük azokat a kész szűrőket, amelyeket a médiastrímelőhöz szállítanak. Íme a lista:
Hangsűrítők
Hang rögzítése és lejátszása
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Android natív hang (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Audio Queue Service (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Audio Unit Service (Mac OS X)
- Arts (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Fájllejátszó (raw/wav/pcap fájlok) (Linux): MS_FILE_PLAYER
- Fájllejátszó (raw/wav fájlok) (Windows): MS_WINSND_READ
- Fájlba történő felvétel (wav fájlok) (Linux): MS_FILE_REC
- Fájlba történő felvétel (wav fájlok) (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 Sound (Windows)
Hangkódolás/dekódolás
- G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 µ-law: 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áris PCM: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Hangelőadás
- Csatornákkonvertálás (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konferencia: MS_CONF
- DTMF generátor: MS_DTMF_GEN
- Visszhanggal szembeni elnyomás (speex): MS_SPEEX_EC
- Equalizer: MS_EQUALIZER
- Mikser: MS_MIXER
- Csomagvesztési kompenzátor (PLC): MS_GENERIC_PLC
- Resampler: MS_RESAMPLE
- Hangfrekvencia-detektor: MS_TONE_DETECTOR
- Hangerő- és jelszintmérés: MS_VOLUME
Videofilterek
Videó rögzítése és lejátszása
- Android rögzítés
- Android lejátszás
- AV Foundation rögzítés (iOS)
- AV Foundation lejátszás (iOS)
- DirectShow rögzítés (Windows)
- DrawDib lejátszás (Windows)
- Külső lejátszás – Videó küldése a legfelső szintre
- GLX lejátszás (Linux): MS_GLXVIDEO
- Mire – Szintetikus mozgóképek: MS_MIRE
- OpenGL lejátszás (Mac OS X)
- OpenGL ES2 lejátszás (Android)
- Quicktime rögzítés (Mac OS X)
- SDL lejátszás: MS_SDL_OUT
- Statikus képek kiadása: MS_STATIC_IMAGE
- Video For Linux (V4L) rögzítés (Linux): MS_V4L
- Video For Linux 2 (V4L2) rögzítés (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow) rögzítés (Windows)
- Video4windows (DirectShow) rögzítés (Windows CE)
- Video For Windows (vfw) rögzítés (Windows)
- XV lejátszás (Linux)
Videokódolás/dekódolás
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (csak dekóder): MS_H264_DEC
- Theora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Videófeldolgozás
- JPEG pillanatfelvétel
- Pixelformátum konverter: MS_PIX_CONV
- Átméretező
- Egyéb szűrők
- Adatblokkok cseréje szálak között: MS_ITC_SOURCE, MS_ITC_SINK
- Több bemenet összegyűjtése egy kimenetre: MS_JOIN
- RTP vétel/küldés: MS_RTP_SEND, MS_RTP_RECV
- Bemenetek másolása több kimenetre: MS_TEE
- Konzisztens teher: MS_VOID_SINK
- Csendforrás: MS_VOID_SOURCE
Bővítmények
Hangsűrítők
- AMR-NB kódoló/dekódoló
- G.729 kódoló/dekódoló
- iLBC kódoló/dekódoló
- SILK kódoló/dekódoló
Videofilterek
- H.264 programozott kódoló
- H.264 V4L2 kódoló/dekódoló hardvergyorsítással
A rövid szűrési leírás után látható a típusa, amelyet az adott szűrő új példányának létrehozásakor használnak. A továbbiakban erre a listára fogunk hivatkozni.
Telepítés Linux Ubuntu alatt
Most telepítjük a médiastreamert a számítógépre, és összegyűjtjük első alkotásunkat vele.
A Mediastremer2 számítógépre vagy Virtuális gépre történő telepítése Ubuntu alatt különösebb készségeket nem igényel. A továbbiakban a '$' jellel jelöljük a parancssor promptját, ahol parancsokat kell beírni. Ez azt jelenti, hogy ha a listában ezt a jelet látja a sor elején, akkor az a sor a terminálban végrehajtandó parancsokat mutatja.
Feltételezzük, hogy a cikk végrehajtása során számítógépe csatlakozik az internethez.
A libmediastremer-dev csomag telepítése
Megnyitjuk a terminált és beírjuk a parancsot:
$ sudo apt-get updateA módosításokhoz jelszót kér, írja be, és a csomagkezelő frissíti az adatbázisait. Ezt követően el kell végeznünk:
$ sudo apt-get install libmediastreamer-devA szükséges függőségi csomagok és a médiastreamer könyvtár automatikusan letöltődik és telepítésre kerül.
A letöltött deb-csomagok összmérete körülbelül 35 MB lesz. Az telepített csomagra vonatkozó részleteket a következő paranccsal lehet megismerni:
$ dpkg -s libmediastreamer-devPélda válasz:
Csomag: libmediastreamer-dev
Állapot: megfelelő telepített
Prioritás: opcionális
Szakasz: libdevel
Telepített méret: 244
Fenntartó: Ubuntu Fejlesztők <ubuntu-devel-discuss@lists.ubuntu.com>
Architektúra: amd64
Forrás: linphone
Verzió: 3.6.1-2.5
Függőségek: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev
Leírás: Linphone web telefon médiakönyvtára - fejlesztési fájlok
A Linphone egy audio- és videointernet telefon, amely a SIP protokollt használja.
GTK+ és konzol felülettel rendelkezik, számos audio- és videó kodek található benne, valamint IM funkciókat biztosít.
.
Ez a csomag tartalmazza a médiaműveletek kezelésére szolgáló fejlesztési könyvtárakat.
Eredeti fenntartó: Debian VoIP Csapat <pkg-voip-maintainers@lists.alioth.debian.org>
Weboldal: http://www.linphone.org/
Fejlesztői eszközök telepítése
Telepítjük a C fordítót és a hozzá kapcsolódó eszközöket:
$ sudo apt-get install gccEllenőrizzük az eredményt a fordító verziójának lekérdezésével:
$ gcc --versionA válasz körülbelül a következőképpen kell kinézzen:
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
Ez egy szabad szoftver; lásd a forrást a másolási feltételekért. Nincs
garancia; még a KERESKEDELMI minőségre vagy A HELYES CÉLRA sem.Kísérleti alkalmazás építése és futtatása
Létrehozunk egy home mappát tanulmányi projektjeink céljára, nevezzük el mstutorial:
$ mkdir ~/mstutorialHasználja kedvenc szövegszerkesztőjét, és hozzon létre egy C-programot a következő néven: mstest.c az alábbi tartalommal:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}Ez inicializálja a médiastreamert, üdvözletet nyomtat, majd befejezi a végrehajtást.
Mentse el a fájlt, és fordítsa le a tesztalkalmazást a következő paranccsal:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`Vegye észre, hogy a sor
`pkg-config mediastreamer --libs --cflags`idézőjelek között van, amelyek a billentyűzeten a 'Ё' betű mellett találhatók.
Ha a fájlban nincsenek hibák, a fordítás után megjelenik egy mstestfájl a könyvtárban. Futtassa a programot:
$ . /mstestAz eredmény a következő lesz:
ALSA lib conf.c:4738:(snd_config_expand) Ismeretlen paraméterek 0
ALSA lib control.c:954:(snd_ctl_open_noupdate) Érvénytelen CTL default:0
ortp-warning-Nem sikerült csatlakoztatni a keverőt a kártyához: Érvénytelen érv
ALSA lib conf.c:4738:(snd_config_expand) Ismeretlen paraméterek 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Ismeretlen PCM default:0
ALSA lib conf.c:4738:(snd_config_expand) Ismeretlen paraméterek 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) Ismeretlen PCM default:0
ortp-warning-Furcsa, a HDA Intel PCH hangkártya nem tűnik képesnek semmire, újrapróbálkozás a plughw használatával...
Mediastreamer készen áll.Ebben a listában látjuk az ALSA könyvtár által kiírt hibajelzéseket, amely a hangkártya irányítására szolgál. A médiastreamer fejlesztői ezt normálisnak tartják. Mi ebben az esetben kénytelenek vagyunk egyetérteni velük.
Most minden készen áll a médiastreamer használatához. Telepítettük a médiastreamer könyvtárat, a fordítóeszközt, és egy tesztalkalmazással ellenőriztük, hogy az eszközök be vannak állítva, valamint a médiastreamer sikeresen inicializálódik.
A következő cikkben létrehozunk egy alkalmazást, amely összegyűjti és elindítja a hangjelet több szűrőből álló láncban.
Forrás: habr.com
