At line 391 of MultiFramedRTPSink.cpp :
int64_t uSecondsToGo = (fNextSendTime.tv_sec -
timeNow.tv_sec)*1000000 + (fNextSendTime.tv_usec - timeNow.tv_usec);
In some situations, (fNextSendTime.tv_sec -
timeNow.tv_sec)*1000000 will become a huge, but positive value.
ex.
timeNow.tv_sec = 1291086790;
fNextSendTime.tv_sec = 1291084611;
(fNextSendTime.tv_sec - timeNow.tv_sec) = -2179;
(fNextSendTime.tv_sec - timeNow.tv_sec)*1000000 = 2115967296;
Thanks for the report.
As far as I can tell, there are only two possible ways that this
problem ("fNextSendTime" being less than "timeNow") could occur:
1/ The source object that feeds into this is generating invalid
"durationInMicroseconds" values,
2/ The system clock got set forward in time.
I don't care about 1/ (if the inputting source object is buggy, then
that's its problem, not ours), but 2/ is a legitimate concern.
(Sebastien Escudier has also noted similar problems.)
To overcome this situation, I suggest adding the following code to
replace the assignment of "uSecondsToGo" (i.e., replacing line 391):
int secsDiff = fNextSendTime.tv_sec - timeNow.tv_sec;
int64_t uSecondsToGo = secsDiff*1000000 +
(fNextSendTime.tv_usec - timeNow.tv_usec);
if (secsDiff < 0 || uSecondsToGo < 0) { // sanity check
(perhaps the system clock jumped ahead?)
uSecondsToGo = 0;
fNextSendTime = timeNow;
}
This change will be added to the next release of the code.
And I think the same problem will be happened at
line 86 of BasicUDPSink.cpp.
Yes.
--
Ross Finlayson
Live Networks, Inc.
http://www.live555.com/
_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel