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ó cikksorozat kezdete. Az előadás magában foglalja a Linux terminálban való munkavégzés és a C nyelvű programozás minimális készségeit.
A Mediastreamer2 a VoIP motor a népszerű, nyílt forráskódú VoIP telefon projekt mögött.
A továbbiakban a szövegben a kényelem kedvéért a Mediastreamer2 szó helyett az orosz jelölést használjuk: „media streamer”.
Létrehozásának története nem teljesen világos, de forráskódjából ítélve korábban használta a könyvtárat
A média streamer középpontjában egy "Data flow" (adatfolyam) nevű architektúra áll. Az alábbi ábrán egy ilyen architektúra látható.
Ebben az architektúrában az adatfeldolgozó algoritmust nem programkód adja meg, hanem egy tetszőleges sorrendbe rendezhető függvények összekapcsolására szolgáló séma (gráf). Ezeket a függvényeket szűrőknek nevezzük.
Ez az architektúra lehetővé teszi a médiafeldolgozási funkciók megvalósítását a VoIP telefon RTP forgalomfeldolgozási és átviteli sémájához kapcsolódó szűrőkészlet formájában.
A szűrők tetszőleges sémákba való kombinálásának képessége, az új szűrők egyszerű fejlesztése, a média streamer önálló külön könyvtárként való megvalósítása lehetővé teszi más projektekben való használatát. Sőt, a projekt a VoIP területére is kiterjedhet, mivel lehetőség van saját készítésű szűrők hozzáadására.
Az alapértelmezésben biztosított szűrőkönyvtár meglehetősen gazdag, és mint már említettük, saját tervezésű szűrőkkel bővíthető. Előbb azonban írjuk le a média streamerhez mellékelt kész szűrőket. Íme a listájuk:
Hangszűrők
Hangrögzítés és lejátszás
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Android natív hang (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Hangsorszolgáltatás (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Audioegység-szolgáltatás (Mac OS X)
- Művészetek (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 írás (wav fájlok) (Linux): MS_FILE_REC
- Fájlba írás (wav-fájlok) (Windows): MS_WINSND_WRITE
- Mac audioegység (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 hang (Windows)
Hangkódolás/dekódolás
- G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 µ-törvény: 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
Hangfeldolgozás
- Csatornaátalakítás (mono->sztereó, sztereó->mono): MS_CHANNEL_ADAPTER
- Konferencia: MS_CONF
- DTMF-generátor: MS_DTMF_GEN
- Visszhang törlés (speex): MS_SPEEX_EC
- Equalizer: MS_EQUALIZER
- Keverő: MS_MIXER
- Packet Loss Compensator (PLC): MS_GENERIC_PLC
- Resampler: MS_RESAMPLE
- Hangérzékelő: MS_TONE_DETECTOR
- Hangerőszabályozás és jelszintmérés: MS_VOLUME
Videószűrők
Videó rögzítése és lejátszása
- android rögzítés
- android lejátszás
- AV Foundation capture (iOS)
- AV Foundation lejátszás (iOS)
- DirectShow Capture (Windows)
- DrawDib lejátszás (Windows)
- Külső lejátszás – Videó küldése a felső rétegre
- GLX lejátszás (Linux): MS_GLXVIDEO
- Mire - Szintetikus mozgókép: MS_MIRE
- OpenGL lejátszás (Mac OS X)
- OpenGL ES2 lejátszás (Android)
- Quicktime Capture (Mac OS X)
- SDL lejátszás: MS_SDL_OUT
- Statikus képkimenet: MS_STATIC_IMAGE
- Videó rögzítése Linuxhoz (V4L) (Linux): MS_V4L
- Videó rögzítése Linux 2 (V4L2) rendszerhez (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)
Videó kódolás/dekódolás
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, hó: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (csak dekódoló): MS_H264_DEC
- Theora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Videó feldolgozás
- jpeg pillanatfelvétel
- Pixel formátum konvertáló: MS_PIX_CONV
- Átméretező
- Egyéb szűrők
- Adatblokkok cseréje szálak között: MS_ITC_SOURCE, MS_ITC_SINK
- Adatblokkok gyűjtése több bemenetről egyetlen kimenetre: MS_JOIN
- RTP fogadás/átvitel: MS_RTP_SEND, MS_RTP_RECV
- Bemeneti adatok másolása több kimenetre: MS_TEE
- Megszakított betöltés: MS_VOID_SINK
- Elnémítás Forrás: MS_VOID_SOURCE
plugins
Hangszűrők
- AMR-NB kódoló/dekódoló
- G.729 kódoló/dekódoló
- iLBC kódoló/dekódoló
- SILK kódoló/dekódoló
Videószűrők
- H.264 szoftveres kódoló
- H.264 V4L2 hardveres gyorsítású kódoló/dekódoló
A szűrő rövid leírása után megjelenik a típus neve, amelyet a szűrő új példányának létrehozásakor használunk. A következőkben erre a listára fogunk hivatkozni.
Telepítés Linux Ubuntu alatt
Most telepítjük a média streamert a számítógépre, és megépítjük vele az első alkalmazásunkat.
A Mediastremer2 telepítése Ubuntut futtató számítógépre vagy virtuális gépre nem igényel különleges ismereteket. Itt és lent a "$" szimbólum a parancsok bevitelére szolgáló shell promptot jelöli. Azok. ha a listában ezt a szimbólumot látja a sor elején, akkor ez az a sor, amelyben a parancsok végrehajtása látható a terminálban.
Feltételezzük, hogy a cikkben ismertetett lépések során számítógépe hozzáfér az internethez.
A libmediastremer-dev csomag telepítése
Indítsa el a terminált, és írja be a következő parancsot:
$ sudo apt-get update
A módosításokhoz jelszót kell beírnia, és a csomagkezelő frissíti az adatbázisait. Ezt követően futnia kell:
$ sudo apt-get install libmediastreamer-dev
A szükséges függőségi csomagok és maga a média streamer könyvtár automatikusan letöltődik és telepítődik.
A letöltött dependency deb csomagok teljes mérete körülbelül 35 MB lesz. A telepített csomag részletei a következő paranccsal érhetők el:
$ dpkg -s libmediastreamer-dev
Válasz példa:
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/
Fejlesztő eszközök telepítése
Telepítse a C fordítót és a hozzá tartozó eszközöket:
$ sudo apt-get install gcc
Az eredményt a fordító verziójának lekérdezésével ellenőrizzük:
$ gcc --version
A válasznak valami ilyesminek kell lennie:
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.
A próbaalkalmazás felépítése és futtatása
Mi létrehozunk otthon mappa oktatóprogramjaink számára, nevezzük így mstutorial:
$ mkdir ~/mstutorial
Használja kedvenc szövegszerkesztőjét, és hozzon létre egy C programfájlt mstest.c a következő tartalommal:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Inicializálja a média streamert, kinyomtat egy üdvözletet, és kilép.
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 figyelembe, hogy a vonal
`pkg-config mediastreamer --libs --cflags`
idézőjelek közé, amelyek a billentyűzeten ugyanazon a helyen találhatók, mint a "Ё" betű.
Ha a fájl nem tartalmaz hibákat, akkor a fordítás után egy fájl jelenik meg a könyvtárban mstest. Elindítjuk a programot:
$ ./mstest
Az eredmény a következő lesz:
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.
Ebben a listában az ALSA könyvtár által megjelenített hibaüzeneteket látjuk, ez a hangkártya vezérlésére szolgál. Maguk a média streamer fejlesztői úgy vélik, hogy ez normális. Ebben az esetben vonakodva értünk egyet velük.
Most már készen állunk a média streamerrel való munkára. Telepítettük a média streamer könyvtárat, a fordítóeszközt, és egy próbaalkalmazás segítségével ellenőriztük, hogy az eszközök konfigurálva vannak, és a média streamer sikeresen inicializálódik.
Következő
Forrás: will.com