Player trying to load segments from wrong directory with mp4box created manifest file
Created by: tim-kos
Environment
-
The MPD passes the DASH-IF Conformance Tool on http://dashif.org/conformance.html -
The stream has correct Access-Control-Allow-Origin headers (CORS) -
There are no network errors such as 404s in the browser console when trying to play the stream (I cannot check this off, as it is basically the very issue). -
The issue observed is not mentioned on https://github.com/Dash-Industry-Forum/dash.js/wiki/FAQ -
The issue occurs in the latest reference client on http://dashif.org/reference/players/javascript/ and not just on my page
- Link to playable MPD file: http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/playlist.mpd
- Dash.js version: Most recent
- Browser name/version: Chrome 55
- OS name/version: OSX Sierra latest
Steps to reproduce
-
Play the linked playable mpd file in the reference client here: http://dashif.org/reference/players/javascript/v2.4.0/samples/dash-if-reference-player/index.html
-
Observe 403 forbidden errors for the initialization segment URLs in the browser, such as this one: http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/audio/audio/64728_44100_dashinit.mp4
-
Notice how it has twice /audio/audio in those 403 URLs.
-
The playable mpd file lives at http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/playlist.mpd and the directory structure for the init segments is this:
http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/audio/64728_44100_dashinit.mp4 (try to open this in the browser, it works
- In the playlist.mpd, a baseUrl is set for each init segment, such as:
<Period duration="PT0H0M7.993S">
<AdaptationSet segmentAlignment="true" par="1:1" lang="und" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
<Representation id="1" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="44100" startWithSAP="1" bandwidth="35497">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
<BaseURL>audio/32928_44100_dashinit.mp4</BaseURL>
The playlist was generated via mp4box and has not been tempered with.
Observed behaviour
The player loads segments from within ".../audio/audio/..." and not just ".../audio/...", and of course, this additional "audio" subdirectory does not exist, hence the player fails with 403 errors.
Also notice how the "Perform SIDX load" entries in the console output load the segments fine from the proper URLs. Only later during playback (it seems) the wrong URLs are used from XHRLoader.js line 223.
Console output
[13] EME detected on this user agent! (ProtectionModel_21Jan2015)
dash.all.debug.js:3071 [18] [dash.js 2.4.0] MediaPlayer has been initialized
Debug.js:108 [10983] Playback Initialized
Debug.js:108 [11506] Parsing complete: ( xml2json: 7.81ms, objectiron: 1.32ms, total: 0.00913s)
Debug.js:108 [11516] MediaSource attached to element. Waiting on open...
Debug.js:108 [11517] Manifest has been refreshed at Sun Jan 08 2017 14:26:05 GMT+0100 (CET)[1483881965.098]
Debug.js:108 [11526] MediaSource is open!
Debug.js:108 [11526] Duration successfully set to: 7.993
Debug.js:108 [11527] Added 0 inline events
Debug.js:108 [11528] video codec: video/mp4;codecs="avc1.64001f"
Debug.js:108 [11538] Schedule controller stopping for video
Debug.js:108 [11541] Perform SIDX load: http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/video/960x540_210264_30_dashinit.mp4
Debug.js:108 [11542] Perform SIDX load: http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/video/1280x720_327736_30_dashinit.mp4
Debug.js:108 [11543] Perform SIDX load: http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/video/1920x1080_959304_30_dashinit.mp4
Debug.js:108 [11544] audio codec: audio/mp4;codecs="mp4a.40.2"
Debug.js:108 [11546] Schedule controller stopping for audio
Debug.js:108 [11548] Perform SIDX load: http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/audio/32928_44100_dashinit.mp4
Debug.js:108 [11548] Perform SIDX load: http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/audio/64728_44100_dashinit.mp4
Debug.js:108 [11549] No text data.
Debug.js:108 [11549] No fragmentedText data.
Debug.js:108 [11550] No embeddedText data.
Debug.js:108 [11550] No muxed data.
Debug.js:108 [11552] Start Event Controller
Debug.js:108 [11553] Native video element event: play
Debug.js:108 [11727] Parsing segments from SIDX.
Debug.js:108 [11737] Parsing segments from SIDX.
Debug.js:108 [11752] Parsing segments from SIDX.
Debug.js:108 [11782] Parsing segments from SIDX.
Debug.js:108 [11791] Parsing segments from SIDX.
Debug.js:108 [11798] Schedule controller starting for video
Debug.js:108 [11800] Schedule controller starting for audio
timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/audio/audio/64728_44100_dashinit.mp4:1 GET http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/audio/audio/64728_44100_dashinit.mp4 403 (Forbidden)
timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/video/video/1920x1080_959304_30_dashinit.mp4:1 GET http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/video/video/1920x1080_959304_30_dashinit.mp4 403 (Forbidden)
XHRLoader.js:223 GET http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/audio/audio/64728_44100_dashinit.mp4 403 (Forbidden)
internalLoad @ XHRLoader.js:223
(anonymous) @ XHRLoader.js:125
XHRLoader.js:223 GET http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/video/video/1920x1080_959304_30_dashinit.mp4 403 (Forbidden)
internalLoad @ XHRLoader.js:223
(anonymous) @ XHRLoader.js:125
XHRLoader.js:223 GET http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/video/video/1920x1080_959304_30_dashinit.mp4 403 (Forbidden)
internalLoad @ XHRLoader.js:223
(anonymous) @ XHRLoader.js:125
XHRLoader.js:223 GET http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/audio/audio/64728_44100_dashinit.mp4 403 (Forbidden)
internalLoad @ XHRLoader.js:223
(anonymous) @ XHRLoader.js:125
XHRLoader.js:223 GET http://timcin-wedding.s3-eu-west-1.amazonaws.com/videotest-album/hls/a5b3f3f0d4d711e6b653affe68f4ebc2/video/video/1920x1080_959304_30_dashinit.mp4 403 (Forbidden)
internalLoad @ XHRLoader.js:223
(anonymous) @ XHRLoader.js:125
Debug.js:108 [15093] No video bytes to push or stream is inactive.
Debug.js:108 [15096] Schedule controller stopping for video
Debug.js:108 [15097] Schedule controller stopping for audio ```