Skip to content

missing cues and styling when rendering im1t subtitles #8069

Description

@pkoshevoy

What version of HLS.js are you using?

v1.7.3

What browser (including version) are you using?

Chrome 154.0.8037.97 (Official Build) (arm64)

What OS (including version) are you using?

macOS 26.6.2

Test stream

https://content-ausw2-dt-1.downlynk.com/4065661204414ffb8b824ec5a0e52d3e.m3u8?show_dash_subtitles=imsc&hlsver=6

Configuration

{
  "debug": true,
  "enableWorker": true,
  "lowLatencyMode": true,
  "backBufferLength": 90
}

Additional player setup steps

I've noticed comparing playback between Safari, HLSjs and Shaka player that HLSjs player ignores the styling, and also only renders the last cue when multiple cues should be presented.  So far, I get the best results from Shaka player, followed by Safari, and HLSjs

HLS link: https://content-ausw2-dt-1.downlynk.com/4065661204414ffb8b824ec5a0e52d3e.m3u8?show_dash_subtitles=imsc&hlsver=6

DASH link: https://content-ausw2-dt-1.downlynk.com/4065661204414ffb8b824ec5a0e52d3e.mpd?show_dash_subtitles=imsc

Personally I don't mind so much the missing styling, but missing cues is a problem.  I'm not sure if this is due to some spec non-compliance in our content, or if it's an HLSjs defect.

Checklist

Steps to reproduce

  1. play https://content-ausw2-dt-1.downlynk.com/4065661204414ffb8b824ec5a0e52d3e.m3u8?show_dash_subtitles=imsc&hlsver=6 in Safari (enable German subtitles)
    2.play https://content-ausw2-dt-1.downlynk.com/4065661204414ffb8b824ec5a0e52d3e.m3u8?show_dash_subtitles=imsc&hlsver=6 in https://hlsjs.video-dev.org/demo/ (enable German subtitles)
  2. play https://content-ausw2-dt-1.downlynk.com/4065661204414ffb8b824ec5a0e52d3e.mpd?show_dash_subtitles=imsc in Shaka player (enable German subtitles)

observe missing styling and cues in HLSjs that are present in Safari and Shaka player.

Expected behaviour

at 0:17 HLSjs should render

Darf ich vorstellen?
Das ist unser Schickel.

What actually happened?

only Das ist unser Schickel. was rendered

Console output

base-stream-controller.ts:399 [log] > [stream-controller]: Media seeking to 10.439164, state: IDLE, in buffer
base-stream-controller.ts:399 [log] > [audio-stream-controller]: Media seeking to 10.439164, state: WAITING_TRACK, in buffer
base-stream-controller.ts:399 [log] > [subtitle-stream-controller]: Media seeking to 10.439164, state: IDLE, in buffer
stream-controller.ts:547 [log] > [stream-controller]: Media seeked to 10.439164
base-stream-controller.ts:1120 [log] > [subtitle-stream-controller]: Loading subtitle sn: 45 of subtitle playlist 0 (frag:[184.32000000000014-188.41600000000014]) cc: 0 [0-58], target: 184.32000000000014
base-stream-controller.ts:2520 [log] > [subtitle-stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:563 [log] > [subtitle-stream-controller]: load progress subtitle sn: 45 of subtitle playlist 0 (frag:[184.32000000000014-188.41600000000014]) chunk: 1
base-stream-controller.ts:591 [log] > [subtitle-stream-controller]: Loaded subtitle sn: 45 of subtitle playlist 0 (bytes 1747)
base-stream-controller.ts:872 [log] > [subtitle-stream-controller]: Buffered subtitle sn: 45 of subtitle playlist 0 (frag:[184.32000000000014-188.41600000000014]) > buffer:[4.096-188.416])
base-stream-controller.ts:2520 [log] > [subtitle-stream-controller]: FRAG_LOADING->IDLE

Chrome media internals output

