将DRM-Protected文件转换为适用于网络设备的 Windows Media DRM 10 流
注册并验证设备后,可以开始处理来自该设备的许可证请求消息。 当需要应用程序操作时,设备会发送许可证请求消息。 当前支持的唯一操作是“播放”,这是对安全数据进行播放的请求。
收到许可证请求消息时,应执行以下步骤:
- 通过调用 IWMDRMMessageParser::P arseLicenseRequestMsg 方法分析许可证请求消息。
- 通过调用 IWMDeviceRegistration::GetRegisteredDeviceByID 方法,传入在步骤 1 中获取的证书和序列号,获取设备的 IWMRegisteredDevice 接口。
- 验证设备是否已准备好接收安全数据:
- 调用 IWMRegisteredDevice::IsApproved 验证设备是否已获得批准。 审批应始终基于用户偏好。
- 调用 IWMRegisteredDevice::IsValid 验证设备是否已在过去 48 小时内进行验证。 如果设备无效,则需要执行邻近感应检测。 有关详细信息,请参阅 执行邻近感应检测。
- 调用 IWMRegisteredDevice::IsOpened 验证设备是否已打开。 如果设备未打开,可以通过调用 IWMRegisteredDevice::Open 将其打开。 一次只能在计算机上打开 10 台设备。 可能需要先关闭另一台设备,然后才能打开正在处理请求的设备。 若要关闭设备,请调用 IWMRegisteredDevice::Close 方法。
- 通过调用 WMCreateDRMTranscryptor 函数创建 DRM transcryptor 对象的实例。
- 调用 IWMDRMTranscryptor::Initialize 方法来初始化 transcryptor。 此方法获取指向 IWMStatusCallback 接口实现的指针,该接口用于传递状态消息。 此方法还会返回许可证请求消息,该消息必须先发送到设备,然后才能继续。
- 当应用程序的 IWMStatusCallback::OnStatus 方法收到WMT_TRANSCRYPTOR_INIT状态消息时,请调用 IWMDRMTranscryptor::Seek 方法以查找文件中的适当起始位置。 若要从文件开头开始,必须调用时间为 0 的 Seek 。
- 当转译器准备好在新呈现时间从文件传送数据时,会发送WMT_TRANSCRYPTOR_SEEKED消息。 对 IWMDRMTranscryptor::Read 方法进行重复调用,以获取转换后的媒体数据块。 每次调用都是异步的,在收到WMT_TRANSCRYPTOR_READ消息之前不会完成。 收到消息后,可以将数据发送到接收设备。
- 收到 hr 参数设置为 NS_S_TRANSCRYPTOR_EOF 的WMT_TRANSCRYPTOR_READ消息时,已读取整个文件。 此时,调用 IWMDRMTranscryptor::Close 方法来关闭文件并释放资源。
- 收到WMT_TRANSCRYPTOR_CLOSED消息后,可以释放 IWMDRMTranscryptor 接口。
注意
此 SDK 的基于 x64 的版本不支持 DRM。
相关主题