// Specialized create media keys function, since the one in eme.js relies
// on listening for encrypted events, and we want to manage those
// ourselves within this test.
async function createAndSetMediaKeys(video, test) {
function streamType(type) { var x = test.tracks.find(o => o.name == type);
return x ? x.type : undefined;
}
var configuration = { initDataTypes: ["cenc"] };
if (streamType("video")) {
configuration.videoCapabilities = [{contentType: streamType("video")}];
}
if (streamType("audio")) {
configuration.audioCapabilities = [{contentType: streamType("audio")}];
}
let keySystemAccess = await navigator.requestMediaKeySystemAccess( "org.w3.clearkey", [configuration]);
let mediaKeys = await keySystemAccess.createMediaKeys();
return video.setMediaKeys(mediaKeys);
}
function startTest(test, token) {
manager.started(token);
let video = document.createElement("video");
document.body.appendChild(video);
let encryptedEventCount = 0;
let initDatas = new Map();
function handleEncrypted(event) {
// We get one 'encrypted' event for every run of contiguous PSSH boxes
// in each stream. Note that some of the PSSH boxes contained in the
// "bear" streams aren't in the Common Open PSSH box format, so our
// ClearKey CDM will reject those license requests. Some of the init
// data is also repeated.
encryptedEventCount++;
let hexStr = StringToHex(new TextDecoder().decode(event.initData));
if (initDatas.has(hexStr)) {
// Already have a session for this.
return;
}
let initData = new Uint8Array(event.initData);
is(event.initDataType, "cenc", "'encrypted' event should have 'cenc' " + "initDataType");
Log(token, "encrypted event => len=" + initData.length + " " + hexStr);
let session = event.target.mediaKeys.createSession();
initDatas.set(hexStr, session);
session.addEventListener("message", e => {
e.target.update(
GenerateClearKeyLicense(e.message, test.keys));
});
video.addEventListener("ended", () => {
let expectedEncryptedEvents =
test.tracks.reduce((sum, track) => sum += track.initDatas, 0);
is(encryptedEventCount, expectedEncryptedEvents, "Should get one 'encrypted' event per run of contiguous PSSH " + "boxes in media.");
manager.finished(token);
});
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.