←Back to Technical Sheets
In-Depth Technical Sheet

DVB Errors & Troubleshooting
The TR 101 290 Priority Framework, Applied

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.

  • 1st priority · de-codability
  • 2nd priority · continuous
  • 3rd priority · application
  • Real production failures

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.

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.

Table 5.0a — MPEG-2 TS parameters of 1st priority
No.IndicatorTrigger condition
1.1TS_sync_lossLoss of synchronization, with hysteresis parameters taken into account.
1.2Sync_byte_errorSync byte not equal to 0x47.
1.3PAT_errorPID 0x0000 does not occur at least every 0.5 s; or a PID 0x0000 packet does not contain table_id 0x00; or the scrambling control field is not 00 for PID 0x0000.
1.3.aPAT_error_2Refined replacement for 1.3, allowing for a PAT that spans several consecutive sections with the same table_id 0x00.
1.4Continuity_count_errorThree checks combined: incorrect packet order; a packet occurring more than twice; a lost packet.
1.5PMT_errorSections with table_id 0x02 do not occur at least every 0.5 s on the PID referenced by the PAT; or the scrambling control field is not 00.
1.5.aPMT_error_2Refined replacement for 1.5, checking every program_map_PID referenced in the PAT.
1.6PID_errorA 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:

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.

Table 5.0b — MPEG-2 TS parameters of 2nd priority
No.IndicatorTrigger condition
2.1Transport_errortransport_error_indicator in the TS header is set to 1.
2.2CRC_errorA CRC error occurred in a CAT, PAT, PMT, NIT, EIT, BAT, SDT or TOT table.
2.3PCR_errorPCR discontinuity of more than 100 ms without specific indication; or interval between consecutive PCR values more than 100 ms.
2.3.aPCR_repetition_errorInterval between two consecutive PCR values more than 100 ms.
2.3.bPCR_discontinuity_indicator_errorDifference between consecutive PCR values outside the range 0–100 ms without the discontinuity indicator being set.
2.4PCR_accuracy_errorPCR accuracy of the selected programme is not within ±500 ns.
2.5PTS_errorPTS repetition period more than 700 ms.
2.6CAT_errorPackets with transport_scrambling_control not 00 are present but no CAT (table_id 0x01) is present; or a section with a table_id other than 0x01 is found on PID 0x0001.

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:

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.

Table 5.0c — MPEG-2 TS parameters of 3rd priority (selected)
No.IndicatorThreshold / condition
3.1.aNIT_actual_errorNo table_id 0x40 on PID 0x0010 for more than 10 s; or two NIT_actual sections closer than a specified value (25 ms or lower).
3.1.bNIT_other_errorInterval between sections with table_id 0x41 longer than a specified value (10 s or higher).
3.2SI_repetition_errorRepetition rate of SI tables outside the limits specified in EN 300 468 and TR 101 211.
3.3Buffer_errorOverflow or underflow of the MPEG-2 reference decoder buffers: TB, TBsys, MB, EB, B, Bsys.
3.4Unreferenced_PIDA 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.aSDT_actual_errortable_id 0x42 not present on PID 0x0011 for more than 2 s; or two sections closer than 25 ms.
3.6.aEIT_actual_errorEIT present/following (table_id 0x4E) section 0 or 1 not present on PID 0x0012 for more than 2 s.
3.6.cEIT_PF_errorOnly one of the present/following pair exists — both sections should be present or neither.
3.7RST_errorA table_id other than 0x71 or 0x72 found on PID 0x0013; or two RST sections closer than 25 ms.
3.8TDT_errortable_id 0x70 not present on PID 0x0014 for more than 30 s.
3.9Empty_buffer_errorA transport buffer is not empty at least once per second.
3.10Data_delay_errorDelay 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_idTablePID
0x00PAT0x0000
0x01CAT0x0001
0x02PMTas referenced by the PAT
0x40NIT — actual network0x0010
0x41NIT — other network0x0010
0x42SDT — actual TS0x0011
0x46SDT — other TS0x0011
0x4ABAT0x0011
0x4EEIT — present/following, actual TS0x0012
0x4FEIT — present/following, other TS0x0012
0x50–0x6FEIT — schedule0x0012
0x70TDT0x0014
0x71RST0x0013
0x72ST — stuffingvarious
0x73TOT0x0014

6. A triage method that works

The priority levels are not just a taxonomy; used in order they are an efficient diagnostic procedure.

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 and sources

SpecificationRole 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.0MPEG-2 Systems. Referenced by most first- and second-priority indicators; source of the 100 ms PCR limit.
ETSI EN 300 468DVB Service Information. Defines the tables and table_id values in section 5.
ETSI TR 101 211Guidelines on SI repetition rates, referenced by SI_repetition_error.
ETSI TS 101 154Where the superseded 40 ms PCR figure originated, and from which it was removed in 2005.

10. About the author

Gleb Sazanov

Project Leader

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.