将 ASF 数据发送到发布点
[与此页面关联的功能 Windows Media Format 11 SDK 是一项旧功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用源读取器和接收器编写器,而不是 Windows Media 格式 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
可以使用 Windows Media 格式 SDK 将 ASF 数据推送到 Windows Media 服务器上的发布点。 然后,服务器从该发布点广播数据。 如果要在一台计算机上捕获或重新编码内容,并希望从另一台计算机分发内容 (或多台计算机) ,则此方案非常有用。 如果需要将内容从防火墙内的计算机移动到防火墙外部的 Windows Media 服务器,它也很有用,因为推送分发使用 HTTP 协议。
注意
发布点实质上就像重定向程序一样。 客户端在 URL (指定发布点,例如,mms://MyServer/MyPublishingPoint) ,服务器会将其转换为内容请求。
若要将数据推送到发布点,请将推送接收器对象附加到编写器对象。 推送接收器用于打开与服务器的连接并管理推送会话。 编写器对象处理创建文件的其他所有方面。
执行以下步骤:
- 通过调用 WMCreateWriter 函数创建编写器对象,该函数返回 IWMWriter 指针。
- 通过调用 WMCreateWriterPushSink 函数创建推送接收器对象,该函数返回 IWMWriterPushSink 指针。
- 通过在编写器上调用 IWMWriterAdvanced::AddSink 并将网络接收器附加到编写器,并具有指向网络接收器的 IWMWriterPushSink 接口的指针。
- 通过调用 IWMWriterPushSink::Connect 连接到服务器。
- 写入流。 此步骤涉及在编写器对象上设置配置文件、向编写器发送示例以及可能的其他任务。 有关详细信息,请参阅 编写 ASF 文件。 其他任务可能包括 (设置元数据属性,如 使用元数据) 中所述,或在流 (上设置 live-DRM,如 启用 DRM 支持) 中所述。 这些任务与 ASF 文件写入完全相同。
- 完成编写后,在编写器上调用 IWMWriterAdvanced::RemoveSink 以分离推送接收器对象。
- 在推送接收器上调用 IWMWriterPushSink::EndSession 以结束与服务器的会话。
WMVNetWrite 示例应用程序中演示了这些步骤。
注意
如果要发送非常低比特率的仅限视频的文件,它可能在几秒钟内不会开始在发布点上播放。 这种情况可能发生在各种情况下,例如,当单个数据包包含许多小视频帧且没有音频时,或者当低比特率仅限视频文件中的第一个数据包与第二个数据包之间存在较长的时间间隔时。 若要避免此问题,请将无提示音频流插入文件。
身份验证
对服务器的身份验证由推送接收器对象自动处理。 但是,应用程序可能需要提供凭据。 这是通过 IWMCredentialCallback 回调接口完成的,如下所示:
- 在应用程序中实现 IWMStatusCallback 和 IWMCredentialCallback 接口。
- 查询 IWMRegisterCallback 接口的推送接收器对象。
- 使用指向应用程序的 IWMStatusCallback 接口的指针调用 IWMRegisterCallback::Advise。
- 如果推送接收器需要从应用程序获取凭据,它将查询 IWMCredentialCallback 接口的 IWMStatusCallback 指针,并调用 IWMCredentialCallback::AcquireCredentials。 有关此方法的信息,请参阅 身份验证。
- 完成后,调用 IWMRegisterCallback::Unadvise 以停止从推送接收器获取事件通知。
相关主题