Archwilio peiriant VoIP Mediastreamer2. Rhan 1

Mae deunydd yr erthygl yn cael ei gymryd o fy sianel zen.

Cyflwyniad

Mae'r erthygl hon yn ddechrau cyfres o erthyglau am brosesu cyfryngau amser real gan ddefnyddio injan Mediastreamer2. Bydd y cyflwyniad yn cynnwys y sgiliau lleiaf o weithio yn y derfynell Linux a rhaglennu yn yr iaith C.

Mediastreamer2 yw'r injan VoIP y tu ôl i'r prosiect ffôn voip meddalwedd ffynhonnell agored poblogaidd. Ffôn ffôn. Yn Linphone mae Mediastreamer2 yn gweithredu'r holl swyddogaethau sy'n ymwneud â sain a fideo. Mae rhestr fanwl o nodweddion injan i'w gweld ar y dudalen Mediastreamer hon. Mae'r cod ffynhonnell yma: GitLab.

Ymhellach yn y testun, er hwylustod, yn lle'r gair Mediastreamer2 byddwn yn defnyddio ei nodiant Rwsieg: “media streamer”.

Nid yw hanes ei greadigaeth yn gwbl glir, ond a barnu yn ôl ei chod ffynhonnell, defnyddiodd y llyfrgell o'r blaen glib, sydd, fel petai, yn awgrymu perthynas bell bosibl â GStreamer. O'i gymharu â pha un mae'r ffrwdwr cyfryngau yn edrych yn fwy ysgafn. Ymddangosodd y fersiwn gyntaf o Linphone yn 2001, felly ar hyn o bryd mae'r ffrwdwr cyfryngau yn bodoli ac yn datblygu am bron i 20 mlynedd.

Wrth wraidd y ffrwd cyfryngau mae pensaernïaeth o'r enw "Llif data" (llif data). Dangosir enghraifft o bensaernïaeth o'r fath yn y ffigur isod.

Archwilio peiriant VoIP Mediastreamer2. Rhan 1

Yn y bensaernïaeth hon, mae'r algorithm prosesu data wedi'i nodi nid gan god rhaglen, ond gan gynllun (graff) ar gyfer swyddogaethau cysylltu y gellir eu trefnu mewn unrhyw drefn. Gelwir y swyddogaethau hyn yn hidlwyr.

Mae'r bensaernïaeth hon yn ei gwneud hi'n bosibl gweithredu'r swyddogaeth prosesu cyfryngau ar ffurf set o hidlwyr sy'n gysylltiedig â chynllun prosesu a throsglwyddo traffig RTP ffôn VoIP.

Mae'r gallu i gyfuno hidlwyr yn gynlluniau mympwyol, datblygiad syml hidlwyr newydd, gweithredu'r ffrwd cyfryngau fel llyfrgell annibynnol ar wahân, yn caniatáu iddo gael ei ddefnyddio mewn prosiectau eraill. Ar ben hynny, gall y prosiect fod ym maes VoIP, gan ei bod yn bosibl ychwanegu hidlwyr a wneir gennych chi'ch hun.

Mae'r llyfrgell hidlo a gyflenwir yn ddiofyn yn eithaf cyfoethog ac, fel y crybwyllwyd eisoes, gellir ei ymestyn gyda hidlwyr o'n dyluniad ein hunain. Ond yn gyntaf, gadewch i ni ddisgrifio'r hidlwyr parod sy'n dod gyda'r ffrydio cyfryngau. Dyma eu rhestr:

Hidlyddion sain

Dal a chwarae sain

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Sain brodorol Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Gwasanaeth Ciw Sain (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Gwasanaeth Uned Sain (Mac OS X)
  • Celfyddydau (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Chwaraewr ffeil (ffeiliau amrwd/wav/pcap) (Linux): MS_FILE_PLAYER
  • Chwaraewr ffeil (ffeiliau crai/wav) (Windows): MS_WINSND_READ
  • Ysgrifennwch at ffeil (ffeiliau wav) (Linux): MS_FILE_REC
  • Ysgrifennwch at ffeil (ffeiliau wav) (Windows): MS_WINSND_WRITE
  • Uned Sain 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
  • Sain Windows (Windows)

Amgodio/datgodio sain

  • G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-cyfraith: 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 llinellol: MS_L16_ENC, MS_L16_DEC
  • Siarad: MS_SPEEX_ENC, MS_SPEEX_DEC

Prosesu sain

  • Trosi sianel (mono-> stereo, stereo-> mono): MS_CHANNEL_ADAPTER
  • Cynhadledd: MS_CONF
  • Cynhyrchydd DTMF: MS_DTMF_GEN
  • Canslo adlais (speex): MS_SPEEX_EC
  • Cyfartaledd: MS_EQUALIZER
  • Cymysgydd: MS_MIXER
  • Digolledwr Colled Pecyn (PLC): MS_GENERIC_PLC
  • Ailsamplydd: MS_RESAMPLE
  • Synhwyrydd tôn: MS_TONE_DETECTOR
  • Rheoli cyfaint a mesur lefel signal: MS_VOLUME

Hidlyddion fideo

Dal fideo a chwarae yn ôl

  • dal android
  • chwarae android
  • Cipio Sylfaen AV (iOS)
  • Chwarae AV Foundation (iOS)
  • DirectShow Capture (Windows)
  • Chwarae DrawDib (Windows)
  • Chwarae allanol - Anfon fideo i'r haen uchaf
  • Chwarae GLX (Linux): MS_GLXVIDEO
  • Mire - Llun symudol synthetig: MS_MIRE
  • Chwarae OpenGL (Mac OS X)
  • Chwarae OpenGL ES2 (Android)
  • Dal Quicktime (Mac OS X)
  • Chwarae SDL: MS_SDL_OUT
  • Allbwn delwedd statig: MS_STATIC_IMAGE
  • Fideo Ar gyfer Linux (V4L) dal (Linux): MS_V4L
  • Fideo Ar gyfer cipio Linux 2 (V4L2) (Linux): MS_V4L2_CAPTURE
  • Cipio Video4windows (DirectShow) (Windows)
  • Cipio Video4windows (DirectShow) (Windows CE)
  • Cipio Fideo Ar Gyfer Windows (vfw) (Windows)
  • Chwarae XV (Linux)

Amgodio/datgodio fideo

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Eira: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (datgodiwr yn unig): MS_H264_DEC
  • Theora: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Prosesu fideo

  • ciplun jpeg
  • Trawsnewidydd fformat picsel: MS_PIX_CONV
  • Resizer
  • Hidlyddion eraill
  • Cyfnewid blociau data rhwng edafedd: MS_ITC_SOURCE, MS_ITC_SINK
  • Casglu blociau o ddata o fewnbynnau lluosog i un allbwn: MS_JOIN
  • Derbyn/trosglwyddo RTP: MS_RTP_SEND, MS_RTP_RECV
  • Copïo data mewnbwn i allbynnau lluosog: MS_TEE
  • Llwyth wedi'i derfynu: MS_VOID_SINK
  • Ffynhonnell Tawelwch: MS_VOID_SOURCE

Ategion

Hidlyddion sain

  • Amgodiwr/datgodiwr AMR-NB
  • G.729 amgodiwr/datgodiwr
  • amgodiwr/datgodiwr iLBC
  • SILK amgodiwr/datgodiwr

    Hidlyddion fideo

  • Amgodiwr meddalwedd H.264
  • Amgodiwr/datgodiwr carlam caledwedd H.264 V4L2

Ar ôl disgrifiad byr o'r hidlydd, dangosir enw'r math, a ddefnyddir wrth greu enghraifft newydd o'r hidlydd hwn. Yn yr hyn a ganlyn, byddwn yn cyfeirio at y rhestr hon.

Gosod o dan Linux Ubuntu

Nawr byddwn yn gosod y streamer cyfryngau ar y cyfrifiadur ac yn adeiladu ein cais cyntaf ag ef.

Nid oes angen unrhyw sgiliau arbennig i osod Mediastremer2 ar gyfrifiadur neu beiriant rhithwir sy'n rhedeg Ubuntu. Yma ac isod, bydd y symbol "$" yn dynodi'r anogwr plisgyn ar gyfer mynd i mewn i orchmynion. Y rhai. os gwelwch y symbol hwn yn y rhestriad ar ddechrau'r llinell, yna dyma'r llinell lle dangosir bod gorchmynion yn cael eu gweithredu yn y derfynell.

Tybir, yn ystod y camau yn yr erthygl hon, bod gan eich cyfrifiadur fynediad i'r Rhyngrwyd.

Gosod y pecyn libmediastremer-dev

Lansiwch y derfynell a theipiwch y gorchymyn:

$ sudo apt-get update

Gofynnir i chi am gyfrinair i wneud newidiadau, ei nodi a bydd y rheolwr pecyn yn diweddaru ei gronfeydd data. Ar ôl hynny, mae angen i chi redeg:

$ sudo apt-get install libmediastreamer-dev

Bydd y pecynnau dibyniaeth angenrheidiol a'r llyfrgell ffrydio cyfryngau ei hun yn cael eu lawrlwytho a'u gosod yn awtomatig.

Cyfanswm maint y pecynnau dadlwythiad dibyniaeth fydd tua 35 MB. Gellir dod o hyd i fanylion am y pecyn wedi'i osod gyda'r gorchymyn:

$ dpkg -s libmediastreamer-dev

Enghraifft ateb:

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/

Gosod offer datblygu

Gosodwch y casglwr C a'i offer cysylltiedig:

$ sudo apt-get install gcc

Rydym yn gwirio'r canlyniad trwy gwestiynu'r fersiwn casglwr:

$ gcc --version

Dylai'r ateb fod yn rhywbeth fel hyn:

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.

Adeiladu a Rhedeg y Cais Treial

Rydym yn creu i mewn cartref ffolder ar gyfer ein prosiectau tiwtorial, gadewch i ni ei alw mstutorial:

$ mkdir ~/mstutorial

Defnyddiwch eich hoff olygydd testun a chreu ffeil rhaglen C o'r enw mstest.c gyda'r cynnwys canlynol:

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

Mae'n cychwyn y ffrwdwr cyfryngau, yn argraffu cyfarchiad, ac yn gadael.

Arbedwch y ffeil a lluniwch y cais prawf gyda'r gorchymyn:

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

Sylwch fod y llinell

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

wedi'u hamgáu mewn dyfynodau, sydd wedi'u lleoli ar y bysellfwrdd yn yr un lle â'r llythyren "Ё".

Os nad yw'r ffeil yn cynnwys gwallau, yna ar ôl ei llunio bydd ffeil yn ymddangos yn y cyfeiriadur mstest. Rydyn ni'n dechrau'r rhaglen:

$ ./mstest

Bydd y canlyniad fel hyn:

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.

Yn y rhestriad hwn, gwelwn y negeseuon gwall y mae llyfrgell ALSA yn eu harddangos, fe'i defnyddir i reoli'r cerdyn sain. Mae datblygwyr y streamer cyfryngau eu hunain yn credu bod hyn yn normal. Yn yr achos hwn, rydym yn anfoddog yn cytuno â nhw.

Nawr rydyn ni i gyd ar fin gweithio gyda'r ffrwdiwr cyfryngau. Rydym wedi gosod y llyfrgell ffrydio cyfryngau, yr offeryn crynhoi, a chan ddefnyddio cymhwysiad prawf, wedi gwirio bod yr offer wedi'u ffurfweddu a bod y ffrwdiwr cyfryngau yn cychwyn yn llwyddiannus.

Nesaf Erthygl byddwn yn creu cymhwysiad a fydd yn cydosod ac yn rhedeg prosesu signal sain mewn cadwyn o sawl hidlydd.

Ffynhonnell: hab.com