mirror of
https://github.com/mpv-player/mpv
synced 2025-03-25 04:38:01 +00:00
player: disable seeking even if the cache is enabled
Until now, if a stream wasn't seekable, but the stream cache was enabled (--cache), we've enabled seeking anyway. The idea was that at least short seeks would typically fall within the cache. And if not, the user was out of luck and terrible things happened. In other words, it was unreliable. Be stricter about it and remove this behavior. Effectively, this will for example disable seeking in piped data. Instead of trying to be clever, add an --force-seekable option, which will always enable seeking if the user really wants it.
This commit is contained in:
parent
15581f2209
commit
23220db924
@ -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.)
|
||||
|
@ -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
|
||||
-----
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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),
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user