إصلاح طلب RTSP 400 السيئ: فشل الوصف، وعنوان URL للكاميرا تالف، وأخطاء في الرأس

إصلاح طلب RTSP 400 السيئ في DESCRIBE. يغطي عناوين URL المشوهة للكاميرا لـ Axis/Dahua/Hikvision، والرؤوس غير المدعومة، ومشكلات الوكيل العكسي، والمصادقة، ومسارات البث الخاصة بالبائع باستخدام أوامر تشخيصية حقيقية.

Rtsp 400 طلب سيء, وصف فاشل, عنوان URL للكاميرا, استكشاف أخطاء كاميرا IP وإصلاحها, تشخيص آر تي إس بي, عنوان url rtsp غير صحيح

"طلب RTSP/1.0 400 سيئ" يعني أن الكاميرا رفضت طلب RTSP الخاص بك لأنه مشوه. إنها ليست مشكلة في الشبكة. إنها ليست مشكلة الترميز. إنها مشكلة في تنسيق الطلب، ويمكن حلها بمجرد رؤية الطلب الدقيق الذي تلقته الكاميرا.

إجابة سريعة: فرز لمدة 30 ثانية

  1. اختبر باستخدام VLC أولاً. إذا كان VLC يعمل، فالتقط طلب RTSP الدقيق الذي يرسله. قارن بعميلك الفاشل.
  2. تحقق من مسار URL. تستخدم الكاميرات المختلفة مسارات مختلفة تمامًا لنفس دفق RTSP. يعد نسخ عنوان URL من ماركة كاميرا إلى أخرى هو السبب الأول لـ 400 خطأ.
  3. Check URL encoding. Special characters in passwords break RTSP URL parsing. Encode @ as %40, : as %3A, / as %2F.
  4. تحقق من وجود تداخل بالوكيل. يعمل RTSP المباشر إلى الكاميرا ولكن من خلال الوكيل يُرجع 400؟ يقوم الوكيل بتغيير رؤوس RTSP.

إذا لم يتم حل المشكلة من خلال أي من هذه الأمور، فاعمل من خلال الأقسام التفصيلية أدناه.

أولاً: التحقق من إمكانية الوصول إلى الكاميرا

قبل تصحيح أخطاء RTSP، تأكد من الاتصال الأساسي:

# TCP reachability
nc -zv 192.168.1.100 554

# Or with telnet
telnet 192.168.1.100 554

# RTSP OPTIONS — the simplest RTSP request
# If this fails, the camera isn't speaking RTSP

Camera-specific URL formats

Axis

rtsp://<ip>/axis-media/media.amp
rtsp://<ip>/mpeg4/media.amp
rtsp://<ip>:554/axis-media/media.amp?videocodec=h264

Dahua

rtsp://<user>:<pass>@<ip>:554/cam/realmonitor?channel=1&subtype=0
rtsp://<user>:<pass>@<ip>:554/cam/realmonitor?channel=1&subtype=1
  • subtype=0: main stream
  • subtype=1: sub stream

Generic / ONVIF

rtsp://<ip>:554/stream1
rtsp://<ip>:554/live
rtsp://<ip>:554/h264
rtsp://<ip>:554/h265
rtsp://<ip>:554/profile1/media.smp
rtsp://<ip>/onvif1
rtsp://<ip>/onvif2

Testing with ffmpeg

# Test DESCRIBE only (don't decode)
ffmpeg -rtsp_transport tcp -i "rtsp://user:pass@192.168.1.100:554/stream1" -t 1 -f null -

# يُظهر الإخراج المطول تبادل RTSP الدقيق
ffmpeg -loglevel debug -rtsp_transport tcp -i "rtsp://..." -t 1 -f null - 2>&1 | grep -E "وصف | الإعداد | الاستجابة"

ترميز URL: المشغل الصامت 400

WRONG: rtsp://admin:pa@ss@192.168.1.100/stream1
       parser sees: user=admin, pass=pa, host=ss@192.168.1.100

RIGHT:  rtsp://admin:pa%40ss@192.168.1.100/stream1
       parser sees: user=admin, pass=pa@ss, host=192.168.1.100

Full diagnostic decision tree

