假设我们有一个加密的数据流(SmoothStreaming + PlayReady的)和一个自定义接收器建立在googlecast /施放定制接收器 。
我可以看到,设备尝试获取来自LA_URL(许可证获取URL)牌照-从流的PlayReady ProtectionHeader提取。
我不知道有没有办法来覆盖这个行为? 我想接收器授权许可证获取发件人 - 在我的情况iOS应用。
假设我们有一个加密的数据流(SmoothStreaming + PlayReady的)和一个自定义接收器建立在googlecast /施放定制接收器 。
我可以看到,设备尝试获取来自LA_URL(许可证获取URL)牌照-从流的PlayReady ProtectionHeader提取。
我不知道有没有办法来覆盖这个行为? 我想接收器授权许可证获取发件人 - 在我的情况iOS应用。
当设置了一个主机,你可以通过一个licenseUrl(见这里 ),我想如果这是存在,它将被用于获取许可证。
您可以通过修改Media Player媒体库实现这一目标。 需要做的唯一的事情-揭露的挑战,关键系统,初始化数据和的sessionId虽然prepareLicenseRequest()
< this.c.prepareLicenseRequest && !this.c.prepareLicenseRequest() || this.gb()
---
> this.c.prepareLicenseRequest && !this.c.prepareLicenseRequest(this.ef, Df[this.vc], this.qb, this.hf) || this.gb()
请验证变量名的原因,他们可以是不同的(它们可以发现webkitAddKey()
后来在media_player.js代码中调用)。
在您的接收器只是定义了自己的prepareLicenseRequest
实现:
window.mediaHost.prepareLicenseRequest = function(challenge,keySystem, initData, sessionId) {
debug('drm', 'prepareLicenseRequest');
window.initData = initData;
window.sessionId = sessionId;
window.keySystem = keySystem;
var base64challenge = window.btoa(pack(challenge));
window.messageBus.broadcast(base64challenge); // TODO send only to initiator
return false // receiver will stop not request license by itself
}
当许可证由发送者获取它可以通过相同的信道将其发送回。 在这种情况下,接收器需要许可证添加到ENV:
window.messageBus.onMessage = function(event) {
var base64key = event['data'];
var key = unpack(window.atob(base64key));
window.mediaElement.webkitAddKey(window.keySystem, new Uint8Array(unpack(unbase64)), window.initData, window.sessionId);
window.mediaElement.play();
}
window.messageBus
在这种情况下是自定义信道( urn:x-cast:me.trnl.cast.key
)
而已。 它适用于我们,这是相当快的。