الخلاصة

  • فرضت RFC 2038 طريقة لتقسيم MPEG تجعل بداية الشريحة التالية قابلة للاكتشاف من دون مسح بايتات الحمولة. ويصف البتان B وE علاقة كل حمولة RTP بحدي الشريحة.
  • كررت كل حزمة فيديو المرجع الزمني TR ونوع الصورة P ومعلمات متجهات الحركة الأمامية والخلفية اللازمة. وإذا فُقد GOP Header أو Picture Header، أمكن استعمالها لبناء سياق بديل محدود عند الشريحة التالية.
  • لا تثبت فجوة التسلسل وB/E والحالة المكررة سوى أساس قرار استئناف محلي. فهي لا تثبت وصول الشرائح السابقة، ولا صدق الترويسة، ولا اكتمال الصورة، ولا وجود الإطار المرجعي، ولا صحة الفك، ولا استمرارية العرض، ولا مشاهدة الجمهور، ولا QoS.

يصل سجل الاستقبال إلى الحزمة 508 ثم يقفز إلى 510. تعلن الحزمة 510 أن B=1، وتحمل TR يساوي 19، ونوع صورة B، ومعلمات الحركة في الاتجاهين. يستطيع المستقبل عندها إسقاط الامتداد الذي فقد بدايته، وتجهيز قدر صغير من سياق الصورة، ثم تقديم بداية الشريحة الجديدة إلى مفكك الترميز.

لكن الحزمة 509 لا تعود إلى الوجود. ربما حملت وحدات macroblock لا يمكن الاستغناء عنها، وربما كانت إحدى الصورتين المرجعيتين للصورة B مفقودة أو تالفة. وقد يكون المرسل أخطأ في إعلان الحد. حتى إذا قبل المفكك البنية البديلة، فقد يعرض تشوها أو تجمدا أو لا ينتج صورة نافعة.

لم تكن غاية RFC 2038 محو هذه الاحتمالات. كانت الغاية أن يصبح موضع المحاولة التالية ومدخلاتها مرئيين، كي لا يبقى كل ما يأتي بعد الفقد بلا معنى إلى أجل غير محدد.

نقل وحدة التعافي إلى سطح الحزمة

لا يتكون فيديو MPEG المضغوط من كتل مستقلة يمكن دخولها من أي بايت. فالاعتماد الزمني بين الصور والاعتماد المكاني داخلها يعنيان أن فقد جزء واحد قد يجعل بيانات لاحقة وصلت سليمة غير قابلة للاستعمال. وفي الوقت نفسه، قد تكون الصورة أكبر من MTU المعتاد، فلا بد من توزيعها على حزم عدة.

وضعت RFC 2038 قواعد واضحة لهذا التوزيع. كان على Video Sequence Header أن يبدأ حمولة RTP. وكان GOP Header يبدأ الحمولة أو يأتي مباشرة بعد Sequence Header. أما Picture Header فكان يبدأ الحمولة أو يتبع GOP Header. وكان لزاما أن تكتمل كل واحدة من ترويسات Elementary Stream هذه داخل حزمة واحدة.

أما الشريحة فحملت قاعدة الاستئناف. وصفتها الوثيقة بأنها وحدة MPEG المقصودة للتعافي بعد الفقد أو التلف. يمكن أن تكون بدايتها أول بيانات الحمولة، أو تأتي بعد ترويسات MPEG المسموح بها، أو بعد عدد صحيح من الشرائح الكاملة داخل الحمولة نفسها. ومع ذلك ظل مسموحا أن تمتد شريحة واحدة عبر حزم متعددة؛ فلم يكن هناك وعد بأن كل حزمة تساوي شريحة.

ألغى هذا الترتيب حاجة المستقبل إلى البحث الأعمى في كل بايت لاحق عن start code. فقد وضع مقسم الحزم نقطة ذات معنى في موضع يمكن الإعلان عنه. حدد المرمز وحدة التعافي، وكشفتها الترويسة الخاصة بـRTP لمعالجة النقل. لكن الكشف لم يمنح بيانات النقل سلطة التصديق على محتوى MPEG.

وصفت B وE شكل المحاذاة لا اكتمال المحتوى

اتبعت ترويسة فيديو بطول 32 بت ترويسة RTP الثابتة. ويعني B=1 أن الحمولة تبدأ بكود بداية شريحة، مع إمكان سبقه فقط بـVideo Sequence Header أو GOP Header أو Picture Header. ويعني E=1 أن آخر بايت في الحمولة هو أيضا نهاية شريحة MPEG.

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

غير أن B=1 بقي إعلانا من المرسل. فلا يصادق البت على وجود start code صحيح، ولا يحصي E=1 بقية أجزاء الشريحة. وقد تصل حزمة محاذاة عند الطرفين بعد فجوة أخفت جزءا آخر من الصورة. وبالعكس، قد تصل حزمة بلا B أو E سليمة بايتا ببايت لكنها لا تفيد بعد ضياع بدايتها المطلوبة.

لذلك يجب أن يبقى وصف الدليل دقيقا: تثبت B/E حالة الحد المحمولة في الترويسة. أما وجود بنية MPEG فعلية، وشريحة كاملة، وقبول المفكك، فتحتاج كل منها إلى فحص مستقل.

حملت كل حزمة ملفا مصغرا عن الصورة

لم تكتف RFC 2038 بالمحاذاة. فقد كررت حالة الصورة في كل حزمة فيديو. حمل الحقل TR، بطول عشرة بتات، Temporal Reference للصورة الحالية داخل GOP، وظل ثابتا في جميع حزم تلك الصورة. وحدد الحقل P، بطول ثلاثة بتات، إن كانت الصورة I أو P أو B أو D، وظل هو الآخر ثابتا.

حملت أربعة حقول إضافية علامات full-pel وf-codes لمتجهات الحركة الأمامية والخلفية من أحدث Picture Header. لا تستعمل صورة I هذه الحقول فتضعها صفرا. وتستعمل صورة P الزوج الأمامي وتضع الخلفي صفرا. أما صورة B فقد تستعمل الحقول الأربعة. لم يكن ذلك نسخة من الصورة ولا نسخة كاملة من ترويستها، بل مجموعة صغيرة تكفي لإعادة بناء معلومات مختارة.

إذا اختفت الحزمة الوحيدة التي تحمل Picture Header، فقد يرى المستقبل حد شريحة لاحقا لكنه يجهل نوع الصورة وكيفية تفسير المتجهات. أدى تكرار القيم في كل حزمة إلى قطع ذلك الاعتماد عند أول شريحة قابلة للاستعمال: جاء الحد ومعه الحد الأدنى من مدخلات الاستئناف.

وفر التكرار أيضا إشارة اتساق. فقد يشير تغير غير متوقع في TR أو P إلى فقد GOP Header أو Picture Header. واقترح الملحق عدادات للصور المرجعية والتابعة، ثم مقارنة التقدم المتوقع بـTemporal Reference المعلن. يكشف عدم التطابق أن توقع المستقبل وإعلان الحزمة لم يعودا متفقين، لكنه لا يكشف قيمة الترويسة الأصلية ولا سبب غيابها.

كانت إعادة البناء تقريبا صريحا

عند فقد GOP Header، اقترحت RFC ترويسة بديلة فيها time code صفري، وقيمة closed_gop من GOP السابق، وbroken_link=1. وعند فقد Picture Header، أمكن تركيب بديل عند Beginning-of-slice التالي من P وTR وحقول المتجهات الأربعة وقيم افتراضية تعتمد على التدفق.

لا تستعيد هذه العملية الأصل بايتا بايت. فالوقت الصفري ليس وقت المرسل المفقود، والقيمة الموروثة لا تمثل رصدا مستقلا لـGOP الجديد، والقيمة الافتراضية افتراض لدى المستقبل. ويجعل broken_link=1 هذا النقص ظاهرا بدلا من ادعاء الاستمرارية: لا ينبغي الوثوق بعلاقة التنبؤ عبر موضع الانقطاع.

أتاحت الترويسة البديلة محاولة فك، لكنها لم تثبت وجود الصور المرجعية أو صحة النتيجة المرئية. وبهذا ظل استمرار المعالجة مختلفا عن استعادة المحتوى.

أطلقت فجوة التسلسل احتواء الضرر

حدد الملحق تسلسلا تشغيليا بسيطا. إذا دل انقطاع أرقام RTP على فقد، جاز للمستقبل إهمال الحزم اللاحقة حتى تصل حزمة فيها Beginning-of-slice. وعند ذلك الحد يتوفر قدر كاف من الحالة لبدء معالجة MPEG، وربما بعد بناء GOP Header أو Picture Header بديل.

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

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

لا يجوز اختزال سبعة إيصالات في كلمة «تعافى»

ينبغي للتحقيق أن يفصل سبع ملاحظات على الأقل: استمرارية تسلسل RTP؛ وإعلان B/E؛ وبنية حد MPEG التي جرى تحليلها فعلا؛ وحالة TR/P والمتجهات المكررة؛ وتوافر الصور المرجعية وسلامتها؛ وخروج المفكك وسلوك إخفاء الأخطاء؛ وتوقيت العرض وملاحظة الجمهور.

قد يبرر دليل في طبقة مبكرة جمع دليل الطبقة التالية، لكنه لا يحل محله. انتظام B/E لا يثبت صورة كاملة. وقيم TR/P المعقولة ليست الترويسة المفقودة. ونجاح التحليل لا يثبت صحة التنبؤ. وخروج إطار لا يثبت العرض المتصل. وحدث في المشغل لا يثبت أن إنسانا شاهد النتيجة أو قبلها.

نُشرت RFC 2038 في أكتوبر 1996 بوصفها Proposed Standard، وأبطلتها RFC 2250 في يناير 1998. ويسجل جدول IANA الحالي لمعاملات RTP النوع الثابت 32 باسم MPV وتردد 90 كيلوهرتز، مع الإشارة إلى RFC 2250. يثبت ذلك تخصيصا في سجل، لا نشرا حاليا ولا جودة تطبيق ولا استخداما في شبكة بعينها.

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

المصادر