RTSP returns 400 Bad Request
│
├─ Is port 554 reachable?
│  ├─ NO → Fix network/firewall. Not an RTSP issue.
│  └─ YES → Continue
│
├─ Does VLC play the same URL?
│  ├─ YES, VLC works → Capture VLC's exact request. Compare with your client.
│  │   Differences in headers, URI format, or auth will point to the fix.
│  └─ NO, VLC also fails → Problem is in the URL or camera config
│
├─ Check the URL path
│  ├─ Wrong manufacturer format → Use correct format for your camera brand
│  ├─ Query parameters missing → Add required parameters (channel, subtype)
│  └─ Path contains unencoded special chars → URL-encode credentials
│
├─ Check DESCRIBE headers
│  ├─ Missing Accept: application/sdp → Add it
│  ├─ Extra HTTP headers (via proxy) → Remove proxy from RTSP path
│  └─ Malformed Authorization → Fix Digest auth parameters
│
├─ Check CSeq and RTSP syntax
│  ├─ Missing CSeq → Add sequential CSeq header
│  ├─ Wrong RTSP version → Use RTSP/1.0
│  └─ CRLF formatting wrong → Ensure \r\n line endings
│
└─ Still failing?
   ├─ Try ONVIF discovery to get the correct RTSP URL
   ├─ Check camera firmware version (older firmware may have stricter parsing)
   └─ Test with a known-working RTSP client as baseline

الوكيل العكسي: السبب المخفي 400

RTSP من خلال وكيل HTTP العكسي هش. يجوز للوكلاء المصممين لـ HTTP:

  1. إدخال رؤوس خاصة بـ HTTP (المضيف، X-Forwarded-For، User-Agent)
  2. أعد كتابة URI للطلب
  3. تخزين مؤقت وتغيير سلوك اتصال TCP
  4. التداخل مع نموذج الاتصال المستمر الخاص بـ RTSP

أعراض تدخل الوكيل:

  • توجيه RTSP إلى الكاميرا: يعمل
  • RTSP عبر الوكيل: 400 طلب سيئ
  • تُظهر سجلات الكاميرا "طلبًا مشوهًا" مع عدم وجود رؤوس إضافية في التدفق المباشر

الإصلاح: إما تجاوز الوكيل لحركة مرور RTSP، أو استخدام وكيل مدرك لـ RTSP، أو تكوين الوكيل لتمرير حركة مرور RTSP دون تعديل.

حالات حافة المصادقة

تقوم معظم مشكلات المصادقة بإرجاع 401، لكن يمكن لرأس التفويض غير الصحيح إرجاع 400.

نمط "يعمل عند المحاولة الأولى، ويفشل عند إعادة المحاولة":

  1. يرسل العميل DESCRIBE غير مصادق عليه
  2. تقوم الكاميرا بإرجاع 401 مع تحدي الملخص (المجال، nonce)
  3. يحسب العميل استجابة الملخص
  4. يرسل العميل وصفًا مصادقًا عليه برأس التفويض
  5. الكاميرا ترجع 400

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

التحقق: قارن عنوان URI للطلب في رأس التفويض مع URI للطلب الفعلي الموجود على السلك. في مصادقة الملخص، يعد URI جزءًا من التجزئة - إذا لم يتطابق مع حرف مقابل حرف (بما في ذلك التشفير)، فستكون الاستجابة غير صالحة.

عندما يتم كسر الكاميرا للتو

تحتوي بعض الكاميرات على تطبيقات RTSP بها أخطاء. إذا قمت بفحص كل شيء أعلاه وما زلت تحصل على 400:

  1. التحقق من وجود تحديثات البرامج الثابتة
  2. اختبار مع برنامج العميل الخاص بالشركة المصنعة
  3. جرب ONVIF كمسار بديل للاكتشاف والبث
  4. إذا كانت الكاميرا تعمل مع التطبيق الخاص بها ولكن ليس مع عملاء RTSP المتوافقين مع المعايير، فإن حزمة RTSP الخاصة بالكاميرا غير متوافقة

أبلغ عن خطأ مع بائع الكاميرا. قم بتضمين طلب وصف RTSP الدقيق والاستجابة له. يجب ألا يُرجع تطبيق RTSP الصحيح الرقم 400 لطلب صالح ومُصمم بشكل جيد بغض النظر عن مسار عنوان URL - بل يجب أن يُرجع 404.

<!-- rtsp-localized-evidence-foundation-v1:start -->

خطة إثبات عملية لموضوع «إصلاح طلب RTSP 400 السيئ: فشل الوصف، وعنوان URL للكاميرا تالف، وأخطاء في الرأس»

الإجابة المباشرة هي أن تشخيص بث كاميرا لا يعتمد على ظهور صورة أو على رمز خطأ منفرد. يجب ربط النتيجة بطلب RTSP وردّه، وباختيار Transport، وبهوية جلسة صالحة، ثم بأرقام تسلسل RTP والطوابع الزمنية وبيانات RTCP عند وصول الوسائط. في موضوع «إصلاح طلب RTSP 400 السيئ: فشل الوصف، وعنوان URL للكاميرا تالف، وأخطاء في الرأس» ابدأ بأقرب طبقة إلى العرض الظاهر، لكن احتفظ بسجل زمني واحد حتى لا تختلط مشكلة التحكم بمشكلة الشبكة أو برنامج فك الترميز.

