NCam error ECM 28: causes and solutions in OScam/CCcam
If the status 28 appears in the NCam logs and the channel goes to a black screen — this is not a receiver glitch and not a reason to reflash the hardware. ECM 28 means strictly one thing: the control word request was sent, but a valid response did not return in the allotted time. It is important to understand this right away because most "advice" on the internet boils down to "increase the timeout" — and this is the worst thing you can do. Here we will break down NCam: ECM 28 solution step by step: from reading the log line to editing configs and choosing a normal key source.
What does ECM 28 mean in NCam and why it is not a bug of the receiver
ECM 28 is an internal status of NCam indicating a timeout when receiving CW (control word). NCam sent an ECM request to the reader or remote server, but either the response came later than the set limit, or it came invalid and did not pass the check. The channel is not decoded, the screen is black.
Important: this is a problem at the intersection of NCam and the key source. The receiver itself is not involved at all — it simply does not receive the CW, which has no one to give it to.
Decoding status 28: ECM sent, but valid response not received in time
In the NCam protocol, the status of the ECM request is encoded as a number. 28 (or in hex 0x1C) meansE_NOTFOUND with a timeout indication — that is, the request was formed and sent, the reader accepted it (or was supposed to accept it), but the CW in the response either did not come or came invalid. Do not confuse this with a situation where the reader did not respond to the connection at all.
How to read the log line: CAID, provider ID, PID, response time
Here is a typical NCam log line that signals a problem:
2026/03/15 21:43:07 7F2A ECM caid 0500 prov 042800 pid 0041 srvid 05A0 -- 28 (650 ms) by reader01
Breaking down the fields:
- caid 0500 — conditional access system identifier (here Viaccess)
- prov 042800 — provider ID of the specific package
- pid 0041 — PID of the stream in the transponder
- srvid 05A0 — service/channel ID
- 28 — status: timeout/no valid CW
- 650 ms — actual waiting time until timeout
- reader01 — which reader processed the request
A time of 650 ms with a limit of, say, 5000 ms — means the reader responded, but the CW turned out to be incorrect. If you see a value equal to your ctimeout (for example exactly 5000 ms) — there was no response at all.
How ECM 28 differs from 'card not found' and 'no matching reader'
card not found — NCam did not find a reader that claimed support for this CAID at all. Routing did not occur even at the level of reader selection.
no matching reader — there are readers, but none match by CAID/ident/group. The ECM did not go anywhere.
ECM 28 is a fundamentally different situation: a reader was selected, the request was sent, but there is no working CW at the output. This is already a problem either with the reader/source itself, or with the network between them, or with the timeout configuration.
Main causes of ECM 28 and quick diagnostics
Before changing anything in the configs — enable detailed logging. In/etc/tuxbox/config/ncam/ncam.conf set up:
[global]
Then watch the log in real time:tail -f /tmp/ncam.log | grep "ECM\|28". Already from the pattern of 28-errors, much becomes clear.
| Symptom in the log | Probable cause |
|---|---|
| 28 exactly every N ms (= ctimeout) | The reader does not respond at all, the network or server is down |
| 28 with a time less than ctimeout | CW arrived, but invalid (desynchronization, overload) |
| 28 only on one CAID/provider | Mismatch caid/ident or the source does not hold this packet |
| 28 periodically, the rest is okay | Peak load on the source or unstable network |
| 28 only in the evening 19:00–23:00 | Source overload during prime time |
| 28 after key changes on the channel | A restart of the reader is needed, the source has not yet synchronized |
| 28 only over Wi-Fi | Unstable ping, disappears on cable |
| 28 via VPN | Additional VPN delay exceeds rtimeout |
Timeout: the response comes later than the limit in ncam.conf
The most common reason. If your ping to the source is 80 ms, and CW is processed on the server for another 200–300 ms — a total of 380+ ms. With ctimeout=300 this is a guaranteed 28. But raising ctimeout to 10,000 ms is a bad idea, more on that below.
Mismatch CAID/provider — ECM goes to the wrong reader
NCam builds ECM routes by CAID and ident (provider ID). If in the block[reader] an incorrect ident is specified or it is not specified at all — the request will either go to an unsuitable reader or not go anywhere. Result: 28 orno matching reader.
The server responded, but CW is incorrect
This happens during source overload or desynchronization: the server gives CW, but by the time of delivery it is already outdated. Especially noticeable on channels with frequent CW changes (interval 3–5 seconds instead of the standard 10). In the log, you will see 28 with a response time less than ctimeout.
Network losses and high ping
Check simply:ping -c 20 [source_address]. If you see packet loss or jitter under 50 ms — this is your reason. The problem is exacerbated over Wi-Fi, especially in an apartment building. Cable eliminates this instantly.
Incorrect connection protocol
CCcam and newcamd are different protocols with different ports. If the source expects a connection via newcamd on port 15000, and you connect as CCcam on 12000 — the connection may be established, but ECM requests will be ignored or return garbage. Always clarify with the source: protocol, port, key format.
Step-by-step solution: editing the configs of NCam and OScam/CCcam
NCam configs are located in/etc/tuxbox/config/ncam/ or/var/tuxbox/config/ncam/ — it depends on the firmware. Key files:ncam.conf,ncam.server,oscam.dvbapi. If you are using OScam on the client side — the equivalents:/etc/oscam/oscam.conf,/etc/oscam/oscam.server.
Increasing the timeout: parameters ctimeout, rtimeout, lb_reopen_seconds
Reasonable values for a normal source with a ping of up to 100 ms:
[global]
ctimeout — maximum waiting time for CW in milliseconds. 5000 ms is a working benchmark for most configurations.rtimeout in the[reader] block can be set individually: take the average ping to the source, multiply by 3, and add 500 ms of buffer.
lb_reopen_seconds = 120 — how many seconds the load balancer will try the "bad" reader again. A value that is too small creates unnecessary attempts on a non-working source.
Checking and fixing the [reader] block
Example of a correct block for newcamd connection inncam.server:
[reader]
Critical fields:caid — must match what your channel is broadcasting.ident — provider ID in the formatCAID:PROVIDERID. These values are taken from the NCam log (fieldprov) or from databases of the typedvbapi. If the ident is not specified, NCam will send ECM to all readers with the required CAID, which is inefficient.
For the CCcam protocol, the block looks different:
[reader]
Configuring ECM routing and reader priority (lb_mode)
For diagnosing ECM 28, first disable the load balancer:
[global]
With LB disabled, NCam will use readers in the order they are listed inncam.server. This way, you can immediately see which reader is giving 28 — check the fieldby readerXX in the log. After diagnosis, you can returnlb_mode = 1 (round-robin) orlb_mode = 5 (by response time).
If several readers support the same CAID, LB will choose the fastest one. But if a "slow" reader consistently gets into the rotation under peak load, it will give 28. Uselb_weight to manage priority.
Correct ports and protocol
De facto standards used by most servers:
- newcamd: ports 15000–15010
- CCcam: 12000 (standard) or 12001–12010
- cs378x (Camd 3.5x): 15001 or custom
- radegast: 8000
The cs378x protocol is sometimes preferable to newcamd for specific CAIDs — it puts less load on the server's CPU and is faster with a stable network.
Checking caid/ident in oscam.dvbapi
The fileoscam.dvbapi controls which ECM requests NCam will generate at all. If it contains an incorrect CAID or does not include the required package, requests will either not be formed or go to the wrong place.
P: 0500:042800
Check: CAID and provider ID indvbapi must match what you see in the NCam log in lines 28. Restart after making changes:systemctl restart ncam or/etc/init.d/ncam restart, thentail -f /tmp/ncam.log.
What does not help with ECM 28 (typical mistakes)
I want to say right away: most of the things people do first are useless. Or even make it worse.
Endless increase of the timeout instead of searching for the cause
ctimeout = 30000 — this is not a solution, it's a disguise. Yes, the channels will stop "disappearing" immediately. But instead, you will get freezes of 10–15 seconds because the decoder is waiting for a CW that will not come anyway. Users complain about the "freezing" of the picture — this is your huge timeout in action.
A normal working ctimeout for a source with a ping of up to 50 ms is 3000–5000 ms. For sources via VPN or with a ping of 150+ ms — up to 7000 ms. More is not needed.
Blindly copying someone else's ncam.server
The internet is full of "working configs." The problem is thatdevice,user,password,key — these are the credentials of a specific user for a specific source. Even if you take the config of a person with the same receiver — you have a different account, a different IP, possibly a different CAID list.
Moreover,caid andident depend on what channels you are watching. In someone else's config, there are STRANGE channels listed.
Changing the receiver firmware
I've seen this many times: a person tries Enigma2, then OpenPLi, then OpenATV — ECM 28 remains everywhere. Of course. The firmware of the receiver does not affect how the remote server processes ECM requests. NCam is the same everywhere, the key source is the same, the network is the same.
Restarting the receiver as a universal solution
Helps in exactly one case: if the NCam process itself is stuck or memory has leaked. In other cases, you restart, NCam comes up, connects to the same non-working source — and you get the same 28. The only thing that sometimes makes sense is to restart NCam itself with the command/etc/init.d/ncam restart, not the entire receiver.
A separate case — 28 after changing keys on the channel (key change). Here, restarting the reader really helps:ncam -r readerlabel or through the NCam web interface. The key source may not have distributed new CW to all clients yet.
How to choose a stable key source so that ECM 28 does not repeat
NCam: ECM 28 solution at the config level works only if you have a normal source. If the source is overloaded or unstable — no timeouts will help. So choosing a source is half the battle.
Criteria: low ping, stable ECM response time
Look in the NCam logs for the average response time for your reader. Lines with successful ECM (statusfound) contain the time in ms. A normal source gives 100–350 ms consistently. If you see a range from 80 to 2000 ms — the source is unstable or overloaded.
Ping — a necessary but insufficient condition. Ping 20 ms, and ECM 800 ms — means there is a problem on the server side (weak hardware, many clients). Ping 80 ms and ECM 250 ms — this is normal.
Support for the required CAID/provider without reconnections
Before binding to a source — check that it actually supports your CAID and specific provider ID. Look in the NCam logs: upon successful connection, NCam writes a list of supported CAIDs from the reader. If yours is not there — the source is not suitable for you, no matter how much it costs.
Frequent reconnects in the log (connection lost,reconnecting) — a red flag. A normal source maintains the connection for hours without interruptions.
Transparent limits on the number of ECMs and channels
Each source has limitations: how many ECMs per second, how many simultaneous connections, how many channels in parallel. If these limits are not disclosed — you will not know why you periodically receive 28 during prime time (the answer: you are being cut off by the rate limiter).
Trial period to check on your channels
The only honest way to test a source is to run it on your real channels for at least 48–72 hours. Including prime time (19:00–23:00), when the load is maximum. Look in the NCam logs for the percentage of 28 from the total number of ECM requests. An acceptable level is less than 1–2%. Anything above that — the source is struggling.
For self-calculation:grep "reader01" /tmp/ncam.log | grep -c " 28 " andgrep "reader01" /tmp/ncam.log | grep -c "found". Divide the first by the sum — you will get the share of unsuccessful ECMs.
Here is the complete picture of NCam: ECM 28 solution — from log diagnostics to source selection.
ECM 28 appears only on one channel — what’s the matter?
Most likely a mismatch of CAID or provider ID specifically for this package. Check the log for whichprov the problematic channel has, and compare it with what is specified in the[reader] block in theident field. Also checkoscam.dvbapi — it should have the required CAID:PROVIDERID. The second option: the source physically does not support this specific package — then no config changes will help.
What ctimeout/rtimeout should I set in NCam to eliminate ECM 28?
Guideline:ctimeout = 5000 ms in[global]. Forrtimeout in the[reader] block, take the average ping to the source, multiply by 3 and add 500 ms. For example, ping 80 ms → rtimeout = 740 ms, round to 1000–1500 ms. Do not set values above 8000–10000 ms — this does not eliminate the problem, but only gives long freezes instead of a quick black screen.
ECM 28 — is it a problem with my receiver or the remote server?
One or two isolated 28s against the backdrop of normal operation — almost always a network spike or temporary delay. Continuous 28s on a specific CAID with normal ping and working connection — a problem with the key source, it does not process this CAID or is overloaded. The receiver's problem is excluded here — the receiver simply transmits the encrypted stream, the keys are obtained by NCam.
How does ECM 28 differ from other ECM status codes in NCam?
Status codes in NCam:found — CW received and valid, decoding is in progress.not found — the source responded, but says that CAID/ident is not supported.empty — response received, but CW is empty.28 — request sent, response did not arrive on time or arrived invalid. The difference is fundamental:not found means that the source is active, but does not hold the channel; 28 means that something broke in the CW delivery chain.
Does disabling the load balancer help with ECM 28?
For diagnostics — definitely yes. LB masks the problem: it switches between readers, and the log does not always show which one gives 28. By settinglb_mode = 0 inncam.conf, you fix the order of readers and clearly see in the fieldby readerXX who is to blame. After diagnostics — return LB and either adjust the config of the problematic reader or lower itslb_weight so that LB addresses it less frequently.
Why does someone else's working ncam.server config give me ECM 28?
Because inncam.server there are parameters that are individual:device (IP and port),user/password,key (for newcamd),caid andident. You have a different account on the source, possibly a different protocol and a different set of channels. Even if you take the config of a person with the same receiver — your credentials and CAID list will be different. Use someone else's config only as a template for structure, substitute all values with your own.
Practical checklist for smooth viewing
Even the best CCCam or OSCam line needs two or three simple preparations. Update your receiver firmware, reset the ECM cache once a week and keep 15–20% free space on the USB stick or internal flash so that the reader can store keys without delays.
When tuning a dish, aim for MER/BER reserve: a two‑degree offset or a loose F‑connector often causes the “freezing” that users blame on cardsharing. Keep a short patch cord to test alternative routers, and save two profiles in OSCam — one for TCP, one for UDP — so you can switch instantly if your ISP starts filtering a protocol.
Utgard.tv monitors each hub 24/7, but you can speed up diagnostics by keeping a short log of your receiver actions. Note the time when you changed the channel, which CAID was active and whether you used Wi‑Fi or Ethernet. This tiny “journal” helps engineers reproduce your environment in the lab and return with a solution in minutes instead of hours.
- Keep two line slots enabled: if the first server hits a maintenance window, the second one instantly takes over without re-entering credentials.
- Run a monthly speed and latency test. Stable 1–2 Mbps with ping <80 ms is enough for SD/HD, but if jitter exceeds 20 ms, switch the router to wired mode.
- Save the Utgard.tv status page and Telegram bot @utgard_tv_bot to bookmarks — they publish maintenance notices before SEMrush or uptime monitors raise alerts.