[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