[FFmpeg-devel] [PATCH] http: try to detect live akamai streams and dont enable seeking for them

Reimar Döffinger Reimar.Doeffinger at gmx.de
Sun Jun 3 22:38:14 CEST 2012


On Sun, Jun 03, 2012 at 06:43:33PM +0200, Clément Bœsch wrote:
> On Sun, Jun 03, 2012 at 06:36:34PM +0200, Michael Niedermayer wrote:
> > Fixes ticket1320
> > 
> > Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> > ---
> >  libavformat/http.c |    6 +++++-
> >  1 file changed, 5 insertions(+), 1 deletion(-)
> > 
> > diff --git a/libavformat/http.c b/libavformat/http.c
> > index 9a5ca62..28a777c 100644
> > --- a/libavformat/http.c
> > +++ b/libavformat/http.c
> > @@ -57,6 +57,7 @@ typedef struct {
> >      int multiple_requests;  /**< A flag which indicates if we use persistent connections. */
> >      uint8_t *post_data;
> >      int post_datalen;
> > +    int is_akamai;
> >  } HTTPContext;
> >  
> >  #define OFFSET(x) offsetof(HTTPContext, x)
> > @@ -318,7 +319,8 @@ static int process_line(URLContext *h, char *line, int line_count,
> >                  if ((slash = strchr(p, '/')) && strlen(slash) > 0)
> >                      s->filesize = atoll(slash+1);
> >              }
> > -            h->is_streamed = 0; /* we _can_ in fact seek */
> > +            if (!s->is_akamai || s->filesize != 2147483647)
> > +                h->is_streamed = 0; /* we _can_ in fact seek */
> >          } else if (!av_strcasecmp(tag, "Accept-Ranges") && !strncmp(p, "bytes", 5)) {
> >              h->is_streamed = 0;
> >          } else if (!av_strcasecmp (tag, "Transfer-Encoding") && !av_strncasecmp(p, "chunked", 7)) {
> > @@ -333,6 +335,8 @@ static int process_line(URLContext *h, char *line, int line_count,
> >          } else if (!av_strcasecmp (tag, "Connection")) {
> >              if (!strcmp(p, "close"))
> >                  s->willclose = 1;
> > +        } else if (!av_strcasecmp (tag, "Server") && !av_strcasecmp (p, "AkamaiGHost")) {
> > +            s->is_akamai = 1;
> >          }
> >      }
> 
> This reminds me of a similar issue Reimar fixed in MPlayer by adding
> another exception (IIRC it was Youtube); this might be a fairly common
> issue with some webservers, so maybe a more generic attribute could be
> used? (broken_httpserver or something).

I'm not sure if FFmpeg's http implementation can detect it in some other
way, however it is true that in MPlayer we have two other broken cases
(and we lack this one). YouTube and MakeMKV are those.
(see stream/http.c:758).


More information about the ffmpeg-devel mailing list