Skip to content

Error codes

Every playback error surfaces as an OGPlayerError with a stable numeric code that is identical across Android, iOS and web. Build your error UX (logging, retry policies, user-facing copy in any language) against this table once.

CodeNameCategoryRetryableMeaning
2000NETWORK_CONNECTION_FAILEDNetworkyesCould not reach the server (offline, DNS, TLS).
2001NETWORK_TIMEOUTNetworkyesThe request timed out.
2002NETWORK_HTTP_STATUSNetwork5xx yesHTTP error status; 2000 + status when known (e.g. 2404).
3000SOURCE_MALFORMEDSourcenoThe manifest/container could not be parsed.
3001SOURCE_UNSUPPORTEDSourcenoThe stream format is not supported on this device.
3002SOURCE_NOT_FOUNDSourcenoThe stream URL does not exist.
4000DRM_LICENSE_FAILEDDRMnoThe license request failed.
4001DRM_LICENSE_HTTP_STATUSDRM5xx yesLicense-server HTTP error; 4000 + status when known.
4002DRM_TOKEN_FETCH_FAILEDDRMyesYour tokenProvider threw or timed out.
4003DRM_PROVISIONING_FAILEDDRMyesDevice provisioning failed.
4004DRM_SESSION_EXPIREDDRMyesThe license expired and could not renew.
4005DRM_UNSUPPORTEDDRMnoNo usable DRM system on this device/browser.
5000DECODER_INIT_FAILEDRenderernoCodec initialisation failed.
5001DECODING_FAILEDRenderernoDecoding failed mid-stream.
5002AUDIO_OUTPUT_FAILEDRenderernoThe audio pipeline failed.
6000BEHIND_LIVE_WINDOWLiveyesPlayback fell behind the DVR window (the SDK first retries at the live edge).
9000UNKNOWNUnknownnoAnything unmapped — carries the platform cause.

The player’s error overlay is yours: give the UI config an errorMessageProvider and return your own copy — any language — for any code. Returning nothing falls back to the SDK default. The raw error still reaches onError unchanged.

// Android
OGUiConfig.Builder()
.setErrorMessageProvider { error ->
myStrings.forErrorCode(error.code) // e.g. "Oeps! … (code 2404)"
}
.build()
// iOS
var config = OGUIConfig()
config.errorMessageProvider = { error in
myStrings.forErrorCode(error.code)
}
// Web
el.config = {
errorMessageProvider: (error) => myStrings.forErrorCode(error.code),
};