الخلاصة

  • يصف RFC 5285، الذي حل محله RFC 8285، الرقم داخل عنصر امتداد RTP بأنه معرّف محلي؛ أما الصيغة والمعنى فيحددهما URI، وتربط extmap بينهما ضمن نطاق تفاوضي محدد.
  • وصول الحزمة، وصحة الصيغة، والعثور على الخريطة، وفك الدلالة، واتخاذ الإجراء، ورصد النتيجة إيصالات مستقلة. لا يجوز لضوء أخضر واحد أن يمثلها جميعاً.

بدأ التحقيق من رسم بياني يزعم أن المتحدث النشط تغيّر مئات المرات. كان التسجيل سليماً، وأرقام التسلسل متصلة، والعنصر ذي المعرّف 3 موجوداً كما أُرسل. لكن أداة التحليل ورثت قاموس مكالمة سابقة. في المكالمة الحالية كان الرقم 3 يشير إلى إزاحة زمن الإرسال، لا إلى مستوى الصوت.

الدليل المادي وصل. سلطة تفسيره لم تصل معه.

عالج RFC 5285 حاجة عملية: حمل عدة قطع صغيرة من البيانات الوصفية داخل مساحة امتداد ترويسة RTP. إرسال URI طويل في كل حزمة يهدر السعة، ومنح كل امتداد ممكناً رقماً عالمياً دائماً يقيد الابتكار. فجعل المعيار الرقم القصير مؤشراً محلياً، وجعل URI المطلق الاسم الذي يحدد الصيغة والمعنى. وفي SDP يظهر الربط على هيئة a=extmap:<value> <URI>.

حل RFC 8285 محل وثيقة 2008 وأضاف، من بين أمور أخرى، طريقة تفاوضية لاستخدام صيغتي البايت الواحد والبايتين في التدفق. لكنه أبقى الحد الجوهري: لا توجد توزيعات ثابتة عالمية للمعرّفات المحلية.

السجل المركزي يسجل الاسم الطويل

يسجل IANA عناوين URI لامتدادات مثل إزاحة زمن الإرسال، وتوقيت المزامنة، ومستويات الصوت، وMID وRID، ووسم الإطار. يربط السجل كل اسم بوصفه ومواصفته. لكنه لا يمنح الرقم 3 لتلك الوظيفة في كل جلسة.

تستخدم صيغة البايت الواحد أربعة بتات للمعرّف وتتيح القيم من 1 إلى 14. وتوفر صيغة البايتين مجالاً أكبر. قِصر الرقم هو سبب كفاءته على مسار يتكرر في كل حزمة، وهو أيضاً سبب حاجته إلى نطاق واضح.

يمكن لجلسة أن تجعل 3 مستوى صوت، وتجعل جلسة أخرى 3 إزاحة توقيت. وقد تكون إعلانات extmap على مستوى الجلسة أو على مستوى الوسيط، لكن لا يجوز خلط الأسلوبين. كما أن الاتجاه وخصائص الامتداد جزء من العقد.

لذلك لا تكفي الخانة ID=3. يجب ربطها بقسم الوسيط أو مجموعة BUNDLE، ومرحلة العرض والجواب، والاتجاه، والـ URI والخصائص. إذا غابت الخريطة، تبقى الحزمة دليلاً على الوصول والتوقيت والبايتات. أما المعنى فيسجل «غير محلول»، لا يملأ بتخمين شائع.

معرفة الإطار لا تعني معرفة الكلمة

يبين حقل profile في امتداد RTP ما إذا كانت الحزمة تستخدم صيغة البايت الواحد أو البايتين. يستطيع المحلل التحقق من الأطوال والحشو وحدود العناصر. هذا إثبات لصحة البنية.

بعد ذلك فقط يُبحث عن المعرّف في خريطة التفاوض السارية، ثم يختبر مفكك خاص بالـ URI قيمة العنصر. نجاح الخطوة الأولى لا يمنح نجاح الثانية. كلمة «عولج» تمحو هذا الفرق وتخفي موضع الخطأ.

يوضح النمط المختلط المسألة. كان RFC 5285 يمنع تبديل الصيغتين داخل تدفق واحد. يسمح RFC 8285 بذلك بين الحزم عندما تُعرف قدرة كل المستقبلين، عادة بعد تفاوض extmap-allow-mixed. وتظل كل حزمة تستخدم صيغة واحدة يحددها حقلها؛ الإذن يتعلق بسلوك التدفق عبر الزمن.

رؤية حزمة بصيغة البايتين تثبت ما أرسله المرسل، ولا تثبت أن المستقبل قبله. ووجود الخاصية في العرض يثبت اقتراحاً، لا قبول الجواب ولا التنفيذ الفعلي. القدرة والموافقة والحدث ثلاث حقائق.

التحديث لا يعيد تسمية المعرّف الساري

يجب أن تكون المعرّفات الصالحة فريدة داخل نطاقها. يمكن لتحديث الجلسة إضافة امتداد أو حذفه وتغيير اتجاهه، لكنه لا يجوز أن يعيد ربط معرّف صالح بعنوان URI آخر. هذه القاعدة تحمي الحزم الجارية من قاموس يتغير تحتها.

وتفرض القاعدة على الأرشيف حفظ الزمن. آخر نسخة من SDP لا تفسر تلقائياً كل ما سبقها. كل تفاوض ينشئ حقبة، ولكل حزمة الحقبة التي كانت نافذة عند وصولها.

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

ويمكن أن يكون الامتداد inactive: معروفاً ومدعوماً لكنه غير مرسل حالياً. إعلان SDP يثبت حالة التهيئة؛ ظهور العنصر في RTP يثبت الحدث. لا يستبدل أحدهما الآخر.

في BUNDLE يتغير نطاق القاموس

يتيح BUNDLE لعدة أقسام m= مشاركة نقل واحد. يقلل ذلك المنافذ، لكنه يجعل ربط التدفق بقسمه ضرورياً. يحمل MID هذه العلاقة بسرعة داخل امتداد RTP، ويشترط RFC 9143 تمكينه في أوصاف RTP المجمعة.

يعد RFC 8285 أقسام مجموعة BUNDLE جزءاً من فضاء محلي واحد للمعرّفات. إذا ظهر URI نفسه بالتهيئة نفسها في عدة أقسام، وجب أن يستخدم الرقم نفسه. ومع ذلك يمكن لكل قسم أن يعلن مجموعة مختلفة من الامتدادات.

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

يبين RtpStreamId طبقة نطاق أخرى. يقرر RFC 8852 أن RID مقيد بالمصدر والجلسة، ومع BUNDLE يقيد أيضاً بـ MID. المعرّف المحلي يختار أولاً URI الخاص بامتداد RID، ثم تختار قيمة RID تدفقاً داخل مجالها. تشابه الاسم لا يجعل السلطتين واحدة.

التشفير يسحب الرؤية ولا يمحو الحقل

قد تكون بيانات الامتداد حساسة. عرّف RFC 6904 تشفيراً انتقائياً للقيم. ولاحظ RFC 9335 لاحقاً أن ترتيب المعرّفات والأطوال قد يكشف نوع التطبيق أو الطرف، فوسّع Cryptex الحماية لتشمل بنية أكبر.

إذا توقفت مجسة وسيطة عن قراءة الامتداد بعد التشفير، فهذا لا يثبت أن المصدر توقف عن إنتاجه. الذي تغير هو سلطة المراقبة. وحتى الطرف المصرح له بفك التشفير يحتاج إلى حقبة extmap الصحيحة؛ مفتاح التشفير ليس قاموساً.

السجل الصادق يفصل ستة إيصالات: استلام الحزمة؛ تحليل الصيغة؛ العثور على الخريطة؛ فك القيمة وفق URI؛ استخدام النتيجة من مكون مخول؛ قياس الأثر بإشارة مستقلة. قد تكون قيمة مستوى الصوت صحيحة ويختار النظام متحدثاً خاطئاً. وقد يكون الاختيار صحيحاً وتفسده مشكلة ازدحام أخرى.

هذه الحدود هي قوة التصميم لا نقصه. جعل RFC 5285 البيانات الوصفية رخيصة على السلك لأنه لم يمنح الرقم القصير سيادة عالمية. وعلى نظام الأدلة أن يحفظ الواقع بطبقاته بدلاً من تحويل مؤشر محلي إلى حقيقة مطلقة.