Mediastreamer2 वीओआईपी इंजन की खोज। भाग ---- पहला

लेख की सामग्री मेरे से ली गई है ज़ेन चैनल.

परिचय

यह लेख Mediastreamer2 इंजन का उपयोग करके रीयल-टाइम मीडिया प्रोसेसिंग के बारे में लेखों की एक श्रृंखला की शुरुआत है। प्रस्तुति के दौरान, लिनक्स टर्मिनल में काम करने के न्यूनतम कौशल और सी भाषा में प्रोग्रामिंग शामिल होगी।

Mediastreamer2 लोकप्रिय ओपन-सोर्स सॉफ़्टवेयर वीओआईपी फ़ोन प्रोजेक्ट के पीछे वीओआईपी इंजन है। लिनफोन. Linphone में Mediastreamer2 ध्वनि और वीडियो से संबंधित सभी कार्यों को लागू करता है। इस Mediastreamer पेज पर इंजन सुविधाओं की एक विस्तृत सूची देखी जा सकती है। स्रोत कोड यहाँ है: GitLab.

पाठ में आगे, सुविधा के लिए, Mediastreamer2 शब्द के बजाय हम इसके रूसी अंकन का उपयोग करेंगे: "मीडिया स्ट्रीमर"।

इसके निर्माण का इतिहास पूरी तरह से स्पष्ट नहीं है, लेकिन इसके स्रोत कोड को देखते हुए, यह पहले पुस्तकालय का उपयोग करता था फिसलनदार, जो, जैसा कि था, के साथ संभावित दूर के रिश्ते पर संकेत देता है GStreamer. जिसकी तुलना में मीडिया स्ट्रीमर ज्यादा हल्का दिखता है। Linphone का पहला संस्करण 2001 में सामने आया था, इसलिए फिलहाल मीडिया स्ट्रीमर लगभग 20 वर्षों से मौजूद है और विकसित हो रहा है।

मीडिया स्ट्रीमर के केंद्र में एक आर्किटेक्चर है जिसे "डेटा फ्लो" (डेटा फ्लो) कहा जाता है। ऐसी वास्तुकला का एक उदाहरण नीचे की आकृति में दिखाया गया है।

Mediastreamer2 वीओआईपी इंजन की खोज। भाग ---- पहला

इस आर्किटेक्चर में, डेटा प्रोसेसिंग एल्गोरिदम को प्रोग्राम कोड द्वारा निर्दिष्ट नहीं किया जाता है, बल्कि किसी भी क्रम में व्यवस्थित किए जा सकने वाले कार्यों को जोड़ने के लिए एक योजना (ग्राफ़) द्वारा निर्दिष्ट किया जाता है। इन कार्यों को फ़िल्टर कहा जाता है।

यह आर्किटेक्चर वीओआईपी फोन आरटीपी ट्रैफिक प्रोसेसिंग और ट्रांसमिशन स्कीम से जुड़े फिल्टर के सेट के रूप में मीडिया प्रोसेसिंग कार्यक्षमता को लागू करना संभव बनाता है।

मनमाना योजनाओं में फिल्टर को संयोजित करने की क्षमता, नए फिल्टर का सरल विकास, एक स्वतंत्र अलग पुस्तकालय के रूप में मीडिया स्ट्रीमर का कार्यान्वयन, इसे अन्य परियोजनाओं में उपयोग करने की अनुमति देता है। इसके अलावा, परियोजना वीओआईपी के क्षेत्र में हो सकती है, क्योंकि स्वयं द्वारा बनाए गए फिल्टर को जोड़ना संभव है।

डिफ़ॉल्ट रूप से प्रदान की गई फ़िल्टर लाइब्रेरी काफी समृद्ध है और जैसा कि पहले ही उल्लेख किया गया है, हमारे अपने डिज़ाइन के फ़िल्टर के साथ बढ़ाया जा सकता है। लेकिन पहले, मीडिया स्ट्रीमर के साथ आने वाले रेडी-मेड फ़िल्टर का वर्णन करें। यहाँ उनकी सूची है:

ध्वनि फिल्टर

ऑडियो कैप्चर और प्लेबैक

  • अलसा (लिनक्स): MS_ALSA_WRITE, MS_ALSA_READ
  • Android मूल ध्वनि (libmedia): MS_ANDROID_SOUND_WRITE, MS_ANDROID_SOUND_READ
  • ऑडियो कतार सेवा (मैक ओएस एक्स): MS_AQ_WRITE, MS_AQ_READ
  • ऑडियो यूनिट सेवा (मैक ओएस एक्स)
  • कला (लिनक्स): MS_ARTS_WRITE, MS_ARTS_READ
  • डायरेक्टसाउंड (विंडोज़): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
  • फ़ाइल प्लेयर (कच्चा/wav/pcap फ़ाइलें) (लिनक्स): MS_FILE_PLAYER
  • फ़ाइल प्लेयर (कच्ची/wav फ़ाइलें) (Windows): MS_WINSND_READ
  • फ़ाइल में लिखें (wav फ़ाइलें) (लिनक्स): MS_FILE_REC
  • फ़ाइल में लिखें (wav फ़ाइलें) (Windows): MS_WINSND_WRITE
  • मैक ऑडियो यूनिट (मैक ओएस एक्स)
  • एमएमई (विंडोज़)
  • ओएसएस (लिनक्स): MS_OSS_WRITE, MS_OSS_READ
  • पोर्टऑडियो (मैक ओएस एक्स)
  • पल्सऑडियो (लिनक्स): MS_PULSE_WRITE, MS_PULSE_READ
  • विंडोज साउंड (विंडोज)

ऑडियो एन्कोडिंग/डिकोडिंग

  • G.711 a-law: MS_ALAW_DEC, MS_ALAW_ENC
  • G.711 µ-कानून: MS_ULAW_DEC, MS_ULAW_ENC
  • जी.722: MS_G722_DEC, MS_G722_ENC
  • G.726: MS_G726_32_ENC, MS_G726_24_ENC, MS_G726_16_ENC
  • जीएसएम: MS_GSM_DEC, MS_GSM_ENC
  • रैखिक पीसीएम: 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
  • पैकेट लॉस कम्पेंसेटर (पीएलसी): MS_GENERIC_PLC
  • पुन: नमूना: MS_RESAMPLE
  • टोन डिटेक्टर: MS_TONE_DETECTOR
  • वॉल्यूम नियंत्रण और सिग्नल स्तर माप: MS_VOLUME

वीडियो फिल्टर

वीडियो कैप्चर और प्लेबैक

  • एंड्रॉइड कैप्चर
  • Android प्लेबैक
  • एवी फाउंडेशन कैप्चर (आईओएस)
  • ए वी फाउंडेशन प्लेबैक (आईओएस)
  • डायरेक्टशो कैप्चर (विंडोज़)
  • ड्राडिब प्लेबैक (विंडोज़)
  • बाहरी प्लेबैक - शीर्ष परत पर वीडियो भेजना
  • जीएलएक्स प्लेबैक (लिनक्स): MS_GLXVIDEO
  • मिरे - सिंथेटिक मूविंग पिक्चर: MS_MIRE
  • ओपनजीएल प्लेबैक (मैक ओएस एक्स)
  • OpenGL ES2 प्लेबैक (एंड्रॉइड)
  • क्विकटाइम कैप्चर (मैक ओएस एक्स)
  • एसडीएल प्लेबैक: MS_SDL_OUT
  • स्थिर छवि आउटपुट: MS_STATIC_IMAGE
  • Linux के लिए वीडियो (V4L) कैप्चर (Linux): MS_V4L
  • Linux 2 (V4L2) के लिए वीडियो कैप्चर (Linux): MS_V4L2_CAPTURE
  • Video4windows (DirectShow) कैप्चर (Windows)
  • Video4windows (डायरेक्टशो) कैप्चर (Windows CE)
  • विंडोज के लिए वीडियो (वीएफडब्ल्यू) कैप्चर (विंडोज)
  • XV प्लेबैक (लिनक्स)

वीडियो एन्कोडिंग/डिकोडिंग

  • H.263, H.263-1998, MP4V-ES, JPEG, MJPEG, स्नो: MS_MJPEG_DEC, MS_H263_ENC, MS_H263_DEC
  • H.264 (केवल डिकोडर): MS_H264_DEC
  • थियोरा: MS_THEORA_ENC, MS_THEORA_DEC
  • VP8: MS_VP8_ENC, MS_VP8_DEC

