[FFmpeg-devel] matroska file hits eof on any seek
Don Moir
donmoir at comcast.net
Fri Feb 17 18:41:27 CET 2012
> On Fri, Feb 17, 2012 at 04:45:30AM -0500, Don Moir wrote:
>> This file is probably a "bad" file.
>>
>> VLC can seek into it effectively but it will end up breaking down with
>> distorted frames.
>>
>> ffdshow can seek into it but it is very slow.
>>
>> Use avformat_seek_file at any position including zero and the next packet
>> read will fail.
>>
>> avformat_seek_file returns zero as an indication of success.
>>
>> The only recovery is to shut the file down and reopen it.
>>
>> Any seek with ffplay, smplayer, my own app, just stops playback (because
>> it will hit EOF) and you can't get out of it without closing the file.
>>
>> I have not opened a ticket on it but will if requested. I figure you have
>> enough tickets already but let me know.
>>
>> If nothing else can be done about it, then at least a failure by
>> avformat_seek_file would be good as long as it was able to continue to
>> playback.
>>
>> If anyone wants to take a look, here's the file:
>>
>> http://sms.pangolin.com/temp/bad_seek_matroska_eof.mkv (103 mb)
>
> The problem is that this uses intra refresh but no intra frames.
> I do not know what the specification says, but the problem is
> that the file (IMO incorrectly) marks all frames as non-keyframes
> when it should mark all as keyframes.
> So the seek works just fine, but after the seek the read function
> skips all non-keyframes, which goes all the way to the end of the file.
> Enabling the parser for H.264 as well gives the packets the right
> keyframe flags afterwards, but does not help the demuxer.
> Not sure what to do here.
> One way would be to add a flag that makes libavformat
> discard non-keyframes after having run the parser over
> it.
> Another would be to just manually figure out if those
> are intra-refresh H.264 frames.
> Or lastly just declare it as too broken to support
> better than this.
Opened ticket on it:
https://ffmpeg.org/trac/ffmpeg/ticket/1003
Right after a seek, it has created it's index table and all those entries
are flagged as AVINDEX_KEYFRAME.
More information about the ffmpeg-devel
mailing list