From 72ba8515d53ee681f8501e573579364781051ade Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 17 Feb 2015 23:42:04 +0100 Subject: demux_lavf: hack against hls showing "100%" position The HLs protocol consists of a "playlist" main file, which mpv downloads and passes to the HLS demuxer. The HLS demuxer actually requests segment files containing media data on its own. The packets read from the demuxer have a source file position set, but it's not from the main file. This leads to a strange effect: as a last fallback, the player will calculate the approximate playback position from the file position/size ratio, and since the main file is tiny, this will always show 100%. Fix this by resetting the packet file position. This doesn't affect the case when HLS actually reports a duration. (cherry picked from commit a64b1deaa613108ffa3496b0306c1aea1ba5a68f) --- demux/demux_lavf.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 4d84bd20d4..bc5d394eba 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -856,6 +856,12 @@ static int demux_lavf_fill_buffer(demuxer_t *demux) priv->last_pts = dp->dts * AV_TIME_BASE; } av_free_packet(pkt); + + // Do not confuse player's position estimation (position is into segment, + // player knows about the playlist main file only). + if (matches_avinputformat_name(priv, "hls")) + dp->pos = -1; + demux_add_packet(stream, dp); return 1; } -- cgit v1.2.3