# 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

# 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(...) and withDrmLicenseRequestHeaders(...) on ByteArkPlayerItem, plus the license-server response
  • Ads error: typically does not stop main video playback; log for analysis