[Context] I'm developing a software for a company which main field is distance learning.

This software must ultimately be distributed to many different schools, where students will use it to - among other things - watch video lessons. So, this software is essentially a video player (again, among other things).

These video lessons are the company's intellectual property, and it's mandatory that they are not distributed in such a way that anyone can simply copy them over to a USB drive for easy watching. On the other hand, they must actually be distributed (local files, no streaming!). Some sort of "protection", is needed, then, albeit basic.

The old system, still in use, employs something very, very inefficient: all videos are encrypted using AES-256, and entirely decrypted in memory - yes, RAM - before playback starts. The key is obtained after authentication with the Webserver.

Currently all videos are .MP4 files with AVC + AAC streams. At first I wanted to try and modify the h.264 encoder/decoder in order to accomplish some level of protection, but I soon figured there must be a simpler way.

[Question] What are some DRM solutions I can use in this case? Constraints:

  • Local files, for local playback
  • Internet access is granted, but should be slow. Suitable for authentication only.

I'm developing the software in C++ for Microsoft Windows and GNU/Linux, if this makes a difference.

As hinted in the title, free solutions are preferred.


  • 1
    Why is it "very very inefficient" for you? – Thomas Weller Aug 14 '16 at 8:50
  • @ThomasWeller The entire video is decrypted to memory before playback starts; it's not implemented "on the fly". So 1) It takes a long time before playing anything, and 2) it uses too much RAM, thus preventing the company from releasing longer or larger, high quality files. – Marc.2377 Aug 14 '16 at 21:12
  • What about a decrypt stream? Playing from a stream should be straight forward. The stream would just decrypt as much as is being read from it. That's how Pluralsight does it. – Thomas Weller Aug 14 '16 at 21:17
  • @ThomasWeller Good tip. Guess I'm gonna fallback to that if nothing "easier" comes out. – Marc.2377 Aug 14 '16 at 22:02

No because historically DRM has failed to protect anything. If you want a piped streamed DRM just use;

openssl enc -aes-256-cbc -d -in file | cvlc 
  • 1
    I KIND OF agree with the second part of your answer, and edited my question accordingly. Still, even if history shows that DRM is by no means a definitive solution, it is still widely used, sometimes effectively. – Marc.2377 Aug 14 '16 at 8:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.