[FFmpeg-trac] #6402(avformat:new): First frames incorrect after seeking on H264 file
FFmpeg
trac at avcodec.org
Fri May 19 00:14:53 EEST 2017
#6402: First frames incorrect after seeking on H264 file
----------------------------------+---------------------------------------
Reporter: jrummell | Type: defect
Status: new | Priority: normal
Component: avformat | Version: unspecified
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
----------------------------------+---------------------------------------
Summary of the bug:
While playing a H264 video, seeking to a different position appears to
display the wrong frames. After a few (1-4?), subsequent frames look
correct.
Input: https://storage.googleapis.com/chromiumos-test-assets-public/Shaka-
Dash/480.mp4
How to reproduce:
> ffplay 480.mp4
ffplay version N-86098-g3fefaea Copyright (c) 2003-2017 the FFmpeg
developers
built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
configuration: --pkg-config-flags=--static --extra --enable-gpl
--enable-libass --enable-libfdk-aac --enable-libfreetype --enable-
libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis
--enable-libvpx --enable-libx264 --enable-nonfree
libavutil 55. 63.100 / 55. 63.100
libavcodec 57. 96.101 / 57. 96.101
libavformat 57. 72.101 / 57. 72.101
libavdevice 57. 7.100 / 57. 7.100
libavfilter 6. 89.101 / 6. 89.101
libswscale 4. 7.101 / 4. 7.101
libswresample 2. 8.100 / 2. 8.100
libpostproc 54. 6.100 / 54. 6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '480.mp4':
Metadata:
major_brand : dash
minor_version : 0
compatible_brands: iso6mp41avc1
creation_time : 2015-09-01T00:38:39.000000Z
Duration: 00:07:10.00, start: 0.033367, bitrate: 626 kb/s
Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p,
854x480 [SAR 1:1 DAR 427:240], 15 kb/s, 29.97 fps, 29.97 tbr, 90k tbn,
59.94 tbc (default)
Metadata:
creation_time : 2015-09-01T00:38:39.000000Z
handler_name : VideoHandler
Once playing, right click at various different points. In some places it's
obvious that a different frame is displayed.
Example: seek to 46%. Person walking across the screen jumps several times
before walking normally. Even if the video is paused when you seek, then
when play is started again the same effect is seen.
Reference: http://crbug.com/568336
After playing with this for a while, it appears to be related to commit
4ab56667594842283dc5ae07f0daba2a2cb4d3af. My guess is that when seeking
the first frame displayed is the one at the start of the fragment, but
then the code catches up to the correct position quickly. Removing the
call to either mov_read_sidx() or mov_seek_fragment() in libavformat/mov.c
"fixes" the problem.
In Chromium, the effect is different. It gets the following frames out of
order, so the video jumps around quite a bit. Observation video attached
to the crbug listed above, if you're interested.
--
Ticket URL: <https://trac.ffmpeg.org/ticket/6402>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list