From 1942e424e31df3e467522cca966429fd6c94429e Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 18 Jul 2014 16:16:05 +0200 Subject: demux: fix opening pipes with demux_lavf We told the demuxer that a pipe (if stream cache is enabled) is seekable. This is because the stream cache is technically seekable, it's just that seeking may fail at runtime if a non-cached byte range is requested. This caused libavformat to issue seeks on initialization (at least when piping mp4 youtube videos). Initialization failed completely after spamming tons of error messages. So, if an unseekable stream is cached, tell the demuxer that the file is not seekable. This gets reversed later (when printing a message about caching an unseekable stream), so the user can still try his luck by issuing a seek command. The important part is that libavformat initialization will not take code paths that will unnecessarily seek for whatever reasons. CC: @mpv-player/stable: regression from 0.3.x --- demux/demux.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'demux') diff --git a/demux/demux.c b/demux/demux.c index 028fde324f..c7d27f7466 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -745,6 +745,11 @@ static struct demuxer *open_given_type(struct mpv_global *global, .filename = talloc_strdup(demuxer, stream->url), .events = DEMUX_EVENT_ALL, }; + demuxer->seekable = stream->seekable; + if (demuxer->stream->uncached_stream && + !demuxer->stream->uncached_stream->seekable) + demuxer->seekable = false; + struct demux_internal *in = demuxer->in = talloc_ptrtype(demuxer, in); *in = (struct demux_internal){ .log = demuxer->log, -- cgit v1.2.3