Browse Source

Fix fast quality change for alternate audio (#1046)

* Fix fast quality change for alternate audio
* Don't reset audio loader in fast quality change as it resets on media change
pull/6/head
Garrett 8 years ago
committed by Jon-Carlos Rivera
parent
commit
a134c680b8
  1. 4
      src/master-playlist-controller.js
  2. 43
      test/master-playlist-controller.test.js
  3. 8
      utils/manifest/alternate-audio-multiple-groups.m3u8

4
src/master-playlist-controller.js

@ -725,9 +725,7 @@ export class MasterPlaylistController extends videojs.EventTarget {
this.masterPlaylistLoader_.media(media);
this.mainSegmentLoader_.resetLoader();
if (this.audiosegmentloader_) {
this.audioSegmentLoader_.resetLoader();
}
// don't need to reset audio as it is reset when media changes
}
}

43
test/master-playlist-controller.test.js

@ -214,6 +214,49 @@ QUnit.test('does not resync the segmentLoader when no fast quality change occurs
assert.equal(this.player.tech_.hls.stats.bandwidth, 4194304, 'default bandwidth');
});
QUnit.test('fast quality change resyncs audio segment loader', function(assert) {
this.requests.length = 0;
this.player = createPlayer();
this.player.src({
src: 'alternate-audio-multiple-groups.m3u8',
type: 'application/vnd.apple.mpegurl'
});
const masterPlaylistController = this.player.tech_.hls.masterPlaylistController_;
masterPlaylistController.selectPlaylist = () => {
return masterPlaylistController.master().playlists[0];
};
// master
this.standardXHRResponse(this.requests.shift());
// media
this.standardXHRResponse(this.requests.shift());
masterPlaylistController.mediaSource.trigger('sourceopen');
this.player.audioTracks()[0].enabled = true;
let resets = 0;
masterPlaylistController.audioSegmentLoader_.resetLoader = () => resets++;
masterPlaylistController.fastQualityChange_();
assert.equal(resets, 0, 'does not reset the audio segment loader when media same');
// force different media
masterPlaylistController.selectPlaylist = () => {
return masterPlaylistController.master().playlists[1];
};
assert.equal(this.requests.length, 1, 'one request');
masterPlaylistController.fastQualityChange_();
assert.equal(this.requests.length, 2, 'added a request for new media');
assert.equal(resets, 0, 'does not reset the audio segment loader yet');
// new media request
this.standardXHRResponse(this.requests[1]);
assert.equal(resets, 1, 'resets the audio segment loader when media changes');
});
QUnit.test('if buffered, will request second segment byte range', function(assert) {
this.requests.length = 0;
this.player.src({

8
utils/manifest/alternate-audio-multiple-groups.m3u8

@ -0,0 +1,8 @@
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=195023,CODECS="avc1.42e00a,mp4a.40.2",AUDIO="audio"
lo/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=591680,CODECS="avc1.42e01e,mp4a.40.2",AUDIO="audio-hi"
hi/prog_index.m3u8
Loading…
Cancel
Save