diff options
author | Ed Martin <edman007@edman007.com> | 2021-03-10 21:43:10 +0000 |
---|---|---|
committer | Steven Liu <liuqi05@kuaishou.com> | 2021-03-15 15:16:20 +0800 |
commit | 63344337f945843e8f247b3b15fa0f0e7b0f0a7c (patch) | |
tree | 6348c25e94dc4380eab9fde1c00a30e5219a947f /libavformat/hls.c | |
parent | 8e77624e849ce4cb51587583ea018ba568e77026 (diff) |
libavformat/hls: Reset options after open_url_keepalive() fails
open_url_keepalive() unsets the options when it uses them, this
includes the offsets for the Range: header. When using the HLS
tag #EXT-X-BYTERANGE along with multiple files, the range options
must be preserved after open_url_keepalive() returns EOF so that
the new file can be opened. Failure to do this results in ignoring
the #EXT-X-BYTERANGE tag and reading the wrong bytes of the file.
To fix it, reset the options before calling io_open() following
open_url_keepalive() reaching EOF
Reviewed-by: Steven Liu <liuqi05@kuaishou.com>
Diffstat (limited to 'libavformat/hls.c')
-rw-r--r-- | libavformat/hls.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/libavformat/hls.c b/libavformat/hls.c index af2468ad9b..d08d00cf24 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -677,6 +677,8 @@ static int open_url(AVFormatContext *s, AVIOContext **pb, const char *url, av_log(s, AV_LOG_WARNING, "keepalive request failed for '%s' with error: '%s' when opening url, retrying with new connection\n", url, av_err2str(ret)); + av_dict_copy(&tmp, *opts, 0); + av_dict_copy(&tmp, opts2, 0); ret = s->io_open(s, pb, url, AVIO_FLAG_READ, &tmp); } } else { |