From 2f99e66f86701bcc31d861e30ff6b3c215ab30fb Mon Sep 17 00:00:00 2001 From: John Bartos Date: Fri, 13 Apr 2018 16:59:08 -0400 Subject: [PATCH] Properly calculate the amount of sourcebuffers needed for streams with multiple non-alternate audio renditions (#1638) * set altAudio only if videoCodecFound is true * check if video is expected in onManifestParsed --- src/controller/buffer-controller.js | 2 +- src/controller/cap-level-controller.js | 3 ++- src/controller/level-controller.js | 2 +- tests/test-streams.js | 8 +++++++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/controller/buffer-controller.js b/src/controller/buffer-controller.js index 1a45f464ffc..42451284460 100644 --- a/src/controller/buffer-controller.js +++ b/src/controller/buffer-controller.js @@ -83,7 +83,7 @@ class BufferController extends EventHandler { onManifestParsed (data) { let audioExpected = data.audio, - videoExpected = data.video || (data.levels.length && data.audio), + videoExpected = data.video || (data.levels.length && data.altAudio), sourceBufferNb = 0; // in case of alt audio 2 BUFFER_CODECS events will be triggered, one per stream controller // sourcebuffers will be created all at once when the expected nb of tracks will be reached diff --git a/src/controller/cap-level-controller.js b/src/controller/cap-level-controller.js index 7f55514deb7..6c73679c80c 100644 --- a/src/controller/cap-level-controller.js +++ b/src/controller/cap-level-controller.js @@ -35,7 +35,8 @@ class CapLevelController extends EventHandler { onManifestParsed (data) { const hls = this.hls; this.restrictedLevels = []; - if (hls.config.capLevelToPlayerSize) { + // Only fire getMaxLevel or detectPlayerSize if video is expected in the manifest + if (hls.config.capLevelToPlayerSize && (data.video || (data.levels.length && data.altAudio))) { this.autoLevelCapping = Number.POSITIVE_INFINITY; this.levels = data.levels; hls.firstLevel = this.getMaxLevel(data.firstLevel); diff --git a/src/controller/level-controller.js b/src/controller/level-controller.js index 755a7f06e67..95ea5753a76 100644 --- a/src/controller/level-controller.js +++ b/src/controller/level-controller.js @@ -127,7 +127,7 @@ export default class LevelController extends EventHandler { stats: data.stats, audio: audioCodecFound, video: videoCodecFound, - altAudio: audioTracks.length > 0 + altAudio: audioTracks.length > 0 && videoCodecFound }); } else { this.hls.trigger(Event.ERROR, { diff --git a/tests/test-streams.js b/tests/test-streams.js index c72c668e133..a155074fb89 100644 --- a/tests/test-streams.js +++ b/tests/test-streams.js @@ -142,5 +142,11 @@ module.exports = { widevineLicenseUrl: 'https://cwip-shaka-proxy.appspot.com/no_auth', emeEnabled: true } - ) + ), + audioOnlyMultipleLevels: { + 'url': 'https://s3.amazonaws.com/bob.jwplayer.com/~alex/121628/new_master.m3u8', + 'description': 'Multiple non-alternate audio levels', + 'live': false, + 'abr': false + } };