تعد مكتبة نقل الوسائط (MTL) حلاً قائمًا على البرمجيات مصممًا لنقل واستقبال بيانات الوسائط ذات الإنتاجية العالية والكمون المنخفض. إنه يتميز بمكدس LibOS UDP الفعال لمساحة المستخدم والمصمم خصيصًا لنقل الوسائط، ويأتي مزودًا بتطبيق متوافق مع SMPTE ST 2110 للوسائط الاحترافية عبر شبكات IP المُدارة.
تعمل مكتبة نقل الوسائط على حل تحديات التوقيت الصارمة لنقل تدفقات الوسائط المتوافقة مع ST2110 باستخدام مكتبة البرامج وعبر شبكات IP. بدلاً من الأجهزة المتخصصة، تعمل هذه المكتبة على تعزيز منصات وحدة المعالجة المركزية (CPU) المتوفرة بشكل شائع مع بطاقات NIC التقليدية التي تتضمن تحديد المعدل لمواجهة تحديات التوقيت الصارمة في معيار SMPTE ST 2110.
إذا وجدت قيمة في مشروعنا، يرجى التفكير في منحه نجمة. يساعدنا دعمك على النمو والوصول إلى المزيد من الأشخاص في مجتمع المصادر المفتوحة. كل نجم مهم ويحظى بتقدير كبير.
الواجهة الخلفية لمسار البيانات المدعومة: DPDK PMD، ومقبس kernel الأصلي، وAF_XDP مع مرشح eBPF.
تتميز حزمة User-space LibOS UDP بواجهة برمجة تطبيقات متوافقة مع مقبس POSIX.
تشغيل غير الجذر.
معالجة متعددة العمليات، مما يسمح بما يصل إلى 8 بطاقات NIC لكل عملية.
دعم المحاكاة الافتراضية بواسطة SR-IOV.
بروتوكول PTP مدمج مع إلغاء تحميل الطابع الزمني للأجهزة.
البرنامج المساعد FFMPEG، البرنامج المساعد OBS (برنامج البث المفتوح)، ودعم Intel® Media SDK.
بالإضافة إلى واجهة برمجة تطبيقات C/C++ الأصلية، فإنها توفر أيضًا روابط لـ Python وRust.
وتيرة ضيقة وواسعة. يرجى الاطلاع على صفحة الامتثال للاطلاع على التقرير الضيق ST2110 حول حل البرامج الخاص بنا.
ST2110-10، ST2110-20، ST2110-21، ST2110-30، ST2110-40، ST2022-7.
1080p، 1080i، 720p، 4k، 8k وغيرها.
عدد الإطارات في الثانية: 120، 119.88، 100، 60، 59.94، 50، 30، 29.97، 25، 24، 23.98.
يتم دعم جميع تنسيقات الفيديو المدرجة في ST2110-20، بما في ذلك YUV 4:2:2 10 بت وغيرها.
محول مساحة اللون SIMD بين النهاية الكبيرة والنهاية الصغيرة.
ST2110-22 مع واجهة البرنامج المساعد التشفير/فك التشفير.
ST2022-6 بواسطة واجهة العبور RTP.
محلل توافق التوقيت ST2110-20 RX مع إلغاء تحميل الطابع الزمني للأجهزة RX.
تستفيد مكتبة نقل الوسائط من DPDK (مجموعة تطوير مستوى البيانات) EAL (طبقة تجريد البيئة بما في ذلك إدارة الذاكرة والإدارة الأساسية) لتنفيذ حل نقل وسائط عالي الكفاءة وفي الوقت الفعلي وبزمن وصول منخفض. يتيح مكدس نقل الوسائط القائم على البرامج النشر على بيئات الحافة والسحابة باستخدام أجهزة COTS.
تتضمن المكتبة طبقة خلفية لمسار البيانات الافتراضية، مصممة لتجريد تنفيذ NIC المتنوع وتوفير واجهة حزمة TX/RX موحدة لطبقة الشبكة العليا. وهو يدعم حاليًا ثلاثة أنواع من أجهزة NIC:
برامج تشغيل وضع الاستقصاء DPDK (PMDs): تتجاوز برامج التشغيل هذه بشكل كامل حزمة شبكات kernel، وذلك باستخدام برنامج تشغيل "وضع الاستقصاء". يوفر هذا الأسلوب الوصول المباشر إلى الأجهزة، ويزيل مفاتيح تبديل سياق المستخدم/النواة الثقيلة، ويتجنب مفاتيح تبديل IRQ (طلب المقاطعة). ونتيجة لذلك، توفر أجهزة DPDK PMD زمن وصول منخفض للغاية وإنتاجية عالية، مما يجعلها مثالية لتطبيقات الشبكات كثيرة المتطلبات.
مكدس مقابس شبكة Linux Kernel الأصلي: يدعم هذا الخيار النطاق الكامل لأنظمة kernel البيئية.
AF_XDP مع مرشح eBPF: يمثل AF_XDP تقدمًا كبيرًا في حزمة شبكات Linux، حيث يحقق توازنًا بين الأداء الأولي والتكامل مع النظام البيئي لشبكات kernel. إنها ذات قيمة خاصة في السيناريوهات التي يكون فيها الأداء أمرًا بالغ الأهمية، ولكن حل تجاوز kernel الكامل مثل DPDK ليس ممكنًا أو مرغوبًا فيه.
تقدم المكتبة برنامج جدولة غير متزامن قائم على المهام والذي يعمل على تحسين استخدام موارد وحدة المعالجة المركزية، وتسهيل التكامل مع وحدات معالجة الحزم المختلفة والمسرعات.
بالإضافة إلى ذلك، توفر وحدة سرعة الحزمة دعمًا لمختلف خوارزميات السرعة، بما في ذلك RL (حد المعدل)، الذي تم تفريغ الأجهزة جزئيًا، وTSC (عداد الطابع الزمني)، الذي يعتمد بالكامل على البرامج.
تشتمل MTL أيضًا على SIMD (تعليمات فردية، بيانات متعددة) لـ CSC (تحويل تنسيق مساحة اللون) للطرفين الكبير والصغير، وDMA (الوصول المباشر للذاكرة)، وواجهات المكونات الإضافية، مما يتيح إنشاء نظام بيئي شامل لإنتاج الفيديو.
للحصول على تصميم التفاصيل، يرجى الرجوع إلى دليل التصميم.
توفر MTL دعمًا متعدد الاستخدامات لشبكة Ethernet، وذلك بفضل توافقها مع DPDK PMD ومقبس kernel والواجهات الخلفية AF_XDP.
للحصول على دعم DPDK PMD، يمكنك الرجوع إلى موقع DPDK PMD https://doc.dpdk.org/guides/nics/ للحصول على قائمة شاملة بأجهزة Ethernet المدعومة.
في الحالات التي لا يكون فيها NIC مدعومًا بواسطة DPDK، توفر MTL خيارًا احتياطيًا مع دعم نقل مأخذ توصيل kernel (Linux).
ومع ذلك، يرجى ملاحظة أن التطوير والتحقق اليومي الذي نقوم به يتم إجراؤه بشكل أساسي على سلسلة Intel E810 وAWS ENA، لذلك لا يمكننا ضمان حالة بطاقات واجهة الشبكة (NIC) الأخرى.
هناك نقطة مهمة يجب ملاحظتها وهي أن السرعة الضيقة لـ TX مدعومة فقط لسلسلة Intel E810 مع DPDK PMD نظرًا لميزة حد المعدل. يجب على جميع أنواع الاستخدام الأخرى استخدام TSC (عداد الطابع الزمني) كمصدر السرعة، والذي يمكن أن يضمن فقط سرعة واسعة النطاق.
الرجاء الرجوع إلى دليل البناء للحصول على إرشادات حول كيفية إنشاء DPDK والمكتبة ونموذج التطبيق.
بالنسبة لنظام التشغيل Windows، يرجى الرجوع إلى دليل إنشاء Win للحصول على إرشادات حول كيفية الإنشاء.
يرجى الرجوع إلى دليل التشغيل للحصول على إرشادات حول كيفية إعداد وتشغيل تطبيق خط الأنابيب التجريبي استنادًا إلى الواجهة الخلفية لـ DPDK PMD.
بالنسبة لنظام التشغيل Windows، يرجى الرجوع إلى دليل تشغيل Windows.
بالإضافة إلى ذلك، يرجى الرجوع إلى دليل VM ودليل Windows VM للحصول على إرشادات حول إعداد أجهزة VM الضيف لنظام التشغيل Linux وWindows استنادًا إلى مرور VF.
بالنسبة إلى AWS (البيئة السحابية)، يرجى الرجوع إلى دليل تشغيل AWS للحصول على إرشادات حول كيفية إعداد العرض التوضيحي وتشغيله.
لتشغيل هذه المكتبة على حزمة شبكة kernel باستخدام برنامج تشغيل kernel NIC المدمج، يرجى اتباع الإرشادات المتوفرة في دليل مأخذ توصيل kernel.
للتطوير السريع للتطبيقات المعتمدة على مكتبة نقل الوسائط، يرجى الرجوع إلى ## 6. ST2110 API
من دليل التصميم.
يحتوي MTL على دعم لمكدس UDP لمساحة المستخدم المتوافقة مع POSIX للتحميل المسبق LD والذي يعمل مباشرة ضمن سياق العملية الحالية. يعمل هذا التحسين على تعزيز الأداء بشكل كبير من خلال التخلص من تكاليف الرسائل عبر النواة المرتبطة عادةً ببنيات خدمة العميل المستخدمة في مجموعات UDP الأخرى لمساحة المستخدم. يسمح مكدس MTL لوظائف الإرسال والاستقبال لـ NIC بالعمل مباشرة من واجهة برمجة التطبيقات sendto/recvfrom، مما يلغي الحاجة إلى المكالمات عبر النواة ويحافظ على تقارب البيانات (LLC) مع مستهلك UDP، وبالتالي تحسين الأداء.
لمعرفة كيفية استخدام مكدس LibOS UDP، يرجى الرجوع إلى مستند udp.
MHV'23: حزمة نقل الوسائط في الوقت الفعلي استنادًا إلى الأجهزة التجارية الجاهزة. https://dl.acm.org/doi/10.1145/3588444.3591002
المستند التقني: مكتبة مفتوحة المصدر تتيح الوسائط في الوقت الفعلي عبر شبكات IP. https://www.intel.com/content/www/us/en/content-details/786203/open-source-library-enables-real-time-media-over-ip-networks.html
قمة مساحة المستخدم DPDK لعام 2022: مكدس نقل الوسائط في الوقت الفعلي وزمن الوصول المنخفض استنادًا إلى DPDK. https://www.youtube.com/watch?v=fiiOvHezpBs
نحن نرحب بمساهمات المجتمع في مشروع مكتبة نقل الوسائط. إذا كانت لديك أي أفكار أو مشكلات، فيرجى مشاركتها معنا باستخدام مشكلات GitHub أو فتح طلب سحب.
قبل فتح طلب السحب، يرجى اتباع الخطوات التالية:
شوكة هذا المستودع إلى المساحة الخاصة بك.
قم بإنشاء فرع جديد لتغييراتك.
قم بإجراء تغييراتك والتزم بها.
ادفع تغييراتك إلى مستودعك المتشعب.
افتح طلب سحب إلى المستودع الرئيسي.
إذا كنت لا تريد مزامنة الفرع الرئيسي تلقائيًا مع المنبع، فيرجى الانتقال إلى Actions
وتعطيل سير عمل Upstream Sync
.
نحن نستخدم إجراء Super-Linter للتحقق من النمط.
بالنسبة لترميز C/C++، يمكنك تشغيل الأمر التالي لإصلاح النمط بسرعة:
./format-coding.sh
بالنسبة لبيثون، يتم استخدام المنسق black
و isort
.
سودو نقطة تثبيت الأسود سودو نقطة تثبيت isort سودو نقطة تثبيت pylint
الثعبان الأسود/ بيثون isort/ ابحث عن python/example/ -name "*.py" -exec pylint {} ;
بالنسبة للغات الأخرى، يرجى التحقق من المثال التالي داخل حاوية Docker:
# super-linterdocker run -it --rm -v "$PWD":/opt/ --entrypoint /bin/bash github/super-lintercd /opt/# echo "shfmt check"find ./ -type f -name " *.sh" -exec shfmt -w {} +# echo "shell check"find ./ -name "*.sh" -exec shellcheck {} ;# hadolint checkhadolint docker/ubuntu.dockerfile# actionlint checkactionlint# markdownlint checkfind ./ -name "*.md" -exec markdownlint {} -c .markdown-lint.yml ;# find ./ -name "*.md" -exec markdownlint {} --fix -c .markdown-lint.yml ;# textlintfind ./ -name "*.md" -exec textlint {} ;# find ./ -name "*.md" -exec textlint {} --fix ;