[FFmpeg-trac] #7485(undetermined:new): HLS not accurately seeking

FFmpeg trac at avcodec.org
Wed Oct 10 20:02:21 EEST 2018


#7485: HLS not accurately seeking
-------------------------------------+-------------------------------------
             Reporter:  lletourn     |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:
  undetermined                       |  unspecified
             Keywords:               |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 Summary of the bug:
 Seeking accurately in HLS videos doens't work, but it
 works fine in other containers (mp4, mkv, etc)

 tried with ffmpeg version 3.4.4 and master f85fa100db7d35952
 {{{
 % ./ffmpeg version N-92147-gf85fa100db Copyright (c) 2000-2018 the FFmpeg
 developers
 built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
 configuration: --enable-libfreetype --enable-gpl --enable-libx264
 --enable-libx265 --enable-nonfree --enable-libfdk-aac --enable-libopus
 --enable-libpulse --enable-libvpx --enable-openssl --enable-static
 libavutil      56. 19.101 / 56. 19.101
 libavcodec     58. 32.100 / 58. 32.100
 libavformat    58. 18.104 / 58. 18.104
 libavdevice    58.  4.105 / 58.  4.105
 libavfilter     7. 33.100 /  7. 33.100
 libswscale      5.  2.100 /  5.  2.100
 libswresample   3.  2.100 /  3.  2.100
 libpostproc    55.  2.100 / 55.  2.100
 }}}


 How to reproduce:
 Create an HLS video like this
 {{{
 % mkdir a
 % ./ffmpeg -y -s 640x480 -f rawvideo -pix_fmt rgb24 -r 25 -i /dev/zero -vf
 "drawtext=fontfile=/usr/share/fonts/truetype/freefont/FreeMono.ttf:
 text=%{n}: x=(w-tw)/2: y=h-(2*lh): fontcolor=white: box=1:
 boxcolor=0x000000FF" -an -vcodec libx264 -preset medium -tune stillimage
 -crf 24 -pix_fmt yuv420p -shortest -force_key_frames
 "expr:gte(t,n_forced*5)" -bf 0 -hls_time 5 -hls_list_size 0 -hls_wrap 0
 -hls_allow_cache 1 -hls_segment_filename "a/a_%04d.ts" -t 60 a/a.m3u8
 }}}

 And also create it's mp4 counterpart:
 {{{
 % ./ffmpeg -i a/a.m3u8 -codec copy a.mp4
 }}}

 And try to seek in any segment:
 {{{
 F=130;rm -f f.png;./ffmpeg -y -ss `awk "BEGIN {print (${F})/25}"` -i
 a/a.m3u8 -f image2 -q:v 1 -vframes 1 f.png
 ./ffplay f.png
 }}}
 Got frame 250 (bad)

 {{{
 F=126;rm -f f.png;./ffmpeg -y -ss `awk "BEGIN {print (${F})/25}"` -i
 a/a.m3u8 -f image2 -q:v 1 -vframes 1 f.png ; feh f.png
 }}}
 Got frame 250 (bad)

 {{{
 F=125;rm -f f.png;./ffmpeg -y -ss `awk "BEGIN {print (${F})/25}"` -i
 a/a.m3u8 -f image2 -q:v 1 -vframes 1 f.png
 ./ffplay f.png
 }}}
 Got frame 125 (good)

 {{{
 F=124;rm -f f.png;./ffmpeg -y -ss `awk "BEGIN {print (${F})/25}"` -i
 a/a.m3u8 -f image2 -q:v 1 -vframes 1 f.png
 ./ffplay f.png
 }}}
 Got frame 125 (bad)


 Now try the same with the mp4 and you'll always get the exact right frame
 {{{
 F=130;rm -f f.png;./ffmpeg -y -ss `awk "BEGIN {print (${F})/25}"` -i a.mp4
 -f image2 -q:v 1 -vframes 1 f.png
 ./ffplay f.png
 }}}
 Got 130 (good)

 {{{
 F=126;rm -f f.png;./ffmpeg -y -ss `awk "BEGIN {print (${F})/25}"` -i a.mp4
 -f image2 -q:v 1 -vframes 1 f.png
 ./ffplay f.png
 }}}
 Got 126 (good)
 etc

 it seems to only be seeking on segment boundaries.

--
Ticket URL: <https://trac.ffmpeg.org/ticket/7485>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list