rbouqueau / gpac

GPAC mirror from the SourceForge Subversion
GNU Lesser General Public License v2.1
0 stars 1 forks source link

[Bug] Long play bug [sf#235] #235

Open rbouqueau opened 10 years ago

rbouqueau commented 10 years ago

Reported by wernam on 2011-06-28 10:31 UTC Hi all, After a long test, I was trying to play a livestream connection, but after a long play GPAC stop of reproduce it, I get this error into the log:

[ODM] CU (TS 0) later than last frame drawn (TS 60049150) - droping

Trying to debug it, it seems that it can't recover from a CTS overflow (after a long long play it overflow, 16 hours), searching into the code I found that:

(channel.c L.915) if (ch->net_cts<ch->seed_ts) { u64 diff = ch->seed_ts - ch->net_cts; ch->CTS_past_offset = (u32) (diff * 1000 / ch->ts_res) + ch->ts_offset;

ch->net_dts = ch->net_cts = 0; ch->CTS = ch->DTS = gf_clock_time(ch->clock); } else { if (ch->net_dts>ch->seed_ts) ch->net_dts -= ch->seed_ts; else ch->net_dts=0; ch->net_cts -= ch->seed_ts; ch->CTS_past_offset = 0;

/TS Wraping not tested/ ch->CTS = (u32) (ch->ts_offset + (u64) (ch->net_cts) 1000 / ch->ts_res); ch->DTS = (u32) (ch->ts_offset + (u64) (ch->net_dts) 1000 / ch->ts_res); }

into this funtion when your net_cts become greater than seed_ts it doesn't give a good CTS/DTS value (in the error the last value was 60049150 and the new 0). I don't know how exactly it should work, but it's logical that net_cts overflow if we are livestream an onlive video.