الخلاصة

  • زوّد RFC 3533 صفحة Ogg بنمط الالتقاط OggS ورقم الدفق وتسلسل الصفحة وجدول المقاطع وCRC، بحيث يمكن العثور على الصفحة وفحصها كوحدة مستقلة.
  • قد تمتد حزمة الترميز الواحدة عبر صفحات عدة؛ لذلك يمكن أن تكون الصفحة اللاحقة صحيحة فيما تكون بداية الحزمة في صفحة سابقة مفقودة.

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

نُشر RFC 3533 في مايو 2003 بوصفه وثيقة Informational من المسار المستقل، وعرّف الإصدار صفر من صيغة تغليف Ogg. لا يعرّف الترميز الصوتي أو المرئي نفسه. ينتج المشفّر دفقاً منطقياً مقسماً إلى حزم، ثم يقسم Ogg الحزم إلى مقاطع ويجمع المقاطع في صفحات ويدمج صفحات دفق منطقي واحد أو عدة تدفقات في دفق مادي. الحاوية تعرف الحدود والترتيب، بينما يأتي معنى البتات من media mapping والترميز.

تحدد الأحرف الأربعة OggS موضعاً محتملاً لبداية الصفحة، وتساعد المحلل على استعادة التزامن بعد منطقة تالفة. بعد العثور عليها لا بد من قراءة الرأس وجدول المقاطع وحساب طول الصفحة ثم مقارنة CRC. يستخدم الحقل البالغ 32 بت متعدد الحدود 0x04c11db7. ويوضح erratum 8825، وحالته Verified، أن الحساب يشمل الرأس بعد تصفير حقل CRC كما يشمل محتوى الصفحة. إنه فحص فساد للصفحة كلها، لكنه ليس توقيعاً ولا إثبات هوية.

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

يزداد page sequence number بصورة مستقلة داخل كل دفق منطقي. وهكذا يمكن اكتشاف صفحة مفقودة حتى عندما تتداخل صفحات الصوت والفيديو والبيانات الوصفية في الدفق المادي. لكن اكتشاف الفقد ليس استرجاعاً. الرقم لا يعيد البايتات ولا يحدد وحده العينات أو الإطارات المتأثرة. كما أن التسلسل المتصل لا يثبت أن التطبيق خزّن كل صفحة وأعاد تجميع كل حزمة وفك كل إطار وعرضه.

أما bitstream serial number فوظيفته توجيه الصفحة إلى الدفق المنطقي الصحيح عند فك الدمج. ينص RFC على أنه يولّد عشوائياً ولا علاقة له بالمحتوى أو بالمشفّر. فهو ليس هوية عمل أو مؤلف أو جهاز أو حساب أو صاحب حقوق، وليس ختم منشأ. تحويله إلى معرف دائم يضيف معنى تجارياً لم تتعهد به الصيغة.

يشير BOS وEOS إلى بداية الدفق المنطقي ونهايته. تحمل صفحة BOS معلومات تعريف الترميز حسب الـmapping، وقد تليها حزم رؤوس أخرى قبل البيانات. وقد تكون صفحة EOS خالية من المحتوى ولا تحمل سوى الموضع وعلم النهاية. في grouping تبدأ تدفقات عدة معاً وتتداخل صفحاتها، وفي chaining تتعاقب تدفقات مادية كاملة. هذه العلامات تصف البناء ولا تشهد بأن كل المحتوى المقصود موجود بين الطرفين.

granule position ليس ساعة عامة. يقول RFC 3533 صراحة إن Ogg لا يملك مفهوماً للوقت، بل يعرف مواضع متزايدة بلا وحدة. قد يعد mapping صوتي العينات وقد يعد mapping مرئي الإطارات. وتشير القيمة ناقص واحد إلى أن الصفحة لا تنهي أي حزمة. وحدها الطبقة التي تعرف الترميز والـmapping تستطيع تحويل الموضع إلى زمن.

تجعل مواصفات Opus اللاحقة هذا الفصل ملموساً. عرّف RFC 7845، ثم خلفه RFC 9639، ساعة granule بسرعة 48 kHz وpre-skip والقص النهائي وقواعد البحث لـOpus داخل Ogg، فيما يعرّف RFC 6716 الترميز نفسه. هذه القواعد ليست معنى تلقائياً للثمانية بايتات في الرأس، بل عقد يخص mapping بعينه.

وتبقى أسماء MIME محدودة كذلك. سجل RFC 3534 النوع application/ogg، ثم جعله RFC 5334 قديماً وأعاد تعريف استعماله وأضاف audio/ogg وvideo/ogg. يحتفظ سجل IANA بهذه الأسماء. يساعد النوع الصحيح على اختيار المعالج، لكنه لا يثبت اكتمال صفحات ملف معين أو دعم ترميزه أو سلامته أو تزامنه أو نجاح تشغيله.

الأمن ليس نتيجة جانبية لـCRC. يقرر RFC 3533 أن Ogg لا يقدم تشفيراً أو توقيعاً عاماً للحاوية أو لتدفقاتها. يمكنه حمل محتوى مشفر أو موقع إذا قدمت طبقة أخرى ذلك، لكن CRC لا يتحول إلى دليل أصالة. ويحذر النص أيضاً من التدفقات المتلاعب بها ومن buffer overflow وأخطار مشابهة. نجاح التحليل النحوي لا يعفي المعالج والترميز من الدفاع عن الذاكرة والحالة.

ويعلّم سجل الأخطاء كيف نحفظ حالة الدليل. erratum 6796، وهو Verified، يصحح كلمة «صفحات» إلى «مقاطع» في مثال. و8825، وهو Verified أيضاً، يوضح تغطية CRC. أما 8824 فيرى أن معاملات CRC32 الدقيقة غير محددة بما يكفي، لكنه ما زال Reported. يجوز عرضه كسؤال مفتوح، ولا يجوز تقديمه كتعديل نافذ.

لذلك تفصل سلسلة الإثبات بين: استلام البايتات، العثور على نمط الالتقاط، تأكيد حدود الصفحة، تحليل جدول المقاطع، فحص CRC، مراجعة التسلسل لكل دفق، إعادة الحزم كاملة، اختيار mapping، قبول رؤوس الترميز، تحويل granule، مزامنة التدفقات، فك الإطارات، عرض الخرج، وملاحظة ما وصل إلى المستخدم. قوّى RFC 3533 الحلقات الأولى من دون الادعاء بأنها الحلقات الأخيرة.

المصادر