mirror of
https://github.com/mpv-player/mpv
synced 2025-02-06 07:01:45 +00:00
demux_lavf: signal no seeking for RTSP streams without duration
RTSP supports seeking, but at least the libavformat implementation makes this dependent on runtime behavior. So you have to perform a seek, and check if it fails. But even if you do this, the stream is interrupted and restarted, and there seem to be other issues. Assume that RTSP with unknown duration means it's a live stream, and disable seeking in this case, as suggested by the issue reporter. Fixes: #7472
This commit is contained in:
parent
bd6d8d320f
commit
6726b7a1ba
@ -146,6 +146,7 @@ struct format_hack {
|
||||
bool is_network : 1;
|
||||
bool no_seek : 1;
|
||||
bool no_pcm_seek : 1;
|
||||
bool no_seek_on_no_duration : 1;
|
||||
};
|
||||
|
||||
#define BLACKLIST(fmt) {fmt, .ignore = true}
|
||||
@ -174,6 +175,7 @@ static const struct format_hack format_hacks[] = {
|
||||
{"matroska", .skipinfo = true, .no_pcm_seek = true, .use_stream_ids = true},
|
||||
|
||||
{"v4l2", .no_seek = true},
|
||||
{"rtsp", .no_seek_on_no_duration = true},
|
||||
|
||||
// In theory, such streams might contain timestamps, but virtually none do.
|
||||
{"h264", .if_flags = AVFMT_NOTIMESTAMPS },
|
||||
@ -1090,6 +1092,9 @@ static int demux_open_lavf(demuxer_t *demuxer, enum demux_check check)
|
||||
demuxer->duration = duration;
|
||||
}
|
||||
|
||||
if (demuxer->duration < 0 && priv->format_hack.no_seek_on_no_duration)
|
||||
demuxer->seekable = false;
|
||||
|
||||
// In some cases, libavformat will export bogus bullshit timestamps anyway,
|
||||
// such as with mjpeg.
|
||||
if (priv->avif_flags & AVFMT_NOTIMESTAMPS) {
|
||||
|
Loading…
Reference in New Issue
Block a user