2018-09-10 19:35:05 +00:00
|
|
|
# Testing Widevine CDM
|
|
|
|
|
|
|
|
In Electron you can use the Widevine CDM library shipped with Chrome browser.
|
|
|
|
|
2018-11-28 08:53:42 +00:00
|
|
|
Widevine Content Decryption Modules (CDMs) are how streaming services protect
|
|
|
|
content using HTML5 video to web browsers without relying on an NPAPI plugin
|
|
|
|
like Flash or Silverlight. Widevine support is an alternative solution for
|
|
|
|
streaming services that currently rely on Silverlight for playback of
|
|
|
|
DRM-protected video content. It will allow websites to show DRM-protected video
|
|
|
|
content in Firefox without the use of NPAPI plugins. The Widevine CDM runs in an
|
|
|
|
open-source CDM sandbox providing better user security than NPAPI plugins.
|
|
|
|
|
|
|
|
#### Note on VMP
|
|
|
|
|
|
|
|
As of [`Electron v1.8.0 (Chrome v59)`](https://electronjs.org/releases#1.8.1),
|
|
|
|
the below steps are may only be some of the necessary steps to enable Widevine;
|
|
|
|
any app on or after that version intending to use the Widevine CDM may need to
|
|
|
|
be signed using a license obtained from [Widevine](https://www.widevine.com/)
|
|
|
|
itself.
|
|
|
|
|
|
|
|
Per [Widevine](https://www.widevine.com/):
|
|
|
|
|
|
|
|
> Chrome 59 (and later) includes support for Verified Media Path (VMP). VMP
|
|
|
|
> provides a method to verify the authenticity of a device platform. For browser
|
|
|
|
> deployments, this will provide an additional signal to determine if a
|
|
|
|
> browser-based implementation is reliable and secure.
|
|
|
|
>
|
|
|
|
> The proxy integration guide has been updated with information about VMP and
|
|
|
|
> how to issue licenses.
|
|
|
|
>
|
|
|
|
> Widevine recommends our browser-based integrations (vendors and browser-based
|
|
|
|
> applications) add support for VMP.
|
|
|
|
|
|
|
|
To enable video playback with this new restriction,
|
|
|
|
[castLabs](https://castlabs.com/open-source/downstream/) has created a
|
|
|
|
[fork](https://github.com/castlabs/electron-releases) that has implemented the
|
|
|
|
necessary changes to enable Widevine to be played in an Electron application if
|
|
|
|
one has obtained the necessary licenses from widevine.
|
|
|
|
|
2018-09-10 19:35:05 +00:00
|
|
|
## Getting the library
|
|
|
|
|
|
|
|
Open `chrome://components/` in Chrome browser, find `Widevine Content Decryption Module`
|
|
|
|
and make sure it is up to date, then you can find the library files from the
|
|
|
|
application directory.
|
|
|
|
|
|
|
|
### On Windows
|
|
|
|
|
|
|
|
The library file `widevinecdm.dll` will be under
|
|
|
|
`Program Files(x86)/Google/Chrome/Application/CHROME_VERSION/WidevineCdm/_platform_specific/win_(x86|x64)/`
|
|
|
|
directory.
|
|
|
|
|
2020-03-31 04:06:25 +00:00
|
|
|
### On macOS
|
2018-09-10 19:35:05 +00:00
|
|
|
|
|
|
|
The library file `libwidevinecdm.dylib` will be under
|
|
|
|
`/Applications/Google Chrome.app/Contents/Versions/CHROME_VERSION/Google Chrome Framework.framework/Versions/A/Libraries/WidevineCdm/_platform_specific/mac_(x86|x64)/`
|
|
|
|
directory.
|
|
|
|
|
|
|
|
**Note:** Make sure that chrome version used by Electron is greater than or
|
|
|
|
equal to the `min_chrome_version` value of Chrome's widevine cdm component.
|
|
|
|
The value can be found in `manifest.json` under `WidevineCdm` directory.
|
|
|
|
|
|
|
|
## Using the library
|
|
|
|
|
|
|
|
After getting the library files, you should pass the path to the file
|
|
|
|
with `--widevine-cdm-path` command line switch, and the library's version
|
|
|
|
with `--widevine-cdm-version` switch. The command line switches have to be
|
|
|
|
passed before the `ready` event of `app` module gets emitted.
|
|
|
|
|
|
|
|
Example code:
|
|
|
|
|
|
|
|
```javascript
|
2018-09-13 16:10:51 +00:00
|
|
|
const { app, BrowserWindow } = require('electron')
|
2018-09-10 19:35:05 +00:00
|
|
|
|
|
|
|
// You have to pass the directory that contains widevine library here, it is
|
|
|
|
// * `libwidevinecdm.dylib` on macOS,
|
|
|
|
// * `widevinecdm.dll` on Windows.
|
|
|
|
app.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevine_library')
|
2019-05-22 22:58:53 +00:00
|
|
|
// The version of plugin can be got from `chrome://components` page in Chrome.
|
2018-09-10 19:35:05 +00:00
|
|
|
app.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866')
|
|
|
|
|
|
|
|
let win = null
|
2020-02-03 22:43:22 +00:00
|
|
|
app.whenReady().then(() => {
|
2018-09-10 19:35:05 +00:00
|
|
|
win = new BrowserWindow()
|
|
|
|
win.show()
|
|
|
|
})
|
|
|
|
```
|
|
|
|
|
|
|
|
## Verifying Widevine CDM support
|
|
|
|
|
|
|
|
To verify whether widevine works, you can use following ways:
|
|
|
|
|
|
|
|
* Open https://shaka-player-demo.appspot.com/ and load a manifest that uses
|
|
|
|
`Widevine`.
|
|
|
|
* Open http://www.dash-player.com/demo/drm-test-area/, check whether the page
|
|
|
|
says `bitdash uses Widevine in your browser`, then play the video.
|