Google Cast CAF接收器和DRM +承载令牌

时间:2018-11-07 21:40:10

标签: chromecast google-cast bearer-token azure-media-services

我已经为Azure Media Server上的一些启用DRM的视频创建了一个自定义接收器应用程序,但是我必须首先获取一个承载令牌。我该怎么做,并且已经在发送方请求中作为customData发送了。我还创建了一个类来处理MPEG-DASH清单并获取许可证获取URL。这是我所拥有的部分。

/** variable declaration, for
 * CastReceiverContext, PlaybackConfig, PlayerManager, etc....
 */

playerManager.setMediaPlaybackInfoHandler((loadRequest, playbackConfig) => {
    if (loadRequest.media.customData && loadRequest.media.customData.bearerToken {
        bearerToken = loadRequest.media.customData.bearerToken;
    }
});

playbackConfig.manifestHandler = (manifestString) => {
    const mh = DashManifestParser(manifestString);
    const licenseUrl = mh.licenseAcquisitionUrl();
    if (licenseUrl) {
        playbackConfig.licenseUrl = licenseUrl;
    }
};

playbackConfig.licenseRequestHandler = (request) => {
    console.log("I AM REQUESTING THE LICENSE NOW. WATCH THIS. NO, REALLY!");
};

如何将其作为DRM请求的一部分进行处理?我实际上找不到合适的位置将不记名令牌注入许可证获取URL。我了解到这一点,我需要使用承载令牌向https://thestacks.keydelivery.eastus.media.azure.net/Widevine/?kid=28ab28d4-ecca-fake-ckid-801ba72c1fe8发送请求。我认为这是由接收器应用程序自动完成的,但事实并非如此。甚至不会playbackConfig.licenseRequestHandler被调用。我假设即使我的函数无法完成应有的工作,我也会在调试器中看到令人讨厌的日志-但什么都没有出现,但最终错误出现在{"shakaErrorCode":6006,"shakaErrorData":["Generate request failed."]}

2 个答案:

答案 0 :(得分:0)

这通常取决于播放器框架供应商:是否以及如何提供API来插入承载令牌字符串。在播放器框架内部,它将承载令牌转换为DRM许可证或AES解密密钥的HTTPS请求中的“授权”标头。我们不应该假定每个播放器框架都可以提供此功能并且可以正常工作。例如,以下播放器框架现在可以提供此功能并起作用:

  1. Azure Media Player
  2. Akamai媒体播放器
  3. JWPlayer
  4. ExoPlayer

关于, 威廉

答案 1 :(得分:0)

我通过使用Akamai Media Player(AMP)在我的CAF3自定义接收器上使用了DRM Widevine