Mediastreamer2 VoIP انجن کی تلاش۔ حصہ 1

مضمون کا مواد میری تحریر سے لیا گیا ہے۔ زین چینل.

تعارف

یہ مضمون Mediastreamer2 انجن کا استعمال کرتے ہوئے ریئل ٹائم میڈیا پروسیسنگ کے بارے میں مضامین کی ایک سیریز کا آغاز ہے۔ پریزنٹیشن میں لینکس ٹرمینل میں کام کرنے اور C زبان میں پروگرامنگ کرنے کی کم از کم مہارتیں شامل ہوں گی۔

Mediastreamer2 مقبول اوپن سورس سافٹ ویئر voip فون پروجیکٹ کے پیچھے VoIP انجن ہے۔ لنفون. Linphone Mediastreamer2 میں آواز اور ویڈیو سے متعلق تمام افعال کو نافذ کرتا ہے۔ انجن کی خصوصیات کی تفصیلی فہرست اس Mediastreamer صفحہ پر دیکھی جا سکتی ہے۔ سورس کوڈ یہاں ہے: GitLab.

مزید متن میں، سہولت کے لیے، لفظ Mediastreamer2 کے بجائے ہم اس کا روسی اشارے استعمال کریں گے: "media streamer"۔

اس کی تخلیق کی تاریخ مکمل طور پر واضح نہیں ہے، لیکن اس کے ماخذ کوڈ کے مطابق، اس نے پہلے لائبریری کا استعمال کیا تھا گلب، جو، جیسا کہ تھا، اس کے ساتھ ممکنہ دور کے تعلقات کی طرف اشارہ کرتا ہے۔ GStreamer. جس کے مقابلے میں میڈیا اسٹریمر زیادہ ہلکا لگتا ہے۔ لنفون کا پہلا ورژن 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 فائلز) (Linux): MS_FILE_PLAYER
  • فائل پلیئر (را/wav فائلز) (ونڈوز): MS_WINSND_READ
  • فائل میں لکھیں (wav فائلز) (Linux): MS_FILE_REC
  • فائل میں لکھیں (wav فائلز) (ونڈوز): MS_WINSND_WRITE
  • میک آڈیو یونٹ (Mac OS X)
  • ایم ایم ای (ونڈوز)
  • OSS (Linux): MS_OSS_WRITE، MS_OSS_READ
  • پورٹ آڈیو (Mac OS X)
  • پلس آڈیو (لینکس): MS_PULSE_WRITE، MS_PULSE_READ
  • ونڈوز ساؤنڈ (ونڈوز)

آڈیو انکوڈنگ/ڈی کوڈنگ

  • G.711 a-law: 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

صوتی پروسیسنگ۔

  • چینل کی تبدیلی (مونو->سٹیریو، سٹیریو->مونو): 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

ویڈیو فلٹرز

ویڈیو کیپچر اور پلے بیک

  • اینڈروئیڈ کیپچر
  • اینڈروئیڈ پلے بیک
  • اے وی فاؤنڈیشن کیپچر (iOS)
  • اے وی فاؤنڈیشن پلے بیک (iOS)
  • ڈائریکٹ شو کیپچر (ونڈوز)
  • ڈرا ڈب پلے بیک (ونڈوز)
  • بیرونی پلے بیک - اوپری پرت پر ویڈیو بھیجنا
  • GLX پلے بیک (Linux): MS_GLXVIDEO
  • مائر - مصنوعی حرکت پذیر تصویر: MS_MIRE
  • اوپن جی ایل پلے بیک (Mac OS X)
  • OpenGL ES2 پلے بیک (Android)
  • کوئیک ٹائم کیپچر (Mac OS X)
  • SDL پلے بیک: MS_SDL_OUT
  • جامد تصویر کا آؤٹ پٹ: MS_STATIC_IMAGE
  • ویڈیو فار لینکس (V4L) کیپچر (Linux): MS_V4L
  • ویڈیو برائے لینکس 2 (V4L2) کیپچر (لینکس): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) کیپچر (ونڈوز)
  • Video4windows (DirectShow) کیپچر (Windows CE)
  • ویڈیو برائے ونڈوز (vfw) کیپچر (ونڈوز)
  • XV پلے بیک (لینکس)

ویڈیو انکوڈنگ/ڈی کوڈنگ

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, Snow: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (صرف ڈیکوڈر): MS_H264_DEC
  • تھیورا: MS_THIORA_ENC، MS_THIORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

ویڈیو پروسیسنگ

  • jpeg سنیپ شاٹ
  • پکسل فارمیٹ کنورٹر: MS_PIX_CONV
  • ریسائزر
  • دوسرے فلٹرز
  • دھاگوں کے درمیان ڈیٹا بلاکس کا تبادلہ: 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 ہارڈویئر ایکسلریٹڈ انکوڈر/ڈیکوڈر

فلٹر کی مختصر تفصیل کے بعد، قسم کا نام دکھایا جاتا ہے، جو اس فلٹر کی نئی مثال بناتے وقت استعمال ہوتا ہے۔ مندرجہ ذیل میں، ہم اس فہرست کا حوالہ دیں گے۔

لینکس اوبنٹو کے تحت انسٹالیشن

اب ہم کمپیوٹر پر میڈیا اسٹریمر انسٹال کریں گے اور اس کے ساتھ اپنی پہلی ایپلیکیشن بنائیں گے۔

Ubuntu چلانے والے کمپیوٹر یا ورچوئل مشین پر Mediastremer2 کو انسٹال کرنے کے لیے کسی خاص مہارت کی ضرورت نہیں ہے۔ یہاں اور نیچے، علامت "$" کمانڈز داخل کرنے کے لیے شیل پرامپٹ کو ظاہر کرے گی۔ وہ. اگر لسٹنگ میں آپ کو یہ علامت لائن کے شروع میں نظر آتی ہے، تو یہ وہ لائن ہے جس میں ٹرمینل میں کمانڈز کو عمل میں لاتے ہوئے دکھایا گیا ہے۔

یہ فرض کیا جاتا ہے کہ اس مضمون کے مراحل کے دوران، آپ کے کمپیوٹر کو انٹرنیٹ تک رسائی حاصل ہے۔

libmediastremer-dev پیکیج کو انسٹال کرنا

ٹرمینل لانچ کریں اور کمانڈ ٹائپ کریں:

$ sudo apt-get update

تبدیلیاں کرنے کے لیے آپ سے پاس ورڈ طلب کیا جائے گا، اسے درج کریں اور پیکیج مینیجر اس کے ڈیٹا بیس کو اپ ڈیٹ کر دے گا۔ اس کے بعد، آپ کو چلانے کی ضرورت ہے:

$ sudo apt-get install libmediastreamer-dev

ضروری انحصار پیکجز اور میڈیا اسٹریمر لائبریری خود بخود ڈاؤن لوڈ اور انسٹال ہو جائیں گے۔

ڈاؤن لوڈ کردہ انحصار ڈیب پیکجوں کا کل سائز تقریباً 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/

ڈویلپمنٹ ٹولز انسٹال کرنا

سی کمپائلر اور اس کے ساتھ موجود ٹولز انسٹال کریں:

$ 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