google / ExoPlayer

This project is deprecated and stale. The latest ExoPlayer code is available in https://github.com/androidx/media
https://developer.android.com/media/media3/exoplayer
Apache License 2.0
21.66k stars 6k forks source link

Cannot read HLS subtitles when using chunkless preparation #10352

Open mis-kcn opened 2 years ago

mis-kcn commented 2 years ago

ExoPlayer Version

2.17.1

Devices that reproduce the issue

Android TV emulator running Android 9

Devices that do not reproduce the issue

No response

Reproducible in the demo app?

Yes

Reproduction steps

  1. Add the M3U8 link that I'll send over the email in one of the samples in media.exolist.json
  2. Watch the stream
  3. No captions detected

Expected result

There should be 4 captions available for selection

Actual result

Caption button is disabled

Media

Screen Shot 2022-06-18 at 4 41 25 AM Screen Shot 2022-06-18 at 4 43 07 AM

Debugging info from provider:

stream WAFF {
  input mpts-dvb://WAFF_15?program=3 cc.608.1.lang=eng pids=49,52,53;
  protocols hls tshttp;
  transcoder vb=copy vcodec=h264 open_gop=false preset=veryfast deinterlace=true deinterlace_rate=frame ab=189k split_channels=false;
}

Media URL will be sent through email.

Bug Report

icbaker commented 2 years ago

I'm unable to reproduce the behaviour described. I played the link provided and I saw the following tracks in logcat (i.e. one text track):

tracks [eventTime=1.93, mediaPos=0.00, window=0, period=0
  MediaCodecVideoRenderer [
    Group:0, adaptive_supported=N/A [
      [ ] Track:0, id=0, mimeType=video/mpeg2, bitrate=11110000, res=1920x1080, fps=29.97, supported=NO_UNSUPPORTED_TYPE
    ]
  ]
  MediaCodecAudioRenderer [
    Group:0, adaptive_supported=N/A [
      [ ] Track:0, id=3/15, mimeType=audio/mp4a-latm, codecs=mp4a.40.2, channels=6, sample_rate=48000, language=en, supported=YES
    ]
    Group:1, adaptive_supported=N/A [
      [X] Track:0, id=aac:eng a1, mimeType=audio/mp4a-latm, codecs=mp4a.40.2, channels=6, sample_rate=48000, language=en, label=eng a1, supported=YES
    ]
    Group:2, adaptive_supported=N/A [
      [ ] Track:0, id=aac:spa a2, mimeType=audio/mp4a-latm, codecs=mp4a.40.2, channels=2, sample_rate=48000, language=es, label=spa a2, supported=YES
    ]
    Metadata [
      HlsTrackMetadataEntry [aac, eng a1]
    ]
  ]
  TextRenderer [
    Group:0, adaptive_supported=N/A [
      [X] Track:0, id=3/8194, mimeType=application/cea-608, language=en, supported=YES
    ]
  ]
  MetadataRenderer [
    Group:0, adaptive_supported=N/A [
      [X] Track:0, id=null, mimeType=application/id3, supported=YES
    ]
    Group:1, adaptive_supported=N/A [
      [ ] Track:0, id=null, mimeType=application/id3, supported=YES
    ]
    Group:2, adaptive_supported=N/A [
      [ ] Track:0, id=null, mimeType=application/id3, supported=YES
    ]
  ]
  CameraMotionRenderer []
]

This matches the manifest file, which declares a single #EXT-X-MEDIA with TYPE=CLOSED-CAPTIONS.

This single text track is selected automatically by the player, because it has DEFAULT=YES,AUTOSELECT=YES. I see captions appear on the screen.

mis-kcn commented 2 years ago

I am using 460d2219be34c489084be3ccd4a8c7716f4f1fff commit, I believe this is 2.17.1 release.

I cannot replicate the same with my end, here's how I ran the application and the logcat I got. @icbaker

adb shell am start -a com.google.android.exoplayer.demo.action.VIEW \
    -d M3U8_LINK
2022-06-20 21:57:36.582 3890-3890/com.google.android.exoplayer2.demo I/ExoPlayerImpl: Release 3f66298 [ExoPlayerLib/2.17.1] [generic_x86, sdk_google_atv_x86, unknown, 28] [goog.exo.core, goog.exo.database, goog.exo.ui, goog.exo.exoplayer, goog.exo.decoder, goog.exo.hls, goog.exo.cronet, goog.exo.datasource, goog.exo.vpx, goog.exo.opus, goog.exo.flac, goog.exo.ffmpeg, goog.exo.extractor]
2022-06-20 21:57:36.588 3890-3890/com.google.android.exoplayer2.demo E/libc: Access denied finding property "vendor.display-size"
2022-06-20 21:57:36.575 3890-3890/com.google.android.exoplayer2.demo W/exoplayer2.demo: type=1400 audit(0.0:41): avc: denied { read } for name="u:object_r:vendor_default_prop:s0" dev="tmpfs" ino=164 scontext=u:r:untrusted_app:s0:c56,c256,c512,c768 tcontext=u:object_r:vendor_default_prop:s0 tclass=file permissive=0
2022-06-20 21:57:36.589 3890-3890/com.google.android.exoplayer2.demo I/ExoPlayerImpl: Init d92a939 [ExoPlayerLib/2.17.1] [generic_x86, sdk_google_atv_x86, unknown, 28]
2022-06-20 21:57:36.590 3890-3890/com.google.android.exoplayer2.demo I/DefaultRenderersFactory: Loaded LibvpxVideoRenderer.
2022-06-20 21:57:36.590 3890-3890/com.google.android.exoplayer2.demo I/DefaultRenderersFactory: Loaded Libgav1VideoRenderer.
2022-06-20 21:57:36.591 3890-3890/com.google.android.exoplayer2.demo I/DefaultRenderersFactory: Loaded LibopusAudioRenderer.
2022-06-20 21:57:36.591 3890-3890/com.google.android.exoplayer2.demo I/DefaultRenderersFactory: Loaded LibflacAudioRenderer.
2022-06-20 21:57:36.591 3890-3890/com.google.android.exoplayer2.demo I/DefaultRenderersFactory: Loaded FfmpegAudioRenderer.
2022-06-20 21:57:36.613 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: playWhenReady [eventTime=0.00, mediaPos=0.00, window=0, true, USER_REQUEST]
2022-06-20 21:57:36.617 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: surfaceSize [eventTime=0.01, mediaPos=0.00, window=0, 1920, 1080]
2022-06-20 21:57:36.619 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: timeline [eventTime=0.01, mediaPos=0.00, window=0, periodCount=1, windowCount=1, reason=PLAYLIST_CHANGED
2022-06-20 21:57:36.619 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
2022-06-20 21:57:36.619 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   window [?, seekable=false, dynamic=true]
2022-06-20 21:57:36.619 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: ]
2022-06-20 21:57:36.619 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: mediaItem [eventTime=0.01, mediaPos=0.00, window=0, reason=PLAYLIST_CHANGED]
2022-06-20 21:57:36.623 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: state [eventTime=0.01, mediaPos=0.00, window=0, BUFFERING]
2022-06-20 21:57:36.641 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: loading [eventTime=0.03, mediaPos=0.00, window=0, period=0, true]
2022-06-20 21:57:39.339 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: timeline [eventTime=2.73, mediaPos=0.00, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
2022-06-20 21:57:39.339 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
2022-06-20 21:57:39.339 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   window [21.69, seekable=true, dynamic=true]
2022-06-20 21:57:39.339 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: ]
2022-06-20 21:57:39.349 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: audioEnabled [eventTime=2.74, mediaPos=0.00, window=0, period=0]
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: tracks [eventTime=2.74, mediaPos=0.00, window=0, period=0
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   MediaCodecVideoRenderer []
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   LibvpxVideoRenderer []
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   Libgav1VideoRenderer []
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   MediaCodecAudioRenderer [
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:     Group:main, adaptive_supported=N/A [
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=0, mimeType=audio/mp4a-latm, bitrate=12210000, codecs=mp4a.40.2, supported=YES
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:     ]
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:     Group:audio:eng a1, adaptive_supported=N/A [
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=aac:eng a1, mimeType=audio/mp4a-latm, codecs=mp4a.40.2, language=en, label=eng a1, selectionFlags=[auto,default], supported=YES
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:     ]
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:     Group:audio:spa a2, adaptive_supported=N/A [
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=aac:spa a2, mimeType=audio/mp4a-latm, codecs=mp4a.40.2, language=es, label=spa a2, selectionFlags=[auto], supported=YES
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:     ]
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:     Metadata [
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:       HlsTrackMetadataEntry [aac, eng a1]
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:     ]
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   ]
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   LibopusAudioRenderer []
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   LibflacAudioRenderer []
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   FfmpegAudioRenderer []
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   TextRenderer []
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   MetadataRenderer [
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:     Group:main:id3, adaptive_supported=N/A [
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=ID3, mimeType=application/id3, supported=YES
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:     ]
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   ]
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   CameraMotionRenderer []
2022-06-20 21:57:39.350 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: ]
2022-06-20 21:57:40.141 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: downstreamFormat [eventTime=3.53, mediaPos=0.00, window=0, period=0, id=aac:eng a1, mimeType=audio/mp4a-latm, codecs=mp4a.40.2, language=en, label=eng a1, selectionFlags=[auto,default]]
2022-06-20 21:57:40.143 3890-4090/com.google.android.exoplayer2.demo I/OMXClient: IOmx service obtained
2022-06-20 21:57:40.145 3890-4090/com.google.android.exoplayer2.demo I/ACodec: codec does not support config priority (err -2147483648)
2022-06-20 21:57:40.148 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: audioDecoderInitialized [eventTime=3.54, mediaPos=0.00, window=0, period=0, OMX.google.aac.decoder]
2022-06-20 21:57:40.149 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: audioInputFormat [eventTime=3.54, mediaPos=0.00, window=0, period=0, id=aac:eng a1, mimeType=audio/mp4a-latm, codecs=mp4a.40.2, channels=6, sample_rate=48000, language=en, label=eng a1, selectionFlags=[auto,default]]
2022-06-20 21:57:40.616 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: downstreamFormat [eventTime=4.01, mediaPos=0.00, window=0, period=0, id=0, mimeType=null, bitrate=12210000, codecs=mp4a.40.2, res=1920x1080, fps=29.97]
2022-06-20 21:57:41.952 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: state [eventTime=5.34, mediaPos=0.00, window=0, period=0, READY]
2022-06-20 21:57:41.955 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: isPlaying [eventTime=5.35, mediaPos=0.00, window=0, period=0, true]
2022-06-20 21:57:45.594 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: timeline [eventTime=8.99, mediaPos=-1.47, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
2022-06-20 21:57:45.594 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
2022-06-20 21:57:45.594 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   window [22.22, seekable=true, dynamic=true]
2022-06-20 21:57:45.594 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: ]
2022-06-20 21:57:52.850 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: timeline [eventTime=16.24, mediaPos=-0.20, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
2022-06-20 21:57:52.850 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
2022-06-20 21:57:52.850 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   window [22.72, seekable=true, dynamic=true]
2022-06-20 21:57:52.850 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: ]
2022-06-20 21:58:00.108 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: timeline [eventTime=23.50, mediaPos=2.05, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
2022-06-20 21:58:00.108 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   period [?]
2022-06-20 21:58:00.108 3890-3890/com.google.android.exoplayer2.demo D/EventLogger:   window [23.72, seekable=true, dynamic=true]
2022-06-20 21:58:00.109 3890-3890/com.google.android.exoplayer2.demo D/EventLogger: ]
icbaker commented 2 years ago

I am using 460d2219be34c489084be3ccd4a8c7716f4f1fff commit, I believe this is 2.17.1 release.

The original version of this issue stated you were using version 2.15.1 of the library so that's what I tested with, and was unable to reproduce the problem.

18 hours ago (i.e. after my initial comment) you updated the top comment to say 2.17.1.

Testing again with 2.17.1 I see the same behaviour you report.

HLS chunkless preparation was enabled by default in the 2.17.0 release. Disabling this results in the subtitles appearing again.

You can disable chunkless preparation as described in https://github.com/google/ExoPlayer/issues/10065#issuecomment-1080946460.

Handing this over to @christosts to see if this HLS playlist could be improved to better support chunkless preparation, or whether something needs to change in the way ExoPlayer parses playlists like this.

christosts commented 2 years ago

There's something that's confusing HLS chunkless preparation but I'm not sure yet which of the two (or both) it is:

I recommend to disable chunkless preparation on your app for this stream. I'll mark this as a bug but with low-priority for now.