2016-01-29 8 views
5

मैं यह पता लगाने की कोशिश कर रहा हूं कि कौन सी डीआरएम सिस्टम ब्राउज़र उपयोग कर रहा है। और वास्तव में, केवल क्रोम का कहना है कि यह 'com.widevine.alpha' का उपयोग करता है जहां IE & सफारी (विन) 'requestMediaKeySystemAccess' पर त्रुटि फेंकता है, और फ़ायरफ़ॉक्स यह भी कहने की कोशिश नहीं करता है कि यह 'com.adobe.acccess' =]ब्राउज़र द्वारा समर्थित डीआरएम सिस्टम का निर्धारण

क्या कोई समाधान है, जैसे Modernizr या मुझे किस कुंजी सिस्टम का उपयोग करना चाहिए?

+0

इस लेख को मैंने हाल ही में लिखा है: http://aameer.github.io/articles/digital-rights-management-multi-drm/ यह बहु-ड्रम प्राप्त करने के बारे में विवरण में बताता है, इस बारे में अनुभाग देखें वर्तमान स्थिति – Aameer

उत्तर

4

वहाँ कई इस तरह के एक जांच, dash-player.com/browser-capabilities/ की तरह की पेशकश वेबसाइटों है कि यह कैसे किया जाता है, एक के लिए कुछ इसी तरह का उपयोग कर सकते पर गहन चर्चा होने के बाद कर रहे हैं:

// EME Check 
 
var keySystems = { 
 
    widevine: ['com.widevine.alpha'], 
 
    playready: ['com.microsoft.playready', 'com.youtube.playready'], 
 
    clearkey: ['webkit-org.w3.clearkey', 'org.w3.clearkey'], 
 
    primetime: ['com.adobe.primetime', 'com.adobe.access'], 
 
    fairplay: ['com.apple.fairplay'] 
 
}; 
 
var keySystemsCount = (function() { 
 
    var count = 0; 
 
    for (keysys in keySystems) { 
 
    if (keySystems.hasOwnProperty(keysys)) { 
 
     count += keySystems[keysys].length; 
 
    } 
 
    } 
 
    return count; 
 
})(); 
 

 
var testVideoElement = document.createElement('video'); 
 
var supportedSystems = []; 
 
var unsupportedSystems = []; 
 

 
var supportsEncryptedMediaExtension = function() { 
 
    if (!testVideoElement.mediaKeys) { 
 
    if (window.navigator.requestMediaKeySystemAccess) { 
 
     if (typeof window.navigator.requestMediaKeySystemAccess === 'function') { 
 
     console.log('found default EME'); 
 
     hasEME = true; 
 
     var isKeySystemSupported = function (keySystem) { 
 
      var config = [{initDataTypes: ['cenc']}]; 
 
      if (window.navigator.requestMediaKeySystemAccess) { 
 
      window.navigator.requestMediaKeySystemAccess(keySystem, config).then(function (keySystemAccess) { 
 
       supportedSystems.push(keySystem); 
 
      }).catch(function() { 
 
       unsupportedSystems.push(keySystem); 
 
      }); 
 
      } 
 
     }; 
 
     var keysys, dummy, i; 
 
     for (keysys in keySystems) { 
 
      if (keySystems.hasOwnProperty(keysys)) { 
 
      for (dummy in keySystems[keysys]) { 
 
       isKeySystemSupported(keySystems[keysys][dummy]); 
 
      } 
 
      } 
 
     } 
 
     } 
 
    } else if (window.MSMediaKeys) { 
 
     if (typeof window.MSMediaKeys === 'function') { 
 
     console.log('found MS-EME'); 
 
     hasEME = true; 
 
     var keysys, dummy, i; 
 
     for (keysys in keySystems) { 
 
      if (keySystems.hasOwnProperty(keysys)) { 
 
      for (dummy in keySystems[keysys]) { 
 
       if (MSMediaKeys.isTypeSupported(keySystems[keysys][dummy])) { 
 
       supportedSystems.push(keySystems[keysys][dummy]); 
 
       } else { 
 
       unsupportedSystems.push(keySystems[keysys][dummy]); 
 
       } 
 
      } 
 
      } 
 
     } 
 
     } 
 
    } else if (testVideoElement.webkitGenerateKeyRequest) { 
 
     if (typeof testVideoElement.webkitGenerateKeyRequest === 'function') { 
 
     console.log('found WebKit EME'); 
 
     hasEME = true; 
 
     var keysys, dummy, i; 
 
     for (keysys in keySystems) { 
 
      if (keySystems.hasOwnProperty(keysys)) { 
 
      for (dummy in keySystems[keysys]) { 
 
       if (testVideoElement.canPlayType('video/mp4', keySystems[keysys][dummy])) { 
 
       supportedSystems.push(keySystems[keysys][dummy]); 
 
       } else { 
 
       unsupportedSystems.push(keySystems[keysys][dummy]); 
 
       } 
 
      } 
 
      } 
 
     } 
 
     } 
 
    } else { 
 
     console.log('no supported EME implementation found'); 
 
     hasEME = false; 
 
    } 
 
    } 
 
}

सीधे शब्दों में supportsEncryptedMediaExtension चलाने() और समर्थित सिस्टम वांछित जानकारी से भरे जाएंगे।

+1

यह बढ़िया है! आपको कुंजी सिस्टम स्ट्रिंग्स की सूची कहां मिली? मुझे पता है कि 'org.w3.clearkey' w3 spec से आता है - https://w3c.github.io/encrypted-media/#common-key-systems -। लेकिन मुझे यह पता लगाने में परेशानी है कि अन्य लोग कहां से आते हैं। – Boushley

+1

सफारी 'webkitGenerateKeyRequest' संपत्ति पर अपरिभाषित वापस प्रतीत होता है। क्या कोई इस समस्या का प्रयोग कर रहा है? धन्यवाद –

1

यहां सूचीबद्ध जानकारी के अतिरिक्त, मैं क्रोम में उल्लेख करना चाहता हूं कि आप https का उपयोग कर रहे हैं या navigator.requestMediaKeySystemAccess फ़ंक्शन की उपलब्धता को प्रभावित नहीं करेंगे।

कि शायद http पर चल रहा है अपने विकास के वातावरण में, navigator.requestMediaKeySystemAccessक्रोम के लिए undefined लौटने जबकि एक ही कोड फ़ायरफ़ॉक्स में एक समारोह वापस आ जाएगी होगा।

अपने prod वातावरण है कि https में, navigator.requestMediaKeySystemAccess एक समारोह क्रोम और फ़ायरफ़ॉक्स में दोनों वापस आ जाएगी।

संबंधित मुद्दे