Mediastreamer2 VoIP programmas izpēte. 1. daļa

Raksta materiāls ņemts no mana zen kanāls.

Ievads

Šis raksts ir rakstu sērijas sākums par multivides apstrādi reāllaikā, izmantojot programmu Mediastreamer2. Prezentācijas laikā tiks iesaistītas minimālās prasmes strādāt Linux terminālā un programmēt C valodā.

Mediastreamer2 ir VoIP dzinējs aiz populārā atvērtā pirmkoda programmatÅ«ras VoIP tālruņa projekta. Linfons. Programmā Linphone Mediastreamer2 ievieÅ” visas ar skaņu un video saistÄ«tās funkcijas. Detalizētu programmas funkciju sarakstu var redzēt Å”ajā Mediastreamer lapā. Avota kods ir Å”eit: GitLab.

Tālāk tekstā ērtÄ«bas labad vārda Mediastreamer2 vietā izmantosim tā krievu valodas apzÄ«mējumu: ā€œmedia streamerā€.

Tās izveides vēsture nav lÄ«dz galam skaidra, taču, spriežot pēc avota koda, tā iepriekÅ” izmantoja bibliotēku gluds, kas it kā liecina par iespējamām attālām attiecÄ«bām ar GStreamer. SalÄ«dzinot ar kuru multivides straumētājs izskatās vieglāks. Pirmā Linphone versija parādÄ«jās 2001. gadā, tāpēc Å”obrÄ«d mediju straumētājs pastāv un attÄ«stās gandrÄ«z 20 gadus.

Multivides straumētāja centrā ir arhitektūra, ko sauc par "Datu plūsmu" (datu plūsma). Šādas arhitektūras piemērs ir parādīts attēlā zemāk.

Mediastreamer2 VoIP programmas izpēte. 1. daļa

Å ajā arhitektÅ«rā datu apstrādes algoritms tiek norādÄ«ts nevis ar programmas kodu, bet gan ar shēmu (grafiku) funkciju savienoÅ”anai, kuras var sakārtot jebkurā secÄ«bā. Å Ä«s funkcijas sauc par filtriem.

Šī arhitektūra ļauj īstenot multivides apstrādes funkcionalitāti filtru komplekta veidā, kas savienots ar VoIP tālruņa RTP trafika apstrādes un pārraides shēmu.

Iespēja apvienot filtrus patvaļīgās shēmās, vienkārÅ”a jaunu filtru izstrāde, multivides straumētāja kā neatkarÄ«gas atseviŔķas bibliotēkas ievieÅ”ana ļauj to izmantot citos projektos. Turklāt projekts var bÅ«t VoIP jomā, jo ir iespējams pievienot paÅ”u izgatavotus filtrus.

Filtru bibliotēka, kas tiek nodroÅ”ināta pēc noklusējuma, ir diezgan bagāta, un, kā jau minēts, to var papildināt ar mÅ«su paÅ”u izstrādātiem filtriem. Bet vispirms aprakstÄ«sim gatavos filtrus, kas tiek piegādāti kopā ar multivides straumētāju. Å eit ir viņu saraksts:

Skaņas filtri

