{"action":"created","issue":{"url":"https://api.github.com/repos/Dash-Industry-Forum/dash.js/issues/451","labels_url":"https://api.github.com/repos/Dash-Industry-Forum/dash.js/issues/451/labels{/name}","comments_url":"https://api.github.com/repos/Dash-Industry-Forum/dash.js/issues/451/comments","events_url":"https://api.github.com/repos/Dash-Industry-Forum/dash.js/issues/451/events","html_url":"https://github.com/Dash-Industry-Forum/dash.js/pull/451","id":59765765,"number":451,"title":"Add support of fragmented TTML (stpp) and support of SMPTE-TT image in full TTML mode or fragmented TTML","user":{"login":"aleal-envivio","id":11294830,"avatar_url":"https://avatars.githubusercontent.com/u/11294830?v=3","gravatar_id":"","url":"https://api.github.com/users/aleal-envivio","html_url":"https://github.com/aleal-envivio","followers_url":"https://api.github.com/users/aleal-envivio/followers","following_url":"https://api.github.com/users/aleal-envivio/following{/other_user}","gists_url":"https://api.github.com/users/aleal-envivio/gists{/gist_id}","starred_url":"https://api.github.com/users/aleal-envivio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aleal-envivio/subscriptions","organizations_url":"https://api.github.com/users/aleal-envivio/orgs","repos_url":"https://api.github.com/users/aleal-envivio/repos","events_url":"https://api.github.com/users/aleal-envivio/events{/privacy}","received_events_url":"https://api.github.com/users/aleal-envivio/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-03-04T08:34:43Z","updated_at":"2015-03-05T10:04:59Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/Dash-Industry-Forum/dash.js/pulls/451","html_url":"https://github.com/Dash-Industry-Forum/dash.js/pull/451","diff_url":"https://github.com/Dash-Industry-Forum/dash.js/pull/451.diff","patch_url":"https://github.com/Dash-Industry-Forum/dash.js/pull/451.patch"},"body":"Attached commits : \r\n->add the support of subtitles in fragemented mode.\r\n->add the support of images embedded in SMPTE-TT (in fragmented mode or full TTML mode)\r\n\r\nFor fragmented mode, we added a new media type \"fragementedText\" to prevent pollution of text media type. Text media fragments cannot be handle directly by original source buffer (no player support), so we reused the text source buffer. We managed buffering time range thanks to \"customTimeRanges\" class because timeRanges is a native class that cannot be instantiated.\r\n\r\nFor image subtitle, an html image overlay is used to display subtitles. This image is extacted from \"smpte:backgroundImage\" marker (No support images in mpeg4 sub samples references by urn).\r\n\r\nAt last, on current developpement branch, \"currentItem.styles\" is undefined when TTML parser is called, so I added a check to prevent an exception."},"comment":{"url":"https://api.github.com/repos/Dash-Industry-Forum/dash.js/issues/comments/77337445","html_url":"https://github.com/Dash-Industry-Forum/dash.js/pull/451#issuecomment-77337445","issue_url":"https://api.github.com/repos/Dash-Industry-Forum/dash.js/issues/451","id":77337445,"user":{"login":"SoleneBuet","id":9998409,"avatar_url":"https://avatars.githubusercontent.com/u/9998409?v=3","gravatar_id":"","url":"https://api.github.com/users/SoleneBuet","html_url":"https://github.com/SoleneBuet","followers_url":"https://api.github.com/users/SoleneBuet/followers","following_url":"https://api.github.com/users/SoleneBuet/following{/other_user}","gists_url":"https://api.github.com/users/SoleneBuet/gists{/gist_id}","starred_url":"https://api.github.com/users/SoleneBuet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SoleneBuet/subscriptions","organizations_url":"https://api.github.com/users/SoleneBuet/orgs","repos_url":"https://api.github.com/users/SoleneBuet/repos","events_url":"https://api.github.com/users/SoleneBuet/events{/privacy}","received_events_url":"https://api.github.com/users/SoleneBuet/received_events","type":"User","site_admin":false},"created_at":"2015-03-05T10:04:59Z","updated_at":"2015-03-05T10:04:59Z","body":"Hello,\r\n\r\nI wanted to test the new feature (awesome btw) but can't play back the subtitles correctly.\r\n\r\nIt does actually recognize the fragmentedText of 30 seconds:\r\n\r\n```\r\nParsing complete: ( xml2json: 3ms, objectiron: 5ms, total: 0.008s) \r\ndash.all.js:8 Manifest has loaded. \r\ndash.all.js:8 Manifest has been refreshed. \r\ndash.all.js:8 MediaSource is open! \r\ndash.all.js:8 [object Event] \r\ndash.all.js:8 Added 0 inline events \r\ndash.all.js:8 video codec: video/mp4;codecs=\"avc1.640028\" \r\ndash.all.js:8 [video] stop \r\ndash.all.js:8 audio codec: audio/mp4;codecs=\"mp4a.40.2\" \r\ndash.all.js:8 [audio] stop \r\ndash.all.js:8 No text data. \r\ndash.all.js:8 [fragmentedText] stop \r\ndash.all.js:8 Perform SIDX load: http://localhost:8080/samples/ebu-subtitling-demo/caption_dashinit.mp4 \r\ndash.all.js:8 Duration successfully set to: 30 \r\ndash.all.js:8 Parsed SIDX box: 3 segments. \r\ndash.all.js:8 [video] start \r\ndash.all.js:8 [audio] start \r\ndash.all.js:8 [fragmentedText] start \r\ndash.all.js:8 loaded fragmentedText:Initialization Segment:NaN (206, 0ms, 7ms) \r\ndash.all.js:8 [fragmentedText] Initialization finished loading \r\ndash.all.js:8 [fragmentedText] Stalling Buffer \r\ndash.all.js:8 [fragmentedText] Waiting for more buffer before starting playback. \r\ndash.all.js:8 loaded audio:Initialization Segment:NaN (200, 0ms, 11ms) \r\ndash.all.js:8 [audio] Initialization finished loading \r\ndash.all.js:8 <video> ratechange:  0 \r\ndash.all.js:8 [video] Stalling Buffer \r\ndash.all.js:8 [video] Waiting for more buffer before starting playback. \r\ndash.all.js:8 [audio] Stalling Buffer \r\ndash.all.js:8 [audio] Waiting for more buffer before starting playback. \r\ndash.all.js:8 loaded video:Initialization Segment:NaN (200, 0ms, 16ms) \r\ndash.all.js:8 [video] Initialization finished loading \r\ndash.all.js:8 <video> loadedmetadata \r\ndash.all.js:8 Starting playback at offset: 0 \r\ndash.all.js:8 element loaded! \r\ndash.all.js:8 Start Event Controller \r\ndash.all.js:8 <video> play \r\ndash.all.js:8 [video] start \r\ndash.all.js:8 [video] Getting the request for time: 0 \r\ndash.all.js:8 [video] Index for time 0 is 0 \r\ndash.all.js:8 [video] SegmentTimeline: 0 / 30 \r\ndash.all.js:8 [audio] start \r\ndash.all.js:8 [audio] Getting the request for time: 0 \r\ndash.all.js:8 [audio] Index for time 0 is 0 \r\ndash.all.js:8 [audio] SegmentTimeline: 0 / 30 \r\ndash.all.js:8 [fragmentedText] start \r\ndash.all.js:8 [fragmentedText] Getting the request for time: 0 \r\ndash.all.js:8 [fragmentedText] Index for time 0 is 0 \r\ndash.all.js:8 [fragmentedText] SegmentBase: 0 / 30 \r\ndash.all.js:8 loaded fragmentedText:Media Segment:0 (206, 0ms, 4ms) \r\ndash.all.js:8 [fragmentedText] Getting the request for time: 10 \r\ndash.all.js:8 [fragmentedText] Index for time 10 is 0 \r\ndash.all.js:8 [fragmentedText] SegmentBase: 0 / 30 \r\ndash.all.js:8 [fragmentedText] SegmentBase: 10 / 30 \r\ndash.all.js:8 [fragmentedText] Buffered Range: 0 - 0 \r\ndash.all.js:8 [fragmentedText] Getting the request for time: 0 \r\ndash.all.js:8 [fragmentedText] Index for time 0 is 0 \r\ndash.all.js:8 [fragmentedText] SegmentBase: 0 / 30 \r\ndash.all.js:8 loaded audio:Media Segment:0 (200, 14ms, 1ms) \r\ndash.all.js:8 [audio] Getting the request for time: 2.020136 \r\ndash.all.js:8 [audio] Index for time 2.020136 is 0 \r\ndash.all.js:8 [audio] SegmentTimeline: 0 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 2.020136 / 30 \r\ndash.all.js:8 [audio] Got enough buffer to start. \r\ndash.all.js:8 [audio] Buffered Range: 0 - 2.02013 \r\ndash.all.js:8 loaded video:Media Segment:0 (200, 15ms, 12ms) \r\ndash.all.js:8 [video] Getting the request for time: 2 \r\ndash.all.js:8 [video] Index for time 2 is 0 \r\ndash.all.js:8 [video] SegmentTimeline: 0 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 2 / 30 \r\ndash.all.js:8 [video] Got enough buffer to start. \r\ndash.all.js:8 [video] Buffered Range: 0 - 1.999996 \r\ndash.all.js:8 <video> playing \r\ndash.all.js:8 loaded audio:Media Segment:2.020136 (200, 13ms, 2ms) \r\ndash.all.js:8 [audio] Getting the request for time: 4.0402721 \r\ndash.all.js:8 [audio] Index for time 4.0402721 is 1 \r\ndash.all.js:8 [audio] SegmentTimeline: 2.020136 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 4.0402721 / 30 \r\ndash.all.js:8 [audio] Buffered Range: 0 - 4.040266 \r\ndash.all.js:8 loaded audio:Media Segment:4.0402721 (200, 10ms, 5ms) \r\ndash.all.js:8 [audio] Getting the request for time: 6.0604081 \r\ndash.all.js:8 [audio] Index for time 6.0604081 is 2 \r\ndash.all.js:8 [audio] SegmentTimeline: 4.0402721 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 6.0604081 / 30 \r\ndash.all.js:8 [audio] Buffered Range: 0 - 6.060402 \r\ndash.all.js:8 loaded video:Media Segment:2 (200, 11ms, 16ms) \r\ndash.all.js:8 [video] Getting the request for time: 4 \r\ndash.all.js:8 [video] Index for time 4 is 1 \r\ndash.all.js:8 [video] SegmentTimeline: 2 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 4 / 30 \r\ndash.all.js:8 [video] Buffered Range: 0 - 3.999996 \r\ndash.all.js:8 loaded video:Media Segment:4 (200, 10ms, 7ms) \r\ndash.all.js:8 [fragmentedText] Getting the request for time: 20 \r\ndash.all.js:8 [fragmentedText] Index for time 20 is 1 \r\ndash.all.js:8 [fragmentedText] SegmentBase: 10 / 30 \r\ndash.all.js:8 [fragmentedText] SegmentBase: 30 / 30 \r\ndash.all.js:8 [fragmentedText] Signal complete. \r\ndash.all.js:8 [video] Getting the request for time: 6 \r\ndash.all.js:8 [video] Index for time 6 is 2 \r\ndash.all.js:8 [video] SegmentTimeline: 4 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 6 / 30 \r\ndash.all.js:8 [video] Buffered Range: 0 - 5.999996 \r\ndash.all.js:8 loaded fragmentedText:Media Segment:10 (206, 0ms, 6ms) \r\ndash.all.js:8 [fragmentedText] Buffered Range: 0 - 0 \r\ndash.all.js:8 [fragmentedText] Buffered Range: 10 - 10 \r\ndash.all.js:8 loaded video:Media Segment:6 (200, 11ms, 13ms) \r\ndash.all.js:8 [video] Getting the request for time: 8 \r\ndash.all.js:8 [video] Index for time 8 is 3 \r\ndash.all.js:8 [video] SegmentTimeline: 6 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 8 / 30 \r\ndash.all.js:8 [video] Buffered Range: 0 - 7.999996 \r\ndash.all.js:8 [video] Getting the request for time: 10 \r\ndash.all.js:8 [video] Index for time 10 is 4 \r\ndash.all.js:8 [video] SegmentTimeline: 8 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 10 / 30 \r\ndash.all.js:8 loaded audio:Media Segment:6.0604081 (200, 11ms, 1ms) \r\ndash.all.js:8 [video] Getting the request for time: 12 \r\ndash.all.js:8 [video] Index for time 12 is 5 \r\ndash.all.js:8 [video] SegmentTimeline: 10 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 12 / 30 \r\ndash.all.js:8 [audio] Getting the request for time: 8.0805442 \r\ndash.all.js:8 [audio] Index for time 8.0805442 is 3 \r\ndash.all.js:8 [audio] SegmentTimeline: 6.0604081 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 8.0805442 / 30 \r\ndash.all.js:8 [audio] Getting the request for time: 10.1006802 \r\ndash.all.js:8 [audio] Index for time 10.1006802 is 4 \r\ndash.all.js:8 [audio] SegmentTimeline: 8.0805442 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 10.1006802 / 30 \r\ndash.all.js:8 [audio] Buffered Range: 0 - 8.080538 \r\ndash.all.js:8 loaded video:Media Segment:8 (200, 9ms, 5ms) \r\ndash.all.js:8 [video] Getting the request for time: 14 \r\ndash.all.js:8 [video] Index for time 14 is 6 \r\ndash.all.js:8 [video] SegmentTimeline: 12 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 14 / 30 \r\ndash.all.js:8 [audio] Getting the request for time: 12.1208163 \r\ndash.all.js:8 [audio] Index for time 12.1208163 is 5 \r\ndash.all.js:8 [audio] SegmentTimeline: 10.1006802 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 12.1208163 / 30 \r\ndash.all.js:8 loaded audio:Media Segment:8.0805442 (200, 8ms, 9ms) \r\ndash.all.js:8 [video] Getting the request for time: 16 \r\ndash.all.js:8 [video] Index for time 16 is 7 \r\ndash.all.js:8 [video] SegmentTimeline: 14 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 16 / 30 \r\ndash.all.js:8 [video] Buffered Range: 0 - 9.999996 \r\ndash.all.js:8 [audio] Buffered Range: 0 - 10.100674 \r\ndash.all.js:8 loaded audio:Media Segment:10.1006802 (200, 11ms, 2ms) \r\ndash.all.js:8 [video] Getting the request for time: 18 \r\ndash.all.js:8 [video] Index for time 18 is 8 \r\ndash.all.js:8 [video] SegmentTimeline: 16 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 18 / 30 \r\ndash.all.js:8 [audio] Buffered Range: 0 - 12.12081 \r\ndash.all.js:8 loaded audio:Media Segment:12.1208163 (200, 12ms, 4ms) \r\ndash.all.js:8 [audio] Buffered Range: 0 - 14.140946 \r\ndash.all.js:8 loaded video:Media Segment:14 (200, 11ms, 9ms) \r\ndash.all.js:8 [video] Getting the request for time: 20 \r\ndash.all.js:8 [video] Index for time 20 is 9 \r\ndash.all.js:8 [video] SegmentTimeline: 18 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 20 / 30 \r\ndash.all.js:8 loaded video:Media Segment:10 (200, 8ms, 30ms) \r\ndash.all.js:8 [video] Buffered Range: 0 - 9.999996 \r\ndash.all.js:8 [video] Buffered Range: 14 - 15.999996 \r\ndash.all.js:8 [video] Buffered Range: 0 - 11.999996 \r\ndash.all.js:8 [video] Buffered Range: 14 - 15.999996 \r\ndash.all.js:8 loaded video:Media Segment:12 (200, 15ms, 37ms) \r\ndash.all.js:8 [video] Buffered Range: 0 - 15.999996 \r\ndash.all.js:8 loaded video:Media Segment:20 (200, 9ms, 1ms) \r\ndash.all.js:8 [fragmentedText] Stream is complete \r\ndash.all.js:8 [video] Buffered Range: 0 - 15.999996 \r\ndash.all.js:8 [video] Buffered Range: 20 - 21.999996 \r\ndash.all.js:8 loaded video:Media Segment:16 (200, 10ms, 23ms) \r\ndash.all.js:8 [video] Buffered Range: 0 - 17.999996 \r\ndash.all.js:8 [video] Buffered Range: 20 - 21.999996 \r\ndash.all.js:8 loaded video:Media Segment:18 (200, 14ms, 25ms) \r\ndash.all.js:8 ThroughputRule requesting switch to index:  7 type:  video  Priority:  Default Average throughput 172313 kbps \r\ndash.all.js:8 [audio] Getting the request for time: 14.140952299999999 \r\ndash.all.js:8 [audio] Index for time 14.140952299999999 is 6 \r\ndash.all.js:8 [audio] SegmentTimeline: 12.1208163 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 14.1409523 / 30 \r\ndash.all.js:8 loaded video:Initialization Segment:NaN (200, 0ms, 9ms) \r\ndash.all.js:8 [video] Initialization finished loading \r\ndash.all.js:8 [video] Buffered Range: 0 - 17.999996 \r\ndash.all.js:8 [video] Buffered Range: 20 - 21.999996 \r\ndash.all.js:8 loaded audio:Media Segment:14.1409523 (200, 9ms, 6ms) \r\ndash.all.js:8 [audio] Getting the request for time: 16.1610657 \r\ndash.all.js:8 [audio] Index for time 16.1610657 is 7 \r\ndash.all.js:8 [audio] SegmentTimeline: 14.1409523 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 16.1610657 / 30 \r\ndash.all.js:8 [audio] Buffered Range: 0 - 16.16106 \r\ndash.all.js:8 loaded audio:Media Segment:16.1610657 (200, 9ms, 6ms) \r\ndash.all.js:8 [audio] Getting the request for time: 18.181201800000004 \r\ndash.all.js:8 [audio] Index for time 18.181201800000004 is 8 \r\ndash.all.js:8 [audio] SegmentTimeline: 16.1610657 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 18.1812018 / 30 \r\ndash.all.js:8 [audio] Buffered Range: 0 - 18.181196 \r\ndash.all.js:8 loaded audio:Media Segment:18.1812018 (200, 9ms, 1ms) \r\ndash.all.js:8 [audio] Getting the request for time: 20.2013378 \r\ndash.all.js:8 [audio] Index for time 20.2013378 is 9 \r\ndash.all.js:8 [audio] SegmentTimeline: 18.1812018 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 20.2013378 / 30 \r\ndash.all.js:8 [audio] Buffered Range: 0 - 20.201332 \r\ndash.all.js:8 loaded audio:Media Segment:20.2013378 (200, 10ms, 3ms) \r\ndash.all.js:8 [audio] Getting the request for time: 22.2214739 \r\ndash.all.js:8 [audio] Index for time 22.2214739 is 10 \r\ndash.all.js:8 [audio] SegmentTimeline: 20.2013378 / 30 \r\ndash.all.js:8 [audio] Buffered Range: 0 - 22.221468 \r\ndash.all.js:8 loaded audio:Media Segment:22.2214739 (200, 11ms, 3ms) \r\ndash.all.js:8 [video] Getting the request for time: 18 \r\ndash.all.js:8 [video] Index for time 18 is 8 \r\ndash.all.js:8 [video] SegmentTimeline: 16 / 30 \r\ndash.all.js:8 [video] Getting the request for time: 19.1 \r\ndash.all.js:8 [video] Index for time 19.1 is 9 \r\ndash.all.js:8 [video] SegmentTimeline: 18 / 30 \r\ndash.all.js:8 loaded video:Media Segment:18 (200, 13ms, 466ms) \r\ndash.all.js:8 [video] Getting the request for time: 22 \r\ndash.all.js:8 [video] Index for time 22 is 10 \r\ndash.all.js:8 [video] SegmentTimeline: 20 / 30 \r\ndash.all.js:8 [video] Buffered Range: 0 - 21.999996 \r\ndash.all.js:8 loaded video:Media Segment:20 (200, 11ms, 39ms) \r\ndash.all.js:8 [video] Getting the request for time: 22 \r\ndash.all.js:8 [video] Index for time 22 is 10 \r\ndash.all.js:8 [video] SegmentTimeline: 20 / 30 \r\ndash.all.js:8 [video] Buffered Range: 0 - 21.999996 \r\ndash.all.js:8 [video] Getting the request for time: 24 \r\ndash.all.js:8 [video] Index for time 24 is 11 \r\ndash.all.js:8 [video] SegmentTimeline: 22 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 24 / 30 \r\ndash.all.js:8 [audio] Getting the request for time: 24.2415873 \r\ndash.all.js:8 [audio] Index for time 24.2415873 is 11 \r\ndash.all.js:8 [audio] SegmentTimeline: 22.2214739 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 24.2415873 / 30 \r\ndash.all.js:8 [audio] Buffered Range: 0 - 24.241581 \r\ndash.all.js:8 loaded audio:Media Segment:24.2415873 (200, 12ms, 8ms) \r\ndash.all.js:8 [audio] Getting the request for time: 26.2617233 \r\ndash.all.js:8 [audio] Index for time 26.2617233 is 12 \r\ndash.all.js:8 [audio] SegmentTimeline: 24.2415873 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 26.2617233 / 30 \r\ndash.all.js:8 [audio] Buffered Range: 0 - 26.261717 \r\ndash.all.js:8 loaded video:Media Segment:22 (200, 9ms, 286ms) \r\ndash.all.js:8 [video] Buffered Range: 0 - 23.999996 \r\ndash.all.js:8 loaded video:Media Segment:24 (200, 14ms, 238ms) \r\ndash.all.js:8 [video] Getting the request for time: 26 \r\ndash.all.js:8 [video] Index for time 26 is 12 \r\ndash.all.js:8 [video] SegmentTimeline: 24 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 26 / 30 \r\ndash.all.js:8 [video] Buffered Range: 0 - 25.999996 \r\ndash.all.js:8 [video] Getting the request for time: 28 \r\ndash.all.js:8 [video] Index for time 28 is 13 \r\ndash.all.js:8 [video] SegmentTimeline: 26 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 28 / 30 \r\ndash.all.js:8 [audio] Getting the request for time: 28.281859400000002 \r\ndash.all.js:8 [audio] Index for time 28.281859400000002 is 13 \r\ndash.all.js:8 [audio] SegmentTimeline: 26.2617233 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 28.2818594 / 30 \r\ndash.all.js:8 [video] Getting the request for time: 30 \r\ndash.all.js:8 [video] Index for time 30 is 14 \r\ndash.all.js:8 [video] SegmentTimeline: 28 / 30 \r\ndash.all.js:8 [video] SegmentTimeline: 30 / 30 \r\ndash.all.js:8 [video] Signal complete. \r\ndash.all.js:8 [audio] Getting the request for time: 30.3019954 \r\ndash.all.js:8 [audio] Index for time 30.3019954 is 14 \r\ndash.all.js:8 [audio] SegmentTimeline: 28.2818594 / 30 \r\ndash.all.js:8 [audio] SegmentTimeline: 30.3019954 / 30 \r\ndash.all.js:8 [audio] Signal complete. \r\n```\r\n\r\nMy mpd is the following:\r\n\r\n```\r\n<?xml version=\"1.0\"?>\r\n<!-- MPD file Generated with GPAC version 0.5.2-DEV-rev99-gb44dfd1-master  on 2015-03-04T16:07:39Z-->\r\n<MPD xmlns=\"urn:mpeg:dash:schema:mpd:2011\" minBufferTime=\"PT1.500000S\" type=\"static\" mediaPresentationDuration=\"PT0H0M30.00S\" maxSegmentDuration=\"PT0H0M10.00S\" profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\">\r\n <ProgramInformation moreInformationURL=\"http://gpac.sourceforge.net\">\r\n  <Title>manifest.mpd generated by GPAC</Title>\r\n </ProgramInformation>\r\n\r\n <Period duration=\"PT0H0M30.00S\">\r\n\r\n   <!-- Subtitles -->\r\n  <AdaptationSet segmentAlignment=\"true\" lang=\"en\" subsegmentStartsWithSAP=\"1\">\r\n   <Representation id=\"1\" mimeType=\"application/ttml+xml\" codecs=\"stpp\" startWithSAP=\"1\" bandwidth=\"1158\">\r\n    <BaseURL>http://localhost:8080/samples/ebu-subtitling-demo/caption_dashinit.mp4</BaseURL>\r\n    <SegmentBase indexRangeExact=\"true\" indexRange=\"707-774\">\r\n      <Initialization range=\"0-706\"/>\r\n    </SegmentBase>\r\n   </Representation>\r\n  </AdaptationSet>\r\n\r\n\r\n  <!-- Video -->\r\n    <AdaptationSet id=\"2\" group=\"1\" profiles=\"ccff\" bitstreamSwitching=\"true\" segmentAlignment=\"true\" contentType=\"video\" mimeType=\"video/mp4\" codecs=\"avc1.640028\" maxWidth=\"1920\" maxHeight=\"1080\" startWithSAP=\"1\">\r\n  \t\t<SegmentTemplate timescale=\"10000000\" media=\"http://wams.edgesuite.net/media/SintelTrailer_MP4_from_WAME/sintel_trailer-1080p.ism/QualityLevels($Bandwidth$)/Fragments(video=$Time$,format=mpd-time-csf)\" initialization=\"http://wams.edgesuite.net/media/SintelTrailer_MP4_from_WAME/sintel_trailer-1080p.ism/QualityLevels($Bandwidth$)/Fragments(video=i,format=mpd-time-csf)\">\r\n  \t\t\t<SegmentTimeline><S d=\"20000000\" r=\"18\"/><S d=\"39999583\"/><S d=\"20000000\" r=\"4\"/><S d=\"2500000\"/>\r\n  \t\t\t</SegmentTimeline>\r\n  \t\t</SegmentTemplate>\r\n  \t\t<Representation id=\"1_V_video_1\" bandwidth=\"5933486\" width=\"1920\" height=\"1080\"/>\r\n  \t\t<Representation id=\"1_V_video_2\" bandwidth=\"4646861\" width=\"1920\" height=\"1080\"/>\r\n  \t\t<Representation id=\"1_V_video_3\" bandwidth=\"3360441\" width=\"1280\" height=\"720\"/>\r\n  \t\t<Representation id=\"1_V_video_4\" bandwidth=\"2222352\" width=\"960\" height=\"540\"/>\r\n  \t\t<Representation id=\"1_V_video_5\" bandwidth=\"1480106\" width=\"960\" height=\"540\"/>\r\n  \t\t<Representation id=\"1_V_video_6\" bandwidth=\"985321\" width=\"640\" height=\"360\"/>\r\n  \t\t<Representation id=\"1_V_video_7\" bandwidth=\"638937\" width=\"640\" height=\"360\"/>\r\n  \t\t<Representation id=\"1_V_video_8\" bandwidth=\"391544\" width=\"320\" height=\"180\"/>\r\n  \t</AdaptationSet>\r\n\r\n    \t<!-- Audio -->\r\n    <AdaptationSet id=\"1\" group=\"5\" profiles=\"ccff\" bitstreamSwitching=\"true\" segmentAlignment=\"true\" contentType=\"audio\" mimeType=\"audio/mp4\" codecs=\"mp4a.40.2\" lang=\"en\">\r\n  \t\t<SegmentTemplate timescale=\"10000000\" media=\"http://wams.edgesuite.net/media/SintelTrailer_MP4_from_WAME/sintel_trailer-1080p.ism/QualityLevels($Bandwidth$)/Fragments(audio_eng=$Time$,format=mpd-time-csf)\" initialization=\"http://wams.edgesuite.net/media/SintelTrailer_MP4_from_WAME/sintel_trailer-1080p.ism/QualityLevels($Bandwidth$)/Fragments(audio_eng=i,format=mpd-time-csf)\">\r\n  \t\t\t<SegmentTimeline><S d=\"20201360\"/><S d=\"20201361\"/><S d=\"20201360\"/><S d=\"20201361\"/><S d=\"20201360\"/><S d=\"20201361\"/><S d=\"20201360\"/><S d=\"20201134\"/><S d=\"20201361\"/><S d=\"20201360\"/><S d=\"20201361\"/><S d=\"20201134\"/><S d=\"20201360\"/><S d=\"20201361\"/><S d=\"20201360\"/><S d=\"20201361\"/><S d=\"20201133\"/><S d=\"20201361\" r=\"1\"/><S d=\"20201360\"/><S d=\"20201361\"/><S d=\"20201133\"/><S d=\"20201361\" r=\"1\"/><S d=\"20201360\"/><S d=\"17414966\"/>\r\n  \t\t\t</SegmentTimeline>\r\n  \t\t</SegmentTemplate>\r\n  \t\t<Representation id=\"5_A_audio_eng_1\" bandwidth=\"125576\" audioSamplingRate=\"44100\"/>\r\n  \t</AdaptationSet>\r\n\r\n\r\n </Period>\r\n</MPD>\r\n```\r\n\r\nBy remonving the subtitle block, it is correctly playing without the subtitles but with the block, it does load but is not playing.\r\n\r\nInfo about my captions:\r\n\r\n```\r\n* Movie Info *\r\n\tTimescale 600 - Duration 00:00:00.000\r\n\t1 track(s)\r\n\tFragmented File: yes - duration 00:00:30.000\r\n3 fragments - 1 SegmentIndexes\r\n\tFile suitable for progressive download (moov before mdat)\r\n\tFile Brand iso5 - version 1\r\n\tCreated: GMT Wed Mar  4 16:07:23 2015\r\n\tModified: GMT Wed Mar  4 16:07:23 2015\r\n\r\nFile has no MPEG4 IOD/OD\r\n\r\nTrack # 1 Info - TrackID 1 - TimeScale 1000 - Media Duration 00:00:00.000\r\nMedia Info: Language \"und (und)\" - Type \"subt:stpp\" - 0 samples\r\nFragmented track: 3 samples - Media Duration 00:00:30.000\r\nXML Subtitle Stream - namespace http://www.w3.org/ns/ttml\r\n Size 0 x 0 - Translation X=0 Y=0 - Layer 0\r\n```\r\n\r\nI created it with MP4Box from GPAC: \r\n\r\n1. MP4Box -add ebu-ttd_sample.xml:ext=ttml -new caption.mp4\r\n2. MP4Box -dash 10000 -profile onDemand caption.mp4 -out manifest\r\n\r\nWould you have an idea or a lead?\r\n\r\nThanks."}}