Mediastreamer2 VoIP එන්ජිම ගවේෂණය කිරීම. 1 කොටස

ලිපියේ ද්‍රව්‍ය මගේ වෙතින් ලබාගෙන ඇත සෙන් නාලිකාව.

හැඳින්වීම

මෙම ලිපිය Mediastreamer2 එන්ජිම භාවිතයෙන් තත්‍ය කාලීන මාධ්‍ය සැකසුම් පිළිබඳ ලිපි මාලාවක ආරම්භයයි. ඉදිරිපත් කිරීම සඳහා ලිනක්ස් පර්යන්තයේ වැඩ කිරීමේ අවම කුසලතා සහ C භාෂාවෙන් වැඩසටහන්කරණය ඇතුළත් වේ.

Mediastreamer2 යනු ජනප්‍රිය විවෘත මූලාශ්‍ර මෘදුකාංග voip දුරකථන ව්‍යාපෘතිය පිටුපස ඇති VoIP එන්ජිමයි. ලින්ෆෝන්. Linphone Mediastreamer2 හි ශබ්දය සහ වීඩියෝ සම්බන්ධ සියලු කාර්යයන් ක්රියාත්මක කරයි. මෙම Mediastreamer පිටුවෙහි එන්ජින් විශේෂාංග පිළිබඳ සවිස්තර ලැයිස්තුවක් දැකිය හැක. මූල කේතය මෙහි ඇත: GitLab.

පාඨයේ තවදුරටත්, පහසුව සඳහා, Mediastreamer2 යන වචනය වෙනුවට අපි එහි රුසියානු අංකනය භාවිතා කරමු: "මාධ්ය ප්රවාහය".

එය නිර්මාණය කිරීමේ ඉතිහාසය සම්පූර්ණයෙන්ම පැහැදිලි නැත, නමුත් එහි මූල කේතය අනුව විනිශ්චය කිරීම, එය කලින් පුස්තකාලය භාවිතා කළේය. ග්ලිබ්, එය විය හැකි දුරස්ථ සම්බන්ධතාවයක් ගැන ඉඟි කරයි GStreamer. ඊට සාපේක්ෂව මාධ්‍ය ප්‍රවාහය වඩාත් සැහැල්ලු ලෙස පෙනේ. Linphone හි පළමු අනුවාදය 2001 දී දර්ශනය විය, එබැවින් මේ මොහොතේ මාධ්‍ය ප්‍රවාහය වසර 20 කට ආසන්න කාලයක් පවතින අතර වර්ධනය වේ.

මාධ්‍ය ප්‍රවාහයේ හදවතෙහි ඇත්තේ "දත්ත ප්‍රවාහය" (දත්ත ප්‍රවාහය) නම් ගෘහ නිර්මාණ ශිල්පයකි. එවැනි ගෘහ නිර්මාණ ශිල්පයක උදාහරණයක් පහත රූපයේ දැක්වේ.

Mediastreamer2 VoIP එන්ජිම ගවේෂණය කිරීම. 1 කොටස

මෙම ගෘහ නිර්මාණ ශිල්පය තුළ, දත්ත සැකසුම් ඇල්ගොරිතම නිශ්චිතව දක්වා ඇත්තේ වැඩසටහන් කේතයකින් නොව, ඕනෑම අනුපිළිවෙලකට සකස් කළ හැකි කාර්යයන් සම්බන්ධ කිරීම සඳහා යෝජනා ක්රමයක් (ප්රස්ථාරයක්) මගිනි. මෙම කාර්යයන් පෙරහන් ලෙස හැඳින්වේ.

VoIP දුරකථනයක RTP ගමනාගමනය සැකසීම සහ සම්ප්‍රේෂණය කිරීම සඳහා වන යෝජනා ක්‍රමයකට සම්බන්ධ කර ඇති පෙරහන් කට්ටලයක ස්වරූපයෙන් මාධ්‍ය සැකසුම් ක්‍රියාකාරිත්වය ක්‍රියාත්මක කිරීමට මෙම ගෘහ නිර්මාණ ශිල්පය හැකි වේ.

පෙරහන් අත්තනෝමතික යෝජනා ක්‍රමවලට ඒකාබද්ධ කිරීමේ හැකියාව, නව පෙරහන් වල සරල සංවර්ධනය, මාධ්‍ය ප්‍රවාහය ස්වාධීන වෙනම පුස්තකාලයක් ලෙස ක්‍රියාත්මක කිරීම, එය වෙනත් ව්‍යාපෘතිවල භාවිතා කිරීමට ඉඩ සලසයි. එපමණක් නොව, ව්‍යාපෘතිය VoIP ක්ෂේත්‍රයේ විය හැකිය, මන්ද එය තමා විසින්ම සාදන ලද පෙරහන් එකතු කළ හැකිය.

පෙරනිමියෙන් සපයන ලද පෙරහන් පුස්තකාලය තරමක් පොහොසත් වන අතර, දැනටමත් සඳහන් කර ඇති පරිදි, අපගේම නිර්මාණයේ පෙරහන් සමඟ දිගු කළ හැකිය. නමුත් පළමුව, මාධ්‍ය ප්‍රවාහය සමඟ එන සූදානම් කළ පෙරහන් විස්තර කරමු. මෙන්න ඔවුන්ගේ ලැයිස්තුව:

ශබ්ද පෙරහන්

