diff mbox series

[FFmpeg-devel] Revert "avformat/hls: fail on probing non hls/m3u8 file extensions"

Message ID 20230514194129.18840-1-anton@khirnov.net
State New
Headers show
Series [FFmpeg-devel] Revert "avformat/hls: fail on probing non hls/m3u8 file extensions" | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Anton Khirnov May 14, 2023, 7:41 p.m. UTC
This reverts commit 6b1f68ccb04d791f0250e05687c346a99ff47ea1, which
broke many streams in the wild

Fixes #10353.
---
 libavformat/hls.c | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

Comments

Michael Niedermayer May 14, 2023, 9:39 p.m. UTC | #1
On Sun, May 14, 2023 at 09:41:29PM +0200, Anton Khirnov wrote:
> This reverts commit 6b1f68ccb04d791f0250e05687c346a99ff47ea1, which
> broke many streams in the wild
> 
> Fixes #10353.

This change violates a SHOULD in rfc8216 4.  Playlists

   Each Playlist file MUST be identifiable either by the path component
   of its URI or by HTTP Content-Type.  In the first case, the path MUST
   end with either .m3u8 or .m3u.  In the second, the HTTP Content-Type
   MUST be "application/vnd.apple.mpegurl" or "audio/mpegurl".  
   
   Clients SHOULD refuse to parse Playlists that are not so identified.
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The commit message should mention the RFC and why it is not following the
recommandition of not parsing such Playlists

Also ive taken a very brief look at #10353 and the example there shown
seems to fail because of the "?..." stuff in the url, it seemed to be
.m3u8 files, only the leaves seemes .ts

I do not object to revert this as a temporary fix of course

thx

[...]
Leo Izen May 14, 2023, 9:58 p.m. UTC | #2
On 5/14/23 17:39, Michael Niedermayer wrote:
> On Sun, May 14, 2023 at 09:41:29PM +0200, Anton Khirnov wrote:
>> This reverts commit 6b1f68ccb04d791f0250e05687c346a99ff47ea1, which
>> broke many streams in the wild
>>
>> Fixes #10353.
> 
> This change violates a SHOULD in rfc8216 4.  Playlists
> 
>     Each Playlist file MUST be identifiable either by the path component
>     of its URI or by HTTP Content-Type.  In the first case, the path MUST
>     end with either .m3u8 or .m3u.  In the second, the HTTP Content-Type
>     MUST be "application/vnd.apple.mpegurl" or "audio/mpegurl".
>     
>     Clients SHOULD refuse to parse Playlists that are not so identified.
>     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 

Except that commit doesn't check the mimetype. Some CDNs such as Azure 
Media Services, only use mimetype to identify HLS streams, and not file 
extensions. See: 
https://learn.microsoft.com/en-us/azure/media-services/latest/encode-dynamic-packaging-concept

This commit breaks more than it helps.

- Leo Izen (Traneptora / thebombzen)
Kacper Michajłow May 14, 2023, 10:40 p.m. UTC | #3
On Sun, 14 May 2023 at 23:39, Michael Niedermayer
<michael@niedermayer.cc> wrote:
>
> On Sun, May 14, 2023 at 09:41:29PM +0200, Anton Khirnov wrote:
> > This reverts commit 6b1f68ccb04d791f0250e05687c346a99ff47ea1, which
> > broke many streams in the wild
> >
> > Fixes #10353.
>
> This change violates a SHOULD in rfc8216 4.  Playlists
>
>    Each Playlist file MUST be identifiable either by the path component
>    of its URI or by HTTP Content-Type.

either/or

>  In the first case, the path MUST
>    end with either .m3u8 or .m3u.

First case, path component with valid extention.

>  In the second, the HTTP Content-Type
>    MUST be "application/vnd.apple.mpegurl" or "audio/mpegurl".

Second (OR) case for URI with Content-Type.

So current FFmpeg HEAD violate RFC, as it should allow URI with Content-Type.

- Kacper
Michael Niedermayer May 14, 2023, 11:06 p.m. UTC | #4
On Mon, May 15, 2023 at 12:40:50AM +0200, Kacper Michajlow wrote:
> On Sun, 14 May 2023 at 23:39, Michael Niedermayer
> <michael@niedermayer.cc> wrote:
> >
> > On Sun, May 14, 2023 at 09:41:29PM +0200, Anton Khirnov wrote:
> > > This reverts commit 6b1f68ccb04d791f0250e05687c346a99ff47ea1, which
> > > broke many streams in the wild
> > >
> > > Fixes #10353.
> >
> > This change violates a SHOULD in rfc8216 4.  Playlists
> >
> >    Each Playlist file MUST be identifiable either by the path component
> >    of its URI or by HTTP Content-Type.
> 
> either/or
> 
> >  In the first case, the path MUST
> >    end with either .m3u8 or .m3u.
> 
> First case, path component with valid extention.
> 
> >  In the second, the HTTP Content-Type
> >    MUST be "application/vnd.apple.mpegurl" or "audio/mpegurl".
> 
> Second (OR) case for URI with Content-Type.
> 
> So current FFmpeg HEAD violate RFC, as it should allow URI with Content-Type.

