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.
PlayReady | Adobe DRM | Verimatrix | AES-128 | Widevine (BETA) | |
---|---|---|---|---|---|
HLS | Y | Y | Y | ||
Smooth | Y | ||||
DASH | Y | 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 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
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
Scheme | Key Rotation? | Firmware dependency |
---|---|---|
CTR | No | 8.1.x |
CTR | Yes | 9.0.x |
CBC/CBCS | Yes | 9.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 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().