Materiál článku je převzat z mého
úvod
Tento článek je začátkem série článků o zpracování médií v reálném čase pomocí enginu Mediastreamer2. Prezentace bude zahrnovat minimální dovednosti práce v linuxovém terminálu a programování v jazyce C.
Mediastreamer2 je VoIP engine stojící za populárním open source softwarovým projektem voip telefonu.
Dále v textu budeme pro usnadnění místo slova Mediastreamer2 používat jeho ruský zápis: „media streamer“.
Historie jejího vzniku není zcela jasná, ale soudě podle zdrojového kódu dříve knihovnu využívala
Srdcem streameru médií je architektura zvaná "Data flow" (datový tok). Příklad takové architektury je znázorněn na obrázku níže.
V této architektuře není algoritmus zpracování dat specifikován programovým kódem, ale schématem (grafem) pro spojování funkcí, které mohou být uspořádány v libovolném pořadí. Tyto funkce se nazývají filtry.
Tato architektura umožňuje implementovat funkcionalitu zpracování médií ve formě sady filtrů připojených k schématu zpracování a přenosu RTP provozu VoIP telefonu.
Schopnost kombinovat filtry do libovolných schémat, jednoduchý vývoj nových filtrů, implementace media streameru jako samostatné samostatné knihovny, umožňují jeho použití v dalších projektech. Kromě toho může být projekt v oblasti VoIP, protože je možné přidat filtry vyrobené vlastními silami.
Standardně dodávaná knihovna filtrů je poměrně bohatá a jak již bylo řečeno, lze ji rozšířit o filtry vlastní konstrukce. Nejprve si ale popišme hotové filtry, které jsou součástí media streameru. Zde je jejich seznam:
Zvukové filtry
Snímání a přehrávání zvuku
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Nativní zvuk Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Služba zvukové fronty (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Služba zvukové jednotky (Mac OS X)
- Umění (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Přehrávač souborů (soubory raw/wav/pcap) (Linux): MS_FILE_PLAYER
- Přehrávač souborů (soubory raw/wav) (Windows): MS_WINSND_READ
- Zápis do souboru (soubory wav) (Linux): MS_FILE_REC
- Zápis do souboru (soubory wav) (Windows): MS_WINSND_WRITE
- Zvuková jednotka Mac (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
- Zvuk systému Windows (Windows)
Kódování/dekódování zvuku
- G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 µ-zákon: 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ární PCM: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Zpracování zvuku
- Převod kanálů (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konference: MS_CONF
- Generátor DTMF: MS_DTMF_GEN
- Potlačení ozvěny (speex): MS_SPEEX_EC
- Ekvalizér: MS_EQUALIZER
- Mixér: MS_MIXER
- Kompenzátor ztráty paketů (PLC): MS_GENERIC_PLC
- Převzorkovač: MS_RESAMPLE
- Tónový detektor: MS_TONE_DETECTOR
- Ovládání hlasitosti a měření úrovně signálu: MS_VOLUME
Video filtry
Snímání a přehrávání videa
- zachycení androidu
- přehrávání android
- AV Foundation capture (iOS)
- Přehrávání AV Foundation (iOS)
- DirectShow Capture (Windows)
- Přehrávání DrawDib (Windows)
- Externí přehrávání – Odeslání videa do horní vrstvy
- Přehrávání GLX (Linux): MS_GLXVIDEO
- Mire - Syntetický pohyblivý obraz: MS_MIRE
- Přehrávání OpenGL (Mac OS X)
- Přehrávání OpenGL ES2 (Android)
- Quicktime Capture (Mac OS X)
- Přehrávání SDL: MS_SDL_OUT
- Výstup statického obrazu: MS_STATIC_IMAGE
- Video pro Linux (V4L) zachycení (Linux): MS_V4L
- Video pro Linux 2 (V4L2) zachycení (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow) zachycení (Windows)
- Video4windows (DirectShow) zachycení (Windows CE)
- Video pro Windows (vfw) zachycení (Windows)
- Přehrávání XV (Linux)
Kódování/dekódování videa
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, sníh: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (pouze dekodér): MS_H264_DEC
- Teorie: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Zpracování videa
- snímek jpeg
- Převodník formátu pixelů: MS_PIX_CONV
- Resizer
- Jiné filtry
- Výměna datových bloků mezi vlákny: MS_ITC_SOURCE, MS_ITC_SINK
- Shromažďování bloků dat z více vstupů do jednoho výstupu: MS_JOIN
- RTP příjem/vysílání: MS_RTP_SEND, MS_RTP_RECV
- Kopírování vstupních dat na více výstupů: MS_TEE
- Ukončené zatížení: MS_VOID_SINK
- Ticho Zdroj: MS_VOID_SOURCE
Плагины
Zvukové filtry
- Kodér/dekodér AMR-NB
- G.729 kodér/dekodér
- iLBC kodér/dekodér
- SILK kodér/dekodér
Video filtry
- Softwarový kodér H.264
- H.264 V4L2 hardwarově akcelerovaný kodér/dekodér
Po krátkém popisu filtru se zobrazí název typu, který je použit při vytváření nové instance tohoto filtru. V následujícím se budeme odvolávat na tento seznam.
Instalace pod Linuxem Ubuntu
Nyní nainstalujeme streamer médií do počítače a vytvoříme s ním naši první aplikaci.
Instalace Mediastremer2 na počítač nebo virtuální stroj se systémem Ubuntu nevyžaduje žádné speciální dovednosti. Zde a níže bude symbol "$" označovat výzvu shellu pro zadávání příkazů. Tito. pokud ve výpisu vidíte tento symbol na začátku řádku, pak je to řádek, ve kterém jsou zobrazeny příkazy, které mají být provedeny v terminálu.
Předpokládá se, že během kroků v tomto článku má váš počítač přístup k internetu.
Instalace balíčku libmediastremer-dev
Spusťte terminál a zadejte příkaz:
$ sudo apt-get update
Budete požádáni o heslo pro provedení změn, zadejte je a správce balíčků aktualizuje své databáze. Poté musíte spustit:
$ sudo apt-get install libmediastreamer-dev
Potřebné balíčky závislostí a samotná knihovna pro streamování médií budou automaticky staženy a nainstalovány.
Celková velikost stažených závislých deb balíčků bude přibližně 35 MB. Podrobnosti o nainstalovaném balíčku lze nalézt pomocí příkazu:
$ dpkg -s libmediastreamer-dev
Příklad odpovědi:
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/
Instalace vývojových nástrojů
Nainstalujte kompilátor C a jeho doprovodné nástroje:
$ sudo apt-get install gcc
Výsledek zkontrolujeme dotazem na verzi kompilátoru:
$ gcc --version
Odpověď by měla znít nějak takto:
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.
Vytvoření a spuštění zkušební aplikace
Tvoříme v domov složka pro naše výukové projekty, říkejme tomu mstutorial:
$ mkdir ~/mstutorial
Použijte svůj oblíbený textový editor a vytvořte soubor programu C s názvem mstest.c s následujícím obsahem:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Inicializuje streamer médií, vytiskne pozdrav a ukončí se.
Uložte soubor a zkompilujte testovací aplikaci pomocí příkazu:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Všimněte si, že řádek
`pkg-config mediastreamer --libs --cflags`
uzavřeny v uvozovkách, které jsou umístěny na klávesnici na stejném místě jako písmeno "Ё".
Pokud soubor neobsahuje chyby, po kompilaci se v adresáři objeví soubor mstest. Spouštíme program:
$ ./mstest
Výsledek bude takový:
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.
V tomto výpisu vidíme chybové zprávy, které zobrazuje knihovna ALSA, slouží k ovládání zvukové karty. Sami vývojáři media streameru věří, že je to normální. V tomto případě s nimi chtě nechtě souhlasíme.
Nyní jsme všichni připraveni pracovat s mediálním streamerem. Nainstalovali jsme knihovnu pro streamování médií, nástroj pro kompilaci a pomocí zkušební aplikace jsme ověřili, že jsou nástroje nakonfigurovány a že se streamer médií úspěšně inicializuje.
další
Zdroj: www.habr.com