modernizr-hbbtv-plugins
Version:
Modernizr HbbTV Feature Detection Plugin
70 lines (62 loc) • 2.06 kB
JavaScript
/*!
{
"name": "HbbTV Video",
"property": "hbbtvvideo",
"tags": ["hbbtv", "oipf", "video"],
"async" : true,
"notes": [{
"name": "OIPF Specification Volume 5 Release 1 v1.1 - Declarative Application Environment",
"href": "http://www.oipf.tv/"
},
{
"name": "MIT-xperts HBBTV testsuite",
"href": "https://github.com/mitxp/HbbTV-Testsuite"
}]
}
!*/
/* DOC
Returns if the device supports HbbTV video and if seeking inside a video works.
*/
; (function(window, document, Modernizr) {
var i;
var drmSystemID;
// DRM is only supported for HbbTV >= 1.2
if (!window.navigator.userAgent.match(/HbbTV\/(1\.[2..9]\.|2\.)/i)) {
Modernizr.addTest('hbbtvdrm', false);
return;
}
var drmSystemIDs = {
playready: 'urn:dvb:casystemid:19219',
marlin: 'urn:dvb:casystemid:19188',
widevine: 'urn:dvb:casystemid:19156'
};
var supportsDRM;
// TODO: add dynamically
var oipfCapabilities = document.getElementById('oipfCapabilities');
if (oipfCapabilities.hasCapability('+DRM')) {
supportsDRM = new Boolean(true);
} else {
supportsDRM = false;
}
// Search for PlayReady support
var drms = oipfCapabilities.xmlCapabilities.getElementsByTagName('drm');
supportsDRM.playready = false;
for (i = 0; i < drms.length; i++) {
var drm = drms.item(i);
drmSystemID = drm.getAttribute('DRMSystemID');
if (drmSystemID == drmSystemIDs.playready) {
supportsDRM.playready = true;
}
}
// Search for profiles supporting DASH and PlayReady
var profiles = oipfCapabilities.xmlCapabilities.getElementsByTagName('video_profile');
for (i = 0; i < profiles.length; i++) {
var profile = profiles.item(i);
var transport = profile.getAttribute('transport');
drmSystemID = profile.getAttribute('DRMSystemID');
if (transport == 'dash' && drmSystemID == drmSystemIDs.playready) {
//HbbTV.log([profile.getAttribute('name'), profile.getAttribute('type')]);
}
}
Modernizr.addTest('hbbtvdrm', supportsDRM);
})(window, document, window.Modernizr);