ශ්‍රව්‍ය ග්‍රහණය සහ නැවත ධාවනය

  • ඇල්සා (ලිනක්ස්): MS_ALSA_WRITE, MS_ALSA_READ
  • Android ස්වදේශීය ශබ්දය (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • ශ්‍රව්‍ය පෝලිම් සේවාව (Mac OS X): MS_AQ_WRITE, MS_AQ_READ
  • ශ්‍රව්‍ය ඒකක සේවාව (Mac OS X)
  • කලා (ලිනක්ස්): MS_ARTS_WRITE, MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • ගොනු වාදකය (raw/wav/pcap ගොනු) (ලිනක්ස්): MS_FILE_PLAYER
  • ගොනු වාදකය (raw/wav ගොනු) (Windows): MS_WINSND_READ
  • ගොනුවට ලියන්න (wav ගොනු) (ලිනක්ස්): MS_FILE_REC
  • ගොනුවට ලියන්න (wav ගොනු) (වින්ඩෝස්): MS_WINSND_WRITE
  • Mac Audio Unit (Mac OS X)
  • MME (වින්ඩෝස්)
  • OSS (ලිනක්ස්): MS_OSS_WRITE, MS_OSS_READ
  • PortAudio (Mac OS X)
  • PulseAudio (Linux): MS_PULSE_WRITE, MS_PULSE_READ
  • වින්ඩෝස් ශබ්දය (වින්ඩෝස්)

ශ්‍රව්‍ය කේතනය / විකේතනය කිරීම

  • G.711 a-නීතිය: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-නීතිය: 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: MS_L16_ENC, MS_L16_DEC
  • ස්පීක්ස්: MS_SPEEX_ENC, MS_SPEEX_DEC

ශබ්ද සැකසුම්

  • නාලිකා පරිවර්තනය (mono->stereo, stereo->mono): MS_CHANNEL_ADAPTER
  • සම්මන්ත්‍රණය: MS_CONF
  • DTMF උත්පාදක: MS_DTMF_GEN
  • දෝංකාර අවලංගු කිරීම (ස්පීක්ස්): MS_SPEEX_EC
  • සමකරනය: MS_EQUALIZER
  • මික්සර්: MS_MIXER
  • පැකට් පාඩු වන්දි ගෙවන්නා (PLC): MS_GENERIC_PLC
  • නැවත සකස් කරන්නා: MS_RESAMPLE
  • නාද අනාවරකය: MS_TONE_DETECTOR
  • ශබ්ද පාලනය සහ සංඥා මට්ටම මැනීම: MS_VOLUME

වීඩියෝ පෙරහන්

වීඩියෝ ග්‍රහණය සහ නැවත ධාවනය

  • android අල්ලා ගැනීම
  • android නැවත ධාවනය
  • AV පදනම ග්‍රහණය කිරීම (iOS)
  • AV පදනම නැවත ධාවනය (iOS)
  • DirectShow Capture (Windows)
  • DrawDib නැවත ධාවනය (වින්ඩෝස්)
  • බාහිර නැවත ධාවනය - ඉහළ ස්ථරයට වීඩියෝව යැවීම
  • GLX නැවත ධාවනය (ලිනක්ස්): MS_GLXVIDEO
  • Mire - කෘතිම චලනය වන පින්තූරය: MS_MIRE
  • OpenGL නැවත ධාවනය (Mac OS X)
  • OpenGL ES2 නැවත ධාවනය (Android)
  • Quicktime Capture (Mac OS X)
  • SDL නැවත ධාවනය: MS_SDL_OUT
  • ස්ථිතික රූප ප්‍රතිදානය: MS_STATIC_IMAGE
  • Linux සඳහා වීඩියෝ (V4L) ග්‍රහණය (Linux): MS_V4L
  • Linux 2 සඳහා වීඩියෝ (V4L2) ග්‍රහණය (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) ග්‍රහණය (Windows)
  • Video4windows (DirectShow) ග්‍රහණය (Windows CE)
  • වින්ඩෝස් සඳහා වීඩියෝ (vfw) ග්‍රහණය (වින්ඩෝස්)
  • XV නැවත ධාවනය (ලිනක්ස්)

වීඩියෝ කේතනය / විකේතනය කිරීම

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, හිම: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (විකේතකය පමණි): MS_H264_DEC
  • Theora: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

වීඩියෝ සැකසීම

  • jpeg ස්නැප්ෂොට්
  • පික්සල් ආකෘති පරිවර්තකය: MS_PIX_CONV
  • Resizer
  • වෙනත් පෙරහන්
  • නූල් අතර දත්ත වාරණ හුවමාරුව: MS_ITC_SOURCE, MS_ITC_SINK
  • එක් ප්‍රතිදානයකට බහු ආදාන වලින් දත්ත කොටස් එකතු කිරීම: MS_JOIN
  • RTP ලැබීම/සම්ප්‍රේෂණය: MS_RTP_SEND, MS_RTP_RECV
  • බහු ප්‍රතිදානයන් වෙත ආදාන දත්ත පිටපත් කිරීම: MS_TEE
  • අවසන් කළ භාරය: MS_VOID_SINK
  • නිශ්ශබ්ද මූලාශ්‍රය: MS_VOID_SOURCE

ප්ලගීන

ශබ්ද පෙරහන්

  • AMR-NB කේතකය/විකේතකය
  • G.729 කේතකය/විකේතකය
  • iLBC කේතකය/විකේතකය
  • SILK කේතකය/විකේතකය

    වීඩියෝ පෙරහන්

  • H.264 මෘදුකාංග කේතකය
  • H.264 V4L2 දෘඩාංග ත්වරණය කරන ලද කේතකය/විකේතකය

ෆිල්ටරය පිළිබඳ කෙටි විස්තරයකින් පසුව, මෙම ෆිල්ටරයේ නව අවස්ථාවක් නිර්මාණය කිරීමේදී භාවිතා කරන ආකාරයේ නම පෙන්වනු ලැබේ. පහත දැක්වෙන දේ තුළ, අපි මෙම ලැයිස්තුවට යොමු කරමු.

Linux Ubuntu යටතේ ස්ථාපනය

දැන් අපි පරිගණකයේ මාධ්‍ය ප්‍රවාහය ස්ථාපනය කර එය සමඟ අපගේ පළමු යෙදුම ගොඩනඟමු.

Mediastremer2 පරිගණකයක හෝ උබුන්ටු ක්‍රියාත්මක වන අතථ්‍ය යන්ත්‍රයක ස්ථාපනය කිරීම සඳහා විශේෂ කුසලතා අවශ්‍ය නොවේ. මෙහි සහ පහළින්, "$" සංකේතය විධාන ඇතුළත් කිරීම සඳහා වන shell prompt දක්වයි. එම. ලැයිස්තුගත කිරීමේදී ඔබට පේළියේ ආරම්භයේ මෙම සංකේතය පෙනෙන්නේ නම්, ටර්මිනලයේ විධාන ක්‍රියාත්මක කිරීමට පෙන්වන රේඛාව මෙයයි.

මෙම ලිපියේ පියවර අතරතුර, ඔබේ පරිගණකයට අන්තර්ජාලයට ප්‍රවේශය ඇති බව උපකල්පනය කෙරේ.

libmediastremer-dev පැකේජය ස්ථාපනය කිරීම

ටර්මිනලය දියත් කර විධානය ටයිප් කරන්න:

$ sudo apt-get update

වෙනස්කම් සිදු කිරීම සඳහා මුරපදයක් ඉල්ලා සිටිනු ඇත, එය ඇතුල් කරන්න සහ පැකේජ කළමනාකරු එහි දත්ත සමුදායන් යාවත්කාලීන කරනු ඇත. ඊට පසු, ඔබ ධාවනය කළ යුතුය:

$ sudo apt-get install libmediastreamer-dev

අවශ්‍ය පරායත්ත පැකේජ සහ මාධ්‍ය ප්‍රවාහ පුස්තකාලය ස්වයංක්‍රීයව බාගත කර ස්ථාපනය කෙරේ.

බාගත කළ පරායත්ත deb පැකේජවල සම්පූර්ණ ප්‍රමාණය ආසන්න වශයෙන් 35 MB වේ. ස්ථාපිත පැකේජය පිළිබඳ විස්තර විධානය සමඟ සොයාගත හැකිය:

$ dpkg -s libmediastreamer-dev

පිළිතුර උදාහරණය:

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/

සංවර්ධන මෙවලම් ස්ථාපනය කිරීම

C සම්පාදකය සහ ඒ සමඟ ඇති මෙවලම් ස්ථාපනය කරන්න:

$ sudo apt-get install gcc

සම්පාදක අනුවාදය විමසීමෙන් අපි ප්‍රතිඵලය පරීක්ෂා කරමු:

$ gcc --version

පිළිතුර මෙවැනි දෙයක් විය යුතුය:

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.

අත්හදා බැලීමේ යෙදුම ගොඩනැගීම සහ ධාවනය කිරීම

අපි නිර්මාණය කරනවා ගෙදර අපගේ නිබන්ධන ව්‍යාපෘති සඳහා ෆෝල්ඩරය, අපි එය අමතන්න mstutorial:

$ mkdir ~/mstutorial

ඔබගේ ප්‍රියතම පෙළ සංස්කාරකය භාවිතා කර C වැඩසටහන් ගොනුවක් සාදන්න mstest.c පහත අන්තර්ගතය සමඟ:

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

එය මාධ්‍ය ප්‍රවාහය ආරම්භ කරයි, සුබ පැතුම් මුද්‍රණය කරයි, සහ පිටවෙයි.

ගොනුව සුරකින්න සහ විධානය සමඟ පරීක්ෂණ යෙදුම සම්පාදනය කරන්න:

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

රේඛාව බව සලකන්න

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

"Ё" අකුරේ ඇති ස්ථානයේම යතුරු පුවරුවේ පිහිටා ඇති උද්ධෘත ලකුණු වලින් අමුණා ඇත.

ගොනුවේ දෝෂ නොමැති නම්, සම්පාදනය කිරීමෙන් පසු ගොනුවක් නාමාවලියෙහි දිස්වනු ඇත mstest. අපි වැඩසටහන ආරම්භ කරමු:

$ ./mstest

ප්රතිඵලය මේ වගේ වනු ඇත:

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.

මෙම ලැයිස්තුගත කිරීමේදී, ALSA පුස්තකාලය පෙන්වන දෝෂ පණිවිඩ අපට පෙනේ, එය ශබ්ද කාඩ්පත පාලනය කිරීමට භාවිතා කරයි. මාධ්‍ය ප්‍රවාහයේ සංවර්ධකයින්ම මෙය සාමාන්‍ය දෙයක් බව විශ්වාස කරති. මෙම අවස්ථාවේ දී, අපි ඔවුන් සමඟ අකමැත්තෙන් එකඟ වෙමු.

දැන් අපි මාධ්‍ය ප්‍රවාහය සමඟ වැඩ කිරීමට සූදානම්. අපි මාධ්‍ය ප්‍රවාහ පුස්තකාලය, සම්පාදනය කිරීමේ මෙවලම ස්ථාපනය කර ඇති අතර, අත්හදා බැලීමේ යෙදුමක් භාවිතා කරමින්, මෙවලම් වින්‍යාස කර ඇති බව සහ මාධ්‍ය ප්‍රවාහය සාර්ථකව ආරම්භ වන බව සත්‍යාපනය කර ඇත.

ඊළඟ ලිපියයි අපි පෙරහන් කිහිපයක දාමයක ශ්‍රව්‍ය සංඥාවක් එකලස් කර ක්‍රියාත්මක කරන යෙදුමක් සාදන්නෙමු.

මූලාශ්රය: www.habr.com