javaelectrondrmwidevine

Play DRM encrypted video stream with "pure" Java


I am investigating whether is it possible (I am sure it is, I mean simple way) to build a Java-based client desktop App to play DRM protected video stream.

DRM: DASH CENC DRM1, PlayReady, Widevine Classic\Modular, FairPlay.

VLCJ supports the input-from-memory feature to implement custom protocols or DRM but it looks like a painful digging into DRM specifications.

There is a Node.js open-source project DOWNstream for Electron which can help with Widevine DRM. The article describes Java and Electron integration (source) but I guess it is accidental complexity in this case.

Previously I didn't face with video-streaming domain and I wouldn't like to reinvent the wheel so my questions are:

Thank you. I would appreciate hearing your thoughts.


Solution

  • I think looking at how the DRM's are provided on platforms may help you understand the options and let you think about how you want to approach your solution.

    The DRM client functionality, i.e. the DRM functionality which resides on a phone or tablet or laptop etc as opposed to the DRM server side functionality, is generally built in by the device or OS vendor when it the device or OS is being produced/manufactured. For some DRM's on some devices it is also possible to add it via a SDK.

    Most DRM's are used via 'native' players in mobile devices and tablets and via the browser on PC's, laptops etc so this is the usual default that you can generally rely on to be supported. Smart TV's and games consoles are more varied and can be either via browser or native depending not he device.

    Recently, nearly all mobile and tablet browsers have added support for browser based DRM also, but many DRM's on laptops are restricted to the browser, or more specifically the CDM (Content Decryption Module) browser add on which is DRM specific.

    There are DRM's which are supported outside the browser on PC's and laptops - for example Windows based devices will generally support PlayReady DRM in a way that can be accessed by applications. Microsoft provide more infomrtaiopn on this here:

    There is a nice diagram which summarises different devices at the above link which I've copied below also as it helps explain:

    enter image description here

    I am not aware of a similar Widevine or FairPlay support on PC's or laptops although ones may exist or be in development.

    So, going back to your problem, the reason that most cross platform applications use Javascript and browser technology for DRM on laptops and PC's is not really a language issue, rather it is because via the browser is the only way to access the DRM functionality on some laptops and PC's.

    For Windows you have the option to use the Universal Windows Platform API but this still may not give you want you are looking for and is Windows and PlayReady specific.