我们正在尝试从Chrome到Chromecast播放drm MPD内容我们的接收端app代码如下:
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",
},
});