2016-01-29 16 views
5

Ich habe versucht, herauszufinden, wie der DRM-Systembrowser verwendet wird. Und in der Tat, nur Chrom sagen, es ist 'com.widevine.alpha', wo IE & Safari (Win) Fehler auf 'requestMediaKeySystemAccess' zu werfen, und Firefox versuchen nicht einmal zu sagen, es verwenden 'com.adobe.access' =]Ermitteln des DRM-Systems, das vom Browser unterstützt wird

Gibt es irgendeine Lösung, wie Modernizr oder ähnliches, um welches Schlüsselsystem zu erhalten, das ich verwenden sollte?

+0

Überprüfen Sie diesen Artikel, den ich kürzlich schrieb: http://aameer.github.io/articles/digital-rights-management-multi-drm/ es erklärt im Detail, wie Multi-Drm zu erreichen, überprüfen Sie den Abschnitt über etwa aktueller Status – Aameer

Antwort

4

Es gibt mehrere Websites, eine solche Prüfung anbieten, wie dash-player.com/browser-capabilities/ Nach genauer mit, wie es gemacht wird, ein etwas ähnliches verwenden:

// 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; 
 
    } 
 
    } 
 
}

einfach laufen supportsEncryptedMediaExtension() und supportedSystems werden mit den gewünschten Informationen gefüllt.

+1

Das ist großartig! Wo haben Sie die Liste der wichtigsten Systemzeichenfolgen gefunden? Ich weiß, dass 'org.w3.clearkey' von der w3 Spezifikation kommt - https://w3c.github.io/encrypted-media/#common-key-systems -. Aber ich habe Schwierigkeiten herauszufinden, woher die anderen kommen. – Boushley

+1

Safari scheint auf der Eigenschaft "webkitGenerateKeyRequest" nicht definiert zu sein. Experimentiert jemand dieses Problem? Danke –

1

Zusätzlich zu den hier aufgeführten Informationen, möchte ich erwähnen, dass in Chrome, ob Sie https verwenden oder nicht, wird die Verfügbarkeit von navigator.requestMediaKeySystemAccess Funktion beeinträchtigen.

In der Entwicklungsumgebung, die wahrscheinlich auf http läuft, wird navigator.requestMediaKeySystemAccessundefined Rückkehr für Chrome während der gleiche Code eine Funktion in Firefox zurück.

in Ihrer Umgebung, die prod https hat, navigator.requestMediaKeySystemAccess eine Funktion sowohl in Chrome und Firefox zurück.

Verwandte Themen