Chromecast接收器应用程序无法播放来自Android发送者应用程序的广泛受drm保护的内容

时间:2017-08-03 06:00:06

标签: android chromecast widevine custom-receiver

我使用Expressplay网站的接收器应用程序进行chromecast。的 https://www.expressplay.com/developer/test-apps/#ccplayer

我已通过传递许可网址以及广泛的流路径从浏览器对其进行了测试。播放视频,意味着接收器工作正常。

当我尝试播放Android发送者应用程序中的内容时,会出现问题。我在 json 对象中传递许可网址

我的Android发送者代码如下。

private MediaInfo buildMediaInfo() {
    MediaMetadata movieMetadata = new MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE);
    movieMetadata.putString(MediaMetadata.KEY_SUBTITLE, "Subtitle");
    movieMetadata.putString(MediaMetadata.KEY_TITLE, "Title");
    jsonObj = new JSONObject();
    try{
       jsonObj.put("licenseUrl","https://wv.test.expressplay.com/hms/wv/rights/?ExpressPlatToken=****");
    }catch (JSONException e){
        Log.e(null,"Failed to add description to the json object", e);
    }
    return new MediaInfo.Builder("stream path.mpd")
            .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
            .setContentType("video/mp4")
            .setMetadata(movieMetadata)
            .setCustomData(jsonObj)
            //.setStreamDuration(player.getDuration())
            .build();
}

我猜测问题可能来自接收者的代码,因为在设置 licenseUrl 时从Android播放的情况。

我的接收者代码设置许可证URL如下。

if (event.data.customData && event.data.customData.licenseUrl) {
                    console.log('setting license URL');
                    host.licenseUrl = event.data.customData.licenseUrl;
                }
在Android的情况下,

event.data.customData.licenseUrl许可URL未设置。

  • 从Android发送者播放时的结果为黑屏。

  • 从浏览器发件人播放时播放视频。

  • 在托管视频内容的S3服务器上启用
  • CORS

任何人都能说出我做错了什么吗?

从android没有设置许可证URL传递JSON对象吗?如果是,那么如何解决?

提前感谢您对我的问题感兴趣和值得花时间。 :)

2 个答案:

答案 0 :(得分:1)

如果您还没有这样做,请查看DRM support,其中说明了

  

要完全支持受数字版权管理(DRM)保护的内容,您需要实施Custom Receiver。使用自定义接收器,您可以根据DRM要求设置身份验证并定制应用程序。

请注意,您的接收器应用程序使用以下参考访问Receiver API:

//www.gstatic.com/cast/sdk/libs/receiver/2.0.0/cast_receiver.js

此外,要开发自定义接收器应用程序,您需要使用register Google Cast SDK Developer Console您的应用。

然后,对于Android Sender App,请检查以下内容:

答案 1 :(得分:1)

我发现我的Receiver应用程序event.data.customData在从android发送者应用程序连接时未定义。

所以我使用了event.data.media.customData

并按以下方式访问密钥:

if(event.data.media.customData['licenseUrl'] !== null){
                    console.log('setting license URL from mobile');
                    host.licenseUrl = event.data.media.customData.licenseUrl;
                }

就是这样! :)