SpotiWeb icon indicating copy to clipboard operation
SpotiWeb copied to clipboard

Widevine CDM license

Open davejm opened this issue 7 years ago • 8 comments

Hi, I've been reading that technically you shouldn't distribute Chrome's Widevine binaries as the license doesn't permit this. I was able to extract linux binaries from the Chrome installer and it works for me but I'm wondering if it would be safer to ask users to download the binaries themselves? Or provide a script.

It seems annoying and undue hassle but does anyone know the correct legal answer?

davejm avatar Apr 12 '17 13:04 davejm

@davejm Yes I know... I've never really liked doing that.

I discovered in the Chromium online source the required files for this, the problem is that I couldn't find a way to download the files... From what I found there are two solutions:

  • Add ?format=TEXT at the end of each url, and then base64 decode them.
  • Download the folder that contains the plugin (like https://chromium.googlesource.com/chromium/reference_builds/chrome_mac/+archive/master/Google%20Chrome.app/Contents/Versions/37.0.2062.94/Google%20Chrome%20Framework.framework/Internet%20Plug-Ins.tar.gz) and then extract the plugin from there

Neither one seems easy to me... Maybe you can find a way to get the files directly, here are the links I found:

Mac https://chromium.googlesource.com/chromium/reference_builds/chrome_mac/+/master/Google%20Chrome.app/Contents/Versions/37.0.2062.94/Google%20Chrome%20Framework.framework/Internet%20Plug-Ins/widevinecdmadapter.plugin Linux https://chromium.googlesource.com/chromium/reference_builds/chrome_linux/+/master/libwidevinecdm.so Linux64 https://chromium.googlesource.com/chromium/reference_builds/chrome_linux64/+/master/libwidevinecdm.so Windows https://chromium.googlesource.com/chromium/reference_builds/chrome_win/+/master/widevinecdmadapter.dll

tomasmcm avatar Apr 12 '17 14:04 tomasmcm

Oh cool, I didn't know about those reference builds. Weird that you can't just download the raw file. Looking through the reference build for Mac, I can't see the 'libwidevinecdm.dylib' file. Just the adapter. This whole thing is also slightly complicated by this fact: "Note: The major version of Chrome browser [that the plugin comes from] has to be the same with the Chrome version used by Electron, otherwise the plugin will not work even though navigator.plugins would show it has been loaded." (https://github.com/electron/electron/blob/master/docs/tutorial/using-widevine-cdm-plugin.md)

davejm avatar Apr 12 '17 15:04 davejm

These are the only files we need:

  • widevinecdmadapter.plugin on macOS,
  • libwidevinecdmadapter.so on Linux,
  • widevinecdmadapter.dll on Windows.

And I was thinking since we need to know the version of the plugin and there is no way to get the version from the file itself, once we figure out how to download the files from googlesource we can pick a specific commit (instead of master) and always get that version, that way we don't need to worry about versions at all.

tomasmcm avatar Apr 12 '17 15:04 tomasmcm

@tomasmcm Also from https://github.com/electron/electron/blob/master/docs/tutorial/using-widevine-cdm-plugin.md - "Note: Though only the widevinecdmadapter binary is passed to Electron, the widevinecdm binary has to be put aside it.". I can confirm that it stops working for me if I remove my 'libwidevinecdm.so' file. I think we need both.

Ah yes, that sounds good. It'd be slightly easier if it was hosted/mirrored on Github! By the way, I used a hex editor to search for the version of the plugin but that's probably not a good idea for the app!

davejm avatar Apr 12 '17 15:04 davejm

Hmm I can only see the widevineadapter for the windows reference build as well. I'm not really sure now

davejm avatar Apr 12 '17 16:04 davejm

Yes... we do need both files... The thing I don't understand is why the Linux src have both files and mac and windows don't...

MAC libwidevinecdm.dylib: ? widevinecdmadapter.plugin: https://chromium.googlesource.com/chromium/reference_builds/chrome_mac/+/master/Google%20Chrome.app/Contents/Versions/37.0.2062.94/Google%20Chrome%20Framework.framework/Internet%20Plug-Ins/widevinecdmadapter.plugin

WINDOWS widevinecdm.dll: ? widevinecdmadapter.dll: https://chromium.googlesource.com/chromium/reference_builds/chrome_win/+/master/widevinecdmadapter.dll

LINUX libwidevinecdm.so: https://chromium.googlesource.com/chromium/reference_builds/chrome_linux/+/master/libwidevinecdm.so libwidevinecdmadapter.so: https://chromium.googlesource.com/chromium/reference_builds/chrome_linux/+/master/libwidevinecdmadapter.so

LINUX64 libwidevinecdm.so: https://chromium.googlesource.com/chromium/reference_builds/chrome_linux64/+/master/libwidevinecdm.so libwidevinecdmadapter.so: https://chromium.googlesource.com/chromium/reference_builds/chrome_linux64/+/master/libwidevinecdmadapter.so

tomasmcm avatar Apr 12 '17 16:04 tomasmcm

I don't know either. Strange

davejm avatar Apr 12 '17 16:04 davejm

Just found this https://github.com/webcatalog/electron-widevinecdm It does not download the plugins on the client side though... so I would still be distributing the plugins in the release packages. But since they are hosting the plugins in their releases we could use it just as source. I created an issue to see if they are up to converting the src/install.js to run on client... It looks pretty active so we'll see.

tomasmcm avatar Apr 12 '17 19:04 tomasmcm