Audio uztverÅ”ana un atskaņoÅ”ana

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Android sākotnējā skaņa (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Audio rindas pakalpojums (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Audio vienÄ«bas pakalpojums (Mac OS X)
  • Māksla (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Failu atskaņotājs (raw/wav/pcap faili) (Linux): MS_FILE_PLAYER
  • Failu atskaņotājs (raw/wav faili) (Windows): MS_WINSND_READ
  • RakstÄ«t failā (wav faili) (Linux): MS_FILE_REC
  • Rakstiet failā (wav failos) (Windows): MS_WINSND_WRITE
  • Mac audio bloks (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 skaņa (Windows)

Audio kodēŔana/dekodēŔana

  • G.711 a-likums: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 Āµ-likums: 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
  • Lineārais PCM: MS_L16_ENC, MS_L16_DEC
  • Speks: MS_SPEEX_ENC, MS_SPEEX_DEC

Skaņas apstrāde

  • Kanāla pārveidoÅ”ana (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • Konference: MS_CONF
  • DTMF Ä£enerators: MS_DTMF_GEN
  • Atbalss atcelÅ”ana (speex): MS_SPEEX_EC
  • Ekvalaizers: MS_EQUALIZER
  • Mikseris: MS_MIXER
  • PakeÅ”u zudumu kompensators (PLC): MS_GENERIC_PLC
  • Resampler: MS_RESAMPLE
  • Toņa detektors: MS_TONE_DETECTOR
  • Skaļuma kontrole un signāla lÄ«meņa mērÄ«Å”ana: MS_VOLUME

Video filtri

Video uzņemÅ”ana un atskaņoÅ”ana

  • Android uztverÅ”ana
  • android atskaņoÅ”ana
  • AV Foundation uztverÅ”ana (iOS)
  • AV Foundation atskaņoÅ”ana (iOS)
  • DirectShow Capture (Windows)
  • DrawDib atskaņoÅ”ana (Windows)
  • Ārējā atskaņoÅ”ana ā€” video nosÅ«tÄ«Å”ana uz augŔējo slāni
  • GLX atskaņoÅ”ana (Linux): MS_GLXVIDEO
  • Mire ā€” sintētisks kustÄ«gs attēls: MS_MIRE
  • OpenGL atskaņoÅ”ana (Mac OS X)
  • OpenGL ES2 atskaņoÅ”ana (Android)
  • Quicktime Capture (Mac OS X)
  • SDL atskaņoÅ”ana: MS_SDL_OUT
  • Statiskā attēla izvade: MS_STATIC_IMAGE
  • Videoklipa uztverÅ”anai Linux (V4L) (Linux): MS_V4L
  • Videoklips operētājsistēmai Linux 2 (V4L2) tverÅ”anai (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) tverÅ”ana (Windows)
  • Video4windows (DirectShow) tverÅ”ana (Windows CE)
  • Videoklipu uzņemÅ”ana operētājsistēmai Windows (vfw) (Windows)
  • XV atskaņoÅ”ana (Linux)

Video kodēŔana/dekodēŔana

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, sniegs: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (tikai dekodētājam): MS_H264_DEC
  • Teora: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Video apstrāde

  • jpeg momentuzņēmums
  • Pikseļu formāta pārveidotājs: MS_PIX_CONV
  • Izmēra mainÄ«tājs
  • Citi filtri
  • Datu bloku apmaiņa starp pavedieniem: MS_ITC_SOURCE, MS_ITC_SINK
  • Datu bloku apkopoÅ”ana no vairākām ieejām vienā izvadē: MS_JOIN
  • RTP saņemÅ”ana/pārsÅ«tÄ«Å”ana: MS_RTP_SEND, MS_RTP_RECV
  • Ievades datu kopÄ“Å”ana uz vairākām izejām: MS_TEE
  • Pārtraukta ielāde: MS_VOID_SINK
  • Klusuma avots: MS_VOID_SOURCE

Spraudņi

Skaņas filtri

  • AMR-NB kodētājs/dekodētājs
  • G.729 kodētājs/dekodētājs
  • iLBC kodētājs/dekodētājs
  • SILK kodētājs/dekodētājs

    Video filtri

  • H.264 programmatÅ«ras kodētājs
  • H.264 V4L2 aparatÅ«ras paātrināts kodētājs/dekodētājs

Pēc Ä«sa filtra apraksta tiek parādÄ«ts tā veida nosaukums, kas tiek izmantots, veidojot jaunu Ŕī filtra gadÄ«jumu. Tālāk mēs atsauksimies uz Å”o sarakstu.

InstalÄ“Å”ana operētājsistēmā Linux Ubuntu

Tagad mēs datorā instalēsim multivides straumētāju un ar to izveidosim savu pirmo lietojumprogrammu.

Mediastremer2 instalÄ“Å”anai datorā vai virtuālajā maŔīnā, kurā darbojas Ubuntu, nav nepiecieÅ”amas Ä«paÅ”as prasmes. Å eit un zemāk simbols "$" apzÄ«mēs čaulas uzvedni komandu ievadÄ«Å”anai. Tie. ja sarakstā jÅ«s redzat Å”o simbolu rindas sākumā, tad Ŕī ir rinda, kurā tiek parādÄ«ts, ka komandas tiek izpildÄ«tas terminālÄ«.

Tiek pieņemts, ka Å”ajā rakstā minēto darbÄ«bu laikā jÅ«su datoram ir piekļuve internetam.

Libmediastremer-dev pakotnes instalēŔana

Palaidiet termināli un ierakstiet komandu:

$ sudo apt-get update

Lai veiktu izmaiņas, jums tiks prasīta parole, ievadiet to, un pakotņu pārvaldnieks atjauninās savas datu bāzes. Pēc tam jums jāskrien:

$ sudo apt-get install libmediastreamer-dev

NepiecieÅ”amās atkarÄ«bas pakotnes un pati multivides straumētāja bibliotēka tiks automātiski lejupielādēta un instalēta.

Lejupielādēto atkarÄ«bas deb pakotņu kopējais lielums bÅ«s aptuveni 35 MB. SÄ«kāku informāciju par instalēto pakotni var atrast ar komandu:

$ dpkg -s libmediastreamer-dev

Atbildes piemērs:

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/

Attīstības rīku instalēŔana

Instalējiet C kompilatoru un ar to saistītos rīkus:

$ sudo apt-get install gcc

Mēs pārbaudām rezultātu, vaicājot kompilatora versiju:

$ gcc --version

Atbildei vajadzētu bÅ«t apmēram Ŕādai:

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.

Izmēģinājuma lietojumprogrammas izveide un palaiÅ”ana

Mēs veidojam iekŔā mājas mapi mÅ«su apmācÄ«bas projektiem, sauksim to mstutorial:

$ mkdir ~/mstutorial

Izmantojiet savu iecienītāko teksta redaktoru un izveidojiet C programmas failu ar nosaukumu mstest.c ar Ŕādu saturu:

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

Tas inicializē multivides straumētāju, izdrukā sveicienu un iziet.

Saglabājiet failu un kompilējiet testa lietojumprogrammu ar komandu:

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

Ņemiet vērā, ka līnija

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

ieliktas pēdiņās, kas atrodas uz tastatÅ«ras tajā paŔā vietā, kur burts "Š".

Ja failā nav kļūdu, pēc kompilācijas direktorijā parādīsies fails mstest. Mēs sākam programmu:

$ ./mstest

Rezultāts būs Ŕāds:

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.

Å ajā sarakstā mēs redzam kļūdu ziņojumus, ko parāda ALSA bibliotēka, to izmanto skaņas kartes vadÄ«Å”anai. PaÅ”i mediju straumētāja izstrādātāji uzskata, ka tas ir normāli. Å ajā gadÄ«jumā mēs viņiem nelabprāt piekrÄ«tam.

Tagad mēs visi esam gatavi darbam ar multivides straumētāju. Mēs esam instalējuÅ”i multivides straumētāja bibliotēku, kompilācijas rÄ«ku, un, izmantojot izmēģinājuma lietojumprogrammu, pārbaudÄ«jām, vai rÄ«ki ir konfigurēti un multivides straumētājs tiek veiksmÄ«gi inicializēts.

Nākamais raksts izveidosim aplikāciju, kas montēs un vadīs audio signāla apstrādi vairāku filtru ķēdē.

Avots: www.habr.com