CCcam Server Channels: Setup, Config & Troubleshooting
If you're staring at a black screen or a frozen picture after getting your CCcam setup running, you're in the right place. Understanding how cccam server channels actually work at the protocol level — not just "add a C-line and hope for the best" — is what separates a reliable setup from a frustrating one. This guide assumes you have CCcam installed, you have at least one C-line or local card configured, and specific channels are either missing, freezing, or refusing to decrypt.
How CCcam Maps Cards to Channels
Here's the thing most guides skip entirely: CCcam has no concept of "channels" in the way your EPG does. It doesn't store a list of "Sky Sports HD, BBC One, Eurosport." What it stores is a set of numeric tuples — CAID, provider ID, and SID — and it matches ECM requests against those tuples. If the tuple matches and the card can decrypt, you get a control word. If not, black screen.
What a 'Channel' Means at the Protocol Level
At the DVB level, every encrypted channel broadcasts an ECM (Entitlement Control Message) packet alongside the video stream. That ECM contains the CAID identifying which CA system encrypted it. Your receiver sends that ECM to CCcam, which routes it to a card that recognises the CAID. The card decrypts it and returns a control word. That control word descrambles the video.
So "channel not working" almost always means the ECM routing failed somewhere — either the CAID wasn't matched, the card didn't have the entitlement, or the response took too long. That's the mental model you need.
CAID, Provider ID, and SID: The Three Identifiers That Matter
These three numbers define channel access in CCcam completely:
- CAID — Conditional Access ID. Identifies the CA vendor. For example, 0x0500 is Viaccess, 0x0600 is Irdeto, 0x1800 is Nagravision. This is the first filter in the routing chain.
- Provider ID — A sub-namespace within the CA system. A single card with CAID 0x0500 might carry provider IDs 032830, 042800, and 040810 — each representing a different operator or bouquet.
- SID — Service ID. The actual channel identifier within a transponder. This is what maps to "that specific channel" in your receiver's channel list.
CCcam routes an ECM request by matching CAID first, then provider ID, then attempting decryption. The SID isn't used for routing — it's the card's subscription tier that determines whether the control word comes back valid for a given SID.
How CCcam Builds Its Internal Channel List from Connected Cards
When CCcam starts up and a card is inserted (or a C-line connects), CCcam reads the card's ATR and performs an initial entitlement check. It builds an internal table of which CAIDs and provider IDs that card responds to. This table is what you see in the web interface on port 16001.
Importantly, CCcam doesn't pre-enumerate every SID a card can decrypt. It only discovers this dynamically when an ECM request comes in. So the web UI shows you CAIDs and providers — not a pre-built channel list. You won't know a specific SID is broken until you try to tune it.
Difference Between a Card's Tier/Package and Raw CAID Access
This catches a lot of people out. A card can present CAID 0x0919 (Nagravision) and have provider ID 000000 visible — but only have a basic subscription tier. Premium channels on that same CAID and provider will return an invalid control word, or no response at all, because the card simply doesn't have the entitlement.
CCcam can't tell you upfront which SIDs are within a card's subscription. It will attempt decryption and log a failure. That's the only way to find out — attempt decryption and read the ECM response in the log.
Configuring CCcam to Share Specific Channels
The main config file lives at /etc/CCcam.cfg on most Linux boxes and Enigma2 receivers. Everything that controls which channels get shared, filtered, or blocked is in here. Let's go through the directives that actually matter.
CCcam.cfg Syntax for Channel and CAID Filtering
The basic structure uses directives in uppercase followed by a colon and the value. Whitespace is flexible. Comments use #. Here's a minimal working example that handles CAID-level control:
# /etc/CCcam.cfg
PORT: 12000
NEWCAMD PORT: 15050 01020304050607080910111213141516
C: peer.example.com 12000 username password
IGNORE CAID: 0500
PROVIDE CAID: 0919 PROVID: 000000
PROVIDE CAID: 0919 PROVID: 000001
SHARE LIMIT: 1
DEBUG: 1
HTTP PORT: 16001The IGNORE CAID: 0500 line tells CCcam to drop any ECM requests or shares involving Viaccess (0500). The PROVIDE CAID lines whitelist specific CAID/provider combinations. If you use both, the IGNORE takes precedence for its listed CAIDs.
Using IGNORE and PROVIDE Directives to Whitelist or Blacklist CAIDs
If you want to allow everything except one CA system, use IGNORE. If you want strict whitelisting, combine IGNORE CAID: ALL with explicit PROVIDE lines. The ALL keyword is a real directive — it instructs CCcam to reject all CAIDs not explicitly provided.
IGNORE CAID: ALL
PROVIDE CAID: 0919 PROVID: 000000
PROVIDE CAID: 0600 PROVID: 000000This locks your server down to only those two CAID/provider combinations. Anything else — including a client requesting Viaccess channels — gets dropped silently. Useful when you're sharing a specific card and don't want to expose unrelated CAIDs from upstream peers.
Restricting Sharing to Specific Provider IDs
Provider ID filtering is more surgical than CAID filtering. You might have a card with CAID 0x0500 and three provider IDs — one for each subscription package. If you only want to share one package, specify only that provider ID in the PROVIDE directive and IGNORE the rest:
IGNORE CAID: 0500
PROVIDE CAID: 0500 PROVID: 032830This exposes only the 032830 provider package under Viaccess while blocking the other provider IDs from that same card. Clean and effective for sharing partial subscriptions.
Setting SHARE LIMIT and Hop Count to Control Channel Propagation
The SHARE LIMIT directive controls how many hops downstream a share can travel. Setting it to 0 means only your local card is shared — no re-sharing of cards you received from upstream peers. Setting it to 1 means you share your local card one hop downstream. Higher values allow more hops.
SHARE LIMIT: 1The RESHARE directive at a user level works differently — it controls whether a specific connected client can further reshare what they receive from you. A value of 0 means no reshare; 1 means they can reshare one hop. This matters if you're seeing your cccam server channels appearing on servers you didn't authorise.
The CCcam.providers and CCcam.channelinfo Files Explained
These two files trip people up because they look functional but aren't. Both are cosmetic only.
/usr/share/CCcam/CCcam.providers maps provider IDs to human-readable operator names. It makes your logs say "Viasat" instead of "042800." It does absolutely nothing to affect which channels decrypt. Same story for /usr/share/CCcam/CCcam.channelinfo — it maps SIDs to channel names for log readability. Useful for debugging, irrelevant for decryption.
The channelinfo format is one entry per line: SID in hex, then the channel name. For example:
1234 BBC One HD
5678 Sky Sports 1Place the file where your CCcam.cfg references it. If it's missing CCcam just falls back to logging raw hex values.
Verifying Which Channels Your Server Can Decrypt
You shouldn't be guessing whether your server can decrypt a channel. CCcam gives you a built-in HTTP interface and log output that tell you exactly what's happening — if you know how to read them.
Reading CCcam's Web Interface (Port 16001) to Inspect Active CAIDs
By default CCcam exposes a web UI on port 16001. Make sure your CCcam.cfg has:
HTTP PORT: 16001Then hit http://<your-receiver-ip>:16001 in a browser. You'll see sections for connected cards, active clients, shares, and ECM history. The cards section is your starting point — it lists each card's CAID, provider ID, hop count, and reshare level.
One important gotcha: if you're running CCcam behind NAT and have port-forwarded 12000 for client connections, port 16001 is separate and needs its own forward rule. Many people forward the CCcam client port but forget the HTTP port, then wonder why they can't see the web UI from outside the LAN.
Interpreting the 'Cards' and 'Shares' Sections in the Web UI
The cards section shows hop=0 for locally inserted physical cards. Hop=1 means the card is one C-line away, hop=2 means two hops, and so on. As hop count increases, latency increases and reliability tends to decrease.
The shares section shows which downstream clients are connected and what they've been accessing. If a client is connected but the share table shows no activity on a specific CAID, either they're not requesting it or your filters are dropping it before it reaches them.
Using CCcam Log Output to Trace a Failed ECM Request
Set DEBUG: 1 in CCcam.cfg for basic ECM tracing. For more verbose output use DEBUG: 3, but expect large log files. A successful ECM response looks like:
ECM 0919/000000/1234 answered in 320ms by card 1A failure looks like one of these:
ECM 0919/000000/1234 - no card found
ECM 0919/000000/1234 - timeout after 3000ms
ECM 0919/000000/1234 - card returned error"No card found" means no card in your pool matches that CAID/provider combo — check your IGNORE/PROVIDE filters. "Timeout" means a card was found but didn't respond in time — latency problem. "Card returned error" usually means the subscription entitlement is missing for that SID.
Cross-Referencing SID Against a DVB Channel Database
If you're not sure what CAID and SID a specific channel uses, you need to look at the raw PMT. The tools dvbsnoop and tzap (part of the dvb-apps package on Linux) let you tune to a transponder and dump the service information.
tzap -c /etc/channels.conf "BBC One HD"
dvbsnoop -s pmt 1234The PMT dump will show the CA descriptor entries including the CAID and the ECM PID. Compare those values against what CCcam shows in the web UI. If the CAID in the PMT isn't in your cards table, that's your problem.
Testing Decryption with a Single Known Channel Before Scaling
Before adding multiple C-lines or complex filter rules, test with one channel you know should work. Pick a channel whose CAID you can verify from the PMT, confirm that CAID appears in the web UI cards table, and attempt to tune it. Get one channel decrypting cleanly, then expand. This isolates config issues from subscription issues.
Common Reasons Channels Are Missing or Not Decrypting
These are the failures I see most often, in rough order of how frequently they actually occur. Each one has a specific diagnostic path.
Card Does Not Have the Subscription Package for That Channel
The CAID matches, the provider ID matches, but the channel is black. The log says "card returned error." This is a subscription tier problem — the card simply doesn't have entitlement for that SID. There's no config fix for this. Either the subscription doesn't include that channel or the EMM updates have lapsed (see below).
CAID Mismatch Between Client Request and Server Card
Some channels broadcast on multiple CAIDs simultaneously (called overcrypt). Your receiver might request the channel using CAID 0x0606 while your card only handles CAID 0x0600. The log will show "no card found" even though you have a card for that channel conceptually. The fix is checking the actual PMT for all CA descriptors and verifying which CAID your card handles. In OScam bridged setups you can configure CAID priority — in pure CCcam you may need to force the client to request a specific CAID.
Provider ID Filtered Out in CCcam.cfg
Check your IGNORE/PROVIDE rules. If you've used IGNORE CAID: ALL and forgot to add a PROVIDE line for a provider ID, that entire package is silently dropped. The log will show no ECM attempt reaching that provider. Cross-reference the provider ID from the web UI against your PROVIDE lines in the config.
Hop Count or Reshare Level Set Too Low
If you added a C-line to a peer and that peer's cards show up in your web UI at hop=1, but your downstream clients can't access them, check your SHARE LIMIT. A SHARE LIMIT of 0 means you only share hop=0 (local) cards — the peer's cards never get reshared to your clients. Set it to 1 to allow one level of resharing:
SHARE LIMIT: 1Also check the RESHARE value assigned to the peer in your C-line configuration. Some builds support per-peer reshare level in the C-line syntax.
EMM Updates Blocked — Card Entitlements Not Refreshed
This one kills setups slowly. If RECEIVE EMM: no is in your config (or absent on some builds that default to disabled), the card stops receiving entitlement update messages from the broadcast. Over time the subscription entitlements expire and channels stop decrypting — often starting with premium packages first.
RECEIVE EMM: yesSet this and restart CCcam. Depending on how long EMM was disabled, it may take several minutes to an hour for the card to receive and process all its entitlement updates. Time-limited entitlements are particularly vulnerable here — a card that was working fine can silently stop decrypting channels mid-session as its stored entitlements expire without renewal.
Network Latency Causing ECM Timeouts on Fast-Zapping Channels
CCcam's default ECM timeout is 3000ms. On a fast-zapping receiver or when switching between channels rapidly, ECM requests need to complete before the timeout or you get a "timeout" error. If your peer connection has 150-200ms round-trip latency and the card processing adds another 200-300ms, you're cutting it close.
You can adjust the timeout in CCcam.cfg:
ECM TIMEOUT: 5000Increasing this gives slow peers more time but can make channel switching feel sluggish. A better fix is reducing actual latency — choose peers geographically closer or on lower-latency connections.
Newcamd or CS378X Protocol Differences When Bridging to OScam
If you're bridging CCcam to OScam via Newcamd protocol (configured with NEWCAMD PORT: 15050 <DES key> in CCcam.cfg), version mismatches or DES key mismatches will cause silent failures on specific CAIDs. OScam's /etc/oscam/oscam.server entry for the CCcam connection needs to match the protocol version exactly:
[reader]
label = cccam_bridge
protocol = cccam
device = 127.0.0.1,12000
user = username
password = password
caid = 0919,0500If certain CAIDs work through the bridge and others don't, check the CAID filtering on both sides. OScam has its own CAID filter per reader that can block CAIDs independently of CCcam's own filters. Also watch for CCcam version mismatches between server and client — older CCcam versions sometimes fail share negotiation for specific CA systems when the protocol handling diverges.
Evaluating a Remote CCcam Peer Connection for Channel Coverage
Getting a C-line from a peer is only the start. The C-line itself tells you almost nothing about what cccam server channels are actually accessible through it.
What a C-Line Tells You — and What It Does Not
A C-line looks like this:
C: hostname.example.com 12000 myuser mypasswordThat's it. Four fields: host, port, username, password. The C-line contains zero information about which CAIDs, provider IDs, or SIDs the peer shares. You find that out only after connecting and inspecting the web UI shares table. Anyone claiming to offer "X channels" in a C-line description is telling you about their card's nominal subscription coverage, not what you'll actually receive — those numbers degrade with hop count, server load, and filter configuration.
How to Test a C-Line Before Committing to It
Add the C-line to your CCcam.cfg, restart CCcam, and immediately check port 16001. Within 30-60 seconds the peer's cards should appear in the cards/shares table. Note:
- What CAIDs appear — do they match what you need?
- What hop count are they coming in at? Hop=1 is good; hop=3 or higher is a red flag.
- Check ECM response times in the log for a known channel. Consistently under 800ms is solid; over 1500ms will cause problems.
- Watch the connection stability over 10-15 minutes. If the peer drops and reconnects repeatedly, that's a reliability problem.
Generic Criteria for Assessing Peer/Server Channel Quality
Don't just trust that a peer is good because it connected. Assess it properly:
- Ping under 200ms to the server host from your network
- ECM response times consistently below 1500ms in the CCcam log
- Cards appearing at hop=1 (directly connected cards, not reshared chains)
- No excessive connection cycling visible in CCcam log over an hour
- If the peer claims to serve many simultaneous clients, check whether ECM response times degrade during peak hours — overcrowded servers show this clearly
A peer advertising thousands of channels via many hops is almost always a resharing chain with high latency and questionable reliability. Local cards at hop=0 or direct peers at hop=1 are what you want for reliable cccam server channels.
Checking Peer Uptime and ECM Response Time via CCcam Web UI
The CCcam web UI shows per-connection ECM statistics if you've had debug logging active. Look at the "clients" section for connected time and the ECM count/success rate. A peer that's been connected for 20 hours with 5,000 ECMs and only 3 failures is solid. A peer showing 40% timeout rates in the ECM history is garbage — move on.
Understanding Shared vs Dedicated Card Access and Its Effect on Channels
Shared access means one physical card is serving ECM requests for many simultaneous clients. Each ECM request is sequential on the card — the card processes one at a time. Under heavy load, response times climb and timeouts increase. This is why cccam server channels on a heavily loaded shared server freeze during peak viewing times even though the CAID is present and the subscription is valid.
Dedicated access — where a card serves only your connection — eliminates queue contention. ECM responses stay fast regardless of what else is happening. The trade-off is cost and availability. When evaluating a peer, ask whether the card is shared among many users or allocated to you specifically. The answer explains a lot about what you'll experience.
One more thing to watch: DVB-S2 channels using ACM or VCM modulation require hardware that supports variable coding. If the server's tuner card doesn't handle ACM, it can't even receive those transponders — meaning the card is unreachable for those channels even if the CAID and subscription are perfectly valid. This is a hardware constraint at the server end, not a software config problem.
Frequently Asked Questions
Why does CCcam show a card connected but the channel still does not decrypt?
A connected card only means CCcam established communication with it — it doesn't guarantee the card has the subscription entitlement for every SID you try to tune. Check the web UI shares table and find the CAID and provider ID for the channel in question. Then cross-reference against the channel's actual PMT data using dvbsnoop to confirm the CAID matches. Also make sure RECEIVE EMM: yes is set in CCcam.cfg so the card's entitlements stay current. Without EMM, a card's subscription data goes stale and channels drop off one by one.
What port does CCcam use for client connections and can it be changed?
The default CCcam client port is 12000, configured with PORT: 12000 in CCcam.cfg. You can change this to any available port and even define multiple PORT lines to listen on several ports simultaneously. Newcamd protocol uses a separate port configured with NEWCAMD PORT: 15050 <DES key> — the 16-byte DES key is required and must match on both server and client sides for the connection to authenticate.
How do I add CCcam.channelinfo to get human-readable channel names in logs?
Place the file at the path referenced in your CCcam.cfg — typically /usr/share/CCcam/CCcam.channelinfo. The format is one entry per line: SID value in hex followed by a space and the channel name. This is purely cosmetic — it makes log lines readable but has zero effect on which channels decrypt or how ECM routing works. If the file is missing, CCcam just logs raw hex SID values instead of names.
Can CCcam share channels from multiple cards with different CAIDs simultaneously?
Yes, this is one of CCcam's core features. All locally inserted cards and all connected upstream peers are aggregated into a single share pool. Each card's CAIDs are listed separately in the web UI. When a downstream client sends an ECM request, CCcam routes it to whichever card in the pool matches the CAID/SID combination first — subject to any IGNORE/PROVIDE filters and reshare limits you've configured. Cards carrying multiple CAIDs simultaneously (for example, a card with both Irdeto and Nagravision) expose all their CAIDs independently, so make sure you haven't accidentally filtered one out with an IGNORE directive.
What is the difference between CAID and provider ID in the context of channel access?
CAID identifies the CA system vendor — Irdeto, Nagravision, Viaccess, etc. Provider ID is a sub-namespace within that CA system that identifies a specific operator or subscription bouquet. A card carrying CAID 0x0500 (Viaccess) might have three distinct provider IDs corresponding to three different subscription packages. Channels belonging to provider ID A won't decrypt with provider ID B's entitlements even though the CAID is the same. When CCcam can't decrypt a channel and the CAID is present, checking the provider ID match is the next diagnostic step.
Why do some channels freeze every few minutes even though the CAID is present?
Periodic freezing with the CAID present points to two likely causes. First, check ECM response times in the debug log — if responses are consistently near or above the ECM TIMEOUT value (default 3000ms), the client is failing to get the control word before the current one expires, causing brief video interruptions. Second, check EMM status. If EMM forwarding is disabled, the card's entitlement data goes stale over time. Premium channels tend to drop first, followed by others. Setting RECEIVE EMM: yes and restarting CCcam usually resolves the progressive degradation.
How do I limit which channels a specific CCcam user can access?
CCcam supports per-user CAID and provider filtering directly in CCcam.cfg. Within a user block, combine IGNORE CAID: ALL with explicit PROVIDE CAID: XXXX PROVID: YYYYYY lines to whitelist only the CAIDs and provider IDs that user should access. This is the primary access control mechanism — there's no concept of per-SID user restrictions in CCcam natively. If you need SID-level access control you'd need to handle that at the OScam bridging layer, which supports more granular filtering per reader and user.