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.

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.

Playback Error Code

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 timed-out.
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 Timed-Out.
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 timed-out.
DRM_LICENSE_EXPIRED0x4002070x207Indicates that Loaded DRM Keys are expired.
MEDIA_PLAYBACK_FAILURE0x4002080x208Indicates that rendering of media failed.
MEDIA_PLAYBACK_STALE0x4002090x209Indicates Player playback has stalled.
DRM_KEY_REDUNDANT_REQUEST0x40020A0x20AIndicates the prefetch key already requested.
DRM_KEY_FETCH_INTERRUPTED0x40020B0x20BIndicate the license fetcher delegate not set.
SHARE_PLAY_ACTIVATION_FAILURE0x40020C0x20CIndicates SharePlay activation has failed.
PLAYBACK_NOT_ALLOWED_ON_INSECURE_DEVICE0x4002110x211Indicates the playback is not allowed due to device security thread.
PLAYBACK_NOT_SUPPORTED_ON_EXTERNAL_DISPLAY0x4002120x212Indicates the playback not supported on external display.
AIRPLAY_RECEIVER_TEMPORARILY_NOT_AVAILABLE0x4002130x213Indicates airplay receiver temporarily unavailable
MEDIA_SERVICES_WERE_RESET0x4002140x214Indicates that a daemon has crashed.

Downlaod Error Code

Error CodeHexadecimal valueComponent Error CodeDescription
DOWNLOAD_FAILURE0x8003010x301Indicates that an error has occured while downloading.
DOWNLOAD_TASK_NOT_FOUND0x8003020x302Indicates download task does not exists!
RETRY_FAILURE0x8003030x303Indicates the creating download task retry has failed.
DRM_PERSISTENCE_FETCH_NOT_POSSIBLE0x8003040x304Indicates successive key fetch within same session not possible due to limitations with ContentKeySession.
DOWNLOAD_TASK_METADATA_NOT_FOUND0x8003050x305Indicates that the task doesn't contain the necessary metadata to retry the download.

FLError 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.

public protocol FLError: Error {
/// The error code representing the error.
/// This code should be interpreted as combination of component and category error codes.
var errorCode: Int { get }
/// The description of the error.
var errorDescription: String { get }
/// The internal error if any.
var internalError: FLError? { get }
/// The contextual description of the error.
var contextualDescription: String? { get }
/// A computed property that returns the component error code
/// removing all CATEGORY MASK.
var componentErrorCode: Int { get }
}

Handling Player Error

Player errors could be observed through PlayerDelegate callback playerDidFail(with error:). The delegate callback provides FLError object which could be inspected for the cause and appropriate actions could be perform on the application eg. show alert or retry playback.

Playback failures caused by http status code network errors could be read as error.httpStatusCode.

The following section shows how to handle HTTP status code failures featuring http status codes 403 and 471.

Read HTTP Status Code Errors

// Callback from the player for Playback errors
func playerDidFail(with error: FLError) {
// Read error code
let errorCode = error.errorCode
// Read hex error code
let hexErrorCode = error.hexErrorCode

// Read httpStatusCode
if let statusCode = error.httpStatusCode {
switch statusCode {
case 403:
// Handle 403
case 471:
// Handle 471
default:
// Other network status codes
}
}
}
note

Application may be required to perform retry for certain error codes which could take the form error.code or error.httpStatusCode. We recommend to use the above code snippet to read error codes and perform retry playbacks as appropriate.