• Stars
    star
    117
  • Rank 301,828 (Top 6 %)
  • Language
    C++
  • License
    Other
  • Created over 10 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Open Content Decryption Module (OCDM)

Open Content Decryption Module

The Open Content Decryption Module (OCDM) is a Content Decryption Module (CDM) according to W3C EME [1] specification to be used with HTML5 based browser environments and ecosystems [5]. The implementation enables DRM interoperability. OCDM is built with a modular concept in mind to be easily extendible and flexible. The open source code already provides support for the CDMi specification [4], which essentially requires the CDM to use the operating system's native RPC mechanisms to forward EME calls to the CDMi. Furthermore, the media sample transmission between a browser decoupled media engine and the CDMi can be secured via a DRM-specific authenticated interface. The CDMi itself contains most CDM logic and is a c++ wrapper for the embedded platform DRM.

Fraunhofer FOKUS has developed the Open Content Decryption Module (OCDM) according to W3C EME specification to be used with HTML5 based browser environments. The implementation enables DRM interoperability. We would be happy to see a broad adoption of our implementation and encourage contributions. A first e2e implementation has been done testing with a Microsoft PlayReady CDMi implementation.

Introduction / Purpose / Why this?

  • Interoperable HTML5 based protected video delivery
  • DRM interoperability
    • CENC, DASH
  • Plugin based integration (Pepper Plugin API)
  • CDMi allows open source browsers to support DRM without licensing it
  • e2e tested with Microsoft PlayReady DRM system

Scope

OCDM is developed according to W3C EME. This leads to a architecture as shown in the figure below, which consists of a Web application, a browser and a DRM platform layer. The browser as mediator between Web application and DRM platform exposes the EME and contains a CDM. The Web application is connected to the browser via EME. EME is mapped by the browser to a CDM and the CDM communicates to the DRM platform.

As EME is modelling only the license retrieval and management, there is a second component that needs to talk to the DRM platform. In many cases, mainly in embedded environments, the media engine is separate from the browser and used by the browser as external renderer. In this case the media engine probably needs to authenticate itself at the DRM platform for handling and decoding of protected media data.

Scope of OCDM

On the one hand, the OCDM's scope includes the generic CDM and its communication interfaces to the DRM platform. On the other hand, there are separate media engine communication interfaces to the DRM platform. OCDM contains sample implementations for the RPC communication mechanism, but is designed highly modular to be easily extended with other communication mechanisms.

For detailed internals of the OCDM architecture please refer to the architecture notes.

References

Supported Browsers and Platforms

Currently OCDM development is compatible with following Web browers:

  • Chromium / CEF
    • Linux
  • Opera SDK
    • Linux

For more details see the milestones page.

How to build

...as Pepper Plugin for Chromium

  • clone this repository, e.g. into $HOME/opencdm
  • create the following symbolic link
  • $ ln -s $HOME/opencdm/src $CHROMIUM_ROOT/src/media/cdm/ppapi/external_open_cdm
  • add include into the $CHROMIUM_ROOT/src/media/media.gyp file to contain this:
  'includes': [
    'media_cdm.gypi',
    './cdm/ppapi/external_open_cdm/browser/media_open_cdm.gypi'
    ]
  • apply changes by generating the project files
  • $ cd $CHROMIUM_ROOT/src
  • $ build/gyp_chromium
  • build the following target (please follow Build notes for Chromium section before building)
  • $ ninja -C out/Debug opencdmadapter

How to run

  • integrate OCDM with your browser
  • example to be found in src/browser folder
  • setup communication to DRM system
  • sample code for this is provided in the separate Open Content Decryption Module CDMi repository

In practice the Pepper Plugin API based OCDM implementation can be launched as follows:

./out/Debug/chrome --register-pepper-plugins="out/Debug/libopencdmadapter.so;application/x-ppapi-open-cdm"

Folder Structure

Navigate the folders and see the readme files for further information.

How to contribute

See the wiki for information on how to contribute to this project.

Known Issues / Comments