{
  "properties": {
    "render_id": 471,
    "player_id": 3,
    "created": "2026-10-05 20:36:44.019822 UTC",
    "origin_url": "https://hlsjs-dev.video-dev.org/",
    "kFrameUrl": "https://hlsjs-dev.video-dev.org/demo/",
    "kFrameTitle": "hls.js demo",
    "url": "blob:https://hlsjs-dev.video-dev.org/30d54529-0c5f-4d05-b336-6561766abf09",
    "info": "Effective playback rate changed from 0 to 1",
    "kRendererName": "RendererImpl",
    "pipeline_state": "kPlaying",
    "duration": 238.463999,
    "kAudioTracks": [
      {
        "bytes per channel": 2,
        "bytes per frame": 4,
        "channel layout": "STEREO",
        "channels": 2,
        "codec": "aac",
        "codec delay": 0,
        "discard decoder delay": false,
        "encryption scheme": "Unencrypted",
        "has extra data": true,
        "profile": "unknown",
        "sample format": "Signed 16-bit",
        "samples per second": 24000,
        "seek preroll": "0us"
      }
    ],
    "kVideoTracks": [
      {
        "alpha mode": "is_opaque",
        "codec": "h264",
        "coded size": "1280x720",
        "color space": {
          "matrix": "BT709",
          "primaries": "BT709",
          "range": "LIMITED",
          "transfer": "BT709"
        },
        "encryption scheme": "Unencrypted",
        "has extra data": false,
        "hdr metadata": {},
        "natural size": "1280x720",
        "orientation": "0°",
        "profile": "h264 high",
        "visible rect": "0,0 1280x720"
      }
    ],
    "kIsAudioDecryptingDemuxerStream": false,
    "kAudioDecoderName": "FFmpegAudioDecoder",
    "kIsPlatformAudioDecoder": false,
    "kIsVideoDecryptingDemuxerStream": false,
    "kVideoDecoderName": "VideoToolboxVideoDecoder",
    "kIsPlatformVideoDecoder": true,
    "debug": " Detected midstream configuration change PTS:0 Sample Rate: 48000 vs 24000, ChannelLayout: 3 vs 3, Channels: 2 vs 2",
    "dimensions": "1280x720",
    "kResolution": "1280x720",
    "video_buffering_state": {
      "state": "BUFFERING_HAVE_ENOUGH"
    },
    "audio_buffering_state": {
      "state": "BUFFERING_HAVE_ENOUGH"
    },
    "pipeline_buffering_state": {
      "for_suspended_start": false,
      "state": "BUFFERING_HAVE_ENOUGH"
    },
    "event": "kPlay",
    "seek_target": 10.439164,
    "video_track_selected": "8"
  },
  "events": [
    {
      "time": 0,
      "key": "created",
      "value": "2026-10-05 20:36:44.019822 UTC"
    },
    {
      "time": 0.058000028133392334,
      "key": "origin_url",
      "value": "https://hlsjs-dev.video-dev.org/"
    },
    {
      "time": 0.06000000238418579,
      "key": "kFrameUrl",
      "value": "https://hlsjs-dev.video-dev.org/demo/"
    },
    {
      "time": 0.06199997663497925,
      "key": "kFrameTitle",
      "value": "hls.js demo"
    },
    {
      "time": 0.10000002384185791,
      "key": "url",
      "value": "blob:https://hlsjs-dev.video-dev.org/30d54529-0c5f-4d05-b336-6561766abf09"
    },
    {
      "time": 0.1119999885559082,
      "key": "info",
      "value": "ChunkDemuxer"
    },
    {
      "time": 0.11699998378753662,
      "key": "kRendererName",
      "value": "RendererImpl"
    },
    {
      "time": 0.13200002908706665,
      "key": "pipeline_state",
      "value": "kStarting"
    },
    {
      "time": 511.32099997997284,
      "key": "duration",
      "value": 238.464
    },
    {
      "time": 1094.152999997139,
      "key": "kAudioTracks",
      "value": [
        {
          "bytes per channel": 2,
          "bytes per frame": 4,
          "channel layout": "STEREO",
          "channels": 2,
          "codec": "aac",
          "codec delay": 0,
          "discard decoder delay": false,
          "encryption scheme": "Unencrypted",
          "has extra data": true,
          "profile": "unknown",
          "sample format": "Signed 16-bit",
          "samples per second": 24000,
          "seek preroll": "0us"
        }
      ]
    },
    {
      "time": 1094.1909999847412,
      "key": "kVideoTracks",
      "value": [
        {
          "alpha mode": "is_opaque",
          "codec": "h264",
          "coded size": "1280x720",
          "color space": {
            "matrix": "BT709",
            "primaries": "BT709",
            "range": "LIMITED",
            "transfer": "BT709"
          },
          "encryption scheme": "Unencrypted",
          "has extra data": false,
          "hdr metadata": {},
          "natural size": "1280x720",
          "orientation": "0°",
          "profile": "h264 high",
          "visible rect": "0,0 1280x720"
        }
      ]
    },
    {
      "time": 1094.6970000267029,
      "key": "info",
      "value": "Cannot select SymphoniaAudioDecoder for audio decoding. status=DecoderStatus::Codes::kUnsupportedCodec"
    },
    {
      "time": 1094.70300000906,
      "key": "info",
      "value": "Cannot select IamfAudioDecoder for audio decoding. status=DecoderStatus::Codes::kUnsupportedCodec"
    },
    {
      "time": 1094.7049999833107,
      "key": "info",
      "value": "Cannot select OpusAudioDecoder for audio decoding. status=DecoderStatus::Codes::kUnsupportedConfig"
    },
    {
      "time": 1094.8579999804497,
      "key": "kIsAudioDecryptingDemuxerStream",
      "value": false
    },
    {
      "time": 1094.8579999804497,
      "key": "kAudioDecoderName",
      "value": "FFmpegAudioDecoder"
    },
    {
      "time": 1094.8590000271797,
      "key": "kIsPlatformAudioDecoder",
      "value": false
    },
    {
      "time": 1094.861999988556,
      "key": "info",
      "value": "Selected FFmpegAudioDecoder for audio decoding, config: codec: aac, profile: unknown, bytes_per_channel: 2, channel_layout: STEREO, channels: 2, samples_per_second: 24000, sample_format: Signed 16-bit, bytes_per_frame: 4, seek_preroll: 0us, codec_delay: 0, has extra data: true, encryption scheme: Unencrypted, discard decoder delay: false, target_output_channel_layout: STEREO, target_output_sample_format: Unknown sample format"
    },
    {
      "time": 1094.8799999952316,
      "key": "info",
      "value": "Cannot select DecryptingVideoDecoder for video decoding. status=DecoderStatus::Codes::kUnsupportedEncryptionMode"
    },
    {
      "time": 1101.208999991417,
      "key": "kIsVideoDecryptingDemuxerStream",
      "value": false
    },
    {
      "time": 1101.2110000252724,
      "key": "kVideoDecoderName",
      "value": "VideoToolboxVideoDecoder"
    },
    {
      "time": 1101.2120000123978,
      "key": "kIsPlatformVideoDecoder",
      "value": true
    },
    {
      "time": 1101.2170000076294,
      "key": "info",
      "value": "Selected VideoToolboxVideoDecoder for video decoding, config: codec: h264, profile: h264 high, level: 31, alpha_mode: is_opaque, coded size: [1280,720], visible rect: [0,0,1280,720], natural size: [1280,720], has extra data: false, encryption scheme: Unencrypted, rotation: 0°, flipped: 0, color space: {primaries:BT709, transfer:BT709, matrix:BT709, range:LIMITED}, spatial format: [projection_type: none, stereo_mode: mono]"
    },
    {
      "time": 1101.2260000109673,
      "key": "pipeline_state",
      "value": "kPlaying"
    },
    {
      "time": 1101.2670000195503,
      "key": "debug",
      "value": " Detected midstream configuration change PTS:0 Sample Rate: 48000 vs 24000, ChannelLayout: 3 vs 3, Channels: 2 vs 2"
    },
    {
      "time": 1109.3439999818802,
      "key": "dimensions",
      "value": "1280x720"
    },
    {
      "time": 1109.352999985218,
      "key": "kResolution",
      "value": "1280x720"
    },
    {
      "time": 1110.3299999833107,
      "key": "info",
      "value": "Effective playback rate changed from 0 to 1"
    },
    {
      "time": 1108.880999982357,
      "key": "video_buffering_state",
      "value": {
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 1101.4269999861717,
      "key": "audio_buffering_state",
      "value": {
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 1110.3080000281334,
      "key": "pipeline_buffering_state",
      "value": {
        "for_suspended_start": false,
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 1110.3740000128746,
      "key": "event",
      "value": "kPlay"
    },
    {
      "time": 24079.028999984264,
      "key": "event",
      "value": "kPause"
    },
    {
      "time": 24079.091000020504,
      "key": "seek_target",
      "value": 1.606909
    },
    {
      "time": 24079.12000000477,
      "key": "pipeline_state",
      "value": "kSeeking"
    },
    {
      "time": 24079.23600000143,
      "key": "pipeline_state",
      "value": "kPlaying"
    },
    {
      "time": 24089.97200000286,
      "key": "video_buffering_state",
      "value": {
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 24079.634000003338,
      "key": "audio_buffering_state",
      "value": {
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 24089.98299998045,
      "key": "pipeline_buffering_state",
      "value": {
        "for_suspended_start": false,
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 24190.560000002384,
      "key": "event",
      "value": "kPlay"
    },
    {
      "time": 25147.398999989033,
      "key": "event",
      "value": "kPause"
    },
    {
      "time": 27587.94099998474,
      "key": "seek_target",
      "value": 9.754101
    },
    {
      "time": 27588.022000014782,
      "key": "pipeline_state",
      "value": "kSeeking"
    },
    {
      "time": 27588.37999999523,
      "key": "pipeline_state",
      "value": "kPlaying"
    },
    {
      "time": 27619.415000021458,
      "key": "video_buffering_state",
      "value": {
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 27588.98600000143,
      "key": "audio_buffering_state",
      "value": {
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 27619.42500001192,
      "key": "pipeline_buffering_state",
      "value": {
        "for_suspended_start": false,
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 38260.02600002289,
      "key": "event",
      "value": "kPlay"
    },
    {
      "time": 50289.08499997854,
      "key": "event",
      "value": "kPause"
    },
    {
      "time": 50289.25999999046,
      "key": "seek_target",
      "value": 10.439164
    },
    {
      "time": 50289.33600002527,
      "key": "pipeline_state",
      "value": "kSeeking"
    },
    {
      "time": 50289.655000030994,
      "key": "pipeline_state",
      "value": "kPlaying"
    },
    {
      "time": 50321.410000026226,
      "key": "video_buffering_state",
      "value": {
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 50290.421000003815,
      "key": "audio_buffering_state",
      "value": {
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 50321.425999999046,
      "key": "pipeline_buffering_state",
      "value": {
        "for_suspended_start": false,
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 50416.10500001907,
      "key": "event",
      "value": "kPlay"
    },
    {
      "time": 77950.43099999428,
      "key": "video_track_selected",
      "value": "unset"
    },
    {
      "time": 77951.58799999952,
      "key": "video_buffering_state",
      "value": {
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 77951.61199998856,
      "key": "pipeline_buffering_state",
      "value": {
        "for_suspended_start": false,
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 81999.99500000477,
      "key": "video_track_selected",
      "value": "8"
    },
    {
      "time": 82015.9089999795,
      "key": "video_buffering_state",
      "value": {
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 82015.92199999094,
      "key": "pipeline_buffering_state",
      "value": {
        "for_suspended_start": false,
        "state": "BUFFERING_HAVE_ENOUGH"
      }
    },
    {
      "time": 120069.50700002909,
      "key": "duration",
      "value": 238.463999
    }
  ]
}

Activity

  1. added
    Needs TriageIf there is a suspected stream issue, apply this label to triage if it is something we should fix.
    on Oct 5, 2026
  2. changed the title [-]missing cues and stiling when rendering im1t subtitles[/-] [+]missing cues and styling when rendering im1t subtitles[/+] on Oct 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugNeeds TriageIf there is a suspected stream issue, apply this label to triage if it is something we should fix.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions