Skip to main content

Error Codes

info

The library follows hexadecimal error system. The least significant 16-bits (Bits 0-15) indicate a Component Error Code and the most significant 16-bits (Bits 16-31) indicate the Categories that the error falls into.

Categories

Error CategoryMaskDescription
Network Error0x10000Indicates that the error occurrence is network. related
Server Error0x20000Indicates a server response failure.
Thirdparty Error0x40000Indicates a failure in thirdparty components such as External Player, Thirdparty Libraries etc.,
Reserved0x80000Reserved for future use.
Reserved0x100000Reserved for future use.
Reserved0x200000Reserved for future use.
Playback Error0x400000Indicates that the error occurrence is during a Playback.
Download Error0x800000Indicates that the error occurrence is during a Download.
Interpretation of Errors
  • 0x40* - Playback Error most probably due to player itself.
  • 0x41* - Playback error due to Network failure.
  • 0x42* - Playback error due to Server response failure.
  • 0x80* - Download error most probably due to the downloader itself.
  • 0x81* - Download error due to Network failure.
  • 0x82* - Download error due to Server response failure.

Specific Error Codes

Error CodeHexadecimal valueComponent Error CodeDescription
MEDIA_SOURCE_FAILURE0x4002010x201Indicates that an error has occurred while loading the MediaSource.
MEDIA_SOURCE_TIMEOUT0x4002020x202Indicates that Fetching of the Media Source from network timeout.
DRM_PROVISIONING_FAILURE0x4002030x203Indicates that an error has occurred while Provisioning Model Certificates on the specific device.
DRM_PROVISIONING_TIMEOUT0x4002040x204Indicates that Fetching of DRM Provisioning Data from Network timeout.
DRM_LICENSE_FAILURE0x4002050x205Indicates that an error has occurred while Loading DRM Keys for a particular content either from network (or) persistent storage.
DRM_LICENSE_TIMEOUT0x4002060x206Indicates that Fetching of DRM Keys from network timeout.
DRM_LICENSE_EXPIRED0x4002070x207Indicates that Loaded DRM Keys are expired.
MEDIA_PLAYBACK_FAILURE0x4002080x208Indicates that rendering of media failed.
MEDIA_PLAYBACK_STALE0x4002090x209Indicates Player playback has stalled.
OUT_OF_MEMORY_ERROR0x40020A0x20AIndicates that Player is Out Of Memory and is unable to allocate Resources.
DEVICE_FAILURE0x40020B0x20BIndicates that Device failed to handle the Media Content.
EXTERNAL_ABORT0x40020C0x20CIndicates that Playback was aborted by external sources because of Application specific Policy Restrictions.
INVALID_LIVE_MEDIA_SEGMENT0x40020D0x20DIndicates that Playback failed because of BehindLiveWindowException i.e. the playback is behind the allowed live window.
NETWORK_CONNECTION_FAILURE0x40020E0x20EIndicates that an error has occurred due to inactive network connection.
NETWORK_END_POINT_UNREACHABLE0x40020F0x20FIndicates that an error has occurred because of URL's domain is misspelled or does not exist, a socket timeout, the target host is unreachable or the server unexpectedly closes the connection even with active network connection.
PLAYBACK_BUFFER_TIMEOUT0x4002150x215Indicated that Buffering timeout has occurred.

Error Object

The Error object returned by the library is a linked list that traces the error occurrence from an higer-level component, to the lower-level component where the error actually occurred.

Example

The Player component can talk to an internal component that in turn talks to head-end server. If the server returns an error-ful response, the Error object returned from the player component might have internalError property set to the error thrown by the internal component which might actually be a server error information.

The more deeper we go in the linked list , the more specific the Error would be. It's upto the application developers to utilize the depth of Error information as they desire.

interface Error {
/**
* Unique Error Code with all Category Masking Set.
*/
val errorCode: Int
/**
* Error message describing the Error.
*/
val errorMessage: String
/**
* The internal root-cause of the Error if any.
*/
val internalError: Error?
/**
* The internal Contextual description of the Error if any.
* This is usually set if the error is from a third-party source.
*/
val contextDescription: String?
/**
* A Computed property that returns the component error code
* removing all CATEGORY MASK.
*/
val componentErrorCode: Int
}

Player Restart

We recommend configuring the player to restart automatically on encountering error PlayerErrorCodes.PLAYBACK_BUFFER_TIMEOUT to improve playback reliability.

 fun playerError(error: Error) {
val errorCode = error.errorCode
val hexErrorCode = error.hexErrorCode()
if (error.hexErrorCode() == PlayerErrorCodes.PLAYBACK_BUFFER_TIMEOUT.toString()) {
// Re-prepare the player (re-authorize and create a new player instance).
}
}