Chromecast的发件人的PlayReady许可证提供商(Chromecast sender a

2019-10-19 23:24发布

假设我们有一个加密的数据流(SmoothStreaming + PlayReady的)和一个自定义接收器建立在googlecast /施放定制接收器 。

我可以看到,设备尝试获取来自LA_URL(许可证获取URL)牌照-从流的PlayReady ProtectionHeader提取。

我不知道有没有办法来覆盖这个行为? 我想接收器授权许可证获取发件人 - 在我的情况iOS应用。

Answer 1:

当设置了一个主机,你可以通过一个licenseUrl(见这里 ),我如果这是存在,它将被用于获取许可证。



Answer 2:

您可以通过修改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

而已。 它适用于我们,这是相当快的。



文章来源: Chromecast sender as a PlayReady license provider