This is a preliminary version of OCDM. Please file any issues or comments.

  • Chromium sandbox: Currently Chromium needs to be started with the --no-sandbox flag because of the current RPC mechanism.
  • Multiple session support is current work in progress.
  • Code needs more review from the community (e.g. memory allocation, appropriate data types).

For more details see the milestones page.

More Repositories

1

deckschrubber

Deckschrubber inspects images of a Docker Registry and removes those older than a given age. πŸ”†πŸš’
Go
263
star
2

acsl-by-example

Public snapshots of "ACSL by Example"
TeX
99
star
3

JSum

Consistent checksum calculation of JSON objects.
JavaScript
87
star
4

Fuzzino

Java
62
star
5

cordova-plugin-presentation

Create native multiscreen apps in minutes with the Cordova (W3C) Presentation API Plugin.
Objective-C
50
star
6

node-hbbtv

The Node.js hbbtv module is a feature complete implementation of the HbbTV 2.0 Companion Screen components
JavaScript
50
star
7

peer-dial

peer-dial is a simple Node.js module implementing the Discovery and Launch Protocol DIAL as described in the specification on http://www.dial-multiscreen.org
JavaScript
42
star
8

Qrisp

Qrisp - a framework for high-level programming of Quantum computers
Python
41
star
9

peer-upnp

Node.js Client and Server module implementing the Universal Plug and Play protocol UPnP
JavaScript
32
star
10

ogd-metadata

Schema and documentation to be used by the German Open Data Portal
HTML
29
star
11

peer-ssdp

Node.js Client and Server module implementing the Simple Service Discovery Protocol SSDP
JavaScript
25
star
12

open-content-decryption-module-cdmi

CDMi skeleton platform component implementation to be used with Open Content Decryption Module
C
20
star
13

particity

Participatory marketplace for voluntary services/donations
Java
19
star
14

OCDB

Open City Database - Quick, easily-deployable smart city-related data service, with access to User Generated Content, POIs, social interactions (likes, check-ins) and more.
JavaScript
16
star
15

phyweb

Node.js Physical Web URL Advertiser
JavaScript
13
star
16

opendata-platform

Java
10
star
17

cordova-plugin-hbbtv

This Cordova HbbTV plugin implements the HbbTV 2.0 CS APIs for discovering HbbTV Terminals, launching HbbTV Applications on discovered Terminals and open App2App communication channels between the Cordova App (Companion App) and the launched HbbTV App using WebSockets
Java
9
star
18

cordova-plugin-presentation-helloapp

Sample App using the Cordova (W3C) Presentation API Plugin.
JavaScript
8
star
19

openstack-formula

SaltStack Formula for all Components of OpenStack
Python
7
star
20

mobile-city-memory

Mobile city memory app developed for the Code for Europe project
Python
5
star
21

cordova-plugin-hbbtv-helloapp

Sample App using the Cordova HbbTV Plugin https://github.com/fraunhoferfokus/cordova-plugin-hbbtv
JavaScript
5
star
22

ckanext-govdatade

GovData.de specific CKAN extension
Python
4
star
23

GovData

Das Datenportal fΓΌr Deutschland (Beta)
HTML
3
star
24

Xtensions

This library provides utility extension methods, mostly for JDK 8 classes.
Xtend
3
star
25

ot3

OT3 provides an open source edition of the TTCN-3 test language.
Java
3
star
26

wot-ble-experiment

Experiment for WoT BLE Binding
JavaScript
2
star
27

ckanext-berlin

JavaScript
2
star
28

RDFRuleStreams

HTML
1
star
29

fixmycity

http://www.fixmycity.de
JavaScript
1
star
30

fokus-upnp

Open UPnP Stack
Java
1
star
31

RESTAC

RESTAC is a peer-to-peer Java framework implementing REST.
Java
1
star
32

govapps

GovApps is a platform that provides users the opportunity to find mobile apps in public and private sources regionally and by priorities
Java
1
star
33

ckanclient-java

1
star
34

dt-test-exoplayer

1
star
35

odp-rss-servlet

Java
1
star
36

wot-cli

A command-line tool for the Web of Things
JavaScript
1
star
37

clm-core

TypeScript
1
star
38

promised-hal

Simplifies communication with HAL enabled servers using promises.
JavaScript
1
star