配置 ASF 编写器

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

创建 WM ASF 编写器 筛选器时,会自动使用WMProfile_V80_256Video配置文件对其进行配置。 此配置文件使用 Windows Media Audio 和 Windows Media Video 版本 8 编解码器,这些编解码器与 Windows Media 9 系列编解码器不同。 建议创建使用 Windows Media 9 系列编解码器的自定义配置文件,并使用自定义配置文件配置 WM ASF 编写器,如 配置文件和其他 ASF 文件属性中所述。 在配置筛选器之前,必须将 WM ASF 编写器筛选器添加到筛选器图,并在将筛选器连接到任何其他筛选器之前对其进行配置。

所有输入数据都必须带有时间戳,并且必须连接所有输入引脚,然后才能运行或暂停筛选器。 因此,如果使用具有音频流和视频流的配置文件配置筛选器,筛选器将创建音频和视频输入引脚,并且必须连接两个引脚,然后才能运行筛选器。 由于 Windows Media Format SDK 需要音频流才能正常工作,因此 WM ASF 编写器必须始终具有输入音频引脚,即使它用于虚拟流(即静音的低比特率音频流)。

添加数据单元扩展

可以在连接筛选器之前或之后为数据单元扩展(例如 SMPTE 时间代码)配置配置文件流,前提是遵循以下操作顺序:

  1. 使用 IWMStreamConfig2::AddDataUnitExtension 将一个或多个数据单元扩展添加到流。
  2. 调用 IWMProfile::ReconfigStream 以更新配置文件。
  3. 使用更新的配置文件对象调用 IConfigAsfWriter::ConfigureFilterUsingProfile
  4. 找到视频输入引脚,并调用其 IAMWMBufferPass::SetNotify 方法来注册应用程序定义的 IAMWMBufferPassCallback 接口。

当图形运行时,将为每个帧调用 IAMWMBufferPassCallback::Notify 方法,并且你将能够使用其 INSSBuffer3 接口方法获取和设置示例的属性。

注意

在某些处理器密集型方案(如反向远程视频)中,WM ASF 编写器可能需要比某些下游筛选器支持的更多输出缓冲区。 例如,DV 解码器不会接受多个缓冲区用于其输出引脚,在某些情况下,AVI 解压缩器也是如此。 如果在尝试连接到这些筛选器时或在运行图形时遇到问题,可能需要编写一个中间筛选器,该筛选器接受其输出引脚上任意数量的缓冲区。

 

在 DirectShow 中创建 ASF 文件