استكشاف محرك Mediastreamer2 VoIP. الجزء 1

مادة المقال مأخوذة من بلدي قناة زين.

مقدمة

هذه المقالة هي بداية سلسلة من المقالات حول معالجة الوسائط في الوقت الحقيقي باستخدام محرك Mediastreamer2. سيشمل العرض الحد الأدنى من مهارات العمل في محطة Linux والبرمجة بلغة C.

Mediastreamer2 هو محرك VoIP وراء مشروع الهاتف عبر بروتوكول الإنترنت المفتوح المصدر الشهير. Linphone. في Linphone Mediastreamer2 ينفذ جميع الوظائف المتعلقة بالصوت والفيديو. يمكن الاطلاع على قائمة مفصلة بميزات المحرك في صفحة Mediastreamer هذه. شفرة المصدر هنا: GitLab.

علاوة على ذلك في النص ، للراحة ، بدلاً من كلمة Mediastreamer2 ، سنستخدم تدوينها الروسي: "media streamer".

تاريخ إنشائها ليس واضحًا تمامًا ، ولكن وفقًا لشيفرة المصدر الخاصة بها ، فقد استخدمت المكتبة سابقًا غليب، والتي ، كما كانت ، تلمح إلى علاقة بعيدة محتملة مع جيستريمر. بالمقارنة مع جهاز بث الوسائط يبدو أكثر خفة. ظهر الإصدار الأول من Linphone في عام 2001 ، لذلك في الوقت الحالي ، يوجد جهاز بث الوسائط ويتطور منذ ما يقرب من 20 عامًا.

في قلب غاسل الوسائط توجد بنية تسمى "تدفق البيانات" (تدفق البيانات). يظهر مثال على مثل هذه العمارة في الشكل أدناه.

استكشاف محرك Mediastreamer2 VoIP. الجزء 1

في هذه البنية ، لا يتم تحديد خوارزمية معالجة البيانات بواسطة رمز البرنامج ، ولكن من خلال مخطط (رسم بياني) لتوصيل الوظائف التي يمكن ترتيبها بأي ترتيب. هذه الوظائف تسمى المرشحات.

تتيح هذه البنية إمكانية تنفيذ وظيفة معالجة الوسائط في شكل مجموعة من المرشحات المتصلة بنظام معالجة ونقل حركة مرور RTP للهاتف VoIP.

القدرة على دمج المرشحات في مخططات عشوائية ، والتطوير البسيط لفلاتر جديدة ، وتنفيذ مشغل الوسائط كمكتبة منفصلة مستقلة ، مما يسمح باستخدامه في مشاريع أخرى. علاوة على ذلك ، يمكن أن يكون المشروع في مجال VoIP ، حيث أنه من الممكن إضافة مرشحات من صنع الشخص نفسه.

مكتبة المرشحات المتوفرة بشكل افتراضي غنية جدًا ، وكما ذكرنا سابقًا ، يمكن توسيعها باستخدام مرشحات من تصميمنا الخاص. لكن أولاً ، دعنا نصف المرشحات الجاهزة التي تأتي مع جهاز بث الوسائط. ها هي قائمتهم:

مرشحات الصوت

التقاط الصوت وتشغيله

  • Alsa (Linux): 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)
  • الفنون (Linux): MS_ARTS_WRITE، MS_ARTS_READ
  • DirectSound (Windows): MS_WINSNDDS_WRITE ، MS_WINSNDDS_READ
  • مشغل الملفات (ملفات raw / wav / pcap) (Linux): MS_FILE_PLAYER
  • مشغل الملفات (ملفات خام / wav) (Windows): MS_WINSND_READ
  • الكتابة إلى ملف (ملفات wav) (Linux): MS_FILE_REC
  • الكتابة إلى ملف (ملفات wav) (Windows): MS_WINSND_WRITE
  • وحدة صوت Mac (Mac OS X)
  • إم إم إي (ويندوز)
  • OSS (Linux): MS_OSS_WRITE ، MS_OSS_READ
  • بورت أوديو (نظام التشغيل Mac OS X)
  • PulseAudio (Linux): MS_PULSE_WRITE ، MS_PULSE_READ
  • صوت Windows (Windows)

ترميز الصوت / فك التشفير

  • G.711 a-law: MS_ALAW_DEC ، MS_ALAW_ENC
  • G.711 µ-law: 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
  • Speex: MS_SPEEX_ENC ، MS_SPEEX_DEC

معالجة الصوت

  • تحويل القناة (أحادي-> ستريو ، ستريو-> أحادي): MS_CHANNEL_ADAPTER
  • المؤتمر: MS_CONF
  • مولد DTMF: MS_DTMF_GEN
  • إلغاء الصدى (speex): MS_SPEEX_EC
  • المعادل: MS_EQUALIZER
  • الخلاط: MS_MIXER
  • معوض فقدان الحزمة (PLC): MS_GENERIC_PLC
  • Resampler: MS_RESAMPLE
  • كاشف النغمة: MS_TONE_DETECTOR
  • التحكم في مستوى الصوت وقياس مستوى الإشارة: MS_VOLUME

مرشحات الفيديو

التقاط الفيديو وتشغيله

  • التقاط الروبوت
  • تشغيل android
  • AV Foundation Capture (iOS)
  • تشغيل AV Foundation (iOS)
  • DirectShow Capture (Windows)
  • تشغيل DrawDib (Windows)
  • التشغيل الخارجي - إرسال الفيديو إلى الطبقة العليا
  • تشغيل GLX (Linux): MS_GLXVIDEO
  • ماير - الصورة المتحركة الاصطناعية: 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)
  • فيديو لالتقاط Windows (vfw) (Windows)
  • تشغيل XV (Linux)

ترميز / فك تشفير الفيديو

  • 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

معالجة الفيديو

  • لقطة 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
  • جهاز تشفير / فك تشفير الحرير

    مرشحات الفيديو

  • برنامج ترميز H.264
  • جهاز التشفير / وحدة فك التشفير المسرّع للأجهزة H.264 V4L2

بعد وصف قصير للمرشح ، يتم عرض اسم النوع ، والذي يتم استخدامه عند إنشاء مثيل جديد لهذا المرشح. فيما يلي سوف نشير إلى هذه القائمة.

التثبيت تحت Linux Ubuntu

سنقوم الآن بتثبيت مشغل الوسائط على الكمبيوتر وبناء تطبيقنا الأول معه.

لا يتطلب تثبيت Mediastremer2 على جهاز كمبيوتر أو جهاز ظاهري يقوم بتشغيل Ubuntu أي مهارات خاصة. هنا وفي الأسفل ، سوف يشير الرمز "$" إلى موجه shell لإدخال الأوامر. أولئك. إذا رأيت هذا الرمز في القائمة في بداية السطر ، فهذا هو السطر الذي تظهر فيه الأوامر ليتم تنفيذها في الجهاز.

من المفترض أنه خلال الخطوات الواردة في هذه المقالة ، يمكن لجهاز الكمبيوتر الخاص بك الوصول إلى الإنترنت.

تثبيت الحزمة libmediastremer-dev

قم بتشغيل Terminal واكتب الأمر:

$ sudo apt-get update

سيُطلب منك كلمة مرور لإجراء التغييرات ، أدخلها وسيقوم مدير الحزم بتحديث قواعد البيانات الخاصة به. بعد ذلك ، عليك تشغيل:

$ sudo apt-get install libmediastreamer-dev

سيتم تنزيل وتثبيت حزم التبعية الضرورية ومكتبة دفق الوسائط نفسها تلقائيًا.

سيكون الحجم الإجمالي لحزم deb التبعية التي تم تنزيلها حوالي 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.

بناء وتشغيل التطبيق التجريبي

نخلق في الصفحة الرئيسية مجلد لمشاريعنا التعليمية ، دعنا نسميها com.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`

محاطة بعلامات اقتباس ، والموجودة على لوحة المفاتيح في نفس مكان الحرف "Ё".

إذا كان الملف لا يحتوي على أخطاء ، فبعد التجميع سيظهر ملف في الدليل com.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