CEA608 Captions do not play
See original GitHub issueHello,
I have embedded captions in the stream (DASH) it has a valid format CEA608. But it won’t play on ExoPlayer. I can still see there is a caption available from the menu, but when I try to select it… The player won’t play the captions. These are some logs from the demo app. No errors are getting thrown on the logcat.
The demo app used has version 2.14.0
.
At this point, I am not sure what is the issue here.
I did the test at https://bitmovin.com/demos/stream-test?format=dash&manifest=https%3A%2F%2Fbitmovin-a.akamaihd.net%2Fcontent%2FMI201109210084_1%2Fmpds%2Ff08e80da-bf1d-4e3d-8899-f0f6155f6efa.mpd and https://demo.theoplayer.com/test-your-stream-with-statistics. Both the player plays captions just fine.
2022-05-10 10:52:36.116 com.google.android.exoplayer2.demo D/EventLogger: timeline [eventTime=0.08, mediaPos=0.00, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
2022-05-10 10:52:36.116 com.google.android.exoplayer2.demo D/EventLogger: period [1324.89]
2022-05-10 10:52:36.116 com.google.android.exoplayer2.demo D/EventLogger: window [1324.89, seekable=true, dynamic=false]
2022-05-10 10:52:36.116 com.google.android.exoplayer2.demo D/EventLogger: ]
2022-05-10 10:52:36.116 com.google.android.exoplayer2.demo D/EventLogger: videoEnabled [eventTime=0.08, mediaPos=0.00, window=0, period=0]
2022-05-10 10:52:36.117 com.google.android.exoplayer2.demo D/EventLogger: audioEnabled [eventTime=0.08, mediaPos=0.00, window=0, period=0]
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: tracks [eventTime=0.08, mediaPos=0.00, window=0, period=0
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: MediaCodecVideoRenderer [
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: Group:0, adaptive_supported=N/A [
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: [ ] Track:0, id=video=422555, mimeType=video/avc, bitrate=422555, codecs=avc1.42C00D, res=416x240, supported=YES
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: ]
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: Group:1, adaptive_supported=YES [
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: [X] Track:0, id=video=519263, mimeType=video/avc, bitrate=519263, codecs=avc1.42C01E, res=640x360, supported=YES
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: [X] Track:1, id=video=807408, mimeType=video/avc, bitrate=807408, codecs=avc1.42C01E, res=640x360, supported=YES
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: [X] Track:2, id=video=1097040, mimeType=video/avc, bitrate=1097040, codecs=avc1.42C01E, res=640x360, supported=YES
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: [X] Track:3, id=video=1404883, mimeType=video/avc, bitrate=1404883, codecs=avc1.4D401F, res=960x540, supported=YES
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: ]
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: ]
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: MediaCodecAudioRenderer [
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: Group:0, adaptive_supported=N/A [
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: [X] Track:0, id=audio_eng=96000, mimeType=audio/mp4a-latm, bitrate=96000, codecs=mp4a.40.2, channels=2, sample_rate=44100, language=en, supported=YES
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: ]
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: ]
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: TextRenderer [
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: Group:0, adaptive_supported=N/A [
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: [X] Track:0, id=3:cea608, mimeType=application/cea-608, supported=YES
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: ]
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: ]
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: MetadataRenderer []
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: CameraMotionRenderer []
2022-05-10 10:52:36.118 com.google.android.exoplayer2.demo D/EventLogger: Unmapped [
2022-05-10 10:52:36.119 com.google.android.exoplayer2.demo D/EventLogger: Group:0 [
2022-05-10 10:52:36.119 com.google.android.exoplayer2.demo D/EventLogger: [ ] Track:0, id=img=9000, mimeType=null, bitrate=9000, codecs=jpeg, supported=NO
2022-05-10 10:52:36.119 com.google.android.exoplayer2.demo D/EventLogger: ]
2022-05-10 10:52:36.119 com.google.android.exoplayer2.demo D/EventLogger: ]
2022-05-10 10:52:36.119 com.google.android.exoplayer2.demo D/EventLogger: ]
2022-05-10 10:52:36.139 com.google.android.exoplayer2.demo D/EventLogger: downstreamFormat [eventTime=0.10, mediaPos=0.00, window=0, period=0, id=audio_eng=96000, mimeType=audio/mp4a-latm, bitrate=96000, codecs=mp4a.40.2, channels=2, sample_rate=44100, language=en]
2022-05-10 10:52:36.140 com.google.android.exop
If you have an email address, can you please share it, so I can share the video file?
Issue Analytics
- State:
- Created a year ago
- Comments:6 (3 by maintainers)
We intentionally ignore selections for embedded streams if the corresponding primary stream isn’t enabled at the same time. In that sense it’s working as intended that the second adaptation set isn’t also decoding the subtitles from the first adaptation set (because this would mean loading two video tracks at the same time just to get the embedded subtitles).
@nishantkp Can you provide more insights into why the streams are set up like this? The current setup seems indeed very unusual because it (a) forces people who require captions to choose the lowest video quality (b) either disables video quality adjustment completely or unnecessarily removes the lowest quality from the list of adaptive qualities that can be used. Both things don’t sound ideal to me, but maybe there is a use case I don’t see here.
Most likely because they just use the first AdaptationSet by default without any further logic to choose the most useful AdaptationSet.
When I play the link provided with the demo app and enable the ‘unknown’ subtitle track I see no subtitles.
I looked in the manifest and noted that there are two video
AdaptionSet
groups. One contains<Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" />
and a single<Representation>
node (416x240). The other doesn’t contain<Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" />
and contains 4<Representation>
nodes. You can see this structure reflected in the two videoGroups
in theEventLogger
output you included in the original report.I manually selected the 416x240 track only (using the ‘SELECT TRACKS’ button in the demo app) and then subtitles appeared. They didn’t appear before because the player prefers the
AdaptionSet
with a choice of bitrates, because this will provide a better video playback experience for the viewer.Over to @tonihei to see if we should do something different here (e.g. force-selecting the only subtitle-declaring
AdaptionSet
when subtitles are enabled) - or whether this media structure [1] is unusual enough that the existing behaviour is acceptable.[1] Two
AdaptionSets
that seem to represent the same content with different codecs.