Opened 8 years ago

Last modified 4 days ago

#5309 open enhancement

Apply "-accurate_seek" alike default for `ffplay`

Reported by: Arnaud Owned by:
Priority: normal Component: ffplay
Version: git-master Keywords: seek seeking
Cc: MasterQuestionable Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no


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 (20)

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
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.


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

Replying to Arnaud:


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.

comment:15 by Balling, 5 days ago

It actually has 1 keyframe only, as second I frame is not a keyframe, it is not IDR (as nowadays avc includes I frames that are not keyframes, but not with ffprobe show_frames, you need -skip_frame nokey, see bug #8820).

Are we planning to implement decoding seek like said in #3083?

Last edited 4 days ago by Balling (previous) (diff)

comment:16 by MasterQuestionable, 5 days ago

͏    Codec container wrestling each other...
͏    .
͏    And the Open GOP (Group of Pictures) non-sense:
͏    That would be essentially identical as well-set ordinary (Closed) GOP.

͏    Ideally each GOP shall be an independent file:
͏    As in:

͏    And videos are not necessarily not meant to be viewed frame-by-frame. (thus any artifact unacceptable)

comment:17 by Balling, 4 days ago


B frame in one GOP is able to reference a frame in a different GOP. A GOP that contains any such outward-referencing frame is known as an "open GOP".

What is worse: B frames can be references. Even each B frame can be reference frame.

Last edited 4 days ago by Balling (previous) (diff)

comment:18 by Balling, 4 days ago

Component: undeterminedffplay
Status: newopen
Summary: Seek doesn't work in some .mp4 filesSeek doesn't work in some .mp4 files in ffplay

So the bug is only in ffplay. Actually.

comment:19 by MasterQuestionable, 4 days ago

Cc: MasterQuestionable added

͏    Essentially such referencing could be still represented with Closed GOP...
͏    Note the final referencing is certain: not changing randomly.

͏    Probably the Open GOP design is to support certain really unusual fringe cases:
͏    Where 1 GOP would like to reference part (not all) of other GOP.
͏    And using the big GOP containing all is somehow unacceptable.

͏    However there doesn't seem to be much valid cases for such usage.
͏    Plus the apparent havoc of general interop.

comment:20 by MasterQuestionable, 4 days ago

Keywords: seeking added; h264 mov removed
Summary: Seek doesn't work in some .mp4 files in ffplayApply "-accurate_seek" alike default for `ffplay`
Type: defectenhancement

͏    Per <Seeking> # Input seeking.

Note: See TracTickets for help on using tickets.