Artiklens materiale er hentet fra min
Indledning
Denne artikel er begyndelsen på en serie artikler om mediebehandling i realtid ved hjælp af Mediastreamer2-motoren. Præsentationen vil involvere minimumsfærdighederne ved at arbejde i Linux-terminalen og programmere i C-sproget.
Mediastreamer2 er VoIP-motoren bag det populære open source-software voip-telefonprojekt.
Længere i teksten, for nemheds skyld, vil vi i stedet for ordet Mediastreamer2 bruge dets russiske notation: "mediestreamer".
Historien om dens oprettelse er ikke helt klar, men at dømme efter dens kildekode brugte den tidligere biblioteket
I hjertet af mediestreameren er en arkitektur kaldet "Data flow" (dataflow). Et eksempel på en sådan arkitektur er vist i figuren nedenfor.
I denne arkitektur er databehandlingsalgoritmen ikke specificeret af en programkode, men af et skema (graf) til at forbinde funktioner, der kan arrangeres i enhver rækkefølge. Disse funktioner kaldes filtre.
Denne arkitektur gør det muligt at implementere mediebehandlingsfunktionaliteten i form af et sæt filtre forbundet med VoIP-telefonens RTP-trafikbehandlings- og transmissionsskema.
Evnen til at kombinere filtre i vilkårlige skemaer, den enkle udvikling af nye filtre, implementeringen af mediestreameren som et uafhængigt separat bibliotek, gør det muligt at bruge det i andre projekter. Desuden kan projektet være inden for VoIP, da det er muligt at tilføje filtre lavet af sig selv.
Filterbiblioteket, der leveres som standard, er ret rigt og kan, som allerede nævnt, udvides med filtre af dit eget design. Men lad os først beskrive de færdiglavede filtre, der følger med mediestreameren. Her er deres liste:
Lydfiltre
Lydoptagelse og afspilning
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Indbygget Android-lyd (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)
- Kunst (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Filafspiller (raw/wav/pcap-filer) (Linux): MS_FILE_PLAYER
- Filafspiller (raw/wav-filer) (Windows): MS_WINSND_READ
- Skriv til fil (wav-filer) (Linux): MS_FILE_REC
- Skriv til fil (wav-filer) (Windows): MS_WINSND_WRITE
- Mac lydenhed (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-lyd (Windows)
Lydkodning/afkodning
- G.711 a-lov: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 µ-lov: 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ær PCM: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Lydbehandling
- Kanalkonvertering (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konference: MS_CONF
- DTMF Generator: MS_DTMF_GEN
- Ekkoannullering (speex): MS_SPEEX_EC
- Equalizer: MS_EQUALIZER
- Mixer: MS_MIXER
- Pakketabskompensator (PLC): MS_GENERIC_PLC
- Resampler: MS_RESAMPLE
- Tonedetektor: MS_TONE_DETECTOR
- Volumenkontrol og signalniveaumåling: MS_VOLUME
Video filtre
Videooptagelse og afspilning
- android capture
- android afspilning
- AV Foundation capture (iOS)
- AV Foundation-afspilning (iOS)
- DirectShow Capture (Windows)
- DrawDib-afspilning (Windows)
- Ekstern afspilning - Sender video til det øverste lag
- GLX-afspilning (Linux): MS_GLXVIDEO
- Mire - Syntetisk levende billede: MS_MIRE
- OpenGL-afspilning (Mac OS X)
- OpenGL ES2-afspilning (Android)
- Quicktime Capture (Mac OS X)
- SDL-afspilning: MS_SDL_OUT
- Statisk billedoutput: MS_STATIC_IMAGE
- Video til Linux (V4L)-optagelse (Linux): MS_V4L
- Video til Linux 2 (V4L2)-optagelse (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow)-optagelse (Windows)
- Video4windows (DirectShow)-optagelse (Windows CE)
- Video til Windows (vfw)-optagelse (Windows)
- XV-afspilning (Linux)
Videokodning/afkodning
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Sne: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (kun dekoder): MS_H264_DEC
- Theora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Videobehandling
- jpeg snapshot
- Pixelformatkonverter: MS_PIX_CONV
- Resizer
- Andre filtre
- Udveksling af datablokke mellem tråde: MS_ITC_SOURCE, MS_ITC_SINK
- Indsamling af datablokke fra flere input til et enkelt output: MS_JOIN
- RTP-modtagelse/transmission: MS_RTP_SEND, MS_RTP_RECV
- Kopiering af inputdata til flere udgange: MS_TEE
- Afsluttet belastning: MS_VOID_SINK
- Silence Kilde: MS_VOID_SOURCE
plugins
Lydfiltre
- AMR-NB encoder/dekoder
- G.729 koder/dekoder
- iLBC encoder/dekoder
- SILK encoder/dekoder
Video filtre
- H.264 software encoder
- H.264 V4L2 hardwareaccelereret koder/dekoder
Efter en kort beskrivelse af filteret vises navnet på typen, som bruges ved oprettelse af en ny instans af dette filter. I det følgende vil vi henvise til denne liste.
Installation under Linux Ubuntu
Nu vil vi installere mediestreameren på computeren og bygge vores første applikation med den.
Installation af Mediastremer2 på en computer eller virtuel maskine, der kører Ubuntu, kræver ingen særlige færdigheder. Her og nedenfor vil symbolet "$" angive shell-prompten for at indtaste kommandoer. De der. hvis du i listen ser dette symbol i begyndelsen af linjen, så er dette linjen, hvor kommandoer vises til at blive udført i terminalen.
Det antages, at din computer under trinene i denne artikel har adgang til internettet.
Installation af libmediastremer-dev-pakken
Start terminalen og skriv kommandoen:
$ sudo apt-get update
Du bliver bedt om en adgangskode for at foretage ændringer, indtast den, og pakkehåndteringen vil opdatere sine databaser. Derefter skal du køre:
$ sudo apt-get install libmediastreamer-dev
De nødvendige afhængighedspakker og selve mediestreamerbiblioteket vil automatisk blive downloadet og installeret.
Den samlede størrelse af de downloadede afhængighedsdeb-pakker vil være cirka 35 MB. Detaljer om den installerede pakke kan findes med kommandoen:
$ dpkg -s libmediastreamer-dev
Eksempel på svar:
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/
Installation af udviklingsværktøjer
Installer C-kompileren og dens medfølgende værktøjer:
$ sudo apt-get install gcc
Vi tjekker resultatet ved at forespørge compilerversionen:
$ gcc --version
Svaret burde være noget som dette:
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.
Opbygning og drift af prøveapplikationen
Vi skaber i hjem mappe til vores tutorial-projekter, lad os kalde det mtutorial:
$ mkdir ~/mstutorial
Brug din foretrukne teksteditor og opret en C-programfil kaldet mstest.c med følgende indhold:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Den initialiserer mediestreameren, udskriver en hilsen og afslutter.
Gem filen og kompiler testapplikationen med kommandoen:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Bemærk, at linjen
`pkg-config mediastreamer --libs --cflags`
omgivet af anførselstegn, som er placeret på tastaturet på samme sted som bogstavet "Ё".
Hvis filen ikke indeholder fejl, vises en fil i mappen efter kompilering mstest. Vi starter programmet:
$ ./mstest
Resultatet bliver således:
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.
I denne liste ser vi de fejlmeddelelser, som ALSA-biblioteket viser, det bruges til at styre lydkortet. Udviklerne af mediestreameren mener selv, at det er normalt. I dette tilfælde er vi modvilligt enige med dem.
Nu er vi alle klar til at arbejde med mediestreameren. Vi har installeret mediestreamerbiblioteket, kompileringsværktøjet og ved hjælp af en prøveapplikation bekræftet, at værktøjerne er konfigureret, og at mediestreameren initialiseres.
Næste
Kilde: www.habr.com