वीडियो प्रसंस्करण

  • जेपीईजी स्नैपशॉट
  • पिक्सेल प्रारूप कनवर्टर: MS_PIX_CONV
  • रीसाइज़र
  • अन्य फिल्टर
  • थ्रेड्स के बीच डेटा ब्लॉक का आदान-प्रदान: MS_ITC_SOURCE, MS_ITC_SINK
  • एकाधिक इनपुट से डेटा के ब्लॉक को एक आउटपुट में एकत्रित करना: MS_JOIN
  • आरटीपी प्राप्त/प्रेषित: MS_RTP_SEND, MS_RTP_RECV
  • इनपुट डेटा को एकाधिक आउटपुट में कॉपी करना: MS_TEE
  • समाप्त लोड: MS_VOID_SINK
  • मौन स्रोत: MS_VOID_SOURCE

Плагины

ध्वनि फिल्टर

  • एएमआर-एनबी एनकोडर / डिकोडर
  • G.729 एनकोडर / डिकोडर
  • iLBC एनकोडर / डिकोडर
  • सिल्क एनकोडर / डिकोडर

    वीडियो फिल्टर

  • H.264 सॉफ्टवेयर एनकोडर
  • H.264 V4L2 हार्डवेयर त्वरित एनकोडर/डिकोडर

फ़िल्टर के संक्षिप्त विवरण के बाद, प्रकार का नाम दिखाया जाता है, जिसका उपयोग इस फ़िल्टर का नया उदाहरण बनाते समय किया जाता है। निम्नलिखित में, हम इस सूची का उल्लेख करेंगे।

लिनक्स उबंटू के तहत स्थापना

अब हम कंप्यूटर पर मीडिया स्ट्रीमर इंस्टॉल करेंगे और इसके साथ अपना पहला एप्लिकेशन बनाएंगे।

Ubuntu चलाने वाले कंप्यूटर या वर्चुअल मशीन पर Mediastremer2 इंस्टॉल करने के लिए किसी विशेष कौशल की आवश्यकता नहीं होती है। यहाँ और नीचे, प्रतीक "$" कमांड दर्ज करने के लिए शेल प्रांप्ट को दर्शाएगा। वे। यदि लिस्टिंग में आप लाइन की शुरुआत में इस प्रतीक को देखते हैं, तो यह वह लाइन है जिसमें कमांड को टर्मिनल में निष्पादित किया जाता है।

यह माना जाता है कि इस आलेख के चरणों के दौरान, आपके कंप्यूटर की इंटरनेट तक पहुंच है।

libmediastremer-dev संकुल अधिष्ठापित करना

टर्मिनल लॉन्च करें और कमांड टाइप करें:

$ sudo apt-get update

आपसे परिवर्तन करने के लिए एक पासवर्ड मांगा जाएगा, इसे दर्ज करें और पैकेज मैनेजर इसके डेटाबेस को अपडेट करेगा। उसके बाद, आपको चलाने की आवश्यकता है:

$ sudo apt-get install libmediastreamer-dev

आवश्यक निर्भरता पैकेज और मीडिया स्ट्रीमर लाइब्रेरी स्वचालित रूप से डाउनलोड और इंस्टॉल हो जाएगी।

डाउनलोड किए गए डिपेंडेंसी डिब पैकेज का कुल आकार लगभग 35 एमबी होगा। स्थापित पैकेज के बारे में विवरण कमांड के साथ पाया जा सकता है:

$ 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.

ट्रायल एप्लिकेशन का निर्माण और संचालन

हम अंदर बनाते हैं घर हमारे ट्यूटोरियल प्रोजेक्ट्स के लिए फोल्डर, आइए इसे कहते हैं mtutorial:

$ 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.

इस लिस्टिंग में, हम एएलएसए लाइब्रेरी द्वारा प्रदर्शित त्रुटि संदेशों को देखते हैं, इसका उपयोग ध्वनि कार्ड को नियंत्रित करने के लिए किया जाता है। मीडिया स्ट्रीमर के डेवलपर्स खुद मानते हैं कि यह सामान्य है। इस मामले में, हम अनिच्छा से उनसे सहमत हैं।

अब हम मीडिया स्ट्रीमर के साथ काम करने के लिए पूरी तरह तैयार हैं। हमने मीडिया स्ट्रीमर लाइब्रेरी, संकलन उपकरण स्थापित किया है, और परीक्षण एप्लिकेशन का उपयोग करके सत्यापित किया है कि उपकरण कॉन्फ़िगर किए गए हैं और मीडिया स्ट्रीमर सफलतापूर्वक प्रारंभ हो गया है।

अगला लेख हम एक ऐसा एप्लिकेशन बनाएंगे जो कई फिल्टरों की श्रृंखला में एक ऑडियो सिग्नल के प्रसंस्करण को इकट्ठा करेगा और चलाएगा।

स्रोत: www.habr.com