Il-materjal tal-artiklu huwa meħud minn tiegħi
Introduzzjoni
Dan l-artikolu huwa l-bidu ta 'serje ta' artikli dwar l-ipproċessar tal-midja f'ħin reali bl-użu tal-magna Mediastreamer2. Matul il-preżentazzjoni, se jintużaw ħiliet minimi fil-ħidma fit-terminal Linux u l-ipprogrammar fil-lingwa Ċ.
Mediastreamer2 hija l-magna VoIP wara l-proġett ta’ softwer tat-telefon VoIP ta’ sors miftuħ popolari
Aktar fit-test, għall-konvenjenza, minflok il-kelma Mediastreamer2 se nużaw in-notazzjoni Russa tagħha: "mediastreamer".
L-istorja tal-ħolqien tagħha mhijiex ċara għal kollox, iżda meta wieħed jiġġudika mill-kodiċi tas-sors tiegħu, qabel kien juża l-librerija
Il-media streamer huwa bbażat fuq arkitettura msejħa "Data flow". Eżempju ta 'arkitettura bħal din jidher fil-figura hawn taħt.
F'din l-arkitettura, l-algoritmu tal-ipproċessar tad-dejta huwa speċifikat mhux bil-kodiċi tal-programm, iżda b'dijagramma (graff) ta 'funzjonijiet ta' konnessjoni li jistgħu jiġu rranġati fi kwalunkwe ordni. Dawn il-funzjonijiet jissejħu filtri.
Din l-arkitettura tagħmilha possibbli li tiġi implimentata l-funzjonalità tal-ipproċessar tal-midja fil-forma ta 'sett ta' filtri konnessi f'ċirkwit għall-ipproċessar u t-trażmissjoni tat-traffiku RTP ta 'telefon VoIP.
Il-ħila li tikkonnettja filtri fi skemi arbitrarji, żvilupp sempliċi ta 'filtri ġodda, u l-implimentazzjoni tal-media streamer bħala librerija separata indipendenti jippermettu li jintuża fi proġetti oħra. Barra minn hekk, il-proġett jista 'jkun fil-qasam tal-VoIP, peress li huwa possibbli li żżid filtri magħmula minnek innifsek.
Il-librerija tal-filtri default hija pjuttost rikka u, kif diġà ssemma, tista 'titwessa' b'filtri tad-disinn tagħna stess. Imma l-ewwel, aħna se niddeskrivu l-filtri lesti li jiġu mal-media streamer. Hawnhekk hawn il-lista tagħhom:
Filtri tal-ħoss
Qbid u daqq tal-awdjo
- Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
- Ħoss nattiv ta' Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
- Servizz ta' Kju Awdjo (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
- Servizz ta' Unità Awdjo (Mac OS X)
- Arti (Linux): MS_ARTS_WRITE, MS_ARTS_READ
- DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- File player (fajls mhux maħduma/wav/pcap) (Linux): MS_FILE_PLAYER
- Plejer tal-fajls (fajls mhux maħduma/wav) (Windows): MS_WINSND_READ
- Ikteb fil-fajl (fajls wav) (Linux): MS_FILE_REC
- Ikteb fil-fajl (fajls wav) (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
- Ħoss tal-Windows (Windows)
Kodifikazzjoni/dekodifikazzjoni tal-awdjo
- 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
- PCM lineari: MS_L16_ENC, MS_L16_DEC
- Speex: MS_SPEEX_ENC, MS_SPEEX_DEC
Ipproċessar tal-ħoss
- Konverżjoni tal-kanal (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
- Konferenza: MS_CONF
- Ġeneratur DTMF: MS_DTMF_GEN
- Kanċellazzjoni tal-eku (speex): MS_SPEEX_EC
- Ekwalizzatur: MS_EQUALIZER
- Mixer: MS_MIXER
- Kumpensatur ta' Telf ta' Pakketti (PLC): MS_GENERIC_PLC
- Kampjun mill-ġdid: MS_RESAMPLE
- Detector tat-ton: MS_TONE_DETECTOR
- Kontroll tal-volum u kejl tal-livell tas-sinjal: MS_VOLUME
Filtri tal-vidjo
Qbid u daqq tal-vidjo
- Qbid Android
- Daqq Android
- Qbid tal-Fondazzjoni AV (iOS)
- Daqq tal-Fondazzjoni AV (iOS)
- Qbid DirectShow (Windows)
- Daqq DrawDib (Windows)
- Daqq estern - Ibgħat vidjo għall-ogħla livell
- Daqq GLX (Linux): MS_GLXVIDEO
- Mire - Stampa sintetika li tiċċaqlaq: MS_MIRE
- Daqq OpenGL (Mac OS X)
- Daqq OpenGL ES2 (Android)
- Qbid Quicktime (Mac OS X)
- Daqq SDL: MS_SDL_OUT
- Output ta' immaġini statiċi: MS_STATIC_IMAGE
- Vidjow Għall Linux (V4L) qbid (Linux): MS_V4L
- Vidjow Għall Linux 2 (V4L2) qbid (Linux): MS_V4L2_CAPTURE
- Qbid ta' Video4windows (DirectShow) (Windows)
- Qbid ta' Video4windows (DirectShow) (Windows CE)
- Qbid tal-Vidjo Għall-Windows (vfw) (Windows)
- Daqq XV (Linux)
Kodifikazzjoni/dekodifikazzjoni tal-vidjo
- H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
- H.264 (decoder biss): MS_H264_DEC
- Theora: MS_THEORA_ENC, MS_THEORA_DEC
- VP8: MS_VP8_ENC, MS_VP8_DEC
Ipproċessar tal-vidjo
- Snapshot JPEG
- Konvertitur tal-format tal-pixel: MS_PIX_CONV
- Resizer
- Filtri oħra
- Skambju ta' blokki tad-dejta bejn il-ħjut: MS_ITC_SOURCE, MS_ITC_SINK
- Ġbir ta' blokki tad-dejta minn inputs multipli għal output wieħed: MS_JOIN
- Riċeviment/Trażmissjoni RTP: MS_RTP_SEND, MS_RTP_RECV
- Ikkupjar tad-dejta tal-input għal outputs multipli: MS_TEE
- Tagħbija Imqabbla: MS_VOID_SINK
- Sors silenzju: MS_VOID_SOURCE
Plugins
Filtri tal-ħoss
- Encoder/decoder AMR-NB
- G.729 encoder/decoder
- iLBC encoder/decoder
- Encoder/decoder tal-ĦARIR
Filtri tal-vidjo
- Encoder tas-softwer H.264
- H.264 V4L2 encoder/decoder b'aċċelerazzjoni tal-ħardwer
Wara deskrizzjoni qasira tal-filtru, jintwera l-isem tat-tip, li jintuża meta tinħoloq istanza ġdida ta 'dan il-filtru. Fid-diskussjoni li ġejja se nirreferu għal din il-lista.
Installazzjoni taħt Linux Ubuntu
Issa se ninstallaw il-media streamer fuq il-kompjuter tiegħek u nibnu l-ewwel applikazzjoni tagħna magħha.
L-installazzjoni ta' Mediastremer2 fuq kompjuter jew magna virtwali li taħdem Ubuntu ma teħtieġ l-ebda ħiliet speċjali. Hawn u hawn taħt, is-simbolu "$" se jindika l-pront tal-qoxra għad-dħul tal-kmandi. Dawk. jekk fil-lista tara dan is-simbolu fil-bidu ta 'linja, allura dan ifisser li din hija linja li turi kmandi li għandhom jiġu esegwiti fit-terminal.
Huwa preżunt li waqt li twettaq il-passi deskritti f'dan l-artikolu, il-kompjuter tiegħek għandu aċċess għall-Internet.
Installazzjoni tal-pakkett libmediastromer-dev
Ibda t-terminal u ikteb il-kmand:
$ sudo apt-get update
Inti tintalab password biex tagħmel bidliet; daħħalha u l-maniġer tal-pakketti jaġġorna d-databases tiegħu. Wara dan trid tagħmel:
$ sudo apt-get install libmediastreamer-dev
Il-pakketti tad-dipendenza meħtieġa u l-librerija tal-media streamer innifisha se jitniżżlu u jiġu installati awtomatikament.
Id-daqs totali tal-pakketti tad-dipendenza tad-deb imniżżla se jkun madwar 35 MB. Dettalji dwar il-pakkett installat jistgħu jinstabu bil-kmand:
$ dpkg -s libmediastreamer-dev
Eżempju ta' tweġiba:
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/
Installazzjoni ta' Għodod ta' Żvilupp
Installa l-kompilatur C u l-għodod li jakkumpanjawh:
$ sudo apt-get install gcc
Aħna niċċekkjaw ir-riżultat billi nitolbu l-verżjoni tal-kompilatur:
$ gcc --version
It-tweġiba għandha tkun xi ħaġa bħal din:
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.
Bini u tmexxija ta' applikazzjoni ta' prova
Noħolqu fi dar folder għall-proġetti edukattivi tagħna, ejja nsejħulha mstutorja:
$ mkdir ~/mstutorial
Uża l-editur tat-test favorit tiegħek u oħloq fajl tal-programm C imsejjaħ mstest.c bil-kontenut li ġej:
#include "stdio.h"
#include <mediastreamer2/mscommon.h>
int main()
{
ms_init();
printf ("Mediastreamer is ready.n");
}
Hija initializes-streamer tal-midja, tipprintja greeting, u tispiċċa l-eżekuzzjoni.
Issejvja l-fajl u kkumpila l-applikazzjoni tat-test bil-kmand:
$ gcc mstest.c -o mstest `pkg-config mediastreamer --libs --cflags`
Jekk jogħġbok innota li l-linja
`pkg-config mediastreamer --libs --cflags`
magħluqa bil-virgoletti, li jinsabu fuq it-tastiera fl-istess post bħall-ittra “Y”.
Jekk il-fajl ma fihx żbalji, imbagħad wara l-kumpilazzjoni l-fajl jidher fid-direttorju mstest. Ejja nmexxu l-programm:
$ ./mstest
Ir-riżultat se jkun bħal dan:
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.
F'din il-lista naraw messaġġi ta 'żball iġġenerati mil-librerija ALSA, li tintuża biex tikkontrolla l-karta tal-ħoss. L-iżviluppaturi tal-media streamer infushom jemmnu li dan huwa normali. F'dan il-każ, inevitabbilment se naqblu magħhom.
Issa aħna lesti li naħdmu mal-media streamer. Installajna l-librerija tal-media streamer, l-għodda tal-kumpilazzjoni, u użajna applikazzjoni kampjun biex nivverifikaw li l-għodod kienu kkonfigurati u l-media streamer inizjalizzat b'suċċess.
Li jmiss
Sors: www.habr.com