Opened 8 years ago

Last modified 8 years ago

#5309 new defect

Seek doesn't work in some .mp4 files

Reported by: Arnaud Owned by:
Priority: normal Component: undetermined
Version: git-master Keywords: h264 mov seek
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:
How to reproduce:

% ffplay -ss 5
ffmpeg version: ffplay version N-78958-g8c24523
built from latest git, on Ubuntu 14.04.3, on 2016-03-07

File is seek_not_working.mp4

The file plays well but always from the beginning: the seek isn't working.

Change History (14)

comment:1 by Arnaud, 8 years ago

(will upload sample file)

comment:2 by Arnaud, 8 years ago

Problematic file uploaded on the ftp server upload.ffmpeg.org
I would like to help finding what is the issue and maybe fix it if I can, but I'm not expert with ffmpeg source code, so if someone more experienced has an idea about what is wrong :)

comment:3 by Carl Eugen Hoyos, 8 years ago

Is the issue not reproducible with ffmpeg (the application)?

comment:4 by Arnaud, 8 years ago

I didn't know ffmpeg has a seek option.
I tried it the following way:
./ffmpeg -ss 3 -i seek_not_working.mp4 -frames:v 1 out1.jpg
and yes, it works.

comment:5 by Carl Eugen Hoyos, 8 years ago

Keywords: h264 mov added

Did you find a sample with fourcc AVd1?

comment:6 by Arnaud, 8 years ago

Sorry, I'm not sure I understand what you meant.
You're asking if I have the same problem with other mp4 files?

comment:7 by Carl Eugen Hoyos, 8 years ago

No, you promised me in September to search for such a sample. Did you find one?

comment:8 by Arnaud, 8 years ago

Ah, ok.
No sorry: I probably lost it when my hard drive crashed some time ago :(

comment:9 by Arnaud, 8 years ago

Did someone has any clue about what might be wrong?

comment:10 by Carl Eugen Hoyos, 8 years ago

Keywords: seek added

I suspect the file has only one recovery point.

comment:11 by Arnaud, 8 years ago

Thanks for your reply.

How can I check if the file has only on recovery point and if that can be the issue?

I tried to figure this out by adding a breakpoints in h264.c:decode_recovery_point but never get there, using my "buggy" file, but also some other files (e.g. [1] from [2]) for which seeking works.

[1]: http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_50mb.mp4
[2]: http://www.sample-videos.com/

in reply to:  11 comment:12 by Carl Eugen Hoyos, 8 years ago

Replying to Arnaud:

[1]: http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_50mb.mp4

This file contains many IDR frames.
I don't know the exact semantic definition of recovery points but all IDR frames can be used for seeking.

comment:13 by Arnaud, 8 years ago

Oh, OK.
Indeed that seems to be the problem in my initial file: only one IDR frame.
Then I guess this bug can be closed, because there isn't much to fix on ffmpeg library or on ffplay about it, don't you think?

If I'm right VLC uses ffmpeg, and I noticed it is able to seek this file, but it seems like it reads all the frames from the IDR frame to achieve this.
So I guess it's up to applications to implement such behavior on top of ffmpeg's seek if not enough IDR frames are present.

Thanks a lot for your help :)

comment:14 by Carl Eugen Hoyos, 8 years ago

No IDR- (and no I-) frames are necessary to seek a valid H.264 stream, recovery points are sufficient. A stream analyzer is needed to find out if your stream does contain more than one recovery point.

Note: See TracTickets for help on using tickets.