[FFmpeg-devel] [PATCH V1] lavf/hls: add http_seekable option for HTTP partial requests

Liu Steven lq at chinaffmpeg.org
Thu Aug 8 03:28:54 EEST 2019



> 在 2019年8月8日,上午12:32,Jun Zhao <mypopydev at gmail.com> 写道:
> 
> From: Jun Zhao <barryjzhao at tencent.com>
> 
> 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.
> 
> Signed-off-by: Jun Zhao <barryjzhao at tencent.com>
> ---
> doc/demuxers.texi |    4 ++++
> libavformat/hls.c |    9 +++++++--
> 2 files changed, 11 insertions(+), 2 deletions(-)
> 
> diff --git a/doc/demuxers.texi b/doc/demuxers.texi
> index 57d1532..fe766a5 100644
> --- a/doc/demuxers.texi
> +++ b/doc/demuxers.texi
> @@ -338,6 +338,10 @@ Enabled by default.
> @item http_multiple
> Use multiple HTTP connections for downloading HTTP segments.
> Enabled by default for HTTP/1.1 servers.
> +
> + at item http_seekable
> +Use HTTP partial requests for downloading HTTP segments.
> +0 = disable, 1 = enable, -1 = auto, Default is auto.
> @end table
> 
> @section image2
> diff --git a/libavformat/hls.c b/libavformat/hls.c
> index 0522445..61b6759 100644
> --- a/libavformat/hls.c
> +++ b/libavformat/hls.c
> @@ -207,6 +207,7 @@ typedef struct HLSContext {
>     int max_reload;
>     int http_persistent;
>     int http_multiple;
> +    int http_seekable;
>     AVIOContext *playlist_pb;
> } HLSContext;
> 
> @@ -1796,8 +1797,10 @@ static int hls_read_header(AVFormatContext *s)
>     if ((ret = save_avio_options(s)) < 0)
>         goto fail;
> 
> -    /* Some HLS servers don't like being sent the range header */
> -    av_dict_set(&c->avio_opts, "seekable", "0", 0);
> +    /* XXX: Some HLS servers don't like being sent the range header,
> +       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)
>         goto fail;
> @@ -2311,6 +2314,8 @@ static const AVOption hls_options[] = {
>         OFFSET(http_persistent), AV_OPT_TYPE_BOOL, {.i64 = 1}, 0, 1, FLAGS },
>     {"http_multiple", "Use multiple HTTP connections for fetching segments",
>         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}
> };
> 
> -- 
> 1.7.1
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe”.


LGTM

Thanks
Steven





More information about the ffmpeg-devel mailing list