بث RTSP مع GStreamer - عميل حقيقي س&حالة (UDP مقابل TCP)
توثق هذه المقالة محادثة حقيقية لدعم العملاء فيما يتعلق ببث RTSP من موقعنا الكاميرات الحرارية استخدام gstreamer.
نحن نشاركها في س&تنسيق الحوار حتى يتمكن العملاء الآخرون الذين يواجهون مشكلات مماثلة من متابعة عملية استكشاف الأخطاء وإصلاحها بسرعة.
جدول المحتويات
1. عنوان دفق RTSP
عميل:
مرحبا, لقد تلقينا الكاميرات الحرارية الخاصة بك, كل شيء يعمل بشكل جيد, شكرًا لك, ولكن يبدو أننا لا نستطيع العثور على عنوان دفق RTSP. ما هو /stream/sub?
الدعم:
عنوان URL لدفق الكاميرا RTSP الخاص بنا هو:
rtsp://192.168.2.254:554/live
2. قلق الكمون RTSP
عميل:
لقد اختبرنا تدفق RTSP ولاحظنا زمن وصول كبير مقارنةً بمعاينة لوحة الإدارة.
الدعم:
وهذا هو السلوك المتوقع. تستخدم معاينة إدارة الويب مسارًا داخليًا مُحسّنًا, بينما يعتمد RTSP على ظروف الشبكة والتخزين المؤقت للعميل.
3. متطلبات تدفق UDP
عميل:
لا يعمل تدفق RTSP أيضًا على المشغل الذي يتوقع UDP. كيف يمكنني الحصول على دفق UDP?
الدعم:
هل لي أن أعرف ما هو اللاعب الذي تستخدمه؟? VLC?
عميل:
المشغل الخاص بي هو GStreamer مدمج في تطبيق Android.
4. UDP Unicast مقابل UDP Multicast
الدعم:
إذا قام عميل GStreamer بالوصول إلى الجهاز باستخدام UDP البث المتعدد, هذا حاليا غير معتمد.
نحن بحاجة إلى توضيح ما إذا كنت تستخدم UDP أحادي البث أو UDP البث المتعدد.
عميل:
يستخدم خط أنابيب GStreamer الخاص بي rtspsrc مع udp المنصوص عليها في protocols معامل.
لم أستخدم udp-mcast قيمة, لذا يجب أن يكون UDP أحادي البث.
5. توضيح المنصة
الدعم:
هل هذا GStreamer يعمل على نظام التشغيل Windows, لينكس, أو أندرويد?
يرغب مهندس البرمجيات لدينا في الاختبار من جانبنا.
عميل:
يستخدم تطبيقي GStreamer على Android, لكن rtspsrc ويمكن أيضًا اختباره على Linux.
6. مشكلة Linux GStreamer المعروفة (الحالة المرجعية)
الدعم:
لقد وجدنا مشكلة مماثلة تمت مناقشتها في منتدى تقني صيني.
حل:
قم بإلغاء تثبيت البرنامج المساعد التالي:
sudo apt-get remove gstreamer1.0-plugins-ugly
قد يرسل هذا المكون الإضافي رؤوس RTSP التي لا تستطيع بعض الكاميرات التعرف عليها, مما أدى إلى خطأ رفض الخدمة.

مرجع:
https://forums.developer.nvidia.com/t/rtsp-gstreamer-simple-recieve-and-store-in-file/157535/14
هل يمكنك تقديم الخاص بك rtspsrc خط أنابيب (يفضل لينكس)? إصدار التطبيق مقبول أيضًا للاختبار.
7. وصف RTSP توافق الرأس
الدعم:
سبب آخر محتمل هو أنه إذا كان RTSP يصف لا يحتوي الطلب:
application/sdp
قد يرفض الجهاز الخدمة.
قد يكون منطق التحقق هذا صارمًا للغاية, ونحن نخطط لتخفيف هذه الحالة في تحديثات البرامج الثابتة المستقبلية.
8. تأكيد إصدار Android GStreamer
عميل:
على الروبوت, أنا أستخدم:
- gstreamer-1.0-android-universal-1.26.8
لا يتضمن الإضافات القبيحة. يحتوي ملف Makefi الخاص بي على:
GSTREAMER_PLUGINS := \
coreelements \
playback \
typefindfunctions \
rtsp \
rtp \
rtpmanager \
udp \
tcp \
videoparsersbad \
androidmedia \
opengl
9. معلمات وقت تشغيل GStreamer المقترحة
الدعم:
نوصي بالمحاولة short-header=true في rtspsrc.
عميل:
هل هذا رأس لـ UDP?
الدعم:
إنه خيار رأس RTSP وغالبًا ما يعمل على تحسين التوافق.
أمثلة:
gst-launch-1.0 rtspsrc location=rtsp://<ip>:<port>/<path> short-header=true
gst-launch-1.0 rtspsrc location=rtsp://<ip>:<port>/<path> do-rtcp=false short-header=true
10. نتائج الاختبار الداخلي (لينكس)
الدعم:
قام مهندسنا باختبار دفق RTSP باستخدام gstreamer 1.0 على لينكس, وعملت بشكل صحيح.


مثال برنامج التعاون الفني:
gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
name=src \
latency=0 \
protocols=tcp \
src. \
! decodebin \
! autovideosink
مثال UDP (يزيل protocols=tcp):
gst-launch-1.0 rtspsrc location="rtsp://192.168.2.254/live" \
name=src \
latency=0 \
src. \
! decodebin \
! autovideosink
المنطق الداخلي بين Linux وAndroid GStreamer هو نفسه, لذلك يجب أن يكون السلوك متسقًا عبر الأنظمة الأساسية.
11. خاتمة
تسلط هذه الحالة الضوء على عدة نقاط مهمة عند استخدام RTSP مع GStreamer:
- عنوان URL لـ RTSP:
rtsp://<camera_ip>:554/live - UDP البث الأحادي مدعوم; البث المتعدد UDP ليس كذلك
- تجنب الإضافات الإشكالية (لينكس فقط)
- يحاول
short-header=trueمن أجل توافق أفضل - يمكن تطبيق نتائج اختبار Linux بشكل عام على Android
إذا واجهت مشاكل مماثلة, يرجى تقديم الخاص بك خط أنابيب GStreamer أو عميل الاختبار, وسيقوم فريقنا الهندسي بتقديم المزيد من المساعدة.

طرح سؤال
شكرًا لردكم ✨