An MXM-based application for
  sharing protected content


               Angelo Difino



      MXM DevDay, London, 2009-06-28
A 'concrete' MXM application
An MXM-based application for sharing protected
 content
     List of technologies
    Mpeg21FileEngine        MediaFrameworkEngine
    DIDEngine               IPMPEngine
    MetadataEngine          SecurityEngine
    RELEngine


First α-release due to the end of July
MXM (c++) idea/architecture
                              MXM       MXM                   MXM
                              app1      app2                  appN
                              MXM Engine APIs


                               MXM       MXM                    MXM
                              Engine1   Engine2                EngineN



                          MXM Engine Factories
     MXM core APIs

   MXM
                                                  share/use
                       MXM
Configuration                                           MXM                MXM
  Schema        uses   core                                              schemas
                                                       dataobj uses
MXM configuration file

<MXMConfiguration //cut// xsi:schemaLocation="urn:org:iso:mpeg:mxm:configuration:schema
mxmConfiguration.xsd">

<MXMParameters>
  <entry key="app.add.resource.path">chillout_eud/target/classes</entry> (not yet used)

    <ComplexParameter>
        <bar:CustomMXMParam xmlns:bar="urn:bar">A complex MXM configuration parameter</
bar:CustomMXMParam>
    </ComplexParameter>
</MXMParameters>

<MediaFrameworkEngine id="1">
   <DynamicLibrary>
        <LibraryPath>//path//to//gst_media_framework_engine.dll</LibraryPath>(.so in linux)
   </DynamicLibrary>
   <ClassName>GSTMXMMediaFrameworkEngine</ClassName> (not yet used)
</MediaFrameworkEngine>
MXM configuration file


<MediaFrameworkEngine id="0">
   <DynamicLibrary>
            <LibraryPath>//path//to//vlc_media_framework_engine.dll</LibraryPath>
   </DynamicLibrary>
   <ClassName>VLCMXMMediaFrameworkEngine</ClassName>
</MediaFrameworkEngine>

<DIDEngine id="0">
    <DynamicLibrary>
        <LibraryPath>//path//to//basic_did_engine.dll</LibraryPath>
    </DynamicLibrary>
    <ClassName>BasicMXMDIDEngine</ClassName>
    <DIDProfileCompliance>urn:mpeg:maf:schema:mediastreaming</DIDProfileCompliance>
</DIDEngine>
From MXM schema to MXM
               dataobject
didl.xsd
didl-msx.xsd
didmodel.xsd
dii.xsd
ipmpdidl.xsd
ipmpinfo.xsd
ipmpinfo-msx.xsd
ipmpmsg.xsd         XSD
mpeg4ipmp.xsd
mpeg7smp.xsd
rel-m1x.xsd
rel-m2x.xsd
rel-m3x.xsd
rel-mx.xsd
rel-r.xsd
rel-sx.xsd
xenc.xsd dsig.xsd
xml.xsd
MXM engine
   MXMEngine::MXMEngine_t enginetype
 typedef enum {          DIPEngine,                LicenseProtocolEngine,   SecurityEngine,
AudioMetadataEngine,     DISEngine,                MediaFrameworkEngine,    VideoMetadataEngine,
MetadataEngine,          DomainEngine,             MPEG21FileEngine,        Graphics3DEngine,
ContentProtocolEngine,   EREngine,                 MVCOEngine,              NOT_DEFINED,
ContentSearchEngine,     ImageMetadataEngine,      OrchestratorEngine,      MXMENGINE_NUM
DIAEngine,               IPMPEngine,               RELEngine,               } MXMEngine_t;
DIDEngine,               IPMPToolProtocolEngine,   RenderingEngine,



   MXMEngine(const string& enginename, const MXMEngine_t& enginetype)
   MXMEngine(int argn, const char *const * argv)


   template < class T > class MXMEngineFactory

                             protect and share your secrets @ ease
BasicDIDEngine: a MXM skeleton engine
 DEFINITION on H
class BasicDIDEngine : public DIDEngine {

 public:
 BasicDIDEngine(int argn, const char *const * argv);
 virtual ~BasicDIDEngine();

  DIParser* getDIParser();
  ....// other MXM DIDEngine api definition
};                                                     IMPLEMENTATION on CPP

class Factory :                                        BasicDIDEngine::BasicDIDEngine
public MXMEngineFactory< BasicDIDEngine >                 (int nparam, const char *const * vparam) :
{ };                                                      DIDEngine("BasicDIDEngine")
                                                       {
MXM_DLL_EXPORT void * factory0( void )                 ....
{                                                      }
return new Factory();
}                                                      //other MXM DIDEngine api implementation




                                 protect and share your secrets @ ease
Supported SO and dependencies
Win32                     XSD CODESYNTHESIS
                            http://www.codesynthesis.com/
  MSVisual C++ compiler

Linux                     APACHE LOG4Cxx
                            http://logging.apache.org/log4cxx/
  G++ compiler

