[FFmpeg-cvslog] libavformat/hls: Reset options after open_url_keepalive() fails

Ed Martin git at videolan.org
Mon Mar 15 09:21:30 EET 2021


ffmpeg | branch: master | Ed Martin <edman007 at edman007.com> | Wed Mar 10 21:43:10 2021 +0000| [63344337f945843e8f247b3b15fa0f0e7b0f0a7c] | committer: Steven Liu

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 at kuaishou.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=63344337f945843e8f247b3b15fa0f0e7b0f0a7c
---

 libavformat/hls.c | 2 ++
 1 file changed, 2 insertions(+)

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 {



More information about the ffmpeg-cvslog mailing list