أنشئ حالة اختبار صغيرة قبل تغيير إعدادات الكاميرا أو الجدار الناري. دوّن عنوان RTSP بعد إخفاء كلمة المرور، ووقت الاختبار، واسم المسار، ونوع النقل المطلوب، ورد الخادم، وأول لحظة تصل فيها الوسائط. نفّذ محاولة واحدة عبر UDP وأخرى عبر TCP interleaved عندما يسمح الجهاز بذلك. لا تغيّر عنوان المسار وبيانات الاعتماد والنقل في التجربة نفسها، لأن نجاح المحاولة التالية لن يوضح أي متغير أصلح العطل.

طبقة الفحص الدليل الذي يجب حفظه سؤال القرار
RTSP الطلب، الحالة، الرؤوس، CSeq وSession هل وافق الخادم على العملية نفسها؟
SDP control وpayload type وclock rate وcodec هل وصف الخادم المسار الذي سيُستقبل؟
Transport client_port أو interleaved وقيمة server_port هل يرسل الطرفان عبر القناة نفسها؟
RTP SSRC والتسلسل والطابع الزمني وmarker هل تصل وحدات الوسائط بترتيب يمكن تفسيره؟
RTCP sender report وCNAME وBYE هل توجد ساعة وهوية ونهاية جلسة قابلة للتتبع؟
Decoder SPS/PPS/VPS وpacketization mode هل البيانات الواصلة قابلة للتهيئة وفك الترميز؟

افصل دائمًا بين «لم تصل وسائط» و«وصلت وسائط غير قابلة للفك». غياب حزم RTP بعد SETUP وPLAY يشير إلى مسار UDP أو NAT أو جدار ناري أو رد Transport غير متطابق. وصول RTP مع فجوات في التسلسل يثبت فقدًا أو إعادة ترتيب. وصول تسلسل متماسك مع فشل الصورة ينقل التحقيق إلى payload type وclock rate وحدود الإطار ومعلمات H.264 أو H.265. هذه الحدود أهم من رسالة اللاعب العامة لأنها تحدد المالك المحتمل للإصلاح.

كيف تُكتب إجابة قابلة للاقتباس؟

اكتب النتيجة في ثلاث جمل: العملية التي نجحت، أول دليل أخفق، والتجربة التالية التي تفصل بين سببين. مثال البنية هو: «نجح DESCRIBE وSETUP وPLAY؛ لم تصل أي حزمة RTP إلى منافذ العميل المعلن عنها؛ إعادة الاختبار عبر TCP interleaved ستفصل بين حجب UDP وخطأ عنوان المسار». لا تقل إن الكاميرا أو الشبكة «معطلة» من دون حزمة أو رد يثبت الحد.

ما الحد الأدنى لإعادة إنتاج المشكلة؟

احتفظ بنسخة من تبادل OPTIONS وDESCRIBE وSETUP وPLAY، ونص SDP، ورد Transport، ومعرّف Session بعد إخفاء الأسرار. بالنسبة للوسائط، سجّل SSRC وأول وآخر رقم تسلسل ومعدل الساعة وعدد الفجوات ومدة الالتقاط. اذكر هل يعمل VLC أو VMS آخر، لكن تعامل مع ذلك كاختبار فرق لا كدليل أن الطرف الآخر صحيح في كل شيء.

متى يجب فحص الخادم بدل العميل؟

افحص الخادم عندما يرفض العملية بحالة واضحة، أو يغيّر عنوان control إلى مسار غير موجود، أو يعيد Transport لا يطابق العرض، أو يبدّل SSRC والساعة من دون انتقال معلن. افحص العميل عندما يكرر nonce قديمًا، أو يرسل Session مفقودة، أو يطلب UDP ثم لا يفتح المنافذ، أو يفسر marker بوصفه نهاية كل NAL. قد يكون العطل بينهما؛ لذلك يجب أن تبقى الحزمة والوقت جزءًا من التقرير.

كيف تُراجع النتيجة قبل التسليم؟

أعد المحاولة من بداية اتصال جديدة، ثم قارن السجلين عند أول اختلاف فقط. تأكد من أن التقرير لا يحتوي كلمة مرور أو رمز Authorization كاملًا. اربط كل استنتاج برقم CSeq أو رقم تسلسل أو طابع زمني. استخدم دليل RTSP المرتبط للخطوات المجاورة، وارجع إلى RTSP Inspector لمسار اختبار بث RTSP وجمع الأدلة محليًا. لا يحتاج هذا التشخيص إلى رفع تدفق الكاميرا إلى خدمة عامة.

<!-- rtsp-localized-evidence-foundation-v1:end --><!-- rtsp-localized-layer-verdicts-v1:start -->

من الملاحظة إلى حكم طبقي قابل للمراجعة

في «إصلاح طلب RTSP 400 السيئ: فشل الوصف، وعنوان URL للكاميرا تالف، وأخطاء في الرأس» اكتب الملاحظة قبل تفسيرها. الملاحظة هي شيء يمكن لشخص آخر العثور عليه في السجل: حالة RTSP مرتبطة بـCSeq، أو قيمة في SDP، أو رد Transport، أو فجوة بين رقمين متتاليين، أو تغير SSRC، أو اختلاف بين RTP timestamp وRTCP sender report. أما عبارات مثل «الخادم بطيء» و«الترميز غير متوافق» فهي فرضيات حتى تحدد الحزمة التي تجعلها أرجح من البدائل.

قسّم القضية إلى نقاط حدود. الحد الأول هو فتح اتصال TCP. الثاني هو قبول OPTIONS أو DESCRIBE. الثالث هو أن يصف SDP مسارًا وعرضًا يمكن للعميل استخدامهما. الرابع هو SETUP مع Transport متوافق. الخامس هو PLAY مع Session صحيحة. السادس هو وصول RTP، ثم سلامة الترتيب والتوقيت، ثم استعداد برنامج فك الترميز. توقف عند أول حد لا يملك دليل نجاح؛ الأدلة اللاحقة لا تصلح لإخفاء غياب دليل سابق.

عند مقارنة تجربتين، ثبّت المصدر والوقت قدر الإمكان. إذا اختبرت UDP مقابل TCP interleaved، استخدم عنوان المسار وبيانات الاعتماد نفسها. إذا اختبرت main stream مقابل sub stream، أبق النقل والعميل ثابتين. إذا قارنت VLC مع VMS، سجّل الطلبات التي يرسلها كل عميل بدل الاكتفاء بأن أحدهما يعرض صورة. الاختلاف في control URL أو Authorization أو Session أو keepalive قد يفسر النتيجة أكثر من اسم البرنامج.

مصفوفة الاستبعاد

ابدأ بفرضيتين فقط. مثال: لا توجد وسائط بسبب حجب UDP، أو لأن الخادم يرسل إلى منافذ مختلفة. يختبر TCP interleaved الفرضية الأولى، بينما مقارنة عرض Transport بردّه واستخراج عناوين IP والمنافذ تختبر الثانية. بالنسبة للصورة المشوهة، قارن فرضية فقد RTP بفرضية تهيئة codec ناقصة: أرقام التسلسل تفصل الأولى، ووجود SPS/PPS/VPS قبل أول إطار يفصل الثانية.

لكل فرضية اكتب دليلًا مؤيدًا ودليلًا يمكن أن ينفيها. إذا لم توجد حزمة يمكن أن تنفي الادعاء، فهو واسع أكثر من اللازم. «الـNAT أسقط UDP» يمكن نفيه بوصول RTP إلى منفذ العميل؛ «لا توجد معلمات H.264» يمكن نفيه برؤية SPS وPPS صالحتين قبل IDR. هذه الصياغة تمنع التقرير من التحول إلى قائمة احتمالات بلا ترتيب.

التعامل مع الزمن من دون استنتاج زائد

RTSP CSeq يرتب معاملات التحكم، وRTP sequence يوضح ترتيب الحزم، وRTP timestamp يوضح زمن أخذ عينات الوسائط، بينما وقت الالتقاط يوضح وصول الحزمة إلى نقطة الرصد. لا تساوِ هذه الساعات. فرق وقت الوصول لا يثبت انجراف timestamp، وقفزة timestamp لا تثبت فقد حزمة من دون تسلسل. عند مزامنة الصوت والفيديو، استخدم RTCP sender reports لربط ساعات RTP بزمن مشترك، ولا تعتمد على تشابه أرقام timestamp بين clock rates مختلفة.

حزمة القبول النهائية

يُغلق التحقيق عندما يمكن تكرار الإصلاح في اتصال جديد وبإعداد واحد موثق. يجب أن يوضح التقرير المدخلات، وآخر خطوة ناجحة، وأول دليل فاشل، والتغيير، ونتيجة إعادة الاختبار، وما لم يُختبر. أرفق مقطعًا صغيرًا من السجل أو إحصاءات الحزم بدل ملف ضخم غير محدد. أخفِ الأسرار، لكن لا تحذف CSeq أو Session المموهة أو SSRC أو النطاق الزمني الذي يجعل النتيجة قابلة للمراجعة.

إذا بقيت المشكلة، استخدم استكشاف أخطاء RTSP لإعادة بناء التسلسل، أو تقارير RTSP Inspector لتسليم الحد الفاشل إلى فريق الكاميرا أو الشبكة أو VMS.

<!-- rtsp-localized-layer-verdicts-v1:end -->