Artikelmaterialet Àr hÀmtat frÄn min .
Introduktion
Den hÀr artikeln Àr början pÄ en serie artiklar om realtidsbehandling av mediadata med hjÀlp av motoren Mediastreamer2. Under framstÀllningen kommer minimala fÀrdigheter i Linux-terminal och programmering i C att anvÀndas.
Mediastreamer2 Àr en VoIP-motor som ligger till grund för det populÀra öppen kÀllkodsprojektet för programvaruvoip-telefonen. . I Linphone implementerar Mediastreamer2 alla funktioner relaterade till ljud och video. En detaljerad lista över motorens möjligheter kan ses pÄ den hÀr sidan Mediastreamer. KÀllkoden finns hÀr: .
För att underlĂ€tta kommer vi i texten att anvĂ€nda den ryska notationen för Mediastreamer2: Â«ĐŒĐ”ĐŽĐžĐ°ŃŃŃĐžĐŒĐ”Ń».
Historien om dess skapande Àr inte helt tydlig, men enligt dess kÀllkod anvÀnde den tidigare biblioteket , vilket antyder en potentiell avlÀgsen slÀktskap med . JÀmfört med det ser mediastreamern mer lÀttviktig ut. Den första versionen av Linphone slÀpptes 2001, sÄ just nu har mediastreamern funnits och utvecklats i nÀstan 20 Är.
I grunden för mediastreamern ligger en arkitektur som kallas "Data flow" (datatström). Ett exempel pÄ en sÄdan arkitektur visas i bilden nedan.

I denna arkitektur definieras algoritmen för databehandling inte av programkod, utan av en schema (graf) som kopplar samman funktioner, som kan ordnas i valfri ordning. Dessa funktioner kallas filter.
Denna arkitektur gör det möjligt att implementera funktionaliteten för mediahantering som en uppsÀttning filter som kopplas ihop i ett schema för bearbetning och överföring av RTP-trafik till VoIP-telefonen.
Möjligheten att koppla filter i godtyckliga scheman, enkel utveckling av nya filter och implementeringen av mediastreamern som ett fristÄende, separat bibliotek möjliggör dess anvÀndning i andra projekt. Dessutom kan projektet vara inom VoIP, eftersom det finns möjligheter att lÀgga till filter som du sjÀlv har skapat.
Det förinstallerade filterbiblioteket Àr ganska omfattande och som redan nÀmnts kan det utvidgas med filter av egen utveckling. Men först ska vi beskriva de fÀrdiga filter som levereras tillsammans med mediastreamern. HÀr Àr deras lista:
Ljudfilter
Inspelning och uppspelning av ljud
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Android native sound (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)
- Arts (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- Filspelare för filer (raw/wav/pcap-filer) (Linux): MS_FILE_PLAYER
- Filspelare för filer (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-ljud (Windows)
Kodning/decodning av ljud
- G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC
- G.711 ”-law: 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Àra PCM: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Ljudbehandling
- Kanalkonvertering (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konferens: MS_CONF
- DTMF-generator: MS_DTMF_GEN
- EkkodÀmpning (speex): MS_SPEEX_EC
- Equalizer: MS_EQUALIZER
- Mixer: MS_MIXER
- Pakettapp kompensator (PLC): MS_GENERIC_PLC
- Resampler: MS_RESAMPLE
- Ton-detektor: MS_TONE_DETECTOR
- Volymkontroll och signalnivÄmÀtning: MS_VOLUME
Videofilter
VideofÄngst och -uppspelning
- Android-fÄngst
- Android-uppspelning
- AV Foundation-fÄngst (iOS)
- AV Foundation-uppspelning (iOS)
- DirectShow-fÄngst (Windows)
- DrawDib-uppspelning (Windows)
- Extern uppspelning â Skicka video till hög nivĂ„
- GLX-uppspelning (Linux): MS_GLXVIDEO
- Mire â Syntetisk rörlig bild: MS_MIRE
- OpenGL-uppspelning (Mac OS X)
- OpenGL ES2-uppspelning (Android)
- Quicktime-fÄngst (Mac OS X)
- SDL-uppspelning: MS_SDL_OUT
- Utdata av statiska bilder: MS_STATIC_IMAGE
- Video For Linux (V4L) fÄngst (Linux): MS_V4L
- Video For Linux 2 (V4L2) fÄngst (Linux): MS_V4L2_CAPTURE
- Video4windows (DirectShow) fÄngst (Windows)
- Video4windows (DirectShow) fÄngst (Windows CE)
- Video For Windows (vfw) fÄngst (Windows)
- XV-uppspelning (Linux)
Kodning/decodning av video
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (endast decoder): MS_H264_DEC
- Theora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Videobehandling
- JPEG snapshot
- Pixelformatkonverterare: MS_PIX_CONV
- Resizer
- Andra filter
- Byte av datablok mellan trÄdar: MS_ITC_SOURCE, MS_ITC_SINK
- Samla datablok frÄn flera ingÄngar till en utgÄng: MS_JOIN
- RTP mottagning/överföring: MS_RTP_SEND, MS_RTP_RECV
- Kopiera ingÄngsdata till flera utgÄngar: MS_TEE
- Konsistent belastning: MS_VOID_SINK
- TysthetskÀlla: MS_VOID_SOURCE
Plugins
Ljudfilter
- AMR-NB kodare/decoder
- G.729 kodare/decoder
- iLBC kodare/decoder
- SILK kodare/decoder
Videofilter
- H.264 programkodare
- H.264 V4L2 kodare/decoder med hÄrdvaruacceleration
Efter en kort beskrivning av filtret visas typnamnet som anvÀnds för att skapa en ny instans av detta filter. I fortsÀttningen kommer vi att hÀnvisa till den hÀr listan.
Installation pÄ Linux Ubuntu
Nu kommer vi att installera mediastreamern pÄ datorn och bygga vÄr första applikation med den.
Installationen av Mediastremer2 pĂ„ datorn eller virtuella maskinen som kör Ubuntu krĂ€ver inga speciella fĂ€rdigheter. HĂ€r och framĂ„t kommer vi att anvĂ€nda tecknet â$â för att beteckna kommandotolken för inmatning av kommandon. D.v.s. om du ser detta tecken i början av en rad i listan, betyder det att det Ă€r en rad som visar kommandon som ska köras i terminalen.
Det antas att din dator har tillgÄng till Internet under genomförandet av ÄtgÀrderna som beskrivs i denna artikel.
Installation av paketet libmediastremer-dev
Ăppna terminalen och skriv in kommandot:
$ sudo apt-get updateDu 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 detta mÄste du köra:
$ sudo apt-get install libmediastreamer-devNödvÀndiga beroendepaket och sjÀlva mediastreamerbiblioteket kommer automatiskt att laddas ner och installeras.
Den totala storleken pÄ de nedladdade deb-baserade beroendepaketen kommer att vara ungefÀr 35 MB. Detaljer om den installerade paketet kan fÄs med kommandot:
$ dpkg -s libmediastreamer-devExempel pÄ svar:
Paket: libmediastreamer-dev
Status: installerat ok installerat
Prioritet: valfri
Avsnitt: libdevel
Installerad storlek: 244
UnderhÄllare: Ubuntu Developers
Arkitektur: amd64
KĂ€lla: linphone
Version: 3.6.1-2.5
Beroenden: libmediastreamer-base3 (= 3.6.1-2.5), libortp-dev
Beskrivning: Linphone webbtelefonens mediebibliotek - utvecklingsfiler
Linphone Àr en ljud- och video-internettelefon som anvÀnder SIP-protokollet.
Den har ett GTK+ och konsolgrÀnssnitt, inkluderar en stor variation av ljud- och videokodekar, och erbjuder IM-funktioner.
.
Detta paket innehÄller utvecklingsbiblioteken för hantering av mediaoperationer.
Ursprunglig underhÄllare: Debian VoIP Team
Startsida: http://www.linphone.org/
Installation av utvecklingsverktyg
Vi installerar C-kompilatorn och tillhörande verktyg:
$ sudo apt-get install gccKontrollera resultatet genom att begÀra kompilatorns version:
$ gcc --versionSvaret ska 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.
Detta Àr fri programvara; se kÀllan för kopieringsvillkor. Det finns INGEN
garanti; inte ens för SALGBARHET eller LĂMPLIGHET FĂR ETT VISST SYFTE.Bygg och kör en provapplikation
Skapa en home mapp för vÄra utbildningsprojekt, kalla den mstutorial:
$ mkdir ~/mstutorialAnvÀ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");
}Det initierar mediastreamern, skriver ut ett vÀlkomnande och avslutar körningen.
Spara filen och kompilera testapplikationen med följande kommando:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`Observera att raden
`pkg-config mediastreamer --libs --cflags`Ă€r innesluten i citationstecken, som finns pĂ„ tangentbordet dĂ€r bokstaven «Đ» ocksĂ„ finns.
Om filen inte innehÄller nÄgra fel, kommer en fil att skapas i katalogen efter kompileringen. mstest. Vi kör programmet:
$ .\/mstestResultatet kommer att se ut sÄ hÀr:
ALSA lib conf.c:4738:(snd_config_expand) OkÀnda parametrar 0
ALSA lib control.c:954:(snd_ctl_open_noupdate) Ogiltig CTL default:0
ortp-warning-Kunde inte fÀsta mixer till kort: Ogiltigt argument
ALSA lib conf.c:4738:(snd_config_expand) OkÀnda parametrar 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) OkÀnd PCM default:0
ALSA lib conf.c:4738:(snd_config_expand) OkÀnda parametrar 0
ALSA lib pcm.c:2266:(snd_pcm_open_noupdate) OkÀnd PCM default:0
ortp-warning-Konstig, ljudkort HDA Intel PCH verkar inte vara kapabel till nÄgonting, försöker igen med plughw...
Mediastreamer Àr redo.I detta utdrag ser vi felmeddelanden som ALSA-biblioteket ger, som anvÀnds för att styra ljudkortet. SjÀlva utvecklarna av mediastreamern anser att detta Àr normalt. I detta fall hÄller vi oss motvilligt med dem.
Nu har vi allt klart för att arbeta med mediastreamern. Vi har installerat mediastreamer-biblioteket, kompilering verktyget och genom ett testprogram kontrollerat att verktygen Àr instÀllda och att mediastreamern initieras framgÄngsrikt.
I nÀsta vi kommer att skapa en applikation som samlar in och kör ljudsignalbehandling i en kedja av flera filter.
KĂ€lla: habr.com
