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

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

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

تحسين مثال مولد النغمات

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

بعد أن لم نعد بحاجة إلى الدائرة، يجب أن يبدأ تحرير الذاكرة عن طريق إيقاف خط أنابيب البيانات. للقيام بذلك، تحتاج إلى فصل مصدر الساعة والمؤشر عن الدائرة باستخدام الوظيفة ms_ticker_detach(). في حالتنا، يجب علينا فصل المؤشر عن مدخلات الفلتر voidsource:

ms_ticker_detach(ticker, voidsource)

بالمناسبة، بعد إيقاف الناقل، يمكننا تغيير دائرته وإعادة تشغيله، وربط المؤشر مرة أخرى.

الآن يمكننا إزالته باستخدام الوظيفة ms_ticker_destroy():

ms_ticker_destroy(ticker)

توقف الناقل ويمكننا البدء في تفكيك أجزاء منه وفصل المرشحات. للقيام بذلك، استخدم الوظيفة ms_filter_unlink():

ms_filter_unlink(voidsource, 0, dtmfgen, 0);
ms_filter_unlink(dtmfgen, 0, snd_card_write, 0);

الغرض من الوسائط هو نفسه بالنسبة للوظيفة ms_filter_link().

نقوم بإزالة المرشحات المنفصلة الآن باستخدام ms_filter_destroy():

ms_filter_destroy(voidsource);
ms_filter_destroy(dtmfgen);
ms_filter_destroy(snd_card_write);

بإضافة هذه الأسطر إلى مثالنا، سوف نحصل على إنهاء البرنامج الصحيح من وجهة نظر إدارة الذاكرة.

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

أنت الآن تعرف كيفية إنهاء برنامج يستخدم دفق الوسائط بشكل صحيح. في الأمثلة التالية، من أجل الاكتناز، سوف "أنسى" القيام بذلك. لكنك لن تنسى؟

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

سنعود إلى حل هذه المشكلة لاحقًا، عندما يتجاوز عدد المرشحات في أمثلةنا بضع عشرات.

التالي مقالة سنقوم بتجميع دائرة قياس مستوى الإشارة ونتعلم كيفية قراءة نتيجة القياس من الفلتر. دعونا نقيم دقة القياس.

المصدر: www.habr.com

إضافة تعليق