"دليل البرامج لا يعمل" (EPG not loading) هو الشكوى الأكثر شيوعاً بين الأشخاص الذين يقومون بإعداد IPTV على أجهزة التلفزيون التي تعمل بنظام Android TV، وتكون الأسباب دائماً متشابهة من وجهة نظر المستخدم: قائمة القنوات جيدة، والفيديو يعمل، لكن الدليل فارغ. الأخبار الجيدة هي أن أنماط الفشل محدودة. هناك حوالي ستة أنماط منها، ويمكنك استبعاد معظمها في غضون دقيقتين.

يوجهك هذا الدليل خلال كل سبب بالترتيب الذي يستحق التحقق منه. إذا تمكنت من لصق رابط XMLTV الخاص بك في مدقق EPG قبل أن تبدأ، فستتخطى الخطوات من 2 إلى 4 بالكامل.

لوحتان جنباً إلى جنب — جزء من M3U مع tvg-id="bbc1" وجزء من XMLTV يتبدل معرف القناة الخاص به بين "BBC1" و "bbc1". يتحول رابط بينهما من صليب أحمر إلى علامة تحقق خضراء عندما تتطابق المعرفات أو تختلف.

تتم مطابقة معرفات القنوات بايت مقابل بايت: حرف كبير واحد يكفي لترك قناة بدليل فارغ.

1. تأكد من أن لديك رابط EPG بالفعل

أول شيء يجب التحقق منه هو ما إذا كان لديك مصدر دليل تم إعداده بالفعل. يشحن بعض مزودي IPTV قائمة القنوات (M3U) والدليل (XMLTV) كرابطين منفصلين، وعدد لا بأس به من المستخدمين يقومون بإعداد أحدهما ويفترضون أن الآخر قد جاء معه.

افتح إعدادات المصدر في مشغلك وابحث عن حقلين مميزين. ينتهي رابط M3U بـ .m3u أو .m3u8 أو يحتوي على type=m3u_plus. ينتهي رابط XMLTV عادةً بـ .xml أو .xml.gz أو يحتوي على xmltv.php. إذا تم ملء حقل واحد فقط، فهذه هي مشكلتك. يعرض معظم المزودين على غرار Xtream الـ XMLTV على نفس اسم المضيف مثل قائمة التشغيل؛ المسار عادة هو /xmltv.php?username=…&password=… مع نفس بيانات الاعتماد.

2. تأكد من أن الرابط يرجع XMLTV بالفعل

الصق الرابط في المتصفح. يجب أن ترى XML — نص يبدأ بـ <?xml أو <tv> ومليء بعلامات <channel> و <programme>. إذا رأيت صفحة HTML بدلاً من ذلك، فهذا يعني أن مزودك قد قام بإعادة توجيهك إلى تسجيل دخول أو بوابة مقيدة، ويحصل مشغلك على نفس الاستجابة. الحل من جانب المزود: يحتاج الرابط إلى بيانات اعتماد مختلفة أو رمز جديد.

إذا رأيت XML ولكنه صغير جداً — أقل من بضعة كيلوبايتات — فقد أرجع مزودك مستنداً فارغاً. هذه مشكلتهم أيضاً؛ معظم ملفات XMLTV لبضعة آلاف من القنوات يتراوح حجمها من 5 إلى 50 ميغابايت.

3. تحقق من بنية الملف

هنا تظهر قيمة مدقق EPG. الصق الرابط في المدقق وانظر إلى الأرقام الأربعة في الأعلى:

  • القنوات (Channels). يجب أن تتطابق تقريباً مع عدد القنوات في M3U الخاص بك. إذا كانت عُشر ذلك، فإن الملف ليس الدليل الكامل لمزودك.
  • البرامج (Programmes). يجب أن تكون بالآلاف. الدليل الذي يحتوي على أقل من 100 برنامج إجمالاً لن يعرض أي شيء مفيد.
  • تغطية الـ 24 ساعة القادمة (Covering next 24h). الرقم الأهم على الإطلاق. إذا كان صفراً، فإن دليلك قديم — يتم تحليل الملف، لكن كل إدخال فيه يكون في الماضي. ليس لدى المشغل أي شيء لعرضه.
  • إجمالي الساعات (Hours total). الدليل السليم يغطي 24–168 ساعة من الآن. أقل من 24 يعني أن الدليل سينفد اليوم.

4. انظر إلى لوحة المشاكل

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

برامج يتيمة (Orphan programmes). تشير البرامج إلى معرفات قنوات غير مصرح عنها كـ <channel> في نفس الملف. تقوم المشغلات الصارمة (معظم المشغلات الحديثة على Android TV) بإسقاط هذه البرامج عند الاستيراد — البرنامج ليس له قناة ليرتبط بها، لذلك يختفي. إذا كان مزودك يشحن بضع مئات من البرامج اليتيمة، فهذا أمر طبيعي وغير ضار. أما إذا كانوا يشحنون عشرات الآلاف منها، فهذا هو سبب خلو أقسام ضخمة من دليلك.

قنوات مكررة (Duplicate channels). يظهر نفس معرف القناة في <channel> أكثر من مرة. تحتفظ معظم المحللات بالإعلان الأول وتسقط الباقي بصمت. إذا كان للقناة التي تم إسقاطها اسم عرض مختلف، فإن القناة تظهر في الدليل ولكن بالتسمية الخاطئة.

لا توجد تغطية للمحتوى الذي يعرض الآن (No now-playing coverage). التحقق الرئيسي للمدقق: هل هناك أي قنوات تعرض برنامجاً الآن؟ إذا كان الجواب صفراً، فسيظهر الدليل فارغاً تماماً في أي مشغل يعمل بشكل جيد حتى لو كان ملف XMLTV صالحاً تقنياً. الدليل قديم. يجب على المزود التحديث.

5. تحقق من تطابق معرف القناة

هذا الأمر يوقع الجميع تقريباً في الخطأ. يجب أن تتطابق قيمة <channel id="…"> الخاصة بـ XMLTV مع tvg-id="…" الموجود في M3U الخاص بك تماماً. حساسة لحالة الأحرف، ولا توجد مطابقة تقريبية (fuzzy matching). إذا كان M3U الخاص بك يقول tvg-id="bbc1" بينما يقول XMLTV الخاص بك <channel id="BBC1">، فلن يكون لدى المشغل أي طريقة لربطهما، وتعرض القناة خلية دليل فارغة.

للتحقق، افتح ملف M3U في محرر نصوص وانظر إلى أي قيمة tvg-id. ثم تحقق من نفس القناة في جدول "أهم القنوات" (Top channels) في المدقق. يجب أن تكون المعرفات متطابقة بايت مقابل بايت. إذا لم تكن كذلك، فلديك ثلاثة خيارات:

  1. ابحث عن ملف تعيين tvg-id من مزودك (بعضهم ينشرها).
  2. قم بتعديل ملف M3U الخاص بك يدوياً لمطابقة المعرفات في EPG.
  3. انتقل إلى مشغل يقوم بالمطابقة التقريبية بواسطة اسم العرض. يقوم Klipa بذلك — لكن معظمها لا يفعل ذلك.

6. تحقق من المنطقة الزمنية

تستخدم مواصفات XMLTV الطوابع الزمنية YYYYMMDDHHMMSS +ZZZZ. بعض المزودين يحذفون الإزاحة، ويتركون طوابع زمنية عارية بدون منطقة زمنية. تعاملها المحللات الصارمة على أنها التوقيت العالمي المنسق (UTC)؛ بينما تخمنها المحللات المتساهلة بناءً على لغة النظام؛ وكلاهما يكون خاطئاً في بعض الأحيان، وتكون النتيجة دليلاً مزاحاً لعدة ساعات — تظهر البرامج في الخانة الزمنية الخاطئة، أو تظهر برامج الليلة الماضية كبرامج اليوم.

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

عندما يفشل كل شيء آخر

إذا كنت قد تحققت من الستة جميعاً وكان الدليل لا يزال لا يعمل، فإن الفشل في المشغل نفسه. تقوم معظم مشغلات IPTV الحديثة بتخزين EPG بشكل قوي — أحياناً لعدة ساعات بعد التحديث. قم بفرض مسح ذاكرة التخزين المؤقت لـ EPG، أو قم بإلغاء التثبيت وإعادة التثبيت لفرض استيراد نظيف.

لا يقوم Klipa بتخزين EPG القديم: فهو يعيد الجلب كل ست ساعات بشكل افتراضي، ويمكنك التحديث يدوياً من الإعدادات. إذا كنت تريد مشغلاً يتعامل بالفعل مع جميع أوضاع الفشل الستة هذه بشكل صحيح دون أي تدخل، فهذه هي الفكرة.