- From: Joe Steele <steele@adobe.com>
- Date: Mon, 15 Oct 2012 11:54:09 -0700
- To: "<public-html-media@w3.org>" <public-html-media@w3.org>
- CC: Aaron Colwell <acolwell@google.com>
- Message-ID: <E891C287-1696-4DDC-9EED-A2FC22B48005@adobe.com>
I had an request from two meetings ago to produce some example code for pre-loading a MediaKeys instance independent of the HTMLMediaElements that the MediaKeys object may later be attached to.
Here is the example I propose:
--------
<script>
var cdm;
// Preload some keys when page loads
function load()
{
  // Create a MediaKeys instance for the desired CDM not associated with an HTMLMediaElement
  cdm = new MediaKeys("com.example.somesystem");
  if (!cdm)
      throw "Could not create MediaKeys";
  // Create a new key session using the MediaKeys instance
  var keySession = cdm.createSession(NULL, NULL);
  if (!keySession)
      throw "Could not create MediaKeySession";
  keySession.onkeymessage="handleMessage(event)";
  // Load an application defined key package into the key session
  // The key package can be hard-coded into the page or loaded as a resource
  // Loading the key package may cause additional key messages to be sent
  var Uint8Array keyToPreload;
  keySession.addKey(keyToPreload);
  keySession.close();
}
// Respond to key message
function handleMessage(event)
{
    var keySession = event.target;
    var message = event.message;
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", "http://.../getkey", false);
    xmlhttp.send(message);
    var key = new Uint8Array(xmlhttp.response);
    keySession.addKey(key);
}
// Attach pre-initialized MediaKeys to an HTMLMediaElement
function setMediaKeys()
{
  var video = event.target;
  var initData = event.initData;
  if (!cdm)
	throw "MediaKeys was not already created!";
  if (!video.keys)
	video.keys = cdm;
  
  // Create a new key session using the mimeType and initData
  var keySession = video.keys.createSession(mimeType, initData);
  if (!keySession)
	throw "Could not create MediaKeySession";
  keySession.onkeymessage="handleMessage(event)";
}
<body onload="load()">
  <video src="foo.dash" autoplay onneedkey="setMediaKeys(event)" onkeymessage="handleMessage(event)"></video>
</body>
</script>
--------
I believe this should all work within the confines of the current draft. I am intentionally leaving how the preloaded key package is derived as an exercise for the application developer, since there are many possible ways to handle that. 
Joe Steele
steele@adobe.com
Received on Monday, 15 October 2012 18:55:46 UTC