MacOSX                    APACHE XERCES (used by
                           XSD)
  ...
                            http://xerces.apache.org/xerces-c/
Using MXM APIs
MxM* mxm = MxM::getInstance(argc, argv)

MXMEngineContainer* metaEngineContainer =
    mxm->getDefaultEngineContainer(MXMEngine::MetadataEngine);
MXMEngineContainer* didEngineContainer =
    mxm->getDefaultEngineContainer(MXMEngine::DIDEngine);

MetadataEngine* _metaengine= (MetadataEngine*) metaEngineContainer->getEngine();
DIDEngine* _didengine= (DIDEngine*) didEngineContainer->getEngine();

DIParser* di_parser=_didengine->getDIParser();
di_parser->parseDI(dci_url);                     //can be parseDI(MXMObject*)

MXMObject* metadata=0;
di_parser->getContentMetadata(metadata);

MetadataParser* meta_parser= _metaengine->getMetadataParser();
meta_parser->parseMetadataObj(metadata);
std::string title("");
meta_parser->getTitle(title);
Using MXM APIs
....
LicenseParser* licence_parser->parseLicense(license);
GrantParser* first_gp;
list< GrantParser* > l;
if (licence_parser->getGrants( l )) {
     list< GrantParser* >::const_iterator it = l.begin();
     while(it != l.end()) {
         first_gp=*it;
         if (first_gp->containsProtectedResource()) {
              ProtectedResourceParser* protectedresource;
              first_gp->getProtectedResource(protectedresource);
              MXMObject* master_encrypted=0;
              protectedresource->getEncryptedKey(master_encrypted);
              ....
              _mfengine->setIPMPTool(drmtools);
              _mfengine->open(resource_url);
              _mfengine->play();
              ....
              _mfengine->pause();
              ....
              _mfengine->stop();
MXM engine todo
MXM engine parameters
MXM exception
MXM core as singleton
MXM configuration file updated live
MXM loader / adapter (like java side)




                protect and share your secrets @ ease
A test MXM application
An MXM-based application for access protected content
   Integrated with chillout functionalities (for creation)
   Two media frameworks (MF APIs)
            VLC (0.9.9.a) and GSTREAMER (0.10 → 1½ year old!!!)
On win32
   GTK++ (with glib)
   GSTREAMER and VLC (easy to install)
   OPENSSL (for some protection/security aspect)
   SQLite
MXM info
MXM Mailing list
  mxm@lists.uni-klu.ac.at
Website
  http://mxm.wg11.sc29.org/
(my)Personal contacts
  angelo@smartrm.com
  skype: angelo.difino
Thank you for your attention!

           angelo@smartrm.com

       protect and share your secrets @ ease

An MXM-based Application for Sharing Protected Content

  • 1.
    An MXM-based applicationfor sharing protected content Angelo Difino MXM DevDay, London, 2009-06-28
  • 2.
    A 'concrete' MXMapplication An MXM-based application for sharing protected content List of technologies Mpeg21FileEngine MediaFrameworkEngine DIDEngine IPMPEngine MetadataEngine SecurityEngine RELEngine First α-release due to the end of July
  • 3.
    MXM (c++) idea/architecture MXM MXM MXM app1 app2 appN MXM Engine APIs MXM MXM MXM Engine1 Engine2 EngineN MXM Engine Factories MXM core APIs MXM share/use MXM Configuration MXM MXM Schema uses core schemas dataobj uses
  • 4.
    MXM configuration file <MXMConfiguration//cut// xsi:schemaLocation="urn:org:iso:mpeg:mxm:configuration:schema mxmConfiguration.xsd"> <MXMParameters> <entry key="app.add.resource.path">chillout_eud/target/classes</entry> (not yet used) <ComplexParameter> <bar:CustomMXMParam xmlns:bar="urn:bar">A complex MXM configuration parameter</ bar:CustomMXMParam> </ComplexParameter> </MXMParameters> <MediaFrameworkEngine id="1"> <DynamicLibrary> <LibraryPath>//path//to//gst_media_framework_engine.dll</LibraryPath>(.so in linux) </DynamicLibrary> <ClassName>GSTMXMMediaFrameworkEngine</ClassName> (not yet used) </MediaFrameworkEngine>
  • 5.
    MXM configuration file <MediaFrameworkEngineid="0"> <DynamicLibrary> <LibraryPath>//path//to//vlc_media_framework_engine.dll</LibraryPath> </DynamicLibrary> <ClassName>VLCMXMMediaFrameworkEngine</ClassName> </MediaFrameworkEngine> <DIDEngine id="0"> <DynamicLibrary> <LibraryPath>//path//to//basic_did_engine.dll</LibraryPath> </DynamicLibrary> <ClassName>BasicMXMDIDEngine</ClassName> <DIDProfileCompliance>urn:mpeg:maf:schema:mediastreaming</DIDProfileCompliance> </DIDEngine>
  • 6.
    From MXM schemato MXM dataobject didl.xsd didl-msx.xsd didmodel.xsd dii.xsd ipmpdidl.xsd ipmpinfo.xsd ipmpinfo-msx.xsd ipmpmsg.xsd XSD mpeg4ipmp.xsd mpeg7smp.xsd rel-m1x.xsd rel-m2x.xsd rel-m3x.xsd rel-mx.xsd rel-r.xsd rel-sx.xsd xenc.xsd dsig.xsd xml.xsd
  • 7.
    MXM engine MXMEngine::MXMEngine_t enginetype typedef enum { DIPEngine, LicenseProtocolEngine, SecurityEngine, AudioMetadataEngine, DISEngine, MediaFrameworkEngine, VideoMetadataEngine, MetadataEngine, DomainEngine, MPEG21FileEngine, Graphics3DEngine, ContentProtocolEngine, EREngine, MVCOEngine, NOT_DEFINED, ContentSearchEngine, ImageMetadataEngine, OrchestratorEngine, MXMENGINE_NUM DIAEngine, IPMPEngine, RELEngine, } MXMEngine_t; DIDEngine, IPMPToolProtocolEngine, RenderingEngine, MXMEngine(const string& enginename, const MXMEngine_t& enginetype) MXMEngine(int argn, const char *const * argv) template < class T > class MXMEngineFactory protect and share your secrets @ ease
  • 8.
    BasicDIDEngine: a MXMskeleton engine DEFINITION on H class BasicDIDEngine : public DIDEngine { public: BasicDIDEngine(int argn, const char *const * argv); virtual ~BasicDIDEngine(); DIParser* getDIParser(); ....// other MXM DIDEngine api definition }; IMPLEMENTATION on CPP class Factory : BasicDIDEngine::BasicDIDEngine public MXMEngineFactory< BasicDIDEngine > (int nparam, const char *const * vparam) : { }; DIDEngine("BasicDIDEngine") { MXM_DLL_EXPORT void * factory0( void ) .... { } return new Factory(); } //other MXM DIDEngine api implementation protect and share your secrets @ ease
  • 9.
    Supported SO anddependencies Win32 XSD CODESYNTHESIS http://www.codesynthesis.com/ MSVisual C++ compiler Linux APACHE LOG4Cxx http://logging.apache.org/log4cxx/ G++ compiler MacOSX APACHE XERCES (used by XSD) ... http://xerces.apache.org/xerces-c/
  • 10.
    Using MXM APIs MxM*mxm = MxM::getInstance(argc, argv) MXMEngineContainer* metaEngineContainer = mxm->getDefaultEngineContainer(MXMEngine::MetadataEngine); MXMEngineContainer* didEngineContainer = mxm->getDefaultEngineContainer(MXMEngine::DIDEngine); MetadataEngine* _metaengine= (MetadataEngine*) metaEngineContainer->getEngine(); DIDEngine* _didengine= (DIDEngine*) didEngineContainer->getEngine(); DIParser* di_parser=_didengine->getDIParser(); di_parser->parseDI(dci_url); //can be parseDI(MXMObject*) MXMObject* metadata=0; di_parser->getContentMetadata(metadata); MetadataParser* meta_parser= _metaengine->getMetadataParser(); meta_parser->parseMetadataObj(metadata); std::string title(""); meta_parser->getTitle(title);
  • 11.
    Using MXM APIs .... LicenseParser*licence_parser->parseLicense(license); GrantParser* first_gp; list< GrantParser* > l; if (licence_parser->getGrants( l )) { list< GrantParser* >::const_iterator it = l.begin(); while(it != l.end()) { first_gp=*it; if (first_gp->containsProtectedResource()) { ProtectedResourceParser* protectedresource; first_gp->getProtectedResource(protectedresource); MXMObject* master_encrypted=0; protectedresource->getEncryptedKey(master_encrypted); .... _mfengine->setIPMPTool(drmtools); _mfengine->open(resource_url); _mfengine->play(); .... _mfengine->pause(); .... _mfengine->stop();
  • 12.
    MXM engine todo MXMengine parameters MXM exception MXM core as singleton MXM configuration file updated live MXM loader / adapter (like java side) protect and share your secrets @ ease
  • 13.
    A test MXMapplication An MXM-based application for access protected content Integrated with chillout functionalities (for creation) Two media frameworks (MF APIs) VLC (0.9.9.a) and GSTREAMER (0.10 → 1½ year old!!!) On win32 GTK++ (with glib) GSTREAMER and VLC (easy to install) OPENSSL (for some protection/security aspect) SQLite
  • 14.
    MXM info MXM Mailinglist mxm@lists.uni-klu.ac.at Website http://mxm.wg11.sc29.org/ (my)Personal contacts angelo@smartrm.com skype: angelo.difino
  • 15.
    Thank you foryour attention! angelo@smartrm.com protect and share your secrets @ ease