# Errors Reference
When a playback error occurs, the player delivers a onError(errorCode: String, errorMessage: String) callback via PlayerFragmentListener. Ad-related errors are delivered separately via onAdsError(errorMessage: String?).
# Receiving errors
private var mFragmentListener = object : PlayerFragmentListener {
override fun onError(errorCode: String, errorMessage: String) {
Log.e("Player", "Error $errorCode: $errorMessage")
// Handle the error based on errorCode
}
override fun onAdsError(errorMessage: String?) {
Log.e("Player", "Ads error: $errorMessage")
// Normally, ad errors do not stop main video playback
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# Error categories
Most errors are propagated from ExoPlayer:
| Category | Description |
|---|---|
| Source error | Unable to load or parse the manifest (wrong URL, server 4xx/5xx) |
| Network error | Network connection failed |
| Decoder error | Device cannot decode the video/audio format |
| DRM error | Failed to obtain DRM license (license server error, invalid certificate, etc.) |
| Renderer error | Failure while rendering the video |
| Unexpected error | Uncategorized error |
Note
For ExoPlayer error code details, see ExoPlayer Error Codes (opens new window).
# Suggested handling
- Source / Network error: show a user-friendly message and allow retry
- Decoder error: check the video codec — some devices do not support HEVC/H.265 or higher resolutions
- DRM error: verify
withDrmLicenseUrl(...)andwithDrmLicenseRequestHeaders(...)onByteArkPlayerItem, plus the license-server response - Ads error: typically does not stop main video playback; log for analysis