diff options
-rw-r--r-- | DOCS/interface-changes.rst | 1 | ||||
-rw-r--r-- | DOCS/man/options.rst | 5 | ||||
-rw-r--r-- | demux/demux.c | 5 | ||||
-rw-r--r-- | options/options.c | 2 | ||||
-rw-r--r-- | options/options.h | 1 |
5 files changed, 11 insertions, 3 deletions
diff --git a/DOCS/interface-changes.rst b/DOCS/interface-changes.rst index bf2b17d1cd..7ffe4351a8 100644 --- a/DOCS/interface-changes.rst +++ b/DOCS/interface-changes.rst @@ -20,6 +20,7 @@ Interface changes :: --- mpv 0.10.0 will be released --- + - add --force-seekable, and change default seekability in some cases - add vf yadif/vavpp/vdpaupp interlaced-only suboptions Also, the option is enabled by default (Except vf_yadif, which has it enabled only if it's inserted by the deinterlace property.) diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index da0038bfbf..8a0587e383 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -2229,6 +2229,11 @@ Demuxer ``--demuxer-readahead-bytes=<bytes>`` See ``--demuxer-readahead-packets``. +``--force-seekable=<yes|no>`` + If the player thinks that the media is not seekable (e.g. playing from a + pipe, or it's a http stream with a server that doesn't support range + requests), seeking will be disabled. This option can forcibly enable it. + For seeks within the cache, there's a good chance of success. Input ----- diff --git a/demux/demux.c b/demux/demux.c index aa3308b87f..ff6bf40ec0 100644 --- a/demux/demux.c +++ b/demux/demux.c @@ -990,9 +990,8 @@ static struct demuxer *open_given_type(struct mpv_global *global, mp_verbose(log, "Detected file format: %s\n", desc->desc); if (!in->d_thread->seekable) mp_verbose(log, "Stream is not seekable.\n"); - // Pretend we can seek if we can't seek, but there's a cache. - if (!in->d_thread->seekable && stream->uncached_stream) { - mp_verbose(log, "Enabling seeking because stream cache is active.\n"); + if (!in->d_thread->seekable && demuxer->opts->force_seekable) { + mp_warn(log, "Not seekable, but enabling seeking on user request.\n"); in->d_thread->seekable = true; in->d_thread->partially_seekable = true; } diff --git a/options/options.c b/options/options.c index d92a0eef5d..7523be990a 100644 --- a/options/options.c +++ b/options/options.c @@ -243,6 +243,8 @@ const m_option_t mp_opts[] = { OPT_INTRANGE("demuxer-readahead-packets", demuxer_min_packs, 0, 0, MAX_PACKS), OPT_INTRANGE("demuxer-readahead-bytes", demuxer_min_bytes, 0, 0, MAX_PACK_BYTES), + OPT_FLAG("force-seekable", force_seekable, 0), + OPT_DOUBLE("cache-secs", demuxer_min_secs_cache, M_OPT_MIN, .min = 0), OPT_FLAG("cache-pause", cache_pausing, 0), diff --git a/options/options.h b/options/options.h index 9d211390e0..b43e28a06f 100644 --- a/options/options.h +++ b/options/options.h @@ -199,6 +199,7 @@ typedef struct MPOpts { double demuxer_min_secs; char *audio_demuxer_name; char *sub_demuxer_name; + int force_seekable; double demuxer_min_secs_cache; int cache_pausing; |