mirror of
https://github.com/mpv-player/mpv
synced 2025-01-24 00:23:27 +00:00
player: add --cache-pause-initial option to start in buffering state
Reasons why you'd want this see manpage additions. Disabled by default, because it would increase latency of live streams by default. (Or well, at least it would be another problem when trying getting lower latency.)
This commit is contained in:
parent
9c22108fec
commit
f798bc3c25
@ -3865,6 +3865,20 @@ Cache
|
||||
ends before that for some other reason (like file end), playback resumes
|
||||
earlier.
|
||||
|
||||
``--cache-pause-initial=<yes|no>``
|
||||
Enter "buffering" mode before starting playback (default: no). This can be
|
||||
used to ensure playback starts smoothly, in exchange for waiting some time
|
||||
to prefetch network data (as controlled by ``--cache-pause-wait``). For
|
||||
example, some common behavior is that playback starts, but network caches
|
||||
immediately underrun when trying to decode more data as playback progresses.
|
||||
|
||||
Another thing that can happen is that the network prefetching is so CPU
|
||||
demanding (due to demuxing in the background) that playback drops frames
|
||||
at first. In these cases, it helps enabling this option, and setting
|
||||
``--cache-secs`` and ``--cache-pause-wait`` to roughly the same value.
|
||||
|
||||
This option also triggers when playback is restarted after seeking.
|
||||
|
||||
|
||||
Network
|
||||
-------
|
||||
|
@ -451,6 +451,7 @@ const m_option_t mp_opts[] = {
|
||||
OPT_FLAG("demuxer-thread", demuxer_thread, 0),
|
||||
OPT_FLAG("prefetch-playlist", prefetch_open, 0),
|
||||
OPT_FLAG("cache-pause", cache_pausing, 0),
|
||||
OPT_FLAG("cache-pause-initial", cache_pause_initial, 0),
|
||||
OPT_FLOAT("cache-pause-wait", cache_pause_wait, M_OPT_MIN, .min = 0),
|
||||
|
||||
OPT_DOUBLE("mf-fps", mf_fps, 0),
|
||||
|
@ -263,6 +263,7 @@ typedef struct MPOpts {
|
||||
char *sub_demuxer_name;
|
||||
|
||||
int cache_pausing;
|
||||
int cache_pause_initial;
|
||||
float cache_pause_wait;
|
||||
|
||||
struct image_writer_opts *screenshot_image_opts;
|
||||
|
@ -950,6 +950,17 @@ static void handle_playback_restart(struct MPContext *mpctx)
|
||||
mpctx->video_status < STATUS_READY)
|
||||
return;
|
||||
|
||||
if (opts->cache_pause_initial && (mpctx->video_status == STATUS_READY ||
|
||||
mpctx->audio_status == STATUS_READY))
|
||||
{
|
||||
// Audio or video is restarting, and initial buffering is enabled. Make
|
||||
// sure we actually restart them in paused mode, so no audio gets
|
||||
// dropped and video technically doesn't start yet.
|
||||
mpctx->paused_for_cache = true;
|
||||
mpctx->cache_buffer = 0;
|
||||
update_internal_pause_state(mpctx);
|
||||
}
|
||||
|
||||
if (mpctx->video_status == STATUS_READY) {
|
||||
mpctx->video_status = STATUS_PLAYING;
|
||||
get_relative_time(mpctx);
|
||||
|
Loading…
Reference in New Issue
Block a user