[FFmpeg-devel] [PATCH v2 2/4] avformat/hls: respect http_persistent only for http playlist urls

Aman Gupta ffmpeg at tmm1.net
Tue Dec 26 08:12:27 EET 2017


On Mon, Dec 25, 2017 at 9:28 PM wm4 <nfxjfg at googlemail.com> wrote:

> On Mon, 25 Dec 2017 21:22:59 -0800
> Aman Gupta <ffmpeg at tmm1.net> wrote:
>
> > From: Aman Gupta <aman at tmm1.net>
> >
> > Fixes a segfault when reading a live playlist (without end tag) from
> non-http url (like a file on disk).
> >
> > Signed-off-by: Aman Gupta <aman at tmm1.net>
> > ---
> >  libavformat/hls.c | 5 +++--
> >  1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/libavformat/hls.c b/libavformat/hls.c
> > index 73bf55b791..c30d71a477 100644
> > --- a/libavformat/hls.c
> > +++ b/libavformat/hls.c
> > @@ -724,8 +724,9 @@ static int parse_playlist(HLSContext *c, const char
> *url,
> >      struct variant_info variant_info;
> >      char tmp_str[MAX_URL_SIZE];
> >      struct segment *cur_init_section = NULL;
> > +    int is_http = av_strstart(url, "http", NULL);
>
> There got to be a better way to check whether the protocol
> implementation is one which works with the http persistent functions. I
> can only repeat my suggestion that this should be integrated into
> URLContext.


I could use ffio_geturlcontext() to check if the AVIOContext has a
URLContext, but that implementation seems fragile and I'm not sure if it is
safe to call for non-http protocols.

I don't have a lot of experience with AVIO or URLContext, so if you can
suggest a good API to implement, I'll give it a try.

Aman


>
> > -    if (!in && c->http_persistent && c->playlist_pb) {
> > +    if (!in && is_http && c->http_persistent && c->playlist_pb) {
> >          in = c->playlist_pb;
> >          ret = open_url_keepalive(c->ctx, &c->playlist_pb, url);
> >          if (ret == AVERROR_EXIT) {
> > @@ -759,7 +760,7 @@ static int parse_playlist(HLSContext *c, const char
> *url,
> >          if (ret < 0)
> >              return ret;
> >
> > -        if (c->http_persistent)
> > +        if (c->http_persistent && is_http)
> >              c->playlist_pb = in;
> >          else
> >              close_in = 1;
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>


More information about the ffmpeg-devel mailing list