Materiál článku je prevzatý z môjho
Úvod
Tento článok je začiatkom série článkov o spracovaní médií v reálnom čase pomocou enginu Mediastreamer2. Počas prezentácie budú zahrnuté minimálne zručnosti v práci v linuxovom termináli a programovaní v jazyku C.
Mediastreamer2 je modul VoIP, ktorý stojí za populárnym projektom voip telefónov s otvoreným zdrojovým kódom.
Ďalej v texte pre pohodlie namiesto slova Mediastreamer2 použijeme jeho ruský zápis: „media streamer“.
História jeho vzniku nie je úplne jasná, ale súdiac podľa zdrojového kódu, predtým využíval knižnicu
Srdcom streamera médií je architektúra nazývaná „Data flow“ (tok údajov). Príklad takejto architektúry je znázornený na obrázku nižšie.
V tejto architektúre nie je algoritmus spracovania dát špecifikovaný programovým kódom, ale schémou (grafom) na prepojenie funkcií, ktoré môžu byť usporiadané v ľubovoľnom poradí. Tieto funkcie sa nazývajú filtre.
Táto architektúra umožňuje implementovať funkcionalitu spracovania médií vo forme sady filtrov zapojených do schémy na spracovanie a prenos RTP prevádzky telefónu VoIP.
Schopnosť kombinovať filtre do ľubovoľných schém, jednoduchý vývoj nových filtrov, implementácia media streamera ako samostatnej samostatnej knižnice, umožňujú jeho využitie aj v iných projektoch. Okrem toho môže byť projekt v oblasti VoIP, pretože je možné pridať filtre vyrobené sami.
Štandardne dodávaná knižnica filtrov je pomerne bohatá a ako už bolo spomenuté, je možné ju rozšíriť o filtre vlastnej konštrukcie. Najprv si však popíšeme hotové filtre, ktoré sa dodávajú so streamerom médií. Tu je ich zoznam:
Zvukové filtre
Snímanie a prehrávanie zvuku
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Natívny zvuk Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Služba zvukového frontu (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Služba zvukovej jednotky (Mac OS X)
- Umenie (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Prehrávač súborov (súbory raw/wav/pcap) (Linux): MS_FILE_PLAYER
- Prehrávač súborov (súbory raw/wav) (Windows): MS_WINSND_READ
- Zápis do súboru (súbory wav) (Linux): MS_FILE_REC
- Zápis do súboru (súbory 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ódovanie/dekódovanie zvuku
- G.711 a-zákon: 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árne PCM: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Spracovanie zvuku
- Konverzia kanálov (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konferencia: MS_CONF
- Generátor DTMF: MS_DTMF_GEN
- Potlačenie ozveny (speex): MS_SPEEX_EC
- Ekvalizér: MS_EQUALIZER
- Mixér: MS_MIXER
- Kompenzátor straty paketov (PLC): MS_GENERIC_PLC
- Prevzorkovač: MS_RESAMPLE
- Tónový detektor: MS_TONE_DETECTOR
- Ovládanie hlasitosti a meranie úrovne signálu: MS_VOLUME
Video filtre
Snímanie a prehrávanie videa
- android snímanie
- prehrávanie v systéme Android
- AV Foundation capture (iOS)
- Prehrávanie AV Foundation (iOS)
- DirectShow Capture (Windows)
- Prehrávanie DrawDib (Windows)
- Externé prehrávanie – odosielanie videa do hornej vrstvy
- Prehrávanie GLX (Linux): MS_GLXVIDEO
- Mire - Syntetický pohyblivý obraz: MS_MIRE
- Prehrávanie OpenGL (Mac OS X)
- Prehrávanie OpenGL ES2 (Android)
- Quicktime Capture (Mac OS X)
- Prehrávanie SDL: MS_SDL_OUT
- Výstup statického obrazu: MS_STATIC_IMAGE
- Zachytenie videa pre Linux (V4L) (Linux): MS_V4L
- Zachytenie videa pre Linux 2 (V4L2) (Linux): MS_V4L2_CAPTURE
- Snímanie Video4windows (DirectShow) (Windows)
- Snímanie Video4windows (DirectShow) (Windows CE)
- Zachytenie videa pre Windows (vfw) (Windows)
- Prehrávanie XV (Linux)
Kódovanie/dekódovanie videa
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, sneh: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (len dekodér): MS_H264_DEC
- Teória: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Spracovanie videa
- snímka jpeg
- Konvertor formátu pixelov: MS_PIX_CONV
- Resizer
- Iné filtre
- Výmena dátových blokov medzi vláknami: MS_ITC_SOURCE, MS_ITC_SINK
- Zhromažďovanie blokov údajov z viacerých vstupov do jedného výstupu: MS_JOIN
- RTP príjem/prenos: MS_RTP_SEND, MS_RTP_RECV
- Kopírovanie vstupných údajov do viacerých výstupov: MS_TEE
- Ukončené zaťaženie: MS_VOID_SINK
- Ticho Zdroj: MS_VOID_SOURCE
Pluginy
Zvukové filtre
- AMR-NB kodér/dekodér
- kódovač/dekodér G.729
- iLBC kodér/dekodér
- SILK kodér/dekodér
Video filtre
- Softvérový kódovač H.264
- H.264 V4L2 hardvérovo akcelerovaný kodér/dekodér
Po krátkom popise filtra sa zobrazí názov typu, ktorý sa použije pri vytváraní novej inštancie tohto filtra. V nasledujúcom texte sa budeme odvolávať na tento zoznam.
Inštalácia pod Linuxom Ubuntu
Teraz nainštalujeme streamer médií do počítača a vytvoríme s ním našu prvú aplikáciu.
Inštalácia Mediastremer2 na počítač alebo virtuálny stroj so systémom Ubuntu nevyžaduje žiadne špeciálne zručnosti. Tu a nižšie bude symbol "$" označovať výzvu shellu na zadávanie príkazov. Tie. ak vo výpise vidíte tento symbol na začiatku riadku, potom je to riadok, v ktorom sú zobrazené príkazy, ktoré sa majú vykonať v termináli.
Predpokladá sa, že počas krokov v tomto článku má váš počítač prístup na internet.
Inštalácia balíka libmediastremer-dev
Spustite terminál a zadajte príkaz:
$ sudo apt-get update
Na vykonanie zmien budete požiadaní o heslo, zadajte ho a správca balíkov aktualizuje svoje databázy. Potom musíte spustiť:
$ sudo apt-get install libmediastreamer-dev
Automaticky sa stiahnu a nainštalujú potrebné balíčky závislostí a samotná knižnica streamovania médií.
Celková veľkosť stiahnutých deb balíčkov závislostí bude približne 35 MB. Podrobnosti o nainštalovanom balíku nájdete pomocou príkazu:
$ dpkg -s libmediastreamer-dev
Príklad odpovede:
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/
Inštalácia vývojových nástrojov
Nainštalujte kompilátor C a jeho sprievodné nástroje:
$ sudo apt-get install gcc
Výsledok skontrolujeme dotazom na verziu kompilátora:
$ gcc --version
Odpoveď by mala byť asi takáto:
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.
Vytvorenie a spustenie skúšobnej aplikácie
Tvoríme v domov priečinok pre naše výukové projekty, nazvime to mstutorial:
$ mkdir ~/mstutorial
Použite svoj obľúbený textový editor a vytvorte súbor programu C s názvom mstest.c s nasledujúcim obsahom:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Inicializuje streamer médií, vytlačí pozdrav a ukončí sa.
Uložte súbor a zostavte testovaciu aplikáciu pomocou príkazu:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Všimnite si, že riadok
`pkg-config mediastreamer --libs --cflags`
v úvodzovkách, ktoré sú umiestnené na klávesnici na rovnakom mieste ako písmeno „Ё“.
Ak súbor neobsahuje chyby, po kompilácii sa v adresári objaví súbor mstest. Spustíme program:
$ ./mstest
Výsledok bude takýto:
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ýpise vidíme chybové hlásenia, ktoré zobrazuje knižnica ALSA, slúži na ovládanie zvukovej karty. Samotní vývojári mediálneho streamera veria, že je to normálne. V tomto prípade s nimi len neochotne súhlasíme.
Teraz sme všetci pripravení pracovať s mediálnym streamerom. Nainštalovali sme knižnicu streamovania médií, nástroj na kompiláciu a pomocou skúšobnej aplikácie sme overili, či sú nástroje nakonfigurované a či sa streamer médií úspešne inicializuje.
Ďalšie
Zdroj: hab.com