D'Material vum Artikel ass aus mengem
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.
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
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.
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
Source: will.com