Playout fails with two audio adaptation sets in the same group
Created by: sgadrat-anevia
Environment
-
The MPD passes the DASH-IF Conformance Tool on https://conformance.dashif.org/ -
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 -
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://reference.dashif.org/dash.js/ and not just on my page
- Link to playable MPD file: http://cdn.demo.anevia.com/live/pmdisk-132/inf_arte/red14999/inf_arte.mpd
- Dash.js version: 2.9.3 and development branch (but not 2.9.2 and earlier)
- Browser name/version: Chromium 73.0.3683.86 / Chrome 73.0.3683.86 / Firefox 66.0.2
- OS name/version: Archlinux, up to date
Steps to reproduce
- Enter MPD's URL in the stream URL field
- Click "Load" Button
- Watch the stream
Reproduction frequency: each time
Observed behaviour
Problem
After around 10 seconds the stream stops playing.
Difference between browsers
With Chrome and Chromium, on the dash-if-reference-player sample, there is a box shown with the following message:
Error Dash.js :3
MEDIA_ERR_DECODE (CHUNK_DEMUXER_ERROR_APPEND_FAILED: Append: stream parsing failed. Data size=12488 append_window_start=0 append_window_end=inf)
Player stops there, not ouputing anymore logs until we reload the stream.
With Firefox, there is no error box shown, the player continues to download fragments while the playout is freezed.
Other observations
There is two audio AdaptionStreams in the MPD. The player starts with the highest bitrate one. Just before freezing it downloads a fragment of the other one. No CURRENT_TRACK_CHANGED event is triggered before the change. Also, placing a breakpoint in ScheduleController.js::schedule() when building the request for the lowest bitrate fragment, we can see that the current track for "audio" type in "mediaController" is still the highest bitrate track.
Console output
Debug.js:236 [8][Protection] No supported version of EME detected on this user agent! - Attempts to play encrypted content will fail!
doLog @ Debug.js:236
warn @ Debug.js:199
getProtectionModel @ Protection.js:157
createProtectionSystem @ Protection.js:122
detectProtection @ MediaPlayer.js:1918
attachView @ MediaPlayer.js:1247
initialize @ MediaPlayer.js:264
(anonymous) @ main.js:300
invoke @ angular.min.js:41
S.instance @ angular.min.js:89
p @ angular.min.js:65
g @ angular.min.js:58
g @ angular.min.js:58
(anonymous) @ angular.min.js:58
(anonymous) @ angular.min.js:21
$eval @ angular.min.js:145
$apply @ angular.min.js:146
(anonymous) @ angular.min.js:20
invoke @ angular.min.js:41
c @ angular.min.js:20
Bc @ angular.min.js:21
fe @ angular.min.js:20
(anonymous) @ angular.min.js:317
j @ jquery-3.1.1.min.js:2
k @ jquery-3.1.1.min.js:2
setTimeout (async)
(anonymous) @ jquery-3.1.1.min.js:2
i @ jquery-3.1.1.min.js:2
fireWith @ jquery-3.1.1.min.js:2
fire @ jquery-3.1.1.min.js:2
i @ jquery-3.1.1.min.js:2
fireWith @ jquery-3.1.1.min.js:2
ready @ jquery-3.1.1.min.js:2
R @ jquery-3.1.1.min.js:3
Debug.js:236 [467384][MediaPlayer] Streaming Initialized
Debug.js:236 [467403][MediaPlayer] Playback Initialized
Debug.js:236 [467834][DashParser] Parsing complete: ( xml2json: 95.4ms, objectiron: 0.285ms, total: 0.0957s)
Debug.js:236 [467844][ManifestUpdater] Manifest has been refreshed at Thu Apr 04 2019 19:06:44 GMT+0200 (heure d’été d’Europe centrale)[1554397604.858]
MediaController.js:203 sga: trigger current track change
MediaController.js:204 null
MediaController.js:205 MediaInfo {id: 3, index: 2, type: "video", streamInfo: StreamInfo, representationCount: 1, …}
MediaController.js:203 sga: trigger current track change
MediaController.js:204 null
MediaController.js:205 MediaInfo {id: 2, index: 1, type: "audio", streamInfo: StreamInfo, representationCount: 1, …}
Debug.js:236 [467899][Stream] No text data.
Debug.js:236 [467900][Stream] No fragmentedText data.
Debug.js:236 [467900][Stream] No embeddedText data.
Debug.js:236 [467900][Stream] No muxed data.
Debug.js:236 [467900][Stream] No image data.
Debug.js:236 [467912][PlaybackController] Native video element event: play
Debug.js:236 [467914][PlaybackController] Native video element event: waiting
Debug.js:236 [468259][BufferController][video] Init fragment finished loading saving to video's init cache
Debug.js:236 [468263][ScheduleController][video] OnFragmentLoadingCompleted - Url: http://172.27.117.154/live/d2/elemental/sa_test/elemental-avc1_190000=11-init.mp4 , Range: undefined
Debug.js:236 [468270][ScheduleController][video] Top quality video index has changed from undefined to 0
Debug.js:236 [468308][BufferController][audio] Init fragment finished loading saving to audio's init cache
Debug.js:236 [468311][ScheduleController][audio] OnFragmentLoadingCompleted - Url: http://172.27.117.154/live/d2/elemental/sa_test/elemental-mp4a_96000_deu=6-init.mp4 , Range: undefined
Debug.js:236 [468319][PlaybackController] Native video element event: loadedmetadata
Debug.js:236 [468334][ScheduleController][audio] Top quality audio index has changed from undefined to 0
Debug.js:236 [469154][ScheduleController][audio] OnFragmentLoadingCompleted - Url: http://172.27.117.154/live/d2/elemental/sa_test/elemental-mp4a_96000_deu=6-1343271217493333.mp4 , Range: undefined
Debug.js:236 [469360][ScheduleController][video] OnFragmentLoadingCompleted - Url: http://172.27.117.154/live/d2/elemental/sa_test/elemental-avc1_190000=11-1343271217400000.mp4 , Range: undefined
Debug.js:236 [469365][PlaybackController] Requesting seek to time: 134327121.7493333
Debug.js:236 [469414][PlaybackController] Native video element event: seeked
Debug.js:236 [469415][PlaybackController] Native video element event: playing
Debug.js:236 [469567][ScheduleController][audio] OnFragmentLoadingCompleted - Url: http://172.27.117.154/live/d2/elemental/sa_test/elemental-mp4a_96000_deu=6-1343271237546667.mp4 , Range: undefined
Debug.js:236 [469929][ScheduleController][video] OnFragmentLoadingCompleted - Url: http://172.27.117.154/live/d2/elemental/sa_test/elemental-avc1_190000=11-1343271237400000.mp4 , Range: undefined
Debug.js:236 [470090][DashParser] Parsing complete: ( xml2json: 61.5ms, objectiron: 0.0450ms, total: 0.0616s)
Debug.js:236 [470092][Stream] Manifest updated... updating data system wide.
Debug.js:236 [470097][ManifestUpdater] Manifest has been refreshed at Thu Apr 04 2019 19:06:47 GMT+0200 (heure d’été d’Europe centrale)[1554397607.113]
Debug.js:236 [470305][ScheduleController][video] OnFragmentLoadingCompleted - Url: http://172.27.117.154/live/d2/elemental/sa_test/elemental-avc1_190000=11-1343271257400000.mp4 , Range: undefined
Debug.js:236 [470719][ScheduleController][video] OnFragmentLoadingCompleted - Url: http://172.27.117.154/live/d2/elemental/sa_test/elemental-avc1_190000=11-1343271277400000.mp4 , Range: undefined
Debug.js:236 [470814][ScheduleController][audio] OnFragmentLoadingCompleted - Url: http://172.27.117.154/live/d2/elemental/sa_test/elemental-mp4a_48000_deu=2-1343271257527222.mp4 , Range: undefined
Debug.js:236 [470819][SourceBufferSink] SourceBufferSink error audio
doLog @ Debug.js:236
error @ Debug.js:195
errHandler @ SourceBufferSink.js:342
error (async)
setup @ SourceBufferSink.js:85
SourceBufferSink @ SourceBufferSink.js:364
merge @ FactoryMaker.js:228
create @ FactoryMaker.js:136
createBuffer @ BufferController.js:137
createBuffer @ StreamProcessor.js:326
createBuffers @ Stream.js:624
initializeMedia @ Stream.js:517
activate @ Stream.js:153
activateStream @ StreamController.js:563
onMediaSourceOpen @ StreamController.js:536
Debug.js:236 [470825][StreamController] Video Element Error: MEDIA_ERR_DECODE (CHUNK_DEMUXER_ERROR_APPEND_FAILED: Append: stream parsing failed. Data size=12295 append_window_start=0 append_window_end=inf)
doLog @ Debug.js:236
fatal @ Debug.js:191
onPlaybackError @ StreamController.js:828
(anonymous) @ EventBus.js:88
trigger @ EventBus.js:88
onPlaybackError @ PlaybackController.js:558
error (async)
addEventListener @ VideoModel.js:314
addAllListeners @ PlaybackController.js:772
initialize @ PlaybackController.js:78
switchStream @ StreamController.js:496
composeStreams @ StreamController.js:671
onTimeSyncCompleted @ StreamController.js:698
(anonymous) @ EventBus.js:88
trigger @ EventBus.js:88
completeTimeSyncSequence @ TimeSyncController.js:285
onComplete @ TimeSyncController.js:309
attemptSync @ TimeSyncController.js:349
initialize @ TimeSyncController.js:92
(anonymous) @ StreamController.js:741
onManifestUpdated @ StreamController.js:741
(anonymous) @ EventBus.js:88
trigger @ EventBus.js:88
update @ ManifestUpdater.js:155
onManifestLoaded @ ManifestUpdater.js:176
(anonymous) @ EventBus.js:88
trigger @ EventBus.js:88
onXlinkReady @ ManifestLoader.js:83
(anonymous) @ EventBus.js:88
trigger @ EventBus.js:88
onXlinkAllElementsLoaded @ XlinkController.js:187
resolve @ XlinkController.js:122
onXlinkAllElementsLoaded @ XlinkController.js:183
resolve @ XlinkController.js:122
resolveManifestOnLoad @ XlinkController.js:100
success @ ManifestLoader.js:190
onload @ HTTPLoader.js:201
load (async)
load @ XHRLoader.js:72
internalLoad @ HTTPLoader.js:250
load @ HTTPLoader.js:281
load @ ManifestLoader.js:110
load @ StreamController.js:863
initializePlayback @ MediaPlayer.js:2003
attachSource @ MediaPlayer.js:1672
$scope.doLoad @ main.js:593
fn @ VM4457:4
b @ angular.min.js:126
e @ angular.min.js:276
$eval @ angular.min.js:145
$apply @ angular.min.js:146
(anonymous) @ angular.min.js:276
dispatch @ jquery-3.1.1.min.js:3
q.handle @ jquery-3.1.1.min.js:3
Debug.js:236 [470827][StreamController] [object MediaError]
doLog @ Debug.js:236
fatal @ Debug.js:191
onPlaybackError @ StreamController.js:830
(anonymous) @ EventBus.js:88
trigger @ EventBus.js:88
onPlaybackError @ PlaybackController.js:558
error (async)
addEventListener @ VideoModel.js:314
addAllListeners @ PlaybackController.js:772
initialize @ PlaybackController.js:78
switchStream @ StreamController.js:496
composeStreams @ StreamController.js:671
onTimeSyncCompleted @ StreamController.js:698
(anonymous) @ EventBus.js:88
trigger @ EventBus.js:88
completeTimeSyncSequence @ TimeSyncController.js:285
onComplete @ TimeSyncController.js:309
attemptSync @ TimeSyncController.js:349
initialize @ TimeSyncController.js:92
(anonymous) @ StreamController.js:741
onManifestUpdated @ StreamController.js:741
(anonymous) @ EventBus.js:88
trigger @ EventBus.js:88
update @ ManifestUpdater.js:155
onManifestLoaded @ ManifestUpdater.js:176
(anonymous) @ EventBus.js:88
trigger @ EventBus.js:88
onXlinkReady @ ManifestLoader.js:83
(anonymous) @ EventBus.js:88
trigger @ EventBus.js:88
onXlinkAllElementsLoaded @ XlinkController.js:187
resolve @ XlinkController.js:122
onXlinkAllElementsLoaded @ XlinkController.js:183
resolve @ XlinkController.js:122
resolveManifestOnLoad @ XlinkController.js:100
success @ ManifestLoader.js:190
onload @ HTTPLoader.js:201
load (async)
load @ XHRLoader.js:72
internalLoad @ HTTPLoader.js:250
load @ HTTPLoader.js:281
load @ ManifestLoader.js:110
load @ StreamController.js:863
initializePlayback @ MediaPlayer.js:2003
attachSource @ MediaPlayer.js:1672
$scope.doLoad @ main.js:593
fn @ VM4457:4
b @ angular.min.js:126
e @ angular.min.js:276
$eval @ angular.min.js:145
$apply @ angular.min.js:146
(anonymous) @ angular.min.js:276
dispatch @ jquery-3.1.1.min.js:3
q.handle @ jquery-3.1.1.min.js:3