[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? Commented Aug 14, 2016 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
    Commented Aug 14, 2016 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. Commented Aug 14, 2016 at 21:17
  • @ThomasWeller Good tip. Guess I'm gonna fallback to that if nothing "easier" comes out.
    – Marc.2377
    Commented Aug 14, 2016 at 22:02

1 Answer 1


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
    Commented Aug 14, 2016 at 8:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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