将音频解码为 S/PDIF

[与此页面关联的功能 Windows Media Format 11 SDK 是一项旧功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用源读取器和接收器编写器,而不是 Windows Media 格式 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

使用 Windows Media Audio 9 专业编解码器编码的音频可以解码为 Sony/Philips 数字互连格式 (S/PDIF) 。 若要生成 S/PDIF 输出,请执行以下步骤:

  1. 通过调用 IWMReader::Open 方法打开包含 Windows Media Audio 9 Professional 流的文件。
  2. 确定所需的流的输出编号。 有关详细信息,请参阅 标识输出编号
  3. 调用 IWMReaderAdvanced2::SetOutputSetting 方法以配置 S/PDIF 输出。 将 g_wszEnableWMAProSPDIFOutput 用作设置名称。 数据类型为 WMT_TYPE_BOOL;将值设置为 TRUE 以启用 S/PDIF 输出。
  4. 通过调用 IWMReader::GetOutputFormat 方法, (IWMOutputMediaProps) 所需输出格式获取输出属性接口。 有关枚举输出格式的详细信息,请参阅 分配输出格式
  5. 通过调用 IWMReader::SetOutputProps 方法设置输出格式。 传入指向步骤 4 中获取的 IWMOutputMediaProps 接口的指针。
  6. 进行任何其他配置更改并开始播放。

注意

可以使用 IWMSyncReader 接口的相应方法在同步读取器上执行上述步骤。

 

以下示例代码演示如何将音频流设置为将音频输出为 S/PDIF 数据。 此函数假定已将文件加载到读取器中,并且已标识输出编号。 有关使用此代码的详细信息,请参阅 使用代码示例

HRESULT SetSPDIF(DWORD dwOutputNum, IWMReader* pReader)
{
    HRESULT hr = S_OK;

    IWMReaderAdvanced2*  pReaderAdv   = NULL;
    IWMOutputMediaProps* pOutputProps = NULL; 

    BOOL fValue = TRUE;

    // Get the advanced reader interface.
    hr = pReader->QueryInterface(IID_IWMReaderAdvanced2,
                                 (void**)&pReaderAdv);
    GOTO_EXIT_IF_FAILED(hr);

    // Set S/PDIF output.
    hr = pReaderAdv->SetOutputSetting(dwOutputNum, 
                                      g_wszEnableWMAProSPDIFOutput, 
                                      WMT_TYPE_BOOL, 
                                      (BYTE*)&fValue, 
                                      sizeof(BOOL));
    GOTO_EXIT_IF_FAILED(hr);

    // Get the first output format for the stream.
    // NOTE: You could also enumerate the available output formats
    // and pick one to use.

    hr = pReader->GetOutputFormat(dwOutputNum, 0, &pOutputProps);
    GOTO_EXIT_IF_FAILED(hr);

    // Set the output properties back on the reader.
    hr = pReader->SetOutputProps(dwOutputNum, pOutputProps);

Exit:
    SAFE_RELEASE(pReaderAdv);
    SAFE_RELEASE(pOutputProps);

    return hr;
}

高级主题

读取 ASF 文件

IWMReader 接口

IWMReaderAdvanced2 接口

IWMSyncReader 接口