Opened 8 years ago
Last modified 11 months ago
#6531 new defect
MPEG-TS encoder may stop emitting SDT/PAT/PMT after DTS jump or rollover
| Reported by: | Jernej Virag | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | avformat |
| Version: | git-master | Keywords: | |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
When transcoding broadcast MPEG-TS streams, there may be jumps or a rollover in PTS/DTS values in stream. That's perfectly valid, however ffmpeg's MPEG-TS muxer may stop emitting SDT/PAT/PMT tables.
The issue was tracked down to retransmit_si_info method where two following comparisons are made:
...
(dts != AV_NOPTS_VALUE && dts - ts->last_sdt_ts >= ts->sdt_period*90000.0)
...
if (dts != AV_NOPTS_VALUE)
ts->last_sdt_ts = FFMAX(dts, ts->last_sdt_ts);
...
(dts != AV_NOPTS_VALUE && dts - ts->last_pat_ts >= ts->pat_period*90000.0) ||
...
if (dts != AV_NOPTS_VALUE)
ts->last_pat_ts = FFMAX(dts, ts->last_pat_ts);
All those comparisons fail to take into account the possibility of DTS regressing which means a negative DTS jump will cause the muxer to stop emitting SDT tables alltogether in all streams and PAT/PMT tables alltogether in audio-only streams.
Note:
See TracTickets
for help on using tickets.



There was this aa20294b317558957cf124bb8e4da0521ab3c423 (and fixit) aa20294b317558957cf124bb8e4da0521ab3c423
What else has to be done to fix it?