When a user uploads a video via the Freeport Creator Suite UI and Freeport Creator Suite API, it is encoded using HLS into streamable chunks. Each chunk is then encrypted and stored in the DDC. This process is supported out of the box by the Media SDK
Key Derivation
Each video file gets an individual DEK (Encryption/Decryption Key) derived from a Master DEK which is used to encrypt and decrypt the video. Each chunk also gets it’s own individual DEK which is derived from the Video DEK using a nonce.
Client Side Video Decryption
To decrypt a video on the client-side, the user must first request the DEK for the video that they wish to decrypt. The decryption process is supported out of the box via the EncryptedVideoPlayer
component
chunk/enc_<nonce>_<cid>
, for example:chunk/enc_0x01decbcb3f8908d885b5a5663c8786f73c240dc4ed94df55_baebb4iddto7txzjtxwsmriyghknrrzhcnjroevdlngcmdllb7orluhl4wy
6. The DEK for the chunk can be calculated using a Blake2 Hash
Server Side Encryption
If client side encryption cannot be done, the same process as above is executed on the server side, and the decrypted content is streamed directly to the user. To enable server-side streaming on most devices, a streamKey
solution is used.
This is supported using the EncryptedVideoPlayer
with the serverside
property enabled
This is more advanced option that can be also used on top of the Cere stack. High-level steps should be taken to achieve the goal: