summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorEd Martin <edman007@edman007.com>2021-03-10 21:43:10 +0000
committerSteven Liu <liuqi05@kuaishou.com>2021-03-15 15:16:20 +0800
commit63344337f945843e8f247b3b15fa0f0e7b0f0a7c (patch)
tree6348c25e94dc4380eab9fde1c00a30e5219a947f /libavformat
parent8e77624e849ce4cb51587583ea018ba568e77026 (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')
-rw-r--r--libavformat/hls.c2
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 {