7744312d by David LaPalomento

Merge pull request #231 from videojs/bugfix/segment-skip

Fixing bug that started playback at 2nd segment
2 parents c4110efc e15b14bb
...@@ -666,7 +666,7 @@ videojs.Hls.prototype.drainBuffer = function(event) { ...@@ -666,7 +666,7 @@ videojs.Hls.prototype.drainBuffer = function(event) {
666 segmentOffset, 666 segmentOffset,
667 segmentBuffer = this.segmentBuffer_; 667 segmentBuffer = this.segmentBuffer_;
668 668
669 if (!segmentBuffer.length) { 669 if (!segmentBuffer.length || !this.sourceBuffer) {
670 return; 670 return;
671 } 671 }
672 672
......
...@@ -1724,6 +1724,46 @@ test('calling play() at the end of a video resets the media index', function() { ...@@ -1724,6 +1724,46 @@ test('calling play() at the end of a video resets the media index', function() {
1724 strictEqual(player.hls.mediaIndex, 0, 'index is 1 after the first segment'); 1724 strictEqual(player.hls.mediaIndex, 0, 'index is 1 after the first segment');
1725 }); 1725 });
1726 1726
1727 test('drainBuffer will not proceed with empty source buffer', function() {
1728 var oldMedia, newMedia, compareBuffer;
1729 player.src({
1730 src: 'https://example.com/encrypted-media.m3u8',
1731 type: 'application/vnd.apple.mpegurl'
1732 });
1733 openMediaSource(player);
1734
1735 oldMedia = player.hls.playlists.media;
1736 newMedia = {segments: [{
1737 key: {
1738 'retries': 5
1739 },
1740 uri: 'http://media.example.com/fileSequence52-A.ts'
1741 }, {
1742 key: {
1743 'method': 'AES-128',
1744 'uri': 'https://priv.example.com/key.php?r=53'
1745 },
1746 uri: 'http://media.example.com/fileSequence53-B.ts'
1747 }]};
1748 player.hls.playlists.media = function() {
1749 return newMedia;
1750 };
1751
1752 player.hls.sourceBuffer = undefined;
1753 compareBuffer = [{mediaIndex: 0, playlist: newMedia, offset: 0, bytes: [0,0,0]}];
1754 player.hls.segmentBuffer_ = [{mediaIndex: 0, playlist: newMedia, offset: 0, bytes: [0,0,0]}];
1755
1756 player.hls.drainBuffer();
1757
1758 /* Normally, drainBuffer() calls segmentBuffer.shift(), removing a segment from the stack.
1759 * Comparing two buffers to ensure no segment was popped verifies that we returned early
1760 * from drainBuffer() because sourceBuffer was empty.
1761 */
1762 deepEqual(player.hls.segmentBuffer_, compareBuffer, 'playlist remains unchanged');
1763
1764 player.hls.playlists.media = oldMedia;
1765 });
1766
1727 test('calling fetchKeys() when a new playlist is loaded will create an XHR', function() { 1767 test('calling fetchKeys() when a new playlist is loaded will create an XHR', function() {
1728 player.src({ 1768 player.src({
1729 src: 'https://example.com/encrypted-media.m3u8', 1769 src: 'https://example.com/encrypted-media.m3u8',
......