diff --git a/src/js/player.js b/src/js/player.js index da7f57e828..20e6beb25f 100644 --- a/src/js/player.js +++ b/src/js/player.js @@ -3533,6 +3533,14 @@ class Player extends Component { * Begin loading the src data. */ load() { + // Workaround to use the load method with the VHS. + // Does not cover the case when the load method is called directly from the mediaElement. + if (this.tech_.vhs) { + this.src(this.currentSource()); + + return; + } + this.techCall_('load'); } diff --git a/test/unit/player.test.js b/test/unit/player.test.js index fa5875d3b6..a595646849 100644 --- a/test/unit/player.test.js +++ b/test/unit/player.test.js @@ -3231,6 +3231,34 @@ QUnit.test('turning on audioPosterMode when audioOnlyMode is already on will tur }); }); +QUnit.test('player#load resets the media element to its initial state', function(assert) { + const player = TestHelpers.makePlayer({}); + + player.src({ src: 'http://vjs.zencdn.net/v/oceans2.mp4', type: 'video/mp4' }); + + // Declaring spies here avoids spying on previous calls + const techGet_ = sinon.spy(player, 'techCall_'); + const src = sinon.spy(player, 'src'); + + player.load(); + + // Case when the VHS tech is not used + assert.ok(techGet_.calledOnce, 'techCall_ was called once'); + assert.ok(src.notCalled, 'src was not called'); + + // Simulate the VHS tech + player.tech_.vhs = true; + player.load(); + + // Case when the VHS tech is used + assert.ok(techGet_.calledOnce, 'techCall_ remains the same'); + assert.ok(src.calledOnce, 'src was called'); + + techGet_.restore(); + src.restore(); + player.dispose(); +}); + QUnit.test('crossOrigin value should be maintained after loadMedia is called', function(assert) { const fixture = document.getElementById('qunit-fixture');