Commit 5e829262 authored by Jun Zhao's avatar Jun Zhao

lavf/hls: add http_seekable option for HTTP partial requests

Add http_seekable option for HTTP partial requests, when The
EXT-X-BYTERANGE tag indicates that a Media Segment is a sub-range
of the resource identified by its URI, we can use HTTP partial
requests to get the Media Segment.
Reviewed-by: 's avatarSteven Liu <lq@chinaffmpeg.org>
Signed-off-by: 's avatarJun Zhao <barryjzhao@tencent.com>
parent af3ddd58
...@@ -338,6 +338,10 @@ Enabled by default. ...@@ -338,6 +338,10 @@ Enabled by default.
@item http_multiple @item http_multiple
Use multiple HTTP connections for downloading HTTP segments. Use multiple HTTP connections for downloading HTTP segments.
Enabled by default for HTTP/1.1 servers. Enabled by default for HTTP/1.1 servers.
@item http_seekable
Use HTTP partial requests for downloading HTTP segments.
0 = disable, 1 = enable, -1 = auto, Default is auto.
@end table @end table
@section image2 @section image2
......
...@@ -207,6 +207,7 @@ typedef struct HLSContext { ...@@ -207,6 +207,7 @@ typedef struct HLSContext {
int max_reload; int max_reload;
int http_persistent; int http_persistent;
int http_multiple; int http_multiple;
int http_seekable;
AVIOContext *playlist_pb; AVIOContext *playlist_pb;
} HLSContext; } HLSContext;
...@@ -1796,8 +1797,10 @@ static int hls_read_header(AVFormatContext *s) ...@@ -1796,8 +1797,10 @@ static int hls_read_header(AVFormatContext *s)
if ((ret = save_avio_options(s)) < 0) if ((ret = save_avio_options(s)) < 0)
goto fail; goto fail;
/* Some HLS servers don't like being sent the range header */ /* XXX: Some HLS servers don't like being sent the range header,
av_dict_set(&c->avio_opts, "seekable", "0", 0); in this case, need to setting http_seekable = 0 to disable
the range header */
av_dict_set_int(&c->avio_opts, "seekable", c->http_seekable, 0);
if ((ret = parse_playlist(c, s->url, NULL, s->pb)) < 0) if ((ret = parse_playlist(c, s->url, NULL, s->pb)) < 0)
goto fail; goto fail;
...@@ -2311,6 +2314,8 @@ static const AVOption hls_options[] = { ...@@ -2311,6 +2314,8 @@ static const AVOption hls_options[] = {
OFFSET(http_persistent), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, FLAGS }, OFFSET(http_persistent), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, FLAGS },
{"http_multiple", "Use multiple HTTP connections for fetching segments", {"http_multiple", "Use multiple HTTP connections for fetching segments",
OFFSET(http_multiple), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, FLAGS}, OFFSET(http_multiple), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, FLAGS},
{"http_seekable", "Use HTTP partial requests, 0 = disable, 1 = enable, -1 = auto",
OFFSET(http_seekable), AV_OPT_TYPE_BOOL, { .i64 = -1}, -1, 1, FLAGS},
{NULL} {NULL}
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment