Documentation
DVB Errors & Troubleshooting
Every transport stream error worth monitoring, in the order the standard says to care about them. ETSI TR 101 290 defines three priority levels — what stops decoding, what should be watched continuously, and what depends on your application. This sheet gives every indicator, its exact trigger condition and the timing threshold that applies, then shows what those errors look like in production, including two failures where the RF was perfect and the stream still would not decode.
- 2026-09-21 19:49
- 2026-09-24 14:12
1st priority · de-codability
2nd priority · continuous
3rd priority · application
Real production failures
Work the priorities in order
A first-priority error makes everything below it unreliable. Chasing an EPG fault while the PAT is intermittent wastes the afternoon.
- PAT / PMT interval0.5 s
maximum - PCR interval100 ms
maximum
1st
sync, PAT, PMT, continuity, PID
2nd
CRC, PCR, PTS, CAT, transport
3rd
NIT, SDT, EIT, TDT, buffers
1. Scope and the framework
Transport stream faults are easy to observe and hard to prioritize. A monitoring probe can report twenty indicators at once, and without a hierarchy you end up investigating whichever one has the most alarming name.
ETSI TR 101 290, Measurement guidelines for DVB systems, solves this by grouping indicators into three priority levels. The current edition is V1.4.1 (2020-06), and its structure is the backbone of essentially every commercial TS analyzer on the market — which is why learning the indicator names pays off regardless of whose equipment you use.
- First priority— “necessary for de-codability (basic monitoring)”. If one of these is firing, nothing downstream can be trusted.
- Second priority— “recommended for continuous or periodic monitoring”. The stream decodes, but something is wrong that will eventually be visible.
- Third priority— “application dependant monitoring”. Whether these matter depends on what you are delivering.
Every threshold in this sheet is quoted from TR 101 290 V1.4.1 directly. Where the standard has revised a figure, that history is noted, because stale numbers circulate widely.
Prerequisite: this sheet assumes the structures it refers to. For packets, PIDs, PSI/SI tables and PCR, start with MPEG Transport Stream Explained.
2. First priority — the errors that stop decoding
Six indicators, in the order the standard lists them. If any is present, fix it before looking at anything else.
| No. | Indicator |
|---|---|
| 1.1 | TS_sync_loss |
| 1.2 | Sync_byte_error |
| 1.3 | PAT_error |
| 1.3.a | PAT_error_2 |
| 1.4 | Continuity_count_error |
| 1.5 | PMT_error |
| 1.5.a | PMT_error_2 |
| 1.6 | PID_error |
Trigger condition
- 1.1Loss of synchronization, with hysteresis parameters taken into account.
- 1.2Sync byte not equal to
0x47. - 1.3PID
0x0000does not occur at least every 0.5 s; or a PID0x0000packet does not containtable_id 0x00; or the scrambling control field is not00for PID0x0000. - 1.3.aRefined replacement for 1.3, allowing for a PAT that spans several consecutive sections with the same
table_id 0x00. - 1.4Three checks combined: incorrect packet order; a packet occurring more than twice; a lost packet.
- 1.5Sections with
table_id 0x02do not occur at least every 0.5 s on the PID referenced by the PAT; or the scrambling control field is not00. - 1.5.aRefined replacement for 1.5, checking every
program_map_PIDreferenced in the PAT. - 1.6A referenced PID does not occur for a user-specified period.
2.1 TS_sync_loss — how sync is actually declared
Synchronization is the precondition for everything: until the demux knows where packets begin, no other measurement means anything. The standard is specific about the hysteresis, and it is worth knowing because it explains why a stream can look briefly unstable without alarming:
- Five consecutive correct sync bytesare proposed as sufficient to acquire synchronization.
- Two or more consecutive corrupted sync bytesshould indicate sync loss.
Those asymmetric thresholds are deliberate: acquisition should be confident, loss should be quick.
2.2 Sync_byte_error — and why 204 bytes appears
The indicator is set as soon as a correct 0x47 fails to appear after 188 or 204 bytes. The second figure surprises people who only know the 188-byte packet: 204 = 188 + 16, the sixteen bytes being Reed-Solomon parity added by the channel coding. Analyzers that sit before RS decoding see 204-byte packets, and a tool configured for the wrong packet length reports continuous sync errors on a perfectly healthy stream.
The standard also notes something practical: some encoders drive the sync byte flag on a parallel interface to control randomiser re-seeding and byte inversion without verifying the byte is actually a valid sync byte. Checking it yourself is therefore worthwhile rather than assumed.
2.3 PAT_error and PMT_error — the 0.5 second rule
Both the PAT and the PMTs it references must recur at least every 0.5 s. Miss that and a receiver tuning in has nothing to work from: without a PAT, as the standard puts it, the decoder can do nothing and no program is decodable; without a PMT, the corresponding program is not decodable.
Two subtleties are easy to miss. First, nothing other than a PAT should be present on PID 0x0000 — a stray table there is itself the error. Second, both indicators check that the scrambling control field is 00. Scrambled signalling is a fault, not a security feature: PSI must stay readable or nothing can be located.
2.4 Continuity_count_error
One indicator, three logically OR-ed preconditions: incorrect packet order, a packet occurring more than twice, and lost packets. The standard notes that test equipment is not required to distinguish them, since all three point at the same class of problem.
The “packet occurs more than twice” case is worth separating mentally from loss. Duplication is legal — a packet may be sent twice — but a third copy is symptomatic of something deeper upstream, and the standard suggests keeping it under observation rather than dismissing it.
2.5 PID_error
Checks that a stream actually exists for each PID that is referenced. This is the indicator that catches remultiplexing mistakes: a PMT that advertises an elementary stream which is no longer being carried. The user-specified period should not exceed 5 s for video or audio PIDs. Subtitles, data services and audio with an ISO 639 language descriptor of type greater than 0 are explicitly excluded from that 5 s limit, since legitimate gaps there can be much longer.
3. Second priority — continuous monitoring
The stream decodes. These indicators catch the faults that degrade it over time, and the PCR family is where most real trouble lives.
| No. | Indicator |
|---|---|
| 2.1 | Transport_error |
| 2.2 | CRC_error |
| 2.3 | PCR_error |
| 2.3.a | PCR_repetition_error |
| 2.3.b | PCR_discontinuity_indicator_error |
| 2.4 | PCR_accuracy_error |
| 2.5 | PTS_error |
| 2.6 | CAT_error |
Trigger condition
- 2.1
transport_error_indicatorin the TS header is set to 1. - 2.2A CRC error occurred in a CAT, PAT, PMT, NIT, EIT, BAT, SDT or TOT table.
- 2.3PCR discontinuity of more than 100 ms without specific indication; or interval between consecutive PCR values more than 100 ms.
- 2.3.aInterval between two consecutive PCR values more than 100 ms.
- 2.3.bDifference between consecutive PCR values outside the range 0–100 ms without the discontinuity indicator being set.
- 2.4PCR accuracy of the selected programme is not within ±500 ns.
- 2.5PTS repetition period more than 700 ms.
- 2.6Packets with
transport_scrambling_controlnot00are present but no CAT (table_id 0x01) is present; or a section with atable_idother than0x01is found on PID0x0001.
The 40 ms figure is obsolete — this matters. Older documentation and a great deal of forum advice cite a 40 ms maximum PCR interval. TR 101 290 Note 2 to Table 5.0b records that this limitation was removed from ETSI TS 101 154 in 2005, and that the relevant clause now refers only to the 100 ms limitation from ISO/IEC 13818-1, which is recommended to be applied generally. If a tool or a colleague is asserting 40 ms, they are working from a source that is two decades stale.
3.1 The PCR family, disentangled
Indicator 2.3 is a combination of the two more specific errors below it, kept in the document for consistency with existing implementations. For new work, use 2.3.a and 2.3.b — the standard says so explicitly. The distinction is diagnostically useful:
- PCR_repetition_errormeans the PCRs are arriving too far apart. The decoder’s clock recovery loop is being starved of references, so it jitters or drifts, and it may lose lock entirely.
- PCR_discontinuity_indicator_errormeans the clock jumped without being flagged. Discontinuities are legal — that is what the discontinuity indicator is for — but an unsignaled jump makes the receiver treat a legitimate splice as corruption.
- PCR_accuracy_erroris the tight one at ±500 ns, chosen so a color subcarrier can be synthesized from the recovered clock. Note the standard’s caveat: this test should only be performed on a constant-bitrate transport stream.
3.2 PTS_error
Presentation Time Stamps should occur at least every 700 ms. Two caveats from the standard: PTS are only accessible if the stream is not scrambled, and the 700 ms limit should not be applied to still pictures, where long gaps are entirely normal.
3.3 CAT_error and Transport_error
The CAT is how a receiver locates the EMM streams for its conditional-access system. Scrambled packets present with no CAT means the receiver cannot obtain management messages — the service is encrypted and unopenable. The inverse check also applies: only a CAT belongs on PID 0x0001.
Transport_error reflects the transport_error_indicator bit set by an upstream demodulator. The standard recommends a resettable counter alongside the boolean, and notes that when this fires, no further error indication should be derived from that packet — its contents are already known to be untrustworthy, so downstream indicators would be reporting noise.
4. Third priority — application dependent
Whether these matter depends on what you deliver. A redistribution operator forwarding a single service may legitimately ignore most of them; a platform providing an EPG cannot.
| No. | Indicator |
|---|---|
| 3.1.a | NIT_actual_error |
| 3.1.b | NIT_other_error |
| 3.2 | SI_repetition_error |
| 3.3 | Buffer_error |
| 3.4 | Unreferenced_PID |
| 3.5.a | SDT_actual_error |
| 3.6.a | EIT_actual_error |
| 3.6.c | EIT_PF_error |
| 3.7 | RST_error |
| 3.8 | TDT_error |
| 3.9 | Empty_buffer_error |
| 3.10 | Data_delay_error |
Threshold / condition
- 3.1.aNo
table_id 0x40on PID0x0010for more than 10 s; or two NIT_actual sections closer than a specified value (25 ms or lower). - 3.1.bInterval between sections with
table_id 0x41longer than a specified value (10 s or higher). - 3.2Repetition rate of SI tables outside the limits specified in EN 300 468 and TR 101 211.
- 3.3Overflow or underflow of the MPEG-2 reference decoder buffers: TB, TBsys, MB, EB, B, Bsys.
- 3.4A PID that is not one of the reserved or signalling PIDs and is not referred to by a PMT within 0.5 s.
- 3.5.a
table_id 0x42not present on PID0x0011for more than 2 s; or two sections closer than 25 ms. - 3.6.aEIT present/following (
table_id 0x4E) section 0 or 1 not present on PID0x0012for more than 2 s. - 3.6.cOnly one of the present/following pair exists — both sections should be present or neither.
- 3.7A
table_idother than0x71or0x72found on PID0x0013; or two RST sections closer than 25 ms. - 3.8
table_id 0x70not present on PID0x0014for more than 30 s. - 3.9A transport buffer is not empty at least once per second.
- 3.10Delay of data through the TSTD buffers exceeding 1 s (60 s for still-picture video).
As with the PCR indicators, several third-priority entries have been split into more specific successors — NIT_error into 3.1.a and 3.1.b, SDT_error into 3.5.a and 3.5.b, EIT_error into 3.6.a, 3.6.b and 3.6.c. The originals remain only for compatibility with existing implementations; new work should use the specific ones.
Unreferenced_PID deserves attention because it is the counterpart to PID_error. PID_error catches a PMT promising a stream that is absent; Unreferenced_PID catches a stream present that no PMT claims. Both are remultiplexing artifacts, and together they bracket the most common class of mux misconfiguration.
5. table_id reference
Several indicators are defined in terms of table_id values rather than table names, so the mapping is needed to read them. These values come from the TR 101 290 preconditions above and ETSI EN 300 468.
| table_id | Table | PID |
|---|---|---|
0x00 | PAT | 0x0000 |
0x01 | CAT | 0x0001 |
0x02 | PMT | as referenced by the PAT |
0x40 | NIT — actual network | 0x0010 |
0x41 | NIT — other network | 0x0010 |
0x42 | SDT — actual TS | 0x0011 |
0x46 | SDT — other TS | 0x0011 |
0x4A | BAT | 0x0011 |
0x4E | EIT — present/following, actual TS | 0x0012 |
0x4F | EIT — present/following, other TS | 0x0012 |
0x50–0x6F | EIT — schedule | 0x0012 |
0x70 | TDT | 0x0014 |
0x71 | RST | 0x0013 |
0x72 | ST — stuffing | various |
0x73 | TOT | 0x0014 |
6. A triage method that works
The priority levels are not just a taxonomy; used in order they are an efficient diagnostic procedure.
- Confirm sync first.If
TS_sync_lossorSync_byte_erroris firing, stop. Check packet length assumptions — 188 against 204 — before suspecting the signal. - Then the tables that make the stream navigable.
PAT_errorandPMT_errorat 0.5 s. If either is intermittent, every downstream indicator is unreliable and every EPG complaint is a symptom rather than a cause. - Then continuity.Establish the scope before the cause: errors on every PID at once point upstream; errors on one PID point at the mux or your own chain.
- Then PCR.Distinguish repetition from discontinuity from accuracy. They have different causes and different fixes, which is exactly why the standard split them.
- Only then the SI layer.Missing NIT, SDT or EIT changes the user experience without preventing decoding, so it is real but rarely urgent.
The most useful question in this whole discipline: does the error correlate with RF conditions or not? Errors that track signal quality are a reception problem. Errors on a clean, locked carrier are a processing problem — and the next section is two cases of exactly that.
7. Three production failures where the RF was fine
The framework above tells you what to measure. What it cannot tell you is that some of the most expensive faults present as signal problems and are not. These three come from operating SAT>IP Servers Pro in production, and each one wasted real time before the cause was understood.
7.1 Continuity errors caused by monitoring the signal
Symptom: Continuity_count_error at a steady low rate. Signal strength normal, carrier locked, no Transport_error. Replacing cables and re-pointing the dish changes nothing.
Cause: polling the DVB frontend for signal statistics competes with the demux for driver attention, and on some hardware and driver combinations the polling itself induces the errors. The measurement was creating the fault it was measuring.
Remedy: SAT>IP Servers Pro exposes -M *:0-0, which disables frontend polling entirely and, as its documentation notes, “may solve CC errors with some hardware/drivers”. The trade is explicit — you lose live signal reporting and gain a clean stream.
7.2 Near-total T2-MI CRC failure on a perfect carrier
Symptom: a DVB-S2 multistream transponder carrying a T2-MI feed. RF immaculate. The inner DVB-T2 multiplex undecodable, with CRC failures approaching 100%. Every signal measurement says the problem is elsewhere; every structural measurement says the data is corrupt.
Cause: the demodulator’s hardware multistream-to-TS de-encapsulation drops packets for this bursty traffic pattern — typically around 9%. Losing 9% of an encapsulated stream destroys the inner CRCs while leaving the outer carrier metrics pristine.
Remedy: stop asking the hardware to de-encapsulate. On STiD135-based tuners with the raw-bbframe driver patch, bbframe=1 makes the demodulator emit raw DVB-S2 baseband frames, and SAT>IP Servers Pro reconstructs the outer transport stream losslessly in software before the T2-MI demux sees it. It sets a reserved DTV_STREAM_ID bit per tune, so the same card keeps serving conventional transponders concurrently.
This failure is undiagnosable without treating baseband frames, multistream input selection and T2-MI encapsulation as separate layers. Measured only at the priority-indicator level, it looks like data corruption with no source.
7.3 A monitoring fault mistaken for a stream fault
Symptom: SNR reported as 0 after a brief signal interruption, indefinitely, while the tuner stays locked and streaming continues normally. Signal strength reads correctly. Other software on the same hardware shows healthy figures.
Cause: the Linux DVB API calls used to read SNR can return 0 during a signal event, and without a recovery mechanism the value never gets re-read once conditions stabilize. The stream was never affected — only its telemetry.
Remedy: SAT>IP Servers Pro gained explicit signal-validation and re-read logic for exactly this. The wider lesson is worth stating plainly: verify that your monitoring is healthy before trusting what it reports about the stream. A stuck sensor and a real fault look identical on a dashboard.
8. Tooling
The indicator names are portable across analyzers, which is the practical benefit of the standard. For open tooling, TSDuck implements transport stream analysis, table extraction, continuity checking and PCR measurement, and its plugin model composes well with a live SAT>IP feed as input.
Because a SAT>IP tier delivers a standards-compliant stream over IP, the whole analysis chain runs against a network URL rather than requiring local DVB hardware. Requesting the complete multiplex — pids=all — gives an analyzer everything it needs, PSI/SI tables included; requesting a PID subset gives it only what you selected, which is fine for monitoring one service and useless for auditing table repetition rates.
Sizing note: auditing table repetition against the thresholds in this sheet requires the full multiplex. If you monitor a filtered stream, you cannot meaningfully measure SI_repetition_error or Unreferenced_PID, because you removed the evidence. Budget the full transponder bitrate for a monitoring feed.
9. Standards
| Specification | Role here |
|---|---|
| ETSI TR 101 290 V1.4.1 (2020-06) | Measurement guidelines for DVB systems. Source of every indicator, precondition and threshold in sections 2 to 4. |
| ISO/IEC 13818-1 / ITU-T H.222.0 | MPEG-2 Systems. Referenced by most first- and second-priority indicators; source of the 100 ms PCR limit. |
| ETSI EN 300 468 | DVB Service Information. Defines the tables and table_id values in section 5. |
| ETSI TR 101 211 | Guidelines on SI repetition rates, referenced by SI_repetition_error. |
| ETSI TS 101 154 | Where the superseded 40 ms PCR figure originated, and from which it was removed in 2005. |
10. Sources
[1] ETSI TR 101 290, “Digital Video Broadcasting (DVB); Measurement guidelines for DVB systems,” etsi.org. Verified September 2026. Source for the three-tier priority classification, the first, second and third priority error lists, the 0.5 s PAT and PMT check interval, the 700 ms PTS interval, the 5 s presence window for referenced video and audio PIDs, the 0.5 s Unreferenced_PID window, the 2 s, 10 s and 30 s SI table windows, and the scrambling check carried inside PAT_error and PMT_error.
[2] ISO/IEC 13818-1, published jointly as ITU-T H.222.0, “Generic coding of moving pictures and associated audio information: Systems,” iso.org and itu.int. Verified September 2026. Source for the 100 ms maximum PCR interval, the ±500 ns PCR accuracy requirement, the 4-bit continuity_counter and its blindness to losses in multiples of 16, the transport_scrambling_control value of 00 required for signalling, PAT carriage on PID 0x0000, and the CAT to EMM relationship behind CAT_error.
[3] ETSI TS 101 154, “Specification for the use of Video and Audio Coding in Broadcasting Applications based on the MPEG-2 Transport Stream,” etsi.org, version history v1.5.1 (2004-05) through v1.7.1 (2005-06). Verified September 2026. Source for the withdrawn 40 ms PCR repetition figure and for the 100 ms maximum repetition interval recommended for PAT and PMT, which TR 101 290 relaxes to 0.5 s as sufficient for many applications. ETSIETSI
[4] ETSI EN 300 468, “Specification for Service Information (SI) in DVB systems,” etsi.org. Verified September 2026. Source for NIT on 0x0010, SDT on 0x0011, EIT on 0x0012 and TDT on 0x0014, and for the minimum repetition rates behind SDT_actual_error, EIT_actual_error, NIT_actual_error and TDT_error.
[5] ETSI EN 300 421 (DVB-S) and EN 300 744 (DVB-T), framing structure and channel coding, etsi.org. Verified September 2026. Source for the 204-byte packet as 188 bytes plus 16 Reed-Solomon parity bytes, and for the analyzer packet-length assumption that produces persistent sync errors on a healthy carrier.
[6] SAT>IP Protocol Specification version 1.2.2, satip.info, standardised as EN 50585, which specifies both the control protocol and the media transport for forwarding satellite-delivered signals to clients over IP. Verified September 2026. Source for the pids=all request used to obtain a full multiplex, and for the constraint that SI_repetition_error and Unreferenced_PID cannot be measured on a filtered stream. githubvde-verlag
[7] Satline.tv virtual SAT>IP server and dedicated DVB server documentation, satline.tv. Verified September 2026. Source for budgeting the whole transponder bitrate on a monitoring feed.
Gleb Sazanov
Chief Technology Officer
Gleb Sazanov is an accomplished Chief Technology Officer (CTO) with over 20 years of experience in software development, system architecture, and cloud-based solutions. As the CTO of SATLINE, a leading provider of virtual and colocation services tailored to SATCOM businesses, Gleb drives the company’s technological strategy, fostering innovation and efficiency in data center services. His expertise spans various domains, including DevOps, system scaling, and high-performance infrastructure management. With a deep passion for cutting-edge technologies, Gleb plays a pivotal role in shaping the future of the SATCOM industry.