From f328c5477d3fa0baa078b8cb289fd36fd612b96a Mon Sep 17 00:00:00 2001 From: Dan Sparacio Date: Fri, 13 May 2016 16:19:23 -0700 Subject: [PATCH] Fix for #1319 --- src/streaming/controllers/ScheduleController.js | 1 + src/streaming/rules/abr/ThroughputRule.js | 2 +- src/streaming/rules/scheduling/BufferLevelRule.js | 11 +++++++---- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/streaming/controllers/ScheduleController.js b/src/streaming/controllers/ScheduleController.js index 283402cd87..d0afc8eb89 100644 --- a/src/streaming/controllers/ScheduleController.js +++ b/src/streaming/controllers/ScheduleController.js @@ -366,6 +366,7 @@ function ScheduleController(config) { function onPlaybackSeeking(e) { seekTarget = e.seekTime; + setTimeToLoadDelay(0); if (!initialPlayback) { isFragmentLoading = false; diff --git a/src/streaming/rules/abr/ThroughputRule.js b/src/streaming/rules/abr/ThroughputRule.js index 4edbdf2570..4d7d19b9c4 100644 --- a/src/streaming/rules/abr/ThroughputRule.js +++ b/src/streaming/rules/abr/ThroughputRule.js @@ -132,7 +132,7 @@ function ThroughputRule(config) { if (bufferStateVO.state === BufferController.BUFFER_LOADED || isDynamic) { var newQuality = abrController.getQualityForBitrate(mediaInfo, averageThroughput); - streamProcessor.getScheduleController().setTimeToLoadDelay(0); // TODO Watch out for seek event - no delay when seeking.!! + streamProcessor.getScheduleController().setTimeToLoadDelay(0); switchRequest = SwitchRequest(context).create(newQuality, SwitchRequest.DEFAULT); } diff --git a/src/streaming/rules/scheduling/BufferLevelRule.js b/src/streaming/rules/scheduling/BufferLevelRule.js index cea6cdef2e..0d9c600ad5 100644 --- a/src/streaming/rules/scheduling/BufferLevelRule.js +++ b/src/streaming/rules/scheduling/BufferLevelRule.js @@ -54,15 +54,16 @@ function BufferLevelRule(config) { let representationInfo = streamProcessor.getCurrentRepresentationInfo(); let mediaInfo = representationInfo.mediaInfo; let mediaType = mediaInfo.type; - let metrics = metricsModel.getReadOnlyMetricsFor(mediaType); - let bufferLevel = dashMetrics.getCurrentBufferLevel(metrics); + let audioBufferLevel = dashMetrics.getCurrentBufferLevel(metricsModel.getReadOnlyMetricsFor('audio')); + let videoBufferLevel = dashMetrics.getCurrentBufferLevel(metricsModel.getReadOnlyMetricsFor('video')); + let bufferLevel = mediaType === 'video' ? videoBufferLevel : audioBufferLevel; - return bufferLevel < getBufferTarget(streamProcessor, mediaType); + return bufferLevel < getBufferTarget(streamProcessor, mediaType, videoBufferLevel); } function reset() {} - function getBufferTarget(streamProcessor, type) { + function getBufferTarget(streamProcessor, type, videoBufferLevel) { let representationInfo = streamProcessor.getCurrentRepresentationInfo(); let mediaInfo = representationInfo.mediaInfo; @@ -74,6 +75,8 @@ function BufferLevelRule(config) { if (type === 'fragmentedText') { bufferTarget = textSourceBuffer.getAllTracksAreDisabled() ? 0 : representationInfo.fragmentDuration; + } else if(type === 'audio'){ + bufferTarget = videoBufferLevel; } else { if (abrController.isPlayingAtTopQuality(streamInfo)) { bufferTarget = isLongFormContent ? mediaPlayerModel.getBufferTimeAtTopQualityLongForm() : mediaPlayerModel.getBufferTimeAtTopQuality();