如何在 chromecast 中对内容进行 DRM

How to DRM Content in chromecast

我们正在尝试播放从 Chrome 到 Chromecast 的 drm MPD 内容 我们的接收器应用程序代码如下:

const context = cast.framework.CastReceiverContext.getInstance();
const playbackConfig = new cast.framework.PlaybackConfig();
playbackConfig.licenseUrl = 'http://widevine/yourLicenseServer';
playbackConfig.protectionSystem = cast.framework.ContentProtection.WIDEVINE;
playbackConfig.licenseRequestHandler = requestInfo => {
  requestInfo.withCredentials = true;
};
context.start({playbackConfig: playbackConfig});

// Update playback config licenseUrl according to provided value in load request.
context.getPlayerManager().setMediaPlaybackInfoHandler((loadRequest, playbackConfig) => {
if (loadRequest.media.customData && loadRequest.media.customData.licenseUrl) {
 playbackConfig.licenseUrl = loadRequest.media.customData.licenseUrl;
 }
 return playbackConfig;
});

我没有找到在客户端应用程序中为 DRM 传递自定义数据的正确方法。 请帮忙

我想你问的是如何将许可证 URL 从发送方客户端(设备 'casing')发送到接收方(将接收投射请求并实际获得的设备)并在自定义数据中播放流)。

自定义数据是一个JSON对象,你只需要将许可证url放入其中即可。

有两种常见的传递自定义数据的方法:

  • 使用 MediaInfo.Builder.setCustomData 方法将其包含在 MediaInfo 对象中
  • 将其包含在 MediaLoadOptions 数据中

例如,查看 Google 文档中的 MediaInfo 示例并添加自定义数据:

List tracks = new ArrayList();
tracks.add(englishSubtitle);
tracks.add(frenchSubtitle);
tracks.add(frenchAudio);
MediaInfo mediaInfo = MediaInfo.Builder(url)
  .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
  .setContentType(getContentType())
  .setMetadata(getMetadata())
  .setMediaTracks(tracks)
  .setCustomData(yourCustomData)    <--- This is the custom data
  .build();

'yourCustomData' 上面是一个 JSON 对象,您可以创建该对象并将数据添加到其中,在您的情况下是您的许可服务器 URL:

JSONObject yourCustomData = new JSONObject();
try {
    yourCustomeData.put("licenseURL", "HTTPS://yourlicenseServerUrl.com");
} catch (JSONException e) {
    // Add any error code you want here
    e.printStackTrace();
}

js请看代码

new ChromecastJS().cast({
 content: "xxxxxx",
 contentType: "application/dash+xml",
 poster: "xxxxxxx",
 title: "xxxxx",
 description: "xxxxx",
 duration: "xxxx",
 volume: 0.5,
 muted: false,
 paused: false,
 time: "Xxxxx",
 customData: {
  drmHeaders: {
    customdata: "xxxxxx",
  },

  drmLaUrl: "xxxx",
  drmKsName: "com.widevine.alpha",
 },
});