Materialet i artikeln är hämtat från min
Inledning
Den här artikeln är början på en serie artiklar om mediabearbetning i realtid med hjälp av Mediastreamer2-motorn. Presentationen kommer att involvera de minsta färdigheterna att arbeta i Linux-terminalen och programmera i C-språket.
Mediastreamer2 är VoIP-motorn bakom det populära voip-telefonprojektet med öppen källkod.
Längre i texten, för enkelhetens skull, istället för ordet Mediastreamer2 kommer vi att använda dess ryska notation: "mediastreamer".
Historien om dess skapelse är inte helt klar, men att döma av dess källkod använde den tidigare biblioteket
I hjärtat av mediastreamern finns en arkitektur som kallas "Dataflöde" (dataflöde). Ett exempel på en sådan arkitektur visas i figuren nedan.
I denna arkitektur specificeras databehandlingsalgoritmen inte av en programkod, utan av ett schema (graf) för att ansluta funktioner som kan ordnas i valfri ordning. Dessa funktioner kallas filter.
Denna arkitektur gör det möjligt att implementera mediebehandlingsfunktionen i form av en uppsättning filter kopplade i ett schema för bearbetning och överföring av RTP-trafik från en VoIP-telefon.
Möjligheten att kombinera filter till godtyckliga scheman, den enkla utvecklingen av nya filter, implementeringen av mediastreamern som ett oberoende separat bibliotek, gör att den kan användas i andra projekt. Dessutom kan projektet vara inom området VoIP, eftersom det är möjligt att lägga till filter gjorda av sig själv.
Filterbiblioteket som tillhandahålls som standard är ganska rikt och kan, som redan nämnts, utökas med filter av vår egen design. Men låt oss först beskriva de färdiga filtren som följer med mediastreamern. Här är deras lista:
Ljudfilter
Ljudinspelning och uppspelning
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Android-ljud (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)
- Konst (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Filspelare (raw/wav/pcap-filer) (Linux): MS_FILE_PLAYER
- Filspelare (raw/wav-filer) (Windows): MS_WINSND_READ
- Skriv till fil (wav-filer) (Linux): MS_FILE_REC
- Skriv till fil (wav-filer) (Windows): MS_WINSND_WRITE
- Mac Audio Unit (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 Sound (Windows)
Ljudkodning/avkodning
- G.711 a-lag: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 µ-lag: 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
- Linjär PCM: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Ljudbearbetning
- Kanalkonvertering (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konferens: MS_CONF
- DTMF-generator: MS_DTMF_GEN
- Eko-avstängning (speex): MS_SPEEX_EC
- Equalizer: MS_EQUALIZER
- Mixer: MS_MIXER
- Paketförlustkompensator (PLC): MS_GENERIC_PLC
- Omsamplare: MS_RESAMPLE
- Tondetektor: MS_TONE_DETECTOR
- Volymkontroll och signalnivåmätning: MS_VOLUME
Videofilter
Videoinspelning och uppspelning
- android fånga
- android uppspelning
- AV Foundation capture (iOS)
- AV Foundation-uppspelning (iOS)
- DirectShow Capture (Windows)
- DrawDib-uppspelning (Windows)
- Extern uppspelning - Skickar video till det översta lagret
- GLX-uppspelning (Linux): MS_GLXVIDEO
- Mire - Syntetisk rörlig bild: MS_MIRE
- OpenGL-uppspelning (Mac OS X)
- OpenGL ES2-uppspelning (Android)
- Quicktime Capture (Mac OS X)
- SDL-uppspelning: MS_SDL_OUT
- Statisk bildutgång: MS_STATIC_IMAGE
- Videoinspelning för Linux (V4L) (Linux): MS_V4L
- Videoinspelning för Linux 2 (V4L2) (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow) fånga (Windows)
- Video4windows (DirectShow) fånga (Windows CE)
- Videoinspelning för Windows (vfw) (Windows)
- XV-uppspelning (Linux)
Videokodning/avkodning
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (endast avkodare): MS_H264_DEC
- Theora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Videobearbetning
- jpeg ögonblicksbild
- Pixelformatkonverterare: MS_PIX_CONV
- Resizer
- Andra filter
- Utbyte av datablock mellan trådar: MS_ITC_SOURCE, MS_ITC_SINK
- Samla in datablock från flera ingångar till en enda utgång: MS_JOIN
- RTP-mottagning/sändning: MS_RTP_SEND, MS_RTP_RECV
- Kopierar indata till flera utgångar: MS_TEE
- Avbruten laddning: MS_VOID_SINK
- Tystnadskälla: MS_VOID_SOURCE
plugin-program
Ljudfilter
- AMR-NB kodare/avkodare
- G.729 kodare/avkodare
- iLBC-kodare/avkodare
- SILK kodare/avkodare
Videofilter
- H.264 mjukvarukodare
- H.264 V4L2 hårdvaruaccelererad kodare/avkodare
Efter en kort beskrivning av filtret visas namnet på typen som används när man skapar en ny instans av detta filter. I det följande kommer vi att hänvisa till denna lista.
Installation under Linux Ubuntu
Nu ska vi installera mediastreamern på datorn och bygga vår första applikation med den.
Att installera Mediastremer2 på en dator eller virtuell maskin som kör Ubuntu kräver inga speciella färdigheter. Här och nedan kommer symbolen "$" att beteckna skalprompten för att ange kommandon. De där. om du i listan ser den här symbolen i början av raden, så är det här raden där kommandon visas att utföras i terminalen.
Det antas att din dator har tillgång till Internet under stegen i den här artikeln.
Installerar paketet libmediastremer-dev
Starta terminalen och skriv kommandot:
$ sudo apt-get update
Du kommer att bli ombedd att ange ett lösenord för att göra ändringar, ange det och pakethanteraren kommer att uppdatera sina databaser. Efter det måste du köra:
$ sudo apt-get install libmediastreamer-dev
De nödvändiga beroendepaketen och själva mediastreamerbiblioteket kommer att laddas ner och installeras automatiskt.
Den totala storleken på de nedladdade beroendedeb-paketen kommer att vara cirka 35 MB. Detaljer om det installerade paketet kan hittas med kommandot:
$ dpkg -s libmediastreamer-dev
Svarsexempel:
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/
Installera utvecklingsverktyg
Installera C-kompilatorn och dess medföljande verktyg:
$ sudo apt-get install gcc
Vi kontrollerar resultatet genom att begära kompilatorversionen:
$ gcc --version
Svaret borde vara ungefär så här:
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.
Bygga och köra testapplikationen
Vi skapar i hem mapp för våra tutorialprojekt, låt oss kalla det mtutorial:
$ mkdir ~/mstutorial
Använd din favorittextredigerare och skapa en C-programfil som heter mstest.c med följande innehåll:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Den initierar mediastreamern, skriver ut en hälsning och avslutar.
Spara filen och kompilera testapplikationen med kommandot:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Observera att linjen
`pkg-config mediastreamer --libs --cflags`
omges av citattecken, som finns på tangentbordet på samma plats som bokstaven "Ё".
Om filen inte innehåller fel, kommer en fil att visas i katalogen efter kompileringen mstest. Vi startar programmet:
$ ./mstest
Resultatet blir så här:
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 denna lista ser vi de felmeddelanden som ALSA-biblioteket visar, det används för att styra ljudkortet. Utvecklarna av mediastreamern anser själva att detta är normalt. I det här fallet håller vi motvilligt med dem.
Nu är vi alla redo att arbeta med mediastreamern. Vi har installerat mediastreamerbiblioteket, kompileringsverktyget, och med hjälp av en testapplikation har vi verifierat att verktygen är konfigurerade och att mediastreamern initieras framgångsrikt.
Nästa
Källa: will.com