Skip to content

Error codes

Every playback error surfaces as an OGPlayerError with a stable numeric code that is identical across Android, iOS, web, smart TVs, React Native and Flutter. Build your error UX (logging, retry policies, user-facing copy in any language) against this table once. The four offline-download codes (4006 and 7100–7102) exist only where downloads do — Android, iOS and React Native.

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. Web: also a DASH item on a page whose DASH engine is not loaded (add ogplayer.dash.global.js next to a <script> bundle).
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 (on iOS this includes a failed FairPlay certificate fetch).
4004DRM_SESSION_EXPIREDDRMyesThe license expired and could not renew.
4005DRM_UNSUPPORTEDDRMnoNo usable DRM system on this device/browser.
4006DRM_OFFLINE_LICENSE_EXPIREDDRMyesA downloaded item’s persistent license expired — renew it while online.
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).
7100DOWNLOAD_FAILEDDownloadyesAn offline download failed — resume to retry.
7101DOWNLOAD_STORAGE_FULLDownloadnoThe device ran out of storage mid-download.
7102DOWNLOAD_LICENSE_FETCH_FAILEDDownloadyesThe persistent offline license could not be fetched during the download.
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),
};