HLS: multivariant playlist with `FRAME-RATE=0.000` fails with IllegalArgumentException since Format.frameRate must be positive

Abierto Apto para principiantes
#3,540 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 4 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
android, java
Área
api, backend

Línea de trabajo

Empieza en HlsPlaylistParser.parseMultivariantPlaylist, en la ruta de análisis de FRAME-RATE indicada en el issue, y compárala con la normalización de las tasas de fotogramas no positivas descrita en el issue #3399. Reproduce el problema con la playlist proporcionada, que establece FRAME-RATE=0.000, y luego comprueba las pruebas del parser HLS para ver la cobertura de playlists multivariantes. Se considera terminado cuando ese valor se trata como Format.NO_VALUE y el análisis deja de lanzar una excepción.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Version

Media3 1.11.1

More version details

Regression: the same stream plays with Media3 1.5.1. The check was added in 3ae59501e ("Enforce that Format.frameRate is positive"). HlsPlaylistParser on main still passes the raw FRAME-RATE attribute value to Format.Builder.setFrameRate.

Devices that reproduce the issue

Samsung SM-A556E, Android 16. Not device-specific: the failure is in manifest parsing.

Devices that do not reproduce the issue

None known.

Reproducible in the demo app?

Yes (demo app built from the 1.11.1 tag)

Reproduction steps
  1. Play https://player-culturafm.stream.uol.com.br/live/culturafm.m3u8, e.g.
    adb shell am start -a androidx.media3.demo.main.action.VIEW -d "https://player-culturafm.stream.uol.com.br/live/culturafm.m3u8" -n androidx.media3.demo.main/.PlayerActivity
  2. The multivariant playlist loads with HTTP 200 and parsing throws.

The playlist:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=716800,RESOLUTION=960x540,FRAME-RATE=0.000
culturafm_luhd.m3u8?vhost=player-culturafm.stream.uol.com.br
Expected result

The stream plays, with a non-positive FRAME-RATE treated as unknown (Format.NO_VALUE), as it did before 3ae59501e. Other players (web browsers, cliamp on macOS) play this stream.

Actual result

Playback fails with a source error:

E LoadTask: Unexpected exception loading stream
E LoadTask:   java.lang.IllegalArgumentException
E LoadTask:       at com.google.common.base.Preconditions.checkArgument(Preconditions.java:129)
E LoadTask:       at androidx.media3.common.Format$Builder.setFrameRate(Format.java:693)
E LoadTask:       at androidx.media3.exoplayer.hls.playlist.HlsPlaylistParser.parseMultivariantPlaylist(HlsPlaylistParser.java:620)
E LoadTask:       at androidx.media3.exoplayer.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:358)
E LoadTask:       at androidx.media3.exoplayer.hls.playlist.HlsPlaylistParser.parse(HlsPlaylistParser.java:77)
E LoadTask:       at androidx.media3.exoplayer.upstream.ParsingLoadable.load(ParsingLoadable.java:225)
E LoadTask:       at androidx.media3.exoplayer.upstream.Loader$LoadTask.run(Loader.java:453)
E ExoPlayerImplInternal: Playback error
E ExoPlayerImplInternal:   androidx.media3.exoplayer.ExoPlaybackException: Source error
E ExoPlayerImplInternal:   Caused by: androidx.media3.exoplayer.upstream.Loader$UnexpectedLoaderException: Unexpected IllegalArgumentException

This is the same class of regression as #3399, which was fixed for decoder output formats by normalizing non-positive frame rates (d582c49ee), but the HLS parser was not covered. A possible fix is to map frameRate <= 0 to Format.NO_VALUE in HlsPlaylistParser.parseMultivariantPlaylist.

Real-world report: armanmaurya/InternetRadio#268.

Media

https://player-culturafm.stream.uol.com.br/live/culturafm.m3u8 (public live radio stream)

Bug Report

Not sent: the failure is deterministic and reproducible from the playlist text above.

Lenguaje dominante
Java
Estrellas
3.1k
Forks
1k
Merge medio
8 d 8 h
PR fusionados (30 d)
4

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de androidx/media

Todos los issues de androidx/media

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.