Menu

#235 Long play bug

open
nobody
None
5
2014-08-17
2011-06-28
wernam
No

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.

Discussion


Log in to post a comment.

MongoDB Logo MongoDB