Opened 8 years ago
Last modified 4 weeks 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?