Play DRM Content with Flutter/React Native on IOS and Android

3,191

To play back encrypted content protected by a particular DRM scheme, you need that DRM scheme to be supported on the device or browser.

As a general rule the following DRM's are supported natively on device and browsers - naively means that the DRM is usually built into the OS or the browser when you purchase the device:

  • Android devices - Widevine
  • Chrome browser on a PC or MAC - Widevine
  • iOS device - FairPlay
  • Safari browser - FairPlay
  • Internet Explorer browser - PlayReady

To allow encrypted content be played on multiple devices you need to encrypt it with the scheme for each device. In the past this has meant having to have separate streams, but DASH CENC allows a single stream to be encrypted by multiple DRM schemes - the spec is at this link:

Unfortunately, the spec is restricted access to if you do not have access it may be worth having a look at some of the packager websites which will include information about creating CENC streams - for example:

There is one other thing to be aware of, as traditionally iOS/FairPlay has used a different AES encryption mode than Widevine and PlayReady - it uses AES CBC mode rather than CTR mode. However, Widevine and PlayReady have recently announced support for AES CBC mode also so the nirvana of a single encrypted format that will play on all devices is now in theory possible - it will take some time for support to role out to all devices most likely, however.

Share:
3,191
LISN
Author by

LISN

Updated on December 01, 2022

Comments

  • LISN
    LISN over 1 year

    I where searching for any Solution to enable playing DRM Content on IOS and Android. I want to develop a Cross Platform Solution that can play DRM protected content, no matter if its Widevine or playready.

    For Flutter there wasnt any Solution, so i switched to RN

    For React Native i just found the Exoplayer to be able to play widevine but no Playready DRM Content.

    Maybe someone of you guys can help me to find out, how im able to do this on both Platforms ?

    Best Regards