سيرفر بسيط في الوقت الحقيقي (SRS) لمباشر RTMP | أصلي، ترجم بواسطة AI
دعونا نغوص في استخدام Simple Realtime Server (SRS) لتنفيذ خادم حافة لتبث RTMP، مع التركيز على فهمه وتكوينه بشكل فعال، بما في ذلك ملف rtmp.conf
. SRS هو خادم وسائط قوي، ذو أداء عالي، مصمم لمبادئ التوصيل المباشر مثل RTMP، HLS، وHTTP-FLV. إنه مناسب بشكل خاص لمواقف تتطلب قابلية التوسيع، مثل شبكات توزيع المحتوى (CDNs)، حيث يمكن لخادم الحافة توزيع التدفقات بشكل فعال إلى العديد من العملاء بينما يستخرج المحتوى من خادم الأصل. سأقودك عبر العملية خطوة بخطوة، وأشرح مفهوم نشر الحافة، وأوضح كيفية العمل مع التكوينات مثل rtmp.conf
.
ما هو SRS ونشر الحافة؟
SRS هو خادم مفتوح المصدر مبني ليدير بث الوسائط المباشر مع التركيز على البساطة والفعالية. يدعم RTMP (بروتوكول الرسائل المباشر) للبث المباشر منخفض التأخير، بالإضافة إلى بروتوكولات أخرى مثل HLS وWebRTC. في SRS، يعمل خادم “الحافة” كوسيط بين العملاء (المشاهدون أو الناشرون) وخادم “الأصل” (حيث يبدأ البث). الحافة تستخرج التدفقات من الأصل فقط عند طلبها من العملاء، مما يقلل من الحمل على الأصل ويتيح توزيعًا قابلًا للتوسيع - افهمه مثل طبقة التخزين المؤقت في CDN مخصصة للتدفقات الحية.
نشر خادم حافة مع SRS مناسب عندما تحتاج إلى:
- خدمة عدد كبير من المشاهدين دون إفراط في الحمل على الأصل.
- السماح للناشرين بإرسال التدفقات إلى الحافة، التي تتابعها إلى الأصل.
- تقليل استخدام النطاق الترددي على الخوادم الأصلية الغالية من خلال استغلال العقد الحافة الرخيصة.
خطوة بخطوة: نشر خادم حافة مع SRS لRTMP
هنا كيفية إعداد SRS كخادم حافة لRTMP. سأفترض أنك تعمل على نظام لينكس (مثل Ubuntu)، حيث تم تحسين SRS لهذه البيئة.
1. تثبيت SRS
أولاً، عليك الحصول على SRS يعمل على جهازك:
- تحميل SRS: احصل على أحدث إصدار مستقر من مستودع GitHub الرسمي (github.com/ossrs/srs). اعتبارًا من اليوم، 26 فبراير 2025، يمكنك عادةً استنساخ المستودع:
git clone https://github.com/ossrs/srs.git cd srs
- بناء SRS: يستخدم SRS عملية بناء بسيطة مع
./configure
وmake
:./configure make
هذا يدمج الخادم في دليل
objs
(مثلobjs/srs
). - اختبار الثنائي: قم بتشغيله مع التكوين الافتراضي لضمان عمله:
./objs/srs -c conf/srs.conf
افتراضيًا، يستمع على الميناء 1935 لRTMP. تحقق من إخراج الشاشة للتأكيد.
2. فهم مفهوم الحافة
في SRS، يعمل خادم الحافة في “الوضع البعيد”، مما يعني أنه لا يولد التدفقات بنفسه، بل يستخرجها من خادم الأصل عند طلبها من العملاء (للمشاهدة) أو إرسال التدفقات إلى الأصل (للنشر). هذه الاستخراج حسب الطلب هي ما يجعل خوادم الحافة فعالة للتوسيع في توزيع RTMP.
- خادم الأصل: مصدر التدفق (مثل حيث يدفع المكوّن RTMP مثل OBS).
- خادم الحافة: وسيط يربط إليه العملاء، يستخرج من الأصل فقط عند الحاجة.
لهذا المثال، دعنا نفترض أنك تملك خادم أصل يعمل SRS على 192.168.1.100:1935
(قم بإستبدال هذا بالعنوان IP الفعلي).
3. تكوين خادم الحافة
يستخدم SRS ملفات التكوين لتحديد سلوكه. srs.conf
الافتراضي هو نقطة بداية جيدة، ولكن لنشر الحافة، ستخلق تكوينًا محددًا - دعونا نسميه edge.conf
. ههنا كيفية إعداده:
- إنشاء
edge.conf
:cd conf nano edge.conf
- إضافة تكوين الحافة:
ههنا
edge.conf
البسيط لنشر RTMP الحافة:listen 1935; max_connections 1000; srs_log_tank file; srs_log_file ./objs/edge.log; vhost __defaultVhost__ { cluster { mode remote; origin 192.168.1.100:1935; } }
listen 1935
: يستمع الحافة للاتصالات RTMP على الميناء 1935.max_connections 1000
: يحد الإتصالات المتزامنة (قم بتعديله بناءً على قدرة خادمك).srs_log_file
: سجل في ملف للتشخيص.vhost __defaultVhost__
: التكوين الافتراضي للمضيف الافتراضي.cluster { mode remote; origin 192.168.1.100:1935; }
: يحدد هذا الخادم كحافة (mode remote
) ويشير إلى خادم الأصل.
- حفظ وإغلاق: Ctrl+O، Enter، Ctrl+X في nano.
4. تشغيل خادم الحافة
قم بتشغيل SRS مع تكوين الحافة:
./objs/srs -c conf/edge.conf
تحقق من السجلات (./objs/edge.log
) للتأكيد على تشغيله وتوصيله بالاصل.
5. اختبار التكوين
- نشر تدفق: استخدم أداة مثل OBS أو FFmpeg لإرسال تدفق RTMP إلى خادم الأصل:
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://192.168.1.100/live/livestream
هنا،
live
هو اسم التطبيق، وlivestream
هو مفتاح التدفق. - تشغيل من الحافة: استخدم VLC أو عميل RTMP آخر لتشغيل التدفق من الحافة:
rtmp://<edge-server-ip>/live/livestream
استبدل
<edge-server-ip>
بالعنوان IP لخادم الحافة (مثل192.168.1.101
). الحافة ستستخرج التدفق من الأصل وتخدمه إليك.
6. استكشاف rtmp.conf
SRS لا يأتي مع ملف rtmp.conf
افتراضيًا، ولكن قد تجد مراجعًا له في الدروس أو التكوينات المخصصة. إنه ببساطة اسم تقليدي لملف تكوين RTMP. على سبيل المثال، يوفر وثائق SRS (ossrs.net) نموذجًا rtmp.conf
للبث المباشر RTMP:
listen 1935;
max_connections 1000;
vhost __defaultVhost__ {
tcp_nodelay on;
min_latency on;
play {
gop_cache off;
queue_length 10;
}
publish {
mr off;
}
}
- الغرض: هذا التكوين يفضل البث المباشر RTMP منخفض التأخير على خادم الأصل، لا على الحافة. لنشر الحافة، ستضيف كتلة
cluster
من الخطوة 3. - إعدادات رئيسية:
tcp_nodelay on
: يقلل من التأخير من خلال تعطيل خوارزمية Nagle.min_latency on
: يفضل التأخير المنخفض على التخزين المؤقت.gop_cache off
: يعطل تخزين مجموعة الصور للتشغيل المباشر.mr off
: يعطل “قراءة الدمج” لمنع التأخير في النشر.
لحافة، ستدمج هذا مع إعدادات cluster
بدلاً من استخدامه بشكل مستقل.
شرح المزيد: آليات الحافة وRTMP
- كيف تعمل الحافة: عندما يطلب عميل
rtmp://<edge-ip>/live/livestream
، تحقق الحافة إذا كان لديها التدفق. إذا لم يكن كذلك، تستخرجه من الأصل (192.168.1.100:1935
) وتخزينه محليًا لخدمة العملاء الآخرين. إذا دفع الناشر إلى الحافة، فإنه يتابع التدفق إلى الأصل. - معلومات RTMP: RTMP هو بروتوكول منخفض التأخير مناسب للبث المباشر. يدير SRS RTMP بشكل فعال، يدعم ميزات مثل الترميز الزمني المطلق (ATC) للتزامن عبر الخوادم، على الرغم من أنه معطل افتراضيًا في وضع الحافة إلا إذا تم تحديده.
- قابلية التوسيع: أضف حافات متعددة تشير إلى نفس الأصل لتعامل مع آلاف العملاء. يدعم SRS failover من خلال قائمة متعددة الأصول (مثل
origin 192.168.1.100:1935 192.168.1.200:1935;
).
نصائح وتشخيص الأخطاء
- حائط الحماية: تأكد من فتح الميناء 1935 على الخوادم الأصلية والحافة.
- السجلات: تحقق من
edge.log
للخطأ مثل فشل الإتصالات بالاصل. - التأخير: الحافة تضيف تأخيرًا ضئيلًا (عادةً <1s) إذا كان الأصل منخفض التأخير أيضًا.
- حافات متعددة: نشر حافات إضافية مع نفس التكوين، تعديل منافذ الاستماع أو العناوين IP حسب الحاجة.
الخاتمة
نشر خادم SRS الحافة لRTMP بسيط بعد فهم العلاقة بين الأصل والحافة. edge.conf
يحدد الحافة لاستخراج أو إرسال التدفقات بشكل ديناميكي، بينما يمكن أن يحدد تكوين من نوع rtmp.conf
أداء RTMP إذا لزم الأمر. مع هذا التكوين، أنت مستعد لتوسيع البث المباشر بشكل فعال - سواء كان لعدد قليل من المشاهدين أو جمهور عالمي. تريد تعديله أكثر أو دمج HLS بجانب RTMP؟ فقط أخبرني!