Eksplore motè VoIP Mediastreamer2 la. Pati 1

Materyèl atik la pran nan men mwen zen channel.

Entwodiksyon

Atik sa a se kòmansman yon seri atik sou pwosesis medya an tan reyèl lè l sèvi avèk motè Mediastreamer2. Prezantasyon an pral enplike ladrès minimòm pou travay nan tèminal Linux la ak pwogramasyon nan lang C.

Mediastreamer2 se motè VoIP dèyè pwojè telefòn voip lojisyèl sous louvri. telefòn. Nan Linphone Mediastreamer2 aplike tout fonksyon ki gen rapò ak son ak videyo. Ou ka wè yon lis detaye sou karakteristik motè yo sou paj Mediastreamer sa a. Kòd sous la isit la: GitLab.

Pli lwen nan tèks la, pou konvenyans, olye pou yo mo Mediastreamer2 a, nou pral sèvi ak notasyon Ris li yo: "medya streamer".

Istwa kreyasyon li a pa totalman klè, men si nou jije dapre kòd sous li yo, li te deja itilize bibliyotèk la glib, ki, kòm li te, allusion nan yon posib relasyon byen lwen ak GStreamer. An konparezon ak ki streamer medya a sanble pi lejè. Premye vèsyon Linphone te parèt an 2001, kidonk nan moman sa a streamer medya a egziste epi li devlope pou prèske 20 ane.

Nan kè a nan streamer medya a se yon achitekti ki rele "Data koule" (koule done). Yon egzanp sou yon achitekti sa yo montre nan figi ki anba a.

Eksplore motè VoIP Mediastreamer2 la. Pati 1

Nan achitekti sa a, algorithm nan pwosesis done yo espesifye pa yon kòd pwogram, men pa yon konplo (graf) pou konekte fonksyon ki ka ranje nan nenpòt lòd. Fonksyon sa yo rele filtè.

Achitekti sa a fè li posib aplike fonksyonalite pwosesis medya yo nan fòm yon seri filtè ki konekte ak konplo transmisyon ak pwosesis transmisyon telefòn VoIP RTP.

Kapasite pou konbine filtè yo nan plan abitrè, devlopman senp nouvo filtè, aplikasyon streamer medya a kòm yon bibliyotèk endepandan endepandan, pèmèt li itilize nan lòt pwojè. Anplis, pwojè a ka nan domèn VoIP, paske li posib pou ajoute filtè ki fèt pa tèt li.

Bibliyotèk filtre apwovizyone pa default se byen rich epi, kòm deja mansyone, ka pwolonje ak filtè nan pwòp konsepsyon nou an. Men, anvan, ann dekri filtè pare yo ki vini ak streamer medya a. Men lis yo:

Filtè son

Kaptir odyo ak lèktur

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Son natif natal android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Sèvis keu odyo (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Sèvis inite odyo (Mac OS X)
  • Atizay (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Jwè dosye (fichye kri/wav/pcap) (Linux): MS_FILE_PLAYER
  • Jwè dosye (fichye kri/wav) (Windows): MS_WINSND_READ
  • Ekri nan dosye (fichye wav) (Linux): MS_FILE_REC
  • Ekri nan dosye (fichye wav) (Windows): MS_WINSND_WRITE
  • Inite odyo Mac (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
  • Son Windows (Windows)

Odyo kodaj / dekodaj

  • G.711 yon-lwa: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-lwa: 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
  • Lineyè PCM: MS_L16_ENC, MS_L16_DEC
  • Speak: MS_SPEEX_ENC, MS_SPEEX_DEC

Pwosesis son

  • Konvèsyon chanèl (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Konferans: MS_CONF
  • Dèlko DTMF: MS_DTMF_GEN
  • Anile eko (speex): MS_SPEEX_EC
  • Egaliseur: MS_EQUALIZER
  • Panneau: MS_MIXER
  • Konpansasyon Pèt Pake (PLC): MS_GENERIC_PLC
  • Rechanplè: MS_RESAMPLE
  • Detektè ton: MS_TONE_DETECTOR
  • Kontwòl volim ak mezi nivo siyal: MS_VOLUME

Filtè videyo

Capture videyo ak lecture

  • kaptire android
  • lektur android
  • AV Fondasyon kaptire (iOS)
  • Lektur AV Fondasyon (iOS)
  • DirectShow Capture (Windows)
  • Lektur DrawDib (Windows)
  • Lektur ekstèn - Voye videyo nan kouch nan tèt
  • Lektur GLX (Linux): MS_GLXVIDEO
  • Mire - Foto mouvman sentetik: MS_MIRE
  • Lektur OpenGL (Mac OS X)
  • Lektur OpenGL ES2 (Android)
  • Quicktime Capture (Mac OS X)
  • Lektur SDL: MS_SDL_OUT
  • Pwodiksyon imaj estatik: MS_STATIC_IMAGE
  • Videyo pou kaptire Linux (V4L) (Linux): MS_V4L
  • Videyo pou Linux 2 (V4L2) kaptire (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) kaptire (Windows)
  • Video4windows (DirectShow) kaptire (Windows CE)
  • Videyo pou Windows (vfw) kaptire (Windows)
  • Lektur XV (Linux)

Videyo kodaj / dekodaj

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, nèj: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (dekodeur sèlman): MS_H264_DEC
  • Theora: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Pwosesis videyo

  • jpeg snapshot
  • Konvètisè fòma piksèl: MS_PIX_CONV
  • Resizer
  • Lòt filtè
  • Echanj nan blòk done ant fil: MS_ITC_SOURCE, MS_ITC_SINK
  • Kolekte blòk done ki sòti nan plizyè antre nan yon sèl pwodiksyon: MS_JOIN
  • RTP resevwa/transmèt: MS_RTP_SEND, MS_RTP_RECV
  • Kopi done antre nan plizyè rezilta: MS_TEE
  • Chaj la sispann: MS_VOID_SINK
  • Sous silans: MS_VOID_SOURCE

Plugins

Filtè son

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

    Filtè videyo

  • H.264 lojisyèl ankode
  • H.264 V4L2 pyès ki nan konpitè akselere encoder/decoder

Apre yon deskripsyon kout sou filtè a, yo montre non kalite a, ki itilize lè yo kreye yon nouvo egzanp filtè sa a. Nan sa ki annapre yo, nou pral refere lis sa a.

Enstalasyon anba Linux Ubuntu

Koulye a, nou pral enstale streamer medya a sou òdinatè a epi bati premye aplikasyon nou an avèk li.

Enstale Mediastremer2 sou yon òdinatè oswa yon machin vityèl ki kouri Ubuntu pa mande pou okenn ladrès espesyal. Isit la ak anba a, senbòl "$" pral endike èd memwa koki a pou antre kòmandman yo. Moun sa yo. si nan lis la ou wè senbòl sa a nan kòmansman an nan liy lan, Lè sa a, sa a se liy lan nan ki kòmand yo montre yo dwe egzekite nan tèminal la.

Yo sipoze ke pandan etap sa yo nan atik sa a, òdinatè w lan gen aksè a entènèt la.

Enstale pake libmediastremer-dev la

Lanse tèminal la epi tape lòd la:

$ sudo apt-get update

Yo pral mande w yon modpas pou fè chanjman, antre nan li epi manadjè pake a pral mete ajou baz done li yo. Apre sa, ou bezwen kouri:

$ sudo apt-get install libmediastreamer-dev

Pakè depandans ki nesesè yo ak bibliyotèk medya streamer tèt li pral telechaje epi enstale otomatikman.

Gwosè total pakè deb depandans telechaje yo pral apeprè 35 MB. Ou ka jwenn detay sou pake enstale a ak lòd la:

$ dpkg -s libmediastreamer-dev

Egzanp repons:

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/

Enstale zouti devlopman

Enstale du C a ak zouti ki akonpaye li yo:

$ sudo apt-get install gcc

Nou tcheke rezilta a lè nou mande vèsyon konpilatè a:

$ gcc --version

Repons lan ta dwe yon bagay tankou sa a:

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.

Bati ak kouri aplikasyon esè a

Nou kreye nan lakay Katab pou pwojè leson patikilye nou yo, ann rele li mstutorial:

$ mkdir ~/mstutorial

Sèvi ak editè tèks pi renmen ou epi kreye yon dosye pwogram C yo rele mstest.c ak kontni sa a:

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

Li inisyalize streamer medya a, enprime yon bonjou, epi sòti.

Sove fichye a epi konpile aplikasyon tès la ak kòmandman an:

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

Remake byen ke liy lan

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

fèmen nan guillemets, ki sitiye sou klavye a nan menm kote ak lèt ​​la "Ё".

Si fichye a pa gen erè, apre konpilasyon yon dosye ap parèt nan anyè a mstest. Nou kòmanse pwogram nan:

$ ./mstest

Rezilta a pral tankou sa a:

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.

Nan lis sa a, nou wè mesaj erè ke bibliyotèk ALSA montre, li itilize pou kontwole kat son an. Devlopè yo nan streamer nan medya tèt yo kwè ke sa a se nòmal. Nan ka sa a, nou repiyans dakò ak yo.

Koulye a, nou tout mete nan travay ak streamer medya a. Nou te enstale bibliyotèk medya streamer la, zouti konpilasyon an, epi itilize yon aplikasyon jijman, verifye ke zouti yo konfigirasyon epi streamer medya a inisyalize avèk siksè.

Next Atik nou pral kreye yon aplikasyon ki pral rasanble ak kouri pwosesis la nan yon siyal odyo nan yon chèn nan plizyè filtè.

Sous: www.habr.com