yes, code is buggy, i didnt see teh report before today night, 
and was doing too much non ffmpeg crap last 2-3 days so didnt see it before

everyone is upset, noone mailed me, noone posted a good fix, noone reverted

ill post something before going to sleep today probably but i likely
wont have the time to properly test it before bed
(testcases with ffmpeg / ffplay btw makes it easier to test than with
 links to random webpages)

thx

[...]
Kacper Michajłow May 14, 2023, 11:28 p.m. UTC | #5
On Mon, 15 May 2023 at 01:06, Michael Niedermayer
<michael@niedermayer.cc> wrote:
>
> On Mon, May 15, 2023 at 12:40:50AM +0200, Kacper Michajlow wrote:
> > On Sun, 14 May 2023 at 23:39, Michael Niedermayer
> > <michael@niedermayer.cc> wrote:
> > >
> > > On Sun, May 14, 2023 at 09:41:29PM +0200, Anton Khirnov wrote:
> > > > This reverts commit 6b1f68ccb04d791f0250e05687c346a99ff47ea1, which
> > > > broke many streams in the wild
> > > >
> > > > Fixes #10353.
> > >
> > > This change violates a SHOULD in rfc8216 4.  Playlists
> > >
> > >    Each Playlist file MUST be identifiable either by the path component
> > >    of its URI or by HTTP Content-Type.
> >
> > either/or
> >
> > >  In the first case, the path MUST
> > >    end with either .m3u8 or .m3u.
> >
> > First case, path component with valid extention.
> >
> > >  In the second, the HTTP Content-Type
> > >    MUST be "application/vnd.apple.mpegurl" or "audio/mpegurl".
> >
> > Second (OR) case for URI with Content-Type.
> >
> > So current FFmpeg HEAD violate RFC, as it should allow URI with Content-Type.
>
> yes, code is buggy, i didnt see teh report before today night,
> and was doing too much non ffmpeg crap last 2-3 days so didnt see it before
>
> everyone is upset, noone mailed me, noone posted a good fix, noone reverted
>
> ill post something before going to sleep today probably but i likely
> wont have the time to properly test it before bed
> (testcases with ffmpeg / ffplay btw makes it easier to test than with
>  links to random webpages)
>
> thx
>

All good, take your time. I just wanted to clarify that current
implementation is too strict/buggy.

I think the upset comes from the fact that a lot of users started
flooding issue trackers with the complaints that their favorite live
stream doesn't work. And while the underlying issue is quite small
regression, there were uncertainty at first what is going on and a lot
of unnecessary comments and remarks were made.

- Kacper
Anton Khirnov May 16, 2023, 2:01 p.m. UTC | #6
Quoting Michael Niedermayer (2023-05-14 23:39:44)
> On Sun, May 14, 2023 at 09:41:29PM +0200, Anton Khirnov wrote:
> > This reverts commit 6b1f68ccb04d791f0250e05687c346a99ff47ea1, which
> > broke many streams in the wild
> > 
> > Fixes #10353.
> 
> This change violates a SHOULD in rfc8216 4.  Playlists
> 
>    Each Playlist file MUST be identifiable either by the path component
>    of its URI or by HTTP Content-Type.  In the first case, the path MUST
>    end with either .m3u8 or .m3u.  In the second, the HTTP Content-Type
>    MUST be "application/vnd.apple.mpegurl" or "audio/mpegurl".  
>    
>    Clients SHOULD refuse to parse Playlists that are not so identified.
>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 
> The commit message should mention the RFC and why it is not following the
> recommandition of not parsing such Playlists

It's been a longstanding project policy to try to process non-strictly
compliant files when possible.

And as I've said in the other thread (did not have time yet to reply
there, hopefully will soon), I don't think this is the place to enforce
such policies. The fact that you have to use NULL logging context is
by itself indicative of that.
diff mbox series

Patch

diff --git a/libavformat/hls.c b/libavformat/hls.c
index 11e345b280..8a96a37ff9 100644
--- a/libavformat/hls.c
+++ b/libavformat/hls.c
@@ -2532,15 +2532,8 @@  static int hls_probe(const AVProbeData *p)
 
     if (strstr(p->buf, "#EXT-X-STREAM-INF:")     ||
         strstr(p->buf, "#EXT-X-TARGETDURATION:") ||
-        strstr(p->buf, "#EXT-X-MEDIA-SEQUENCE:")) {
-
-        if (!av_match_ext(p->filename, "m3u8,hls,m3u")) {
-            av_log(NULL, AV_LOG_ERROR, "Not detecting m3u8/hls with non standard extension\n");
-            return 0;
-        }
-
+        strstr(p->buf, "#EXT-X-MEDIA-SEQUENCE:"))
         return AVPROBE_SCORE_MAX;
-    }
     return 0;
 }