Ṣiṣawari ẹrọ Mediastreamer2 VoIP. Apa 1

Awọn ohun elo ti awọn article ti wa ni ya lati mi zen ikanni.

Ifihan

Nkan yii jẹ ibẹrẹ ti onka awọn nkan nipa sisẹ media akoko gidi ni lilo ẹrọ Mediastreamer2. Ifihan naa yoo kan awọn ọgbọn ti o kere ju ti ṣiṣẹ ni ebute Linux ati siseto ni ede C.

Mediastreamer2 jẹ ẹrọ VoIP lẹhin iṣẹ-iṣẹ foonu voip sọfitiwia ṣiṣi-orisun olokiki. Linfon. Ni Linphone Mediastreamer2 ṣe gbogbo awọn iṣẹ ti o jọmọ ohun ati fidio. Atokọ alaye ti awọn ẹya ẹrọ ni a le rii lori oju-iwe Mediastreamer yii. Awọn koodu orisun wa nibi: GitLab.

Siwaju sii ninu ọrọ naa, fun irọrun, dipo ọrọ Mediastreamer2 a yoo lo akiyesi Russian rẹ: “media streamer”.

Itan-akọọlẹ ti ẹda rẹ ko han gbangba, ṣugbọn adajọ nipasẹ koodu orisun rẹ, o ti lo ile-ikawe tẹlẹ glib, eyi ti, bi o ti jẹ, tanilolobo ni a ṣee ṣe ti o jina ibasepo pẹlu GStreamer. Ni lafiwe pẹlu eyiti media ṣiṣan n wo iwuwo diẹ sii. Ẹya akọkọ ti Linphone han ni ọdun 2001, nitorinaa ni akoko yii ṣiṣan media wa ati idagbasoke fun ọdun 20.

Ni okan ti media streamer jẹ ẹya faaji ti a npe ni "Data sisan" (data sisan). Apeere ti iru faaji ni a fihan ni aworan ni isalẹ.

Ṣiṣawari ẹrọ Mediastreamer2 VoIP. Apa 1

Ninu faaji yii, algorithm ṣiṣe data jẹ pato kii ṣe nipasẹ koodu eto, ṣugbọn nipasẹ ero kan (iyaworan) fun awọn iṣẹ sisopọ ti o le ṣeto ni eyikeyi aṣẹ. Awọn iṣẹ wọnyi ni a npe ni awọn asẹ.

Ile faaji yii jẹ ki o ṣee ṣe lati ṣe iṣẹ ṣiṣe sisẹ media ni irisi ṣeto awọn asẹ ti o sopọ si sisẹ ijabọ RTP foonu VoIP ati ero gbigbe.

Agbara lati darapo awọn asẹ sinu awọn igbero lainidii, idagbasoke irọrun ti awọn asẹ tuntun, imuse ti ṣiṣan media bi ile-ikawe lọtọ ominira, gba laaye lati lo ni awọn iṣẹ akanṣe miiran. Pẹlupẹlu, iṣẹ akanṣe le wa ni aaye ti VoIP, nitori o ṣee ṣe lati ṣafikun awọn asẹ ti ara ẹni ṣe.

Ile ikawe àlẹmọ ti a pese nipasẹ aiyipada jẹ ọlọrọ pupọ ati pe, bi a ti sọ tẹlẹ, le faagun pẹlu awọn asẹ ti apẹrẹ tiwa. Ṣugbọn ni akọkọ, jẹ ki a ṣe apejuwe awọn asẹ ti a ti ṣetan ti o wa pẹlu ṣiṣan media. Eyi ni atokọ wọn:

Ajọ ohun

Gbigba ohun ati ṣiṣiṣẹsẹhin

  • Alsa (Linux): MS_ALSA_WRITE, MS_ALSA_READ
  • Ohun abinibi Android (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • Audio Queue Service (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • Iṣẹ Ẹka Ohun (Mac OS X)
  • Iṣẹ ọna (Linux): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • Erọ faili (aise/wav/pcap awọn faili) (Linux): MS_FILE_PLAYER
  • Ẹrọ faili (aise/wav awọn faili) (Windows): MS_WINSND_READ
  • Kọ si faili (awọn faili wav) (Linux): MS_FILE_REC
  • Kọ si faili (awọn faili 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
  • Ohun Windows (Windows)

Iyipada ohun / iyipada

  • G.711 a-ofin: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-ofin: 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 laini: MS_L16_ENC, MS_L16_DEC
  • Ọrọ: MS_SPEEX_ENC, MS_SPEEX_DEC

Ṣiṣẹ ohun

  • Iyipada ikanni (mono->stereo, stereo-> mono): MS_CHANNEL_ADAPTER
  • Apero: MS_CONF
  • DTMF monomono: MS_DTMF_GEN
  • Ifagile iwoyi (speex): MS_SPEEX_EC
  • Oluṣeto: MS_EQUALIZER
  • Adapo: MS_MIXER
  • Packet Compensator (PLC): MS_GENERIC_PLC
  • Atunyẹwo: MS_RESAMPLE
  • Oluwari ohun orin: MS_TONE_DETECTOR
  • Iṣakoso iwọn didun ati wiwọn ipele ifihan agbara: MS_VOLUME

Fidio Ajọ

Yaworan fidio ati ṣiṣiṣẹsẹhin

  • Android Yaworan
  • Android Sisisẹsẹhin
  • Yaworan AV Foundation (iOS)
  • Sisisẹsẹhin AV Foundation (iOS)
  • Yiyaworan DirectShow (Windows)
  • DrawDib ṣiṣiṣẹsẹhin (Windows)
  • Sisisẹsẹhin ita - Fifiranṣẹ fidio si ipele oke
  • GLX šišẹsẹhin (Lainos): MS_GLXVIDEO
  • Mire - Sintetiki aworan gbigbe: MS_MIRE
  • Ṣiiṣisẹhin GL (Mac OS X)
  • Ṣii ṣiṣiṣẹsẹhin GL ES2 (Android)
  • Yaworan akoko kiakia (Mac OS X)
  • Sisisẹsẹhin SDL: MS_SDL_OUT
  • Iṣẹjade aworan aimi: MS_STATIC_IMAGE
  • Fidio Fun Linux (V4L) gbigba (Lainos): MS_V4L
  • Fidio Fun Linux 2 (V4L2) gbigba (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) Yaworan (Windows)
  • Video4windows (DirectShow) Yaworan (Windows CE)
  • Fidio Fun Windows (vfw) Yaworan (Windows)
  • Sisisẹsẹhin XV (Linux)

Fidio fifi koodu / iyipada

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (nikan decoder): MS_H264_DEC
  • Ilana: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

Sise fidio

  • aworan jpeg
  • Oluyipada ọna kika Pixel: MS_PIX_CONV
  • Atunṣe
  • Miiran Ajọ
  • Paṣipaarọ awọn bulọọki data laarin awọn okun: MS_ITC_SOURCE, MS_ITC_SINK
  • Gbigba awọn bulọọki ti data lati awọn igbewọle pupọ si iṣẹjade ẹyọkan: MS_JOIN
  • RTP gba/gbejade: MS_RTP_SEND, MS_RTP_RECV
  • Didaakọ data igbewọle si awọn ọnajade lọpọlọpọ: MS_TEE
  • Ti pari fifuye: MS_VOID_SINK
  • Orisun ipalọlọ: MS_VOID_SOURCE

Awọn afikun

Ajọ ohun

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

    Fidio Ajọ

  • H.264 software kooduopo
  • H.264 V4L2 hardware onikiakia encoder / decoder

Lẹhin apejuwe kukuru ti àlẹmọ, orukọ iru naa han, eyiti o lo nigbati o ṣẹda apẹẹrẹ tuntun ti àlẹmọ yii. Ninu ohun ti o tẹle, a yoo tọka si atokọ yii.

Fifi sori ẹrọ labẹ Linux Ubuntu

Bayi a yoo fi sori ẹrọ ṣiṣan media lori kọnputa ki o kọ ohun elo akọkọ wa pẹlu rẹ.

Fifi Mediastremer2 sori kọnputa tabi ẹrọ foju ti nṣiṣẹ Ubuntu ko nilo awọn ọgbọn pataki eyikeyi. Nibi ati isalẹ, aami "$" yoo tọkasi itọsi ikarahun fun titẹ awọn aṣẹ. Awon. Ti o ba wa ninu atokọ ti o rii aami yii ni ibẹrẹ laini, lẹhinna eyi ni laini ninu eyiti awọn aṣẹ ti han lati ṣiṣẹ ni ebute naa.

O ti ro pe lakoko awọn igbesẹ ti nkan yii, kọnputa rẹ ni iwọle si Intanẹẹti.

Fifi package libmediastremer-dev sori ẹrọ

Lọlẹ ebute naa ki o tẹ aṣẹ naa:

$ sudo apt-get update

Iwọ yoo beere fun ọrọ igbaniwọle kan lati ṣe awọn ayipada, tẹ sii ati oluṣakoso package yoo ṣe imudojuiwọn awọn apoti isura data rẹ. Lẹhin iyẹn, o nilo lati ṣiṣẹ: +

$ sudo apt-get install libmediastreamer-dev

Awọn idii igbẹkẹle pataki ati ile-ikawe media ṣiṣan tikararẹ yoo ṣe igbasilẹ ati fi sii laifọwọyi.

Iwọn apapọ ti awọn idii ifowopamọ igbẹkẹle ti a ṣe igbasilẹ yoo jẹ isunmọ 35 MB. Awọn alaye nipa package ti a fi sii ni a le rii pẹlu aṣẹ:

$ dpkg -s libmediastreamer-dev

Idahun apẹẹrẹ:

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/

Fifi awọn irinṣẹ idagbasoke

Fi sori ẹrọ alakojo C ati awọn irinṣẹ to tẹle:

$ sudo apt-get install gcc

A ṣayẹwo abajade naa nipa ṣiṣe ibeere ẹya alakojọ:

$ gcc --version

Idahun si yẹ ki o jẹ nkan bi eyi:

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.

Ilé ati Ṣiṣe Ohun elo Idanwo

A ṣẹda ninu ile folda fun awọn iṣẹ ikẹkọ wa, jẹ ki a pe mstutorial:

$ mkdir ~/mstutorial

Lo olootu ọrọ ayanfẹ rẹ ki o ṣẹda faili eto C ti a pe mstest.c pẹlu akoonu wọnyi:

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

O ṣe ipilẹṣẹ ṣiṣan media, ṣe atẹjade ikini, o si jade.

Ṣafipamọ faili naa ki o ṣajọ ohun elo idanwo pẹlu aṣẹ naa:

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

Akiyesi pe ila

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

paade ni awọn ami asọye, eyiti o wa lori bọtini itẹwe ni aaye kanna pẹlu lẹta “Ё”.

Ti faili naa ko ba ni awọn aṣiṣe ninu, lẹhinna lẹhin akojọpọ faili kan yoo han ninu itọsọna naa mstest. A bẹrẹ eto naa:

$ ./mstest

Abajade yoo jẹ bi eleyi:

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.

Ninu atokọ yii, a rii awọn ifiranṣẹ aṣiṣe ti ile-ikawe ALSA ṣe afihan, o lo lati ṣakoso kaadi ohun. Awọn olupilẹṣẹ ti ṣiṣan media funrara wọn gbagbọ pe eyi jẹ deede. Ni idi eyi, a reluctantly gba pẹlu wọn.

Bayi a ti ṣeto gbogbo wa lati ṣiṣẹ pẹlu ṣiṣan media. A ti fi sori ẹrọ ile-ikawe media ṣiṣanwọle, ohun elo ikojọpọ, ati lilo ohun elo idanwo kan, rii daju pe awọn irinṣẹ ti wa ni tunto ati ṣiṣan media ti bẹrẹ ni aṣeyọri.

Itele article a yoo ṣẹda ohun elo kan ti yoo pejọ ati ṣiṣe sisẹ ifihan agbara ohun ni pq ti awọn asẹ pupọ.

orisun: www.habr.com