Opened 4 years ago

Closed 5 months ago

#7485 closed defect (fixed)

HLS not accurately seeking on TS

Reported by: Louis Letourneau Owned by:
Priority: normal Component: avformat
Version: git-master Keywords: hls
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no


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)

it seems to only be seeking on segment boundaries.

Change History (7)

comment:1 by Louis Letourneau, 4 years ago

Work from Nick Ryan solves the issue it seems:

comment:2 by Balling, 3 years ago

Status: newopen

Again the patch is there.

comment:3 by Carl Eugen Hoyos, 3 years ago

Component: undeterminedavformat
Keywords: hls added
Version: unspecifiedgit-master

comment:6 by SuRGeoNix, 5 months ago

I think this is related with this

It's been a long time for this one and couple of patches are existing already.

comment:7 by Balling, 5 months ago

Resolution: fixed
Status: openclosed
Summary: HLS not accurately seekingHLS not accurately seeking on TS

e78d0810d1741535c95e5ae0f198977626b1cdff fixes it, indeed.

ffmpeg -ss 3 -i -t 2 out.mp4

produces not 262 bytes files and to ts does not produce 0 bytes file.
ffmpeg -ss 3 -i -t 2 out.mp4

still is bad, since fmp4 requires but that is #7359.

THAT MUST BE fixed ASAP too.

Note: See TracTickets for help on using tickets.