1

I'm aware that developer-preview of Chromecast receiver does not fully support Smooth Streaming manifest URL (See Update#1).

I have tested content provided by Microsoft PlayReady(TM) Test Server - Smooth Streaming assets using sample receiver app provider in GitHub project.

Smooth Streaming Support

As expected, manifest file does not work (See Update#1). But I was able to play individual ismv file (but only low bitrates). When I use higher bitrate, the video container stays black.

PlayReady Support

When I tried to play PlayReady protected low bitrate ismv file, I was expecting some sort of call back MediaProtocolMessageStream.onKeyRequested(). But there did not happen. Here is my android CustomMediaProtocolMessageStream implementation.


So, does anybody know how PlayReady or Widevine supposed to work with Chromecast? I have seen Netflix invokes some binary shell command when app is loaded in chromecast. But I assume, they worked with Google to accomplish this.

Additional SO Resources

Update #1

Based on Les Vogel's answer, smooth streaming manifest file for adaptive bitrate streaming is supported by Chromecast. You need custom player to handle that. As far as I am aware of, currently there are two JS player which can handle that, but I don't know if they will work on Chromecast.

  1. dash.js - By DASH Industry Forum (https://github.com/Dash-Industry-Forum/dash.js)
  2. Microsoft HTML5 Player Framework - Part of Microsoft Media Platform (http://playerframework.codeplex.com/)
Community
  • 1
  • 1
Hossain Khan
  • 6,332
  • 7
  • 41
  • 55

2 Answers2

3

Currently, you need to write your own media player to support adaptive bitrate streaming on Chromecast.

Unfortunately, the MS test server assets do not correctly provide a CORS header, which would be needed if you wrote a javascript player.

PlayReady and Windvine are both supported. We'll be providing additional documentation shortly.

EDIT We announced the beta of the Cast Media Player Library today 2/3/14 - it supports HLS, SmoothStreaming, and MPEG Dash.

  • Thanks for the clarification. Are you aware of any community supported JS player that is able to handle smoothstreaming manifest files? On one of the SO question, I saw you mentioning `dash.js`. Is that an option? – Hossain Khan Jan 24 '14 at 18:59
  • Some developers have started with dash.js, but moved on to their own work. – Les Vogel - Google DevRel Jan 25 '14 at 03:03
  • Thanks for the update on media player library. Is there an example how encrypted media and license acquisition flow works? It seems, we need to use the player's "`Host - Host used for interacting with the application by the player.`" to provide the license, there are APIs like, "`prepareLicenseRequest`", "`processLicense`", "`updateLicenseRequestInfo`" And the "`Player`" object also has API "`startLicenseRequest() - Tells the player to start requesting the license.`". Is there any example project being done on this area? – Hossain Khan Feb 04 '14 at 22:16
  • I was not able to use the example android projects on github, since Google Play Services Library v15 is not released yet. – Hossain Khan Feb 04 '14 at 22:18
  • Take a look at https://github.com/googlecast/Cast-Media-Player-Library-Sample for a sample Receiver. It really doesn't show license request, however. For PlayReady, you can include all the info that's needed in your Manifest, and it will just work -- no need for the extra API's. If you need CustomData, however, you'll want to go into them. You do, however, need to enable CORS headers on your servers and CDN's. – Les Vogel - Google DevRel Feb 04 '14 at 22:29
  • This should work. In the cast developer console I can see requests to DRM server extracted from **ProtectionHeader**. But how about fully custom license acquisition flow? In our case we have a host which checks user session before requesting a license. There are some references in [this question](http://stackoverflow.com/questions/22040027/chromecast-playready-encryption), but I can't really find anything more. – trnl Apr 18 '14 at 17:07
  • You can modify the URL's before they are sent, and you can add custom data to be signed by the Chromecast before it get's sent to your server. Your Q doesn't contain enough info for me to answer, but you can look at cast.player.api.Host https://developers.google.com/cast/docs/reference/player/ and find the getLicenseCustomData, licenseCustomData, licenseUrl, prepareLicenseRequest, processLicense, and other methods there. – Les Vogel - Google DevRel Apr 18 '14 at 17:39
  • Les, I'll try to rephrase - I want receiver to ask sender for license (ios). Do you think it's possible? – trnl Apr 18 '14 at 17:48
  • You can create a custom protocol, and communicate between the iOS & the Chromecast. You can then hook the results into the Media Player Library. You really should ask this as a separate question so that Ali and Shawn can give you answers. – Les Vogel - Google DevRel Apr 18 '14 at 23:24
  • Thank you Les! I've created http://stackoverflow.com/questions/23188003/chromecast-sender-as-a-license-provider. I believe you are talking about custom sender<->receiver protocol, not streaming protocol, right? – trnl Apr 20 '14 at 21:56
  • @LesVogel-GoogleDevRel Grateful if you can ask Ali or Shawn to look at the http://stackoverflow.com/questions/23188003/chromecast-sender-as-a-license-provider. – trnl Apr 28 '14 at 08:14
0

Yes, you can use "com.microsoft.playready" for PlayReady and "com.widevine.alpha" for widevine.

Ali Naddaf
  • 16,951
  • 2
  • 21
  • 28
  • Could you please elaborate on what are these and where to get it? I can't find any reference in https://developers.google.com/cast/reference/ - Thanks – Hossain Khan Jan 30 '14 at 17:55
  • That was in reference to the question from @user3253638; read the specs that he had mentioned to familiarize yourself with EME and hopefully then that will make more sense to you. – Ali Naddaf Jan 30 '14 at 18:10