内容策略管理器的作用就是整合一系列与内容管理相关的服务,并提供统一的接口供上层应用调用,这些服务如DRM内容接入、起始控制(Parental Control)等均是作为CPM插件出现的。根据多媒体的特性,CPM为CPM插件设计了一系列的规则,这些规则主要分为3类:
·用户鉴权。
    ·操作授权(对播放、暂停、快进、快退、复制、保存等进行授权)。
    ·内容接入(提供打开、阅读、查找等媒体对象的操作)。
        在实现完CPM插件后,为了使CPM插件能够在OpenCORE框架内可用,必须首先完成CPM插件在OSCL组件工厂(OsclComponentFactory)的注册。
在进行CPM插件注册时,其MIME类型标识符必须以“X-CPM-PLUGIN”作为起始字符,CPM插件的注册过程如下:
代码:RegisterPlugin
OSCL_EXPORT_REF PVMFStatus PVMFCPMPluginFactoryRegistryClient::RegisterPlugin (OSCL_String& aMimeType,
    PVMFCPMPluginFactory& aFactory){
    if (!iClient)
    return PVMFErrInvalidState;
    //确保它是一个有效的CPM-plugin的MIME字符串
        OSCL_HeapString< OsclMemAllocator> cpmregid(PVMF_MIME_CPM_PLUGIN);
        if (aMimeType.get_size()>=cpmregid.get_size()
                && oscl_CIstrncmp(cpmregid.get_cstr(), aMimeType.get_cstr(), cpmregid.get_size())==0
                && (aMimeType.get_cstr()[cpmregid.get_size()] ==’/’
                    || aMimeType.get_cstr()[cpmregid.get_size()] ==’\0’)){
            switch (iClient->Register(aMimeType, (OsclComponentFactory)&aFactory)){
                case OsclErrNone:
                        return PVMFSuccess;
                case OsclErrAlreadyExists:
                        return PVMFErrAlreadyExists;
                case OsclErrNoMemory:
                        return PVMFErrNoMemory;
                default:
                        return PVMFFailure;
                }
        } else{
               return PVMFErrArgument;
            }
    }
在CPM中,内容是无法直接接入的,必须通过相应的接口来进行,如为了获得数据流的内容接入,必须获得一个相应的PVMIDataStreamSyncInterface接口。为了获得内容的描述符信息,必须获得一个相应的PVMFCPMPluginAccessUnitDecryptionInterface接口等。下图显示了内容的接入过程。

CPM内容的接入过程
在OpenCORE中,给出了一个OMA DRM 1.0规格的CPM插件的参考实现。目录为external\opencore\pvmi\content_policy_manager\plugins\oma1。
在目前的实现中,CPM支持的解析器节点包括PVMFAMRFFParserNode、PVMFAACFFParserNode、PVMFMP3FFParserNode、PVMFWAVFFParserNode、PVMFMP4 FFParserNode、PVMFDownloadManagerNode等。下图显示了CPM的主要类图。

CPM主要类图