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.
| Code | Name | Category | Retryable | Meaning |
|---|---|---|---|---|
| 2000 | NETWORK_CONNECTION_FAILED | Network | yes | Could not reach the server (offline, DNS, TLS). |
| 2001 | NETWORK_TIMEOUT | Network | yes | The request timed out. |
| 2002 | NETWORK_HTTP_STATUS | Network | 5xx yes | HTTP error status; 2000 + status when known (e.g. 2404). |
| 3000 | SOURCE_MALFORMED | Source | no | The manifest/container could not be parsed. |
| 3001 | SOURCE_UNSUPPORTED | Source | no | The 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). |
| 3002 | SOURCE_NOT_FOUND | Source | no | The stream URL does not exist. |
| 4000 | DRM_LICENSE_FAILED | DRM | no | The license request failed. |
| 4001 | DRM_LICENSE_HTTP_STATUS | DRM | 5xx yes | License-server HTTP error; 4000 + status when known. |
| 4002 | DRM_TOKEN_FETCH_FAILED | DRM | yes | Your tokenProvider threw or timed out. |
| 4003 | DRM_PROVISIONING_FAILED | DRM | yes | Device provisioning failed (on iOS this includes a failed FairPlay certificate fetch). |
| 4004 | DRM_SESSION_EXPIRED | DRM | yes | The license expired and could not renew. |
| 4005 | DRM_UNSUPPORTED | DRM | no | No usable DRM system on this device/browser. |
| 4006 | DRM_OFFLINE_LICENSE_EXPIRED | DRM | yes | A downloaded item’s persistent license expired — renew it while online. |
| 5000 | DECODER_INIT_FAILED | Renderer | no | Codec initialisation failed. |
| 5001 | DECODING_FAILED | Renderer | no | Decoding failed mid-stream. |
| 5002 | AUDIO_OUTPUT_FAILED | Renderer | no | The audio pipeline failed. |
| 6000 | BEHIND_LIVE_WINDOW | Live | yes | Playback fell behind the DVR window (the SDK first retries at the live edge). |
| 7100 | DOWNLOAD_FAILED | Download | yes | An offline download failed — resume to retry. |
| 7101 | DOWNLOAD_STORAGE_FULL | Download | no | The device ran out of storage mid-download. |
| 7102 | DOWNLOAD_LICENSE_FETCH_FAILED | Download | yes | The persistent offline license could not be fetched during the download. |
| 9000 | UNKNOWN | Unknown | no | Anything unmapped — carries the platform cause. |
Custom error messages
Section titled “Custom error messages”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.
// AndroidOGUiConfig.Builder() .setErrorMessageProvider { error -> myStrings.forErrorCode(error.code) // e.g. "Oeps! … (code 2404)" } .build()// iOSvar config = OGUIConfig()config.errorMessageProvider = { error in myStrings.forErrorCode(error.code)}// Webel.config = { errorMessageProvider: (error) => myStrings.forErrorCode(error.code),};