关于媒体会话
媒体会话公开 IMFMediaSession 接口。 有两种方法可以创建媒体会话,具体取决于应用程序是否支持受保护的内容:
- 如果应用程序不支持受保护的内容,可以通过调用 MFCreateMediaSession 来创建媒体会话。 此函数在应用程序进程内创建媒体会话。
- 若要支持受保护的内容,请通过调用 MFCreatePMPMediaSession 创建媒体会话。 此函数在受保护的媒体路径 (PMP) 进程中创建媒体会话。 应用程序接收指向代理对象的指针,该代理对象跨进程边界封送方法调用。 请注意,PMP 媒体会话可用于播放清晰的内容以及受保护的内容。
使用媒体会话的任何应用程序都将遵循以下常规步骤:
- 创建拓扑。
- 通过调用 IMFMediaSession::SetTopology 将媒体会话上的拓扑排队。
- 通过调用 IMFMediaSession::Start、 IMFMediaSession::P ause 或 IMFMediaSession::Stop 来控制数据流。
- 在应用程序退出之前,调用 IMFMediaSession::Close 以关闭媒体会话。
- 通过调用 IMFMediaSource::Shutdown 关闭应用程序创建的任何媒体源。
- 通过调用 IMFMediaSession::Shutdown 关闭媒体会话。
使用媒体会话时,应用程序不应直接启动、暂停或停止媒体源。 所有状态更改都必须通过调用 IMFMediaSession 方法启动。 媒体源中的状态更改由媒体会话处理。
许多其他详细信息将取决于应用程序的特定功能。
受保护内容
若要播放受保护的内容,必须通过调用 MFCreatePMPMediaSession 在受保护媒体路径 (PMP) 内创建媒体会话。 此函数在 PMP 中创建媒体会话的实例,并返回指向代理对象的指针,该对象跨进程边界封送接口。
在大多数情况下,在 PMP 中使用媒体会话对应用程序是透明的。 但是,应用程序可能需要调用使用户能够播放内容的某些操作。 例如,用户可能需要获取 DRM 许可证。 媒体基础使用 IMFContentEnabler 接口定义这些操作的通用机制。
有关详情,请参阅以下主题:
演示文稿时钟
媒体会话管理演示时钟的所有方面:
创建演示文稿时钟。
选择时间源。
通知媒体接收器有关时钟的信息
根据需要启动、停止和暂停时钟。
关闭时钟。
若要获取指向演示时钟的指针,请在媒体会话上调用 IMFMediaSession::GetClock 。 在媒体会话发送带有MF_TOPOSTATUS_READY标志的 MESessionTopologyStatus 事件之前,演示时钟不会返回有效时间。 在此之前, GetClock 将返回MF_E_CLOCK_NO_TIME_SOURCE。
使用媒体会话的应用程序绝不应启动、停止或暂停演示时钟;更改时钟速率;或关闭时钟。
当应用程序调用 IMFMediaSession::Start 时,媒体会话将启动表示时钟,其起始时间等于 Start 方法中指定的起始位置。 有关媒体会话的详细信息,请参阅 媒体会话。
相关主题