# Errors Reference

เมื่อเกิด Error ในการเล่นวิดีโอ Player จะส่ง Callback onError(errorCode: String, errorMessage: String) ผ่าน PlayerFragmentListener ส่วน Error ที่เกิดจากระบบโฆษณาจะใช้ onAdsError(errorMessage: String?)

# ตัวอย่างการรับ Error

private var mFragmentListener = object : PlayerFragmentListener {
  override fun onError(errorCode: String, errorMessage: String) {
    Log.e("Player", "Error $errorCode: $errorMessage")
    // จัดการ error ตาม errorCode
  }
  override fun onAdsError(errorMessage: String?) {
    Log.e("Player", "Ads error: $errorMessage")
    // ปกติ Ads error จะไม่หยุดการเล่นวิดีโอหลัก
  }
  // ... callback อื่นๆ
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# ประเภทของ Error

Error ที่ส่งผ่าน onError ส่วนใหญ่มาจาก ExoPlayer ซึ่งสามารถจำแนกได้ดังนี้

ประเภท คำอธิบาย
Source error ไม่สามารถโหลด/อ่าน Manifest ของวิดีโอได้ (เช่น URL ผิด, เซิร์ฟเวอร์ตอบกลับ 4xx/5xx)
Network error ไม่สามารถเชื่อมต่อเครือข่ายได้
Decoder error อุปกรณ์ไม่สามารถถอดรหัสวิดีโอ/เสียงในรูปแบบที่ได้รับ
DRM error ไม่สามารถขอ License ของ DRM ได้ (license server ตอบกลับ Error, certificate ไม่ถูกต้อง, ฯลฯ)
Renderer error เกิดข้อผิดพลาดในการแสดงผลวิดีโอ
Unexpected error Error ที่ไม่สามารถระบุประเภทได้

Note

สำหรับรายละเอียดของ Error code ของ ExoPlayer สามารถดูได้ที่ ExoPlayer Error Codes (opens new window)

# แนวทางการจัดการ Error

  • Source / Network error: แนะนำให้แสดงข้อความ Error ที่ผู้ชมเข้าใจได้ และเปิดทางให้ลองเล่นใหม่
  • Decoder error: ตรวจสอบ Codec ของวิดีโอ — บางอุปกรณ์อาจไม่รองรับ HEVC/H.265 หรือความละเอียดสูง
  • DRM error: ตรวจสอบ withDrmLicenseUrl(...) และ withDrmLicenseRequestHeaders(...) ของ ByteArkPlayerItem รวมถึง response ของ License server
  • Ads error: โดยปกติ Ads error จะไม่ทำให้วิดีโอหลักหยุด แนะนำให้ Log error ไว้สำหรับวิเคราะห์