如何在 chromecast 中使用 DRM 内容

问题描述

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

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 从发送方客户端(设备“外壳”)发送到接收方(将接收投射请求并实际获取和播放流的设备)数据。

自定义数据是一个 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",});

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...