From 354b871a609c2eb50f3cf7e265053565cc1ab25b Mon Sep 17 00:00:00 2001 From: alex-gusev Date: Sat, 17 Aug 2019 18:46:11 +0300 Subject: [PATCH 1/3] load audio playlist on MANIFEST_PARSED --- src/controller/audio-track-controller.js | 35 ++++++++++------- .../unit/controller/audio-track-controller.js | 38 ++++++++++++++++++- 2 files changed, 58 insertions(+), 15 deletions(-) diff --git a/src/controller/audio-track-controller.js b/src/controller/audio-track-controller.js index 8d57008f165..e440a05325c 100644 --- a/src/controller/audio-track-controller.js +++ b/src/controller/audio-track-controller.js @@ -91,6 +91,8 @@ class AudioTrackController extends TaskLoop { onManifestParsed (data) { const tracks = this.tracks = data.audioTracks || []; this.hls.trigger(Event.AUDIO_TRACKS_UPDATED, { audioTracks: tracks }); + + this._selectAudioGroup(this.hls.nextLoadLevel); } /** @@ -150,20 +152,7 @@ class AudioTrackController extends TaskLoop { * @param {*} data */ onLevelLoaded (data) { - // FIXME: crashes because currentLevel is undefined - // const levelInfo = this.hls.levels[this.hls.currentLevel]; - - const levelInfo = this.hls.levels[data.level]; - - if (!levelInfo.audioGroupIds) { - return; - } - - const audioGroupId = levelInfo.audioGroupIds[levelInfo.urlId]; - if (this.audioGroupId !== audioGroupId) { - this.audioGroupId = audioGroupId; - this._selectInitialAudioTrack(); - } + this._selectAudioGroup(data.level); } /** @@ -252,6 +241,24 @@ class AudioTrackController extends TaskLoop { this._updateTrack(this._trackId); } + /** + * @param levelId + * @private + */ + _selectAudioGroup (levelId) { + const levelInfo = this.hls.levels[levelId]; + + if (!levelInfo || !levelInfo.audioGroupIds) { + return; + } + + const audioGroupId = levelInfo.audioGroupIds[levelInfo.urlId]; + if (this.audioGroupId !== audioGroupId) { + this.audioGroupId = audioGroupId; + this._selectInitialAudioTrack(); + } + } + /** * Select initial track * @private diff --git a/tests/unit/controller/audio-track-controller.js b/tests/unit/controller/audio-track-controller.js index 6ecae5db444..d54b23c05eb 100644 --- a/tests/unit/controller/audio-track-controller.js +++ b/tests/unit/controller/audio-track-controller.js @@ -3,7 +3,7 @@ import Hls from '../../../src/hls'; const sinon = require('sinon'); -describe('AudioTrackController', function () { +describe.only('AudioTrackController', function () { const tracks = [{ groupId: '1', id: 0, @@ -80,6 +80,42 @@ describe('AudioTrackController', function () { }); }); + it.only('should select audioGroupId and trigger AUDIO_TRACK_SWITCHING', function (done) { + hls.on(Hls.Events.AUDIO_TRACK_SWITCHING, (event, data) => { + done(); + }); + + const levels = [ + { + urlId: 1, + audioGroupIds: ['1', '2'] + } + ]; + + hls.levelController = { + levels + }; + + const newLevelInfo = levels[0]; + const newGroupId = newLevelInfo.audioGroupIds[newLevelInfo.urlId]; + + audioTrackController.audioGroupId = '1'; + audioTrackController.tracks = tracks; + audioTrackController.audioTrack = 2; + + // current track name + const audioTrackName = tracks[audioTrackController.audioTrack].name; + + audioTrackController.onManifestParsed({ + audioTracks: tracks + }); + + // group has switched + expect(audioTrackController.audioGroupId).to.equal(newGroupId); + // name is still the same + expect(tracks[audioTrackController.audioTrack].name).to.equal(audioTrackName); + }); + describe('_needsTrackLoading', function () { it('should not need loading because the audioTrack is embedded in the main playlist', function () { expect(audioTrackController._needsTrackLoading({ details: { live: true } })).to.be.false; From 688944aa6bee1b9e2bd8dad14e6c9f627ebead29 Mon Sep 17 00:00:00 2001 From: alex-gusev Date: Sun, 18 Aug 2019 20:22:10 +0300 Subject: [PATCH 2/3] remove .only --- tests/unit/controller/audio-track-controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/controller/audio-track-controller.js b/tests/unit/controller/audio-track-controller.js index d54b23c05eb..8956d220f1c 100644 --- a/tests/unit/controller/audio-track-controller.js +++ b/tests/unit/controller/audio-track-controller.js @@ -3,7 +3,7 @@ import Hls from '../../../src/hls'; const sinon = require('sinon'); -describe.only('AudioTrackController', function () { +describe('AudioTrackController', function () { const tracks = [{ groupId: '1', id: 0, @@ -80,7 +80,7 @@ describe.only('AudioTrackController', function () { }); }); - it.only('should select audioGroupId and trigger AUDIO_TRACK_SWITCHING', function (done) { + it('should select audioGroupId and trigger AUDIO_TRACK_SWITCHING', function (done) { hls.on(Hls.Events.AUDIO_TRACK_SWITCHING, (event, data) => { done(); }); From 61ed761ff4ae750994ffa6a3bd264ccf49308809 Mon Sep 17 00:00:00 2001 From: alex-gusev Date: Sun, 6 Oct 2019 17:38:10 +0300 Subject: [PATCH 3/3] trigger ci