Some Videos Do Not Play until the End in Windows XP - SP2
After the release of the Service Pack 2 for Windows XP some users reported problems with a small number of videos that would no longer play until the end. More specifically, these videos report a duration that is never reached during normal playback, usually by a small amount (less than 30 milliseconds.) The problem occurs if the developer is using a script like the one below to detect if the end of the video has been reached:
on exitframe me
if sprite(me.spritenum).currenttime = sprite(me.spritenum).duration then
go to the frame + 1
go the frame
After analysis of a sample of videos that reported unreachable durations in SP2 we were able to determine that the problem is caused by an irregular interleave of the video and audio tracks. If one of the tracks is slightly longer than the other then systems upgraded to SP2 will report a stream duration that is a few milisseconds longer than what can actually be reached during playback. This problem does not affect the majority of MPEG1 streams, and does not affect developers that are using cuepoints to detect the end of playback as well. In most applications this change of behavior in SP2 is not readily noticeable, but in case of scripts that attempt to compare the currenttime to the duration the small difference is enough to create problems.
Since it can be difficult for the developer to guarantee that all MPEG1 streams are correctly interleaved we have implemented an algorithm in version 1.5.2 of Mpeg Advance Xtra that attempts to detect this situation automatically. If the video that is playing can not reach the reported duration and the offset to the end is less than one seeking unit then Mpeg Advance Xtra will automatically increase the reported currenttime property to equals the reported duration, so scripts like the one above will continue to work as expected. Version 1.5.2 is a free upgrade to all users of Mpeg Advance Xtra, and recommended for delivery in SP2 if you can not guarantee that the MPEG stream is correctly interleaved.