الخلاصة

  • يستطيع RFC 9559 إثبات أن القارئ واجه وثيقة EBML مشروعة ووصفاً للمسارات وبنية Blocks سليمة. وينتهي هذا الإيصال قبل قدرة برنامج الترميز وإغلاق المراجع والعرض المتزامن.
  • قد يغطي Cues أزمنة ومسارات مختارة فقط، ويجوز للبث الحي الاستغناء عنه. إصابة الفهرس لا تثبت أن القفز انتهى عند إطار مرئي يمكن فك ترميزه من تلك النقطة.
  • أعلام Default وForced مدخلات لسياسة المشغل، وليست سجلاً للصوت أو الترجمة أو مسار الإتاحة الذي تلقاه مشاهد بعينه.

يفتح قارئ Matroska الملف، يقبل ترويسة EBML ويمر عبر شجرة عناصر صحيحة. عندها يسهل تحويل النجاح المحلي إلى عبارة واسعة: «المادة قابلة للتشغيل». لكن RFC 9559، المنشور ضمن Standards Track في IETF في أكتوبر 2024، يحدد حاوية: هوية المسارات، مواضع الإطارات المرمزة، حساب الزمن والفهارس. ولا يمثل أي منها الشاشة النهائية.

تكشف قصة المعرّف 0x80 الفارق بين الوثيقة والتشغيل. كان RFC 8794 قد حجز القيمة، بينما استخدمتها تطبيقات Matroska في ChapterDisplay. جعلها RFC 9559 قانونية، أي إن النص المشترك لحق بالكود المنشور. لكنه لم يمنح شهادة بأثر رجعي لكل ملف تاريخي أو قارئ.

قابلية القراءة قد تعني وظائف أقل

يجب أن يغطي DocTypeVersion أحدث عنصر Matroska مستخدم. أما DocTypeReadVersion فيحدد الحد الأدنى اللازم للتشغيل، ولو بمجموعة وظائف مخفضة. ويعرض RFC مثالاً يستخدم CueRelativePosition من الإصدار 4 مع read version 2، لأن العنصر يحسن دقة القفز ولا يلزم للتشغيل العادي.

ويجب على القارئ المتوافق أن يتجاوز العناصر التي لا يعرفها إذا احترمت حدود حجم العنصر الأب. لذلك قد يعني «فُتح بنجاح» أن معلومات يستعملها مشغل آخر جرى تجاهلها عمداً. يلزم حفظ نسخة القارئ والإصدارات المعلنة وقائمة العناصر المتجاوزة قبل ادعاء التكافؤ الوظيفي.

يحتاج Block إلى حدود الإطارات وإلى تاريخ المراجع

يجمع Block أو SimpleBlock رقم المسار وتوقيتاً نسبياً إلى Cluster وأعلاماً وlacing اختيارياً وإطاراً واحداً أو أكثر. تقلل أنماط Xiph وEBML والحجم الثابت الكلفة، لكنها تفرض استعادة الحدود الداخلية بدقة. العثور على نهاية العنصر لا يثبت فصل كل إطار بطريقة صحيحة.

ثم تأتي حالة المراجع. يحذر RFC من أن معاملة إطار تابع بوصفه نقطة وصول عشوائي قد تنتج خرجاً زائفاً أو انهياراً. ويمكن لبعض إطارات AV1 أو VP9 من نوع intra-only أن تُفك منفردة من دون أن تعيد حالة برنامج الترميز؛ فتظل الإطارات اللاحقة معتمدة على ماضٍ أسقطه القفز. السؤال الصحيح هو: هل أغلقت كل المراجع اللازمة لما يأتي بعد هذه النقطة؟

يحدد CodecID وCodecPrivate، عند الحاجة، نوع البيانات وحالة التهيئة. توحد codec mappings الأسماء، لكنها لا تثبت وجود decoder أو دعمه للملف أو صحة خرجه. لهذا المستوى إيصال مستقل.

قراءة التوقيت ليست زمن المشاهد بعد

يتكون زمن العرض من توقيت Cluster وقيمة Block الموقعة وTrackTimestampScale وTimestampScale، مع طرح CodecDelay عند وجوده. وقد يلزم فك إطار ذي زمن سالب من دون عرضه، كما ينبغي تقريب النتائج الكسرية إلى أقرب نانوثانية.

يسجل RFC حقيقة تشغيلية صعبة: كثير من القراء التاريخيين يتجاهلون TrackTimestampScale إذا خالف 1.0. لذلك يمكن لتطبيقين بناء خطين زمنيين مختلفين من ملف صحيح نحوياً. وعند تداخل الإطارات في Track operations، قد يسقط النظام بعضها أو يعرضها بطريقة مختلفة بين المنصات.

لا بد إذن من الاحتفاظ بمدخلات الحساب ومقارنة الأزمنة الناتجة وتزامن الصوت والصورة وبصمات الخرج. الرقم الذي فُسر ليس لحظة ثبت عرضها.

يرسم Cues الطريق ولا يكمل القفز

يفهرس Cues مواضع Cluster مختارة لتسريع الوصول إلى أزمنة مطلقة. وقد يغطي كل Block أو عينة فقط. يوصى به للملفات غير الحية وبنقاط لكل keyframe فيديو، بينما يجوز إغفال مراجع الصوت عند وجود فيديو. ويمكن أيضاً البحث بمسح الملف من دون الفهرس.

ينبغي للاختبار التحقق من تغطية الزمن والمسار، وصحة موضع Cluster والموضع النسبي، وإغلاق المراجع، ثم قياس الفرق بين الإطار المطلوب والإطار المعروض. لا يغلق نجاح الفهرس سوى خطوة العنونة.

أما البث الحي فيغير سطح الإثبات عمداً. لا يجوز للـSegments المتواصلة استخدام SeekHead أو Cues أو Chapters أو Attachments. وإذا غابت القائمتان عن البداية وجب اعتبار التدفق غير قابل للقفز. قد يكون ذلك صحيحاً للبث، لكنه لا يفي بوعد الإرجاع أو التحريك على الخط الزمني.

الحاوية لا تختار نيابة عن المستخدم

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

هذه مدخلات سياسة وليست النتيجة. يجمع إيصال التشغيل بين أعلام الحاوية وتفضيلات المستخدم وأسبقية المشغل وTrack UID المختارة ودليل مرئي أو مسموع. وفق منظور Heng Lu، تنسق وثيقة RFC، أما البايتات الفعلية والكود العامل والـdecoder والـrenderer والخرج المرصود فتثبت الواقعة التشغيلية.