Replace switch in support.mime with object literal and conditions, and make it return boolean
This commit is contained in:
parent
64bb206d85
commit
2a186e425b
@ -7,6 +7,15 @@ import browser from './utils/browser';
|
|||||||
import { createElement } from './utils/elements';
|
import { createElement } from './utils/elements';
|
||||||
import is from './utils/is';
|
import is from './utils/is';
|
||||||
|
|
||||||
|
// Default codecs for checking mimetype support
|
||||||
|
const defaultCodecs = {
|
||||||
|
'audio/ogg': 'vorbis',
|
||||||
|
'audio/wav': '1',
|
||||||
|
'video/webm': 'vp8, vorbis',
|
||||||
|
'video/mp4': 'avc1.42E01E, mp4a.40.2',
|
||||||
|
'video/ogg': 'theora',
|
||||||
|
};
|
||||||
|
|
||||||
// Check for feature support
|
// Check for feature support
|
||||||
const support = {
|
const support = {
|
||||||
// Basic support
|
// Basic support
|
||||||
@ -41,56 +50,29 @@ const support = {
|
|||||||
// Check for mime type support against a player instance
|
// Check for mime type support against a player instance
|
||||||
// Credits: http://diveintohtml5.info/everything.html
|
// Credits: http://diveintohtml5.info/everything.html
|
||||||
// Related: http://www.leanbackplayer.com/test/h5mt.html
|
// Related: http://www.leanbackplayer.com/test/h5mt.html
|
||||||
mime(type) {
|
mime(inputType) {
|
||||||
const { media } = this;
|
const [mediaType] = inputType.split('/');
|
||||||
|
if (!this.isHTML5 || mediaType !== this.type) {
|
||||||
try {
|
|
||||||
// Bail if no checking function
|
|
||||||
if (!this.isHTML5 || !is.function(media.canPlayType)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check directly if codecs specified
|
|
||||||
if (type.includes('codecs=')) {
|
|
||||||
return media.canPlayType(type).replace(/no/, '');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Type specific checks
|
|
||||||
if (this.isVideo) {
|
|
||||||
switch (type) {
|
|
||||||
case 'video/webm':
|
|
||||||
return media.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/, '');
|
|
||||||
|
|
||||||
case 'video/mp4':
|
|
||||||
return media.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/, '');
|
|
||||||
|
|
||||||
case 'video/ogg':
|
|
||||||
return media.canPlayType('video/ogg; codecs="theora"').replace(/no/, '');
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} else if (this.isAudio) {
|
|
||||||
switch (type) {
|
|
||||||
case 'audio/mpeg':
|
|
||||||
return media.canPlayType('audio/mpeg;').replace(/no/, '');
|
|
||||||
|
|
||||||
case 'audio/ogg':
|
|
||||||
return media.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, '');
|
|
||||||
|
|
||||||
case 'audio/wav':
|
|
||||||
return media.canPlayType('audio/wav; codecs="1"').replace(/no/, '');
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we got this far, we're stuffed
|
let type;
|
||||||
return false;
|
if (inputType && inputType.includes('codecs=')) {
|
||||||
|
// Use input directly
|
||||||
|
type = inputType;
|
||||||
|
} else if (inputType === 'audio/mpeg') {
|
||||||
|
// Skip codec
|
||||||
|
type = 'audio/mpeg;';
|
||||||
|
} else if (inputType in defaultCodecs) {
|
||||||
|
// Use codec
|
||||||
|
type = `${inputType}; codecs="${defaultCodecs[inputType]}"`;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));
|
||||||
|
} catch (err) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Check for textTracks support
|
// Check for textTracks support
|
||||||
|
Loading…
x
Reference in New Issue
Block a user