PMP 媒体会话

应用程序可以在名为“受保护的媒体路径”的单独进程中创建媒体会话 (PMP) 进程。 PMP 过程main目的是使用数字版权管理 (DRM) 播放受保护的内容。 默认情况下,PMP 进程是在受保护的环境 (PE) 中创建的。 只有受信任的签名组件才能加载到 PE 中。 PMP 进程的次要好处是它将应用程序进程与媒体管道隔离开来。 有关 PMP 过程的详细信息,请参阅 受保护的媒体路径

若要在 PMP 进程中创建媒体会话,请调用 MFCreatePMPMediaSession 函数。 (可选)可以传入 MFPMPSESSION_UNPROTECTED_PROCESS 标志。 如果设置了此标志,则 PMP 进程是在未受保护的进程(而不是 PE 进程)中创建的。 不受保护的进程不能用于 DRM 播放,但会提供进程隔离的优势。

MFCreatePMPMediaSession 函数返回指向媒体会话的代理对象的指针。 应用程序通过代理与媒体会话通信。

pmp 进程内媒体会话的插图

默认情况下,当应用程序创建拓扑时,会在应用程序进程中创建媒体源。 媒体源的代理是在 PMP 进程中创建的。 媒体源可以使用 IMFPMPHost 接口在 PMP 进程内创建对象。 例如,为了支持 DRM,媒体源 (ITA) 创建一个名为 输入信任机构 的对象。 必须在 PMP 进程中创建 ITA。 (有关 ITA 的详细信息,请参阅 受保护的媒体路径。) 若要使用 IMFPMPHost 接口,请执行以下操作:

  1. 媒体源必须实现 IMFPMPClient 接口。
  2. 在拓扑解析期间,媒体会话代理在媒体源上调用 IMFPMPClient::SetPMPHost 方法。
  3. 媒体源调用 IMFPMPHost::CreateObjectByCLSID ,以在 PMP 进程中创建对象。 对象必须具有已注册的 CLSID。 此外,若要在 PE 内加载,对象必须受信任且经过数字签名。 有关对受保护的媒体组件进行代码签名的信息,请参阅 Windows Vista 中受保护媒体组件的代码签名白皮书

下图显示了在应用程序过程中创建的媒体源。

应用程序进程中媒体源的插图。

另一种方法是在 PMP 会话中创建媒体源。

  1. 创建媒体会话时设置 MF_SESSION_REMOTE_SOURCE_MODE 属性。 配置属性在 MFCreatePMPMediaSession 函数的 pConfiguration 参数中指定。

  2. 在媒体会话上调用 MFGetService 以获取指向 IMFPMPHost 接口的 指针。 服务标识符MF_PMP_SERVICE。

  3. 使用类标识符CLSID_MFSourceResolver调用 IMFPMPHost::CreateObjectByCLSID,以在 PMP 进程中创建源解析程序。 方法返回指向源解析程序的代理的指针。

  4. 调用 IMFSourceResolver::BeginCreateObjectFromURLIMFSourceResolver::BeginCreateObjectFromByteStream 来创建媒体源。

    注意

    在这种情况下,必须使用这些方法的异步版本,因为同步版本不可远程处理。

     

下图显示了在 PMP 进程中创建的媒体源。

pmp 进程中媒体源的插图。

如何播放受保护的媒体文件

媒体会话

受保护的媒体路径