DRM & content protection

DRM

PlayReadyAES-128Widevine
HLSY
SmoothY
DASHYY

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 NameDevice Code NameModel Number
2016 Roku Premiere, 2016 Roku Premiere+, 2016 Roku UltraCooper4620X, 4630X, 4640X
2017 Roku Express, 2017 Roku Express+Gilbert3900X, 3910X
2017 Roku Streaming Stick, 2017 Roku Streaming Stick+Amarillo3800X, 3810X
2017 Roku UltraBryan4660X
Roku TVMidland8000X

Supported security levels

Device Code NameSecurity level supported
Liberty, Austin, Briscoe, Sugarland, GigaSL2000
Bryan, Amarillo 4K and Longview, MidlandSL3000

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 TVsL1 PlayersL2 Players
  • FtWorth
  • Longview
  • Reno/Bandera
  • Liberty
  • Midland/El Paso
  • Malone/Camden
  • Roma
  • Athens
  • Miami
  • Trinidad
  • Roxton
  • Sandia
  • Damon
  • Shiner
  • Dallas
  • Cooper 2/3/4
  • Bryan
  • Amarillo 1080/4K
  • Gilbert 1080/4K
  • Nemo
  • Littlefield
  • Fruitland/Chico
  • Benjamin
  • Marlin
  • Madison
  • Bailey
  • Rockett
  • Logan
  • Lockhart
  • Brewster
  • Giga
  • Tyler
  • Paolo
  • Sugarland/Jackson
  • Austin/Mustang
  • Briscoe

Required Roku manifest entries:

requires_widevine_drm=1requires_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 = drmParamsm.video.content = contentNode

For the Digital Rights Management (DRM) Control Attributes, refer to the Content Meta-Data documentation.

Supported schemes

SchemeKey Rotation?Firmware dependency
CTRNo8.1.x
CTRYes9.0.x
CBC/CBCSYes9.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 devicesAll other Roku devices
TEEYesNo
HDCP2.2 11.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().