Last active
December 2, 2017 12:04
-
-
Save aarongeorge/750e7f78ba94ab243c6ed47e26626cbd to your computer and use it in GitHub Desktop.
Get supported audio and video codecs of the browser
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Get Codecs | |
* | |
* Usage: | |
* | |
* getCodecs() Returns an object with the keys 'audio' and 'video' | |
* each contain an array of the supported codecs for the browser | |
* | |
* Author: Aaron George | |
* Github: github.com/aarongeorge | |
* Gist: gist.github.com/aarongeorge/750e7f78ba94ab243c6ed47e26626cbd | |
*/ | |
const getSupportedCodecs = (codecs = [], type) => { | |
const testEl = document.createElement(type); | |
const supportedCodecs = []; | |
if (Boolean(testEl.canPlayType)) { | |
codecs.forEach((codec) => { | |
if (typeof codec.mimeType === 'string') { | |
codec.mimeType = codec.mimeType.split(); | |
} | |
for (let i = 0; i < codec.mimeType.length; i++) { | |
if (Boolean(testEl.canPlayType(codec.mimeType).replace(/^no$/, ''))) { | |
supportedCodecs.push(codec.name); | |
break; | |
} | |
} | |
}); | |
}; | |
return supportedCodecs; | |
}; | |
const getSupportedVideoCodecs = () => { | |
const codecs = [ | |
{ | |
'name': 'h264', | |
'mimeType': 'video/mp4; codecs="avc1.42E01E"' | |
}, | |
{ | |
'name': 'hls', | |
'mimeType': 'application/x-mpegURL; codecs="avc1.42E01E"' | |
}, | |
{ | |
'name': 'theora', | |
'mimeType': 'video/ogg; codecs="theora"' | |
}, | |
{ | |
'name': 'vp8', | |
'mimeType': 'video/webm; codecs="vp8, vorbis"' | |
}, | |
{ | |
'name': 'vp9', | |
'mimeType': 'video/webm; codecs="vp9"' | |
} | |
]; | |
return getSupportedCodecs(codecs, 'video'); | |
}; | |
const getSupportedAudioCodecs = () => { | |
const codecs = [ | |
{ | |
'name': 'flac', | |
'mimeType': 'audio/flac;' | |
}, | |
{ | |
'name': 'm4a', | |
'mimeType': ['audio/x-m4a;', 'audio/aac;'] | |
}, | |
{ | |
'name': 'mp3', | |
'mimeType': 'audio/mpeg; codecs="mp3"' | |
}, | |
{ | |
'name': 'ogg', | |
'mimeType': 'audio/ogg; codecs="vorbis"' | |
}, | |
{ | |
'name': 'opus', | |
'mimeType': ['audio/ogg; codecs="opus"', 'audio/webm; codecs="opus"'] | |
}, | |
{ | |
'name': 'wav', | |
'mimeType': 'audio/wav; codecs="1"' | |
} | |
]; | |
return getSupportedCodecs(codecs, 'audio'); | |
}; | |
const getCodecs = () => { | |
return { | |
'audio': getSupportedAudioCodecs(), | |
'video': getSupportedVideoCodecs() | |
}; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment