summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-02-17 23:42:04 +0100
committerwm4 <wm4@nowhere>2015-02-17 23:42:04 +0100
commita64b1deaa613108ffa3496b0306c1aea1ba5a68f (patch)
treec00b42aaa5880f8f9b08b4bf86e2c9b69a374ace /demux
parentd26ba961d05a2de165fa87c41d705ed3db00231b (diff)
downloadmpv-a64b1deaa613108ffa3496b0306c1aea1ba5a68f.tar.bz2
mpv-a64b1deaa613108ffa3496b0306c1aea1ba5a68f.tar.xz
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.
Diffstat (limited to 'demux')
-rw-r--r--demux/demux_lavf.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c
index 83058d5105..f6608259d8 100644
--- a/demux/demux_lavf.c
+++ b/demux/demux_lavf.c
@@ -858,6 +858,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;
}