اكتشفتُ مؤخرًا أن عدة مقاطع فيديو على منتدى Discourse المضيف ذاتيًا فشلت في التشغيل على أجهزة iPhone وiPad دون إصدار أي تنبيه. وبعد التحقيق، تبين أن السبب الجذري هو أن هذه المقاطع قد تم ترميزها باستخدام مرشح VP9 داخل حاوية MP4 — وهو مزيج لا يستطيع متصفح Safari على نظام iOS تشغيله.
كيف يحدث ذلك
قد يقوم فيسبوك (وربما منصات أخرى) بتسليم مقاطع فيديو مُرمَّزة بمرشح VP9 عندما يقوم المستخدمون بتنزيل محتواهم. وعند رفع هذه الملفات إلى Discourse، يتم قبولها دون مشاكل — فامتداد .mp4 لا يُظهر أي دلالة على نوع المرشح الداخلي. وعلى متصفحات سطح المكتب وأجهزة Android، تعمل المقاطع بشكل صحيح، لذا يظل المشكلة غير ملحوظة. أما على Safari في أجهزة iOS، فيظهر الفيديو صورة مصغرة وزر تشغيل، لكن عند النقر عليه يظهر مؤشر دوران فقط. وغالبًا ما يفترض المستخدمون أن المشكلة تتعلق بالشبكة ويستمرون دون الإبلاغ عنها.
لماذا يصعب اكتشافها
- امتداد الملف (
.mp4) مطابق لملف H.264 يعمل بشكل صحيح - متصفحات سطح المكتب تدعم VP9، لذا لا يلاحظ المسؤولون أي مشكلة عند الاختبار على سطح المكتب
- غالبًا لا يبلغ مستخدمو iOS عن فشل الوسائط الفردية، خاصة عندما يكون المحتوى الآخر في نفس المنشور مرئيًا وقابلًا للتشغيل
- لا يوجد تحذير أو خطأ يظهر في لوحة تحكم المسؤول
الحل المقترح
عند رفع فيديو، يمكن لـ Discourse فحص مرشح الفيديو (أداة ffprobe متاحة بالفعل داخل حاوية Docker) وإما:
- رفض الرفع مع عرض رسالة واضحة توضح أن VP9 غير مدعوم على iOS، وطلب من المستخدم إعادة الترميز إلى H.264، أو
- إعادة ترميز الفيديو تلقائيًا إلى H.264 عند الرفع (مشابهًا لكيفية قيام بعض المنصات بتوحيد الملفات المرفوعة)
الخيار الأول أقل تعقيدًا وسيكون تحسنًا كبيرًا بالفعل. أما الخيار الثاني فهو مثالي لتجربة مستخدم سلسة.
البيئة
- Discourse مستضاف ذاتيًا داخل Docker، مع تخزين محلي (بدون S3)
- إصدار Discourse: 2026.4.0-latest
- وكيل عكسي Apache أمام nginx الخاص بـ Discourse
حل بديل
بالنسبة للمسؤولين الذين يواجهون هذه المشكلة، يتضمن الإصلاح الخطوات التالية:
- تحديد ملفات VP9 باستخدام
ffprobe - إعادة الترميز إلى H.264 باستخدام الأمر:
ffmpeg -c:v libx264 -profile:v main -level 3.1 -r 30 -movflags +faststart - تحديث قيم
sha1وurlوfilesizeفي جدولuploads - تحديث رموز عناوين URL القصيرة
upload://في تنسيق Markdown الخام للمنشورات المتأثرة - إعادة معالجة المنشورات المتأثرة
هذه عملية يدوية غير بسيطة، ولا يمتلك معظم مسؤولي المنتديات الأدوات اللازمة لتنفيذها.