2e71aa18 by David LaPalomento

Require typed arrays for the tech to be supported

Typed arrays are used extensively in repackaging segments. Make sure the tech doesn't load on platforms they're not available on (e.g. IE8). Fixes #137.
1 parent f2204738
...@@ -513,9 +513,15 @@ videojs.Hls.supportsNativeHls = (function() { ...@@ -513,9 +513,15 @@ videojs.Hls.supportsNativeHls = (function() {
513 })(); 513 })();
514 514
515 videojs.Hls.isSupported = function() { 515 videojs.Hls.isSupported = function() {
516
517 // Only use the HLS tech if native HLS isn't available
516 return !videojs.Hls.supportsNativeHls && 518 return !videojs.Hls.supportsNativeHls &&
519 // Flash must be supported for the fallback to work
517 videojs.Flash.isSupported() && 520 videojs.Flash.isSupported() &&
518 videojs.MediaSource; 521 // Media sources must be available to stream bytes to Flash
522 videojs.MediaSource &&
523 // Typed arrays are used to repackage the segments
524 window.Uint8Array;
519 }; 525 };
520 526
521 videojs.Hls.canPlaySource = function(srcObj) { 527 videojs.Hls.canPlaySource = function(srcObj) {
......
...@@ -1152,6 +1152,15 @@ test('has no effect if native HLS is available', function() { ...@@ -1152,6 +1152,15 @@ test('has no effect if native HLS is available', function() {
1152 player.dispose(); 1152 player.dispose();
1153 }); 1153 });
1154 1154
1155 test('is not supported on browsers without typed arrays', function() {
1156 var oldArray = window.Uint8Array;
1157 delete window.Uint8Array;
1158 ok(!videojs.Hls.isSupported(), 'HLS is not supported');
1159
1160 // cleanup
1161 window.Uint8Array = oldArray;
1162 });
1163
1155 test('tracks the bytes downloaded', function() { 1164 test('tracks the bytes downloaded', function() {
1156 player.src({ 1165 player.src({
1157 src: 'http://example.com/media.m3u8', 1166 src: 'http://example.com/media.m3u8',
......