مادة المقال مأخوذة من بلدي .
مقدمة
هذه المقالة هي الأولى في سلسلة مقالات حول معالجة الوسائط في الوقت الفعلي باستخدام محرك Mediastreamer2. يفترض هذا الشرح معرفة أساسية باستخدام سطر الأوامر. Linux والبرمجة بلغة C.
Mediastreamer2 هو محرك VoIP وراء مشروع الهاتف عبر بروتوكول الإنترنت المفتوح المصدر الشهير. . في Linphone Mediastreamer2 ينفذ جميع الوظائف المتعلقة بالصوت والفيديو. يمكن الاطلاع على قائمة مفصلة بميزات المحرك في صفحة Mediastreamer هذه. شفرة المصدر هنا: .
علاوة على ذلك في النص ، للراحة ، بدلاً من كلمة Mediastreamer2 ، سنستخدم تدوينها الروسي: "media streamer".
تاريخ إنشائها ليس واضحًا تمامًا ، ولكن وفقًا لشيفرة المصدر الخاصة بها ، فقد استخدمت المكتبة سابقًا ، والتي ، كما كانت ، تلمح إلى علاقة بعيدة محتملة مع . بالمقارنة مع جهاز بث الوسائط يبدو أكثر خفة. ظهر الإصدار الأول من Linphone في عام 2001 ، لذلك في الوقت الحالي ، يوجد جهاز بث الوسائط ويتطور منذ ما يقرب من 20 عامًا.
في قلب غاسل الوسائط توجد بنية تسمى "تدفق البيانات" (تدفق البيانات). يظهر مثال على مثل هذه العمارة في الشكل أدناه.

في هذه البنية ، لا يتم تحديد خوارزمية معالجة البيانات بواسطة رمز البرنامج ، ولكن من خلال مخطط (رسم بياني) لتوصيل الوظائف التي يمكن ترتيبها بأي ترتيب. هذه الوظائف تسمى المرشحات.
تتيح هذه البنية إمكانية تنفيذ وظيفة معالجة الوسائط في شكل مجموعة من المرشحات المتصلة بنظام معالجة ونقل حركة مرور RTP للهاتف VoIP.
القدرة على دمج المرشحات في مخططات عشوائية ، والتطوير البسيط لفلاتر جديدة ، وتنفيذ مشغل الوسائط كمكتبة منفصلة مستقلة ، مما يسمح باستخدامه في مشاريع أخرى. علاوة على ذلك ، يمكن أن يكون المشروع في مجال VoIP ، حيث أنه من الممكن إضافة مرشحات من صنع الشخص نفسه.
مكتبة المرشحات المتوفرة بشكل افتراضي غنية جدًا ، وكما ذكرنا سابقًا ، يمكن توسيعها باستخدام مرشحات من تصميمنا الخاص. لكن أولاً ، دعنا نصف المرشحات الجاهزة التي تأتي مع جهاز بث الوسائط. ها هي قائمتهم:
مرشحات الصوت
التقاط الصوت وتشغيله
- ألسا (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
- دايركت ساوند (Windows): MS_WINSNDDS_WRITE, MS_WINSNDDS_READ
- مشغل الملفات (ملفات raw/wav/pcap) (Linux): MS_FILE_PLAYER
- مشغل الملفات (ملفات RAW/WAV) (Windows): MS_WINSND_READ
- التسجيل في ملف (ملفات WAV) (Linux): MS_FILE_REC
- التسجيل في ملف (ملفات WAV) (Windows): MS_WINSND_WRITE
- وحدة صوت Mac (Mac OS X)
- م.م.ع.(Windows)
- نظام التشغيل (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 قبض على
- Android التكاثر
- AV Foundation Capture (iOS)
- تشغيل AV Foundation (iOS)
- التقاط DirectShow (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 م)
- فيديو ل 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 لا يتطلب الأمر أي مهارات خاصة. من الآن فصاعدًا، سيشير الرمز "$" إلى موجه الأوامر لإدخال الأوامر. لذا، إذا رأيت هذا الرمز في بداية سطر في القائمة، فهذا يعني أن هذا السطر يحتوي على أوامر سيتم تنفيذها في الطرفية.
من المفترض أنه خلال الخطوات الواردة في هذه المقالة ، يمكن لجهاز الكمبيوتر الخاص بك الوصول إلى الإنترنت.
تثبيت الحزمة 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 <ubuntu-devel-discuss@lists.ubuntu.com>
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 <pkg-voip-maintainers@lists.alioth.debian.org>
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
