PMP 媒体会话
应用程序可以在名为 受保护的媒体路径(PMP)进程的单独进程中创建 媒体会话。 PMP 过程的主要目的是使用数字权限管理(DRM)启用对受保护内容的播放。 默认情况下,PMP 进程在受保护的环境(PE)内创建。 只有受信任的签名组件才能在 PE 中加载。 PMP 进程的次要好处是,它将应用程序进程与媒体管道隔离开来。 有关 PMP 过程的详细信息,请参阅 受保护的媒体路径。
若要在 PMP 进程中创建媒体会话,请调用 MFCreatePMPMediaSession 函数。 (可选)可以传入 MFPMPSESSION_UNPROTECTED_PROCESS 标志。 如果设置了此标志,则 PMP 进程在未受保护的进程中创建,而不是 PE 进程。 不受保护的进程不能用于 DRM 播放,但确实为你提供了进程隔离的好处。
MFCreatePMPMediaSession 函数返回指向媒体会话的代理对象的指针。 应用程序通过代理与媒体会话通信。
默认情况下,当应用程序创建拓扑时,会在应用程序进程中创建媒体源。 在 PMP 进程中创建媒体源的代理。 媒体源可以使用 IMFPMPHost 接口在 PMP 进程中创建对象。 例如,为了支持 DRM,媒体源会创建一个名为 输入信任机构(ITA)的对象。 必须在 PMP 进程中创建 ITA。 (有关 ITA 的详细信息,请参阅 受保护的媒体路径。)若要使用 IMFPMPHost 接口,请执行以下作:
- 媒体源必须实现 IMFPMPClient 接口。
- 在拓扑解析过程中,媒体会话代理在媒体源上调用 IMFPMPClient::SetPMPHost 方法。
- 媒体源调用 IMFPMPHost::CreateObjectByCLSID 在 PMP 进程中创建对象。 该对象必须具有已注册的 CLSID。 此外,若要在 PE 内部加载,对象必须受信任且经过数字签名。 有关对受保护的媒体组件进行代码签名的信息,请参阅 Windows Vista 中受保护媒体组件的白皮书 代码签名
下图显示了在应用程序过程中创建的媒体源。
另一种替代方法是在 PMP 会话中创建媒体源。
创建媒体会话时设置 MF_SESSION_REMOTE_SOURCE_MODE 属性。 配置属性是在 MFCreatePMPMediaSession 函数的 pConfiguration 参数中指定的。
在媒体会话上调用 MFGetService,以获取指向 IMFPMPHost 接口的指针。 服务标识符 MF_PMP_SERVICE。
使用类标识符 CLSID_MFSourceResolver 调用 IMFPMPHost::CreateObjectByCLSID,以在 PMP 进程中创建源解析程序。 该方法返回指向源解析程序的代理的指针。
调用 IMFSourceResolver::BeginCreateObjectFromURL 或 IMFSourceResolver::BeginCreateObjectFromByteStream 来创建媒体源。
注意
在这种情况下,必须使用这些方法的异步版本,因为同步版本不可远程处理。
下图显示了 PMP 进程中创建的媒体源。
相关主题