WM ASF 编写器筛选器 (DirectShow)

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

WM ASF 编写器是 Windows 媒体™格式 SDK 提供的编写器对象的包装筛选器。 该筛选器接受可变数量的输入流,并创建高级系统格式 (ASF) 文件。 筛选器处理所有压缩和复用(尽管可以绕过压缩机制)。 可以在各种方案中使用 WM ASF 编写器,包括数字视频(DV)捕获、音频重新压缩和音频视频交错(AVI)或 MPEG 多媒体文件的转换,以进行网络流式处理。 此筛选器提供在 Microsoft DirectShow 中创建 Microsoft® Windows Media Audio 和 Windows Media™ Video 文件的唯一方法。

有关详细信息,请参阅 在 DirectShow 中创建 ASF 文件。

Label
筛选器接口 IAMFilterMiscFlagsIBaseFilter、IConfigAsfWriterIConfigAsfWriter2IFileSinkFilter2、IMediaSeekingIPersistStreamIServiceProviderISpecifyPropertyPages此外,筛选器还公开以下 Windows 媒体格式 SDK 接口:IWMIndexer2、IWMHeaderInfo、 IWMWriterAdvanced2
输入引脚媒体类型 取决于 ASF 配置文件。 通常未压缩的音频和视频类型,尽管筛选器将接受压缩类型(如果它们与 ASF 配置文件匹配)。
输入引脚接口 IAMStreamConfigIAMWMBufferPassIMemInputPinIPinIServiceProvider此外,引脚还公开以下 Windows 媒体格式 SDK 接口:IWMStreamConfig2(通过 IServiceProvider)
输出引脚媒体类型 不适用。
输出引脚接口 不适用。
筛选 CLSID CLSID_WMAsfWriter
属性页 CLSID CLSID_AsfWriterProperties
Executable Qasf.dll
优点 MERIT_DO_NOT_USE
筛选器类别 未指定

 

注解

筛选器需要 Windows 媒体格式软件开发工具包(SDK)及其基础依赖项。

筛选器上的输入引脚数,具体取决于 ASF 流的配置文件或配置文件标识符。

输入引脚支持 IAMStreamConfig 接口中的一种方法:IAMStreamConfig::GetFormat 所有其他方法返回E_NOTIMPL。 调用 GetFormat 方法以查询引脚的目标压缩格式,该格式由当前 ASF 配置文件定义。 使用 IConfigAsfWriter 接口设置配置文件。

可以使用筛选器的 IServiceProvider 接口获取指向 IWMWriterAdvanced2 接口的指针,该接口在 Windows 媒体格式 SDK 中定义。 可以使用 IWMWriterAdvanced2 接口控制源视频交错时的视频反交错。 若要设置反交错模式,请调用 IWMWriterAdvanced2::SetInputSetting。 对于 dwInputNum 参数,请使用视频输入引脚的从零开始的索引,如 IEnumPins 接口枚举的那样。

以下示例演示如何查询此接口:

// Assume that pAsfWriter is a valid IBaseFilter pointer.
IServiceProvider *pProvider = NULL;
IWMWriterAdvanced2 *pWMWA2 = NULL;

hr = pAsfWriter->QueryInterface(
    IID_IServiceProvider, 
    (void**)&pProvider
    );
if (SUCCEEDED(hr))
{
    hr = pProvider->QueryService(
        IID_IWMWriterAdvanced2,
        IID_IWMWriterAdvanced2, 
        (void**)&pWMWA2
        );
    pProvider->Release();
    if (SUCCEEDED(hr))
    {
        // Use pWMWA2. (Not shown.)
        pWMWA2->Release();
    }
}

应用程序不应使用 IWMWriterAdvanced2 接口继承的任何 IWMWriterAdvanced 方法。 调用这些方法可能会干扰筛选器的操作。

此筛选器支持的唯一文件写入模式是AM_FILE_OVERWRITE。 请参阅 IFileSinkFilter2::GetMode

当 Windows 媒体格式 SDK 运行时将WMT_STATUS消息发送到 WM ASF 编写器筛选器时,筛选器会将消息转发为 EC_WMT_EVENT 事件。

DirectShow 筛选器