A Mediastreamer2 VoIP motor felfedezése. 1. rész

A cikk anyaga az én zen csatorna.

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. telefon. A Linphone Mediastreamer2 minden hanggal és videóval kapcsolatos funkciót megvalósít. A motor jellemzőinek részletes listája megtekinthető ezen a Mediastreamer oldalon. A forráskód itt található: GitLab.

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 Sima, ami mintha egy lehetséges távoli kapcsolatra utalna Gstreamer. Amihez képest a média streamer könnyebbnek tűnik. A Linphone első verziója 2001-ben jelent meg, tehát jelenleg a média streamer közel 20 éve létezik és fejlődik.

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ó.

A Mediastreamer2 VoIP motor felfedezése. 1. rész

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ő cikk Létrehozunk egy alkalmazást, amely több szűrőből álló láncban összeállítja és futtatja a hangjel feldolgozását.

Forrás: will.com