Roku SDK Documentation : Content Protection

Table of Contents


DRM

Although AES-128 Encryption is also supported for HLS, Roku recommends using Adobe DRM because there is no DRM when using AES-128 Encryption.

 PlayReadyAdobe DRMVerimatrixAES-128Widevine (BETA)
HLS YYY 
SmoothY    
DASHY   Y

 

Supported DRM info can be queried using ifDeviceInfo.getDRMInfo().

Adobe Access

Required Roku channel manifest entries:

requires_aaxs_drm=1
requires_aaxs_version=1.0


Configure DRM parameters in an roAssociativeArray:

drmParams = createObject("roAssociativeArray")
drmParams.name = "AdobeAccess"
drmParams.appData = "drm-token-as-a-string" 'the DRM token (if required) that needs to be passed to the license server


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

PlayReady

No Roku channel 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 = "smooth"
contentNode.url = "wwww.myvideo.com/content.ism"
contentNode.encodingType = "PlayReadyLicenseAcquisitionAndChallenge"
contentNode.encodingKey = "PlayReadyLicenseServerUrl" + "%%%" + customData

m.video.content = contentNode


PlayReady 3

Starting from firmware 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 Ultra

Cooper4620X, 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, Giga

SL2000
Bryan, Amarillo 4K and Longview, MidlandSL3000

Verimatrix

Required Roku channel 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 - BETA

Available since firmware version 8.1

Roku OS update supports for Widevine DRM for all Roku channels. Widevine is in a beta state on the platform right now and developers are encouraged to test their Widevine-encrypted streams.

Note: Only Dash streams support widevine.


Required Roku channel 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

SchemeKey Rotation?Firmware dependency
CTRNo8.1.x
CTRYes9.0.x
CBC/CBCSYes9.0.x

Copy Protection

 Roku's 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().