I ran into this same issue on Roku 9.0.0, and after about 8h of troubleshooting down to the isobmff init box level, I discovered the following in regards to my MPD encode with CENC for PR+WV:
Working Older (non-CENC) DASH PlayReady+Widevine encodes have an init box (using mp4dump --verbosity 3)
size=8+32
size=12+20
default_isProtected = 1
default_Per_Sample_IV_Size = 8
While newer non-working (CENC) compatible DASH PlayReady+Widevine encodes have an init box with:
size=8+32
size=12+20
default_isProtected = 1
default_Per_Sample_IV_Size = 16
Tracing this down lead me to the following PlayReady CENC documentation (https://docs.microsoft.com/en-us/playready/specifications/mpeg-dash-playready), covering that IV PlayReady versions less than 4 only support a 0 or 8 byte IV field.
The size in bytes of the Initialization Vector (IV) field.
- PlayReady version 1, 2, 3 support 0 and 8.
- PlayReady version 4 and higher support 0, 8 and 16.
If default_IsEncrypted =1, default_IV_size MUST NOT be set to 0.
Since not all PlayReady enabled players support 16 byte Initialization Vectors, it is RECOMMENDED that only an default_IV_size of 8 be used for encrypted content, if the service needs to reach PlayReady version 1/2/3 players.
Latest Roku F/W running 9.0.0 build 4148-08 shows the following for PlayReady support:
device = CreateObject(“roDeviceInfo”)
data = device.GetDrmInfoEx()
print data.PlayReady
→
{
multikey: false
securestop: true
tee: false
version: “2.5”
}
Modifying the encoder job configuration to use CENC defaultIV of 8 bytes resolved the problem:
e.g.
cencDrm.setIvSize(IvSize.EIGHT_BYTES);
HTH,
j