βMax PTS Interval
According to ETSI TR 101-290 validation guidance, a PTS error is detected when the repetition period of a PTS exceeds 700 ms.
This rule checks how much transport time passes between successive PES packets that carry a PTS on the same PID.
What it checksβ
- groups PES packets by PID
- keeps only PES starts that carry a PTS
- measures the elapsed stream time between successive PTS-bearing packets
- compares each interval against the configured threshold
The default threshold is 700 ms.
Discontinuity indicator handlingβ
If the transport stream sets discontinuity_indicator between the previous PTS-bearing packet and the violating packet on the same PID, the event is still recorded, but the validation result is downgraded to a warning.
This mirrors the handling used by other MPEG-TS timing rules when a declared transport discontinuity explains the timing jump.
β Pass conditionβ
The test passes when no observed PTS repetition interval exceeds the configured threshold.
Example pass message:
No PTS interval above 700 ms was detected.
β Fail conditionβ
The test fails when one or more PTS repetition intervals exceed the configured threshold without a matching discontinuity_indicator.
Example failure:
- previous PTS-bearing PES packet at packet
20 - next PTS-bearing PES packet at packet
40 - measured interval
800 ms - configured threshold
700 ms
β οΈ Warning conditionβ
If all detected interval violations are covered by discontinuity_indicator, the test reports a warning instead of a failure, as it is legal.
Exampleβ

The chart shows only PTS interval violations as points on a scatter plot.
The X axis is the byte offset in the file. The Y axis is the measured PTS interval in milliseconds. A dashed horizontal reference line marks the configured threshold, 700 ms by default.
Threshold guidanceβ
Keep the default 700 ms threshold when you want to follow the ETSI TR 101-290 guideline directly.
You may want to lower the threshold when:
- You need stricter encoder timing behavior
- Downstream systems are sensitive to sparse timestamp updates
You may want to raise the threshold when:
- You are working with known low-rate content that emits PTS less frequently
- You are reviewing streams where sparse timestamps are expected and accepted by your workflow
Recommended PTS Intervals by Frame Rateβ
In most compliant MPEG-TS streams, PTS should be present for every access unit (frame) for video, and for every KLV packet when metadata is time-relevant (SYNC KLV).
Video Streams (Per Frame)β
| Frame Rate | Frame Duration | Recommended PTS Interval | Notes |
|---|---|---|---|
| 60 fps | ~16.7 ms | Every frame (~16β17 ms) | Required for smooth playback and sync |
| 50 fps | 20 ms | Every frame (20 ms) | Common in broadcast (PAL regions) |
| 30 fps | ~33.3 ms | Every frame (~33 ms) | Typical UAV / ISR streams |
| 25 fps | 40 ms | Every frame (40 ms) | DVB-style timing |
| 24 fps | ~41.7 ms | Every frame (~42 ms) | Cinema-style encoding |
| 15 fps | ~66.7 ms | Every frame (~67 ms) | Low-bandwidth UAV feeds |
| 10 fps | 100 ms | Every frame (100 ms) | Edge / constrained links |
| 5 fps | 200 ms | Every frame (200 ms) | Very low-rate telemetry video |
Key Rule (Video)β
- PTS should appear on every frame (access unit)
- Missing PTS across multiple frames is typically a real encoder issue, not just a warning
KLV Metadata (MISB ST 0601 / ST 0903)β
| Metadata Rate | Recommended PTS Interval | Notes |
|---|---|---|
| Per frame | Same as video frame rate | Ideal case (1 KLV per frame) |
| 30 Hz | ~33 ms | Common ISR telemetry |
| 10 Hz | 100 ms | Reduced metadata rate |
| 1 Hz | 1000 ms | Minimal tracking updates |
Key Rule (KLV)β
- Each KLV packet should carry a PTS aligned to its emission time
- It does not need to match every video frame, but:
- Must be monotonic
- Should be frequent enough for downstream systems (tracking, overlay, sync)
Practical Validation Guidanceβ
-
Video:
- Expect PTS per frame
- Error if gap > 2Γ frame duration
-
KLV:
- Expect PTS per packet
- Warning if gap > 2Γ expected metadata rate
TR 101-290 Alignmentβ
- The 700 ms threshold is:
- A coarse broadcast safety limit
- Not suitable for UAV / ISR precision systems
Suggested Thresholds (Real-World UAV Systems)β
| Use Case | Recommended Max PTS Gap |
|---|---|
| High-quality ISR video | β€ 2 frames |
| General UAV streaming | β€ 3β5 frames |
| Low bitrate links | β€ 500 ms |
| TR 101-290 compliance | β€ 700 ms |
Summaryβ
- Video: PTS β every frame (strict requirement)
- KLV: PTS β every packet (strongly recommended)
- 700 ms is too loose for UAV/ISR β use frame-based thresholds instead
Test fileβ
- mpegts-max-pts-interval.ts