Entdeckt de Mediastreamer2 VoIP-Motor. Deel 1

D'Material vum Artikel ass aus mengem zen Kanal.

Aféierung

Dësen Artikel ass den Ufank vun enger Serie vun Artikelen iwwer Echtzäit Medienveraarbechtung mam Mediastreamer2 Motor. Wärend der Presentatioun sinn d'Mindestfäegkeete fir am Linux-Terminal ze schaffen an an der C Sprooch ze programméieren.

Mediastreamer2 ass de VoIP-Motor hannert dem populäre Open-Source Software Voip Telefonprojet. Telefon. An Linphone Mediastreamer2 implementéiert all Funktiounen am Zesummenhang mat Toun a Video. Eng detailléiert Lëscht vu Motorfeatures kann op dëser Mediastreamer Säit gesi ginn. De Quellcode ass hei: GitLab.

Weider am Text, fir d'Bequemlechkeet, amplaz vum Wuert Mediastreamer2 wäerte mir seng russesch Notatioun benotzen: "Medienstreamer".

D'Geschicht vu senger Schafung ass net ganz kloer, awer no sengem Quellcode beurteelen, huet se d'Bibliothéik virdru benotzt glib, déi, wéi et war, Hiweiser op eng méiglech wäit Relatioun mat GStreamer. Am Verglach mat deem de Medienstreamer méi liicht ausgesäit. Déi éischt Versioun vu Linphone koum am Joer 2001, also am Moment existéiert de Medienstreamer an entwéckelt sech fir bal 20 Joer.

Am Häerz vum Media Streamer ass eng Architektur genannt "Data Flow" (Date Flow). E Beispill vun esou enger Architektur ass an der Figur ënnendrënner gewisen.

Entdeckt de Mediastreamer2 VoIP-Motor. Deel 1

An dëser Architektur gëtt den Dateveraarbechtungsalgorithmus net duerch e Programmcode spezifizéiert, mee duerch e Schema (Grafik) fir Funktiounen ze verbannen, déi an all Uerdnung arrangéiert kënne ginn. Dës Funktiounen ginn Filtere genannt.

Dës Architektur mécht et méiglech d'Medienveraarbechtungsfunktionalitéit an der Form vun enger Rei vu Filteren ëmzesetzen, déi mam VoIP Telefon RTP Traffic Veraarbechtung an Iwwerdroungsschema verbonne sinn.

D'Kapazitéit fir Filteren an arbiträr Schemaen ze kombinéieren, déi einfach Entwécklung vun neie Filteren, d'Ëmsetzung vum Media Streamer als onofhängeg separat Bibliothéik erlaabt et an anere Projeten ze benotzen. Ausserdeem kann de Projet am VoIP-Beräich sinn, well et méiglech ass Filteren ze addéieren, déi selwer gemaach goufen.

D'Filterbibliothéik, déi als Standard geliwwert gëtt, ass zimlech räich a, wéi scho gesot, kann mat Filtere vun Ärem eegenen Design verlängert ginn. Awer als éischt, loosst eis déi fäerdeg Filteren beschreiwen déi mam Media Streamer kommen. Hei ass hir Lëscht:

Sound Filtere

Audio Capture a Playback

  • 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
  • Dateispiller (raw/wav/pcap Dateien) (Linux): MS_FILE_PLAYER
  • Dateispiller (raw/wav Dateien) (Windows): MS_WINSND_READ
  • Schreift op Datei (wav Dateien) (Linux): MS_FILE_REC
  • Schreift op Datei (wav Dateien) (Windows): MS_WINSND_WRITE
  • Mac Audio Eenheet (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)

Audio Kodéierung / Dekodéierung

  • G.711 a-Gesetz: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-Gesetz: 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
  • Linear PCM: MS_L16_ENC, MS_L16_DEC
  • Speex: MS_SPEEX_ENC, MS_SPEEX_DEC

Sound Veraarbechtung

  • Kanal Konversioun (Mono-> Stereo, Stereo-> Mono): MS_CHANNEL_ADAPTER
  • Konferenz: MS_CONF
  • DTMF Generator: MS_DTMF_GEN
  • Echo Annulatioun (speex): MS_SPEEX_EC
  • Equalizer: MS_EQUALIZER
  • Mixer: MS_MIXER
  • Packet Loss Compensator (PLC): MS_GENERIC_PLC
  • Resampler: MS_RESAMPLE
  • Tondetektor: MS_TONE_DETECTOR
  • Volume Kontroll an Signal Niveau Miessung: MS_VOLUME

Video Filteren

Video Capture a Playback

  • android capture
  • Android Playback
  • AV Foundation Capture (iOS)
  • AV Foundation Playback (iOS)
  • DirectShow Capture (Windows)
  • DrawDib Playback (Windows)
  • Extern Playback - Schéckt Video op déi iewescht Schicht
  • GLX Playback (Linux): MS_GLXVIDEO
  • Mire - Synthetesch bewegt Bild: MS_MIRE
  • OpenGL Playback (Mac OS X)
  • OpenGL ES2 Playback (Android)
  • Quicktime Capture (Mac OS X)
  • SDL Playback: MS_SDL_OUT
  • Statescht Bildausgang: MS_STATIC_IMAGE
  • Video Fir Linux (V4L) Capture (Linux): MS_V4L
  • Video Fir Linux 2 (V4L2) Capture (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) Capture (Windows)
  • Video4windows (DirectShow) Capture (Windows CE)
  • Video Fir Windows (vfw) Capture (Windows)
  • XV Playback (Linux)

Video Kodéierung / Dekodéierung

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Schnéi: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (nëmmen decoder): MS_H264_DEC
  • Theora: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Video Veraarbechtung

  • jpeg Snapshot
  • Pixel Format Converter: MS_PIX_CONV
  • Resizer
  • Aner Filteren
  • Austausch vun Datenblocken tëscht Threads: MS_ITC_SOURCE, MS_ITC_SINK
  • Sammelt Datenblocken vu multiple Inputen op eng eenzeg Ausgang: MS_JOIN
  • RTP Empfang/Transmissioun: MS_RTP_SEND, MS_RTP_RECV
  • Kopie vun Inputdaten op verschidde Ausgänge: MS_TEE
  • Ofgeschloss Luede: MS_VOID_SINK
  • Silence Quell: MS_VOID_SOURCE

Plugins

Sound Filtere

  • AMR-NB Encoder/Decoder
  • G.729 encoder / decoder
  • iLBC Encoder/Decoder
  • SILK Encoder / Decoder

    Video Filteren

  • H.264 Software Encoder
  • H.264 V4L2 Hardware beschleunegt encoder / decoder

No enger kuerzer Beschreiwung vum Filter gëtt den Numm vum Typ gewisen, dee benotzt gëtt wann Dir eng nei Instanz vun dësem Filter erstellt. An deem nächste wäerte mir op dës Lëscht bezéien.

Installatioun ënner Linux Ubuntu

Elo wäerte mir de Media Streamer um Computer installéieren an eis éischt Applikatioun domat bauen.

Installéiere vun Mediastremer2 op engem Computer oder virtuelle Maschinn mat Ubuntu erfuerdert keng speziell Fäegkeeten. Hei an ënnen ass d'Symbol "$" d'Shell-Prompt fir d'Befehle anzeginn. Déi. wann Dir an der Oplëschtung dëst Symbol um Ufank vun der Linn gesitt, dann ass dat d'Linn an där d'Befehle gewisen ginn am Terminal auszeféieren.

Et gëtt ugeholl datt während de Schrëtt an dësem Artikel Äre Computer Zougang zum Internet huet.

Installéiert de libmediastremer-dev Package

Start den Terminal a gitt de Kommando:

$ sudo apt-get update

Dir wäert e Passwuert gefrot ginn fir Ännerungen ze maachen, gitt et an de Package Manager wäert seng Datenbanken aktualiséieren. Duerno musst Dir lafen:

$ sudo apt-get install libmediastreamer-dev

Déi néideg Ofhängegkeetspakete an d'Medienstreamerbibliothéik selwer ginn automatesch erofgelueden an installéiert.

D'total Gréisst vun den erofgeluede Ofhängegkeet Deb Packagen wäert ongeféier 35 MB sinn. Detailer iwwer de installéierte Package kënnen mam Kommando fonnt ginn:

$ dpkg -s libmediastreamer-dev

Äntwert Beispill:

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/

Installatioun vun Entwécklungsinstrumenter

Installéiert den C Compiler a seng begleedend Tools:

$ sudo apt-get install gcc

Mir kontrolléieren d'Resultat andeems Dir d'Compiler Versioun ufroen:

$ gcc --version

D'Äntwert soll eppes wéi dat sinn:

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.

D'Proufapplikatioun bauen a lafen

Mir kreéieren an doheem Dossier fir eis Tutorialprojeten, loosst eis et nennen mstutorial:

$ mkdir ~/mstutorial

Benotzt Äre Liiblingstexteditor a kreéiert eng C Programmdatei genannt mstest.c mat folgendem Inhalt:

#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
  ms_init();
  printf ("Mediastreamer is ready.n");
}

Et initialiséiert de Medienstreamer, dréckt eng Begréissung an geet eraus.

Späichert d'Datei a kompiléiert d'Testapplikatioun mam Kommando:

$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`

Notéiert datt d'Linn

`pkg-config mediastreamer --libs --cflags`

an Zitatzeechen zougemaach, déi op der Tastatur op der selwechter Plaz wéi de Bréif "Ё" sinn.

Wann d'Datei keng Feeler enthält, da erschéngt no der Kompiléierung eng Datei am Verzeechnes mstest. Mir starten de Programm:

$ ./mstest

D'Resultat wäert esou sinn:

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.

An dëser Oplëschtung gesi mir d'Fehlermeldungen déi d'ALSA Bibliothéik weist, et gëtt benotzt fir d'Soundkaart ze kontrolléieren. D'Entwéckler vum Media Streamer selwer gleewen datt dëst normal ass. An dësem Fall si mir onwuel mat hinnen d'accord.

Elo si mir all prett fir mam Media Streamer ze schaffen. Mir hunn d'Medien Streamer Bibliothéik installéiert, d'Kompilatiounsinstrument, a benotzt eng Testapplikatioun, verifizéiert datt d'Tools konfiguréiert sinn an de Media Streamer erfollegräich initialiséiert.

Nächst Artikel mir erstellen eng Applikatioun déi d'Veraarbechtung vun engem Audiosignal an enger Kette vu verschiddene Filtere montéiert a leeft.

Source: will.com