DRM & content protection
DRM
| PlayReady | AES-128 | Widevine | |
|---|---|---|---|
| HLS | Y | ||
| Smooth | Y | ||
| DASH | Y | Y |
Supported DRM info can be queried using ifDeviceInfo.getDRMInfo().
If you receive a
BS lib provider not found: <DRM>error when running a sideloaded app, you can install a production app that uses that DRM to load the missing library. For example, you can install YouTube to load Widevine, and you can install Netflix to load PlayReady.
PlayReady
No Roku manifest entries are required for PlayReady.
Setup ContentNode and set to Video node:
contentNode = createObject("roSGNode", "contentNode")
contentNode.streamFormat = "smooth"
contentNode.url = "wwww.myvideo.com/content.ism"
contentNode.encodingType = "PlayReadyLicenseAcquisitionUrl"
contentNode.encodingKey = "PlayReadyLicenseServerUrl"
m.video.content = contentNode
If your PlayReady implementation requires custom request
data, encodingType and encodingKey should be formatted like the
following:
contentNode = createObject("roSGNode", "contentNode")
contentNode.streamFormat = "ism"
contentNode.url = "wwww.myvideo.com/content.ism"
contentNode.encodingType = "PlayReadyLicenseAcquisitionAndChallenge"
contentNode.encodingKey = "PlayReadyLicenseServerUrl" + "%%%" + customData
m.video.content = contentNode
PlayReady 3
Starting from Roku OS version 8.1, all Roku devices with MStar chips are updating to the PlayReady 3 library. Prior to this update, all platforms were using PlayReady 2.5.
While PlayReady 3 is expected to be backward compatible with PlayReady 2.5, we encourage all developers using PlayReady to test their streams on a range of MStar and non-MStar devices.
The following devices contain MStar chips:
| Product Name | Device Code Name | Model Number |
|---|---|---|
| 2016 Roku Premiere, 2016 Roku Premiere+, 2016 Roku Ultra | Cooper | 4620X, 4630X, 4640X |
| 2017 Roku Express, 2017 Roku Express+ | Gilbert | 3900X, 3910X |
| 2017 Roku Streaming Stick, 2017 Roku Streaming Stick+ | Amarillo | 3800X, 3810X |
| 2017 Roku Ultra | Bryan | 4660X |
| Roku TV | Midland | 8000X |
Supported security levels
| Device Code Name | Security level supported |
|---|---|
| Liberty, Austin, Briscoe, Sugarland, Giga | SL2000 |
| Bryan, Amarillo 4K and Longview, Midland | SL3000 |
Verimatrix
As of Roku OS 9.3, support for Verimatrix DRM has been removed from the firmware. Make sure that content in your app is protected using a Roku-supported DRM such as Widevine or PlayReady.
Required Roku manifest entries:
requires_verimatrix_drm=1
requires_verimatrix_version=1.0
Configure DRM parameters in an roAssociativeArray:
drmParams = createObject("roAssociativeArray")
drmParams.name = "Verimatrix"
drmParams.authDomain = "auth-value-from-streaming-provider"
drmParams.serializationUrl = "hostname-url-from-streaming-provider"`
Setup ContentNode and set to Video node:
contentNode = createObject("roSGNode", "contentNode")
contentNode.streamFormat = "hls"
contentNode.url = "wwww.myvideo.com/content.m3u8"
contentNode.drmParams = drmParams
m.video.content = contentNode
Widevine
The Roku OS supports Widevine DRM for all Roku apps.
Since Roku OS 9.4, Widevine version 16 is supported on devices that do not have "secure processors".
The Widevine support security levels for the different Roku devices is as follows:
| L1 TVs | L1 Players | L2 Players |
|---|---|---|
|
|
|
Required Roku manifest entries:
requires_widevine_drm=1
requires_widevine_version=1.0
Configure DRM parameters in an roAssociativeArray:
drmParams = {
keySystem: "Widevine"
licenseServerURL: "<http(s)://license-server-host/path?param=value>"
}
Setup ContentNode and set to Video node:
contentNode = createObject("roSGNode", "contentNode")
contentNode.streamFormat = "dash"
contentNode.url = "wwww.myvideo.com/content.mpd"
contentNode.drmParams = drmParams
m.video.content = contentNode
For the Digital Rights Management (DRM) Control Attributes, refer to the Content Meta-Data documentation.
Supported schemes
| Scheme | Key Rotation? | Firmware dependency |
|---|---|---|
| CTR | No | 8.1.x |
| CTR | Yes | 9.0.x |
| CBC/CBCS | Yes | 9.0.x |
Copy protection
Roku OS also supports HDCP for content copy protection between the Roku player's HDMI port and the connected display. However, the HDCP version depends on the Roku Model and the Display Type that it's currently set to.
| Roku 4K capable devices | All other Roku devices | |
|---|---|---|
| TEE | Yes | No |
| HDCP | 2.2 1 | 1.4 |
1 4K devices set to a Display Type with a resolution smaller than 4K will default to HDCP 1.4.
HDCP versioning can be queried using ifHdmiStatus.getHDCPVersion().