按数字标识输入
[与此页面关联的功能 Windows Media Format 11 SDK 是一项旧功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用源读取器和接收器编写器,而不是 Windows Media 格式 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
传递给编写器的每个样本都必须与输入编号相关联。 每个输入编号对应于编写器用于写入文件的配置文件中的一个或多个流。 在配置文件中,媒体源由连接名称标识。 为编写器设置配置文件时,编写器会将输入号与每个连接名称相关联。 在将样本传递给编写器之前,必须确定每个输入所需的数据。 不能假设输入的顺序与配置文件中的流相同,即使这种情况经常如此。 因此,将输入与流匹配的唯一可靠方法是将输入的连接名称与流的连接名称进行比较。
若要标识已加载配置文件的连接名称和相应的输入编号,请执行以下步骤:
- 创建编写器对象并设置要使用的配置文件。 有关在编写器中设置配置文件的详细信息,请参阅 将配置文件与编写器一起使用。 你应该知道配置文件中用于流的连接名称。 可以通过获取每个流的流配置对象并调用 IWMStreamConfig::GetConnectionName,从配置文件中获取连接名称。 有关配置文件和流配置对象的详细信息,请参阅 使用配置文件。
- 通过调用 IWMWriter::GetInputCount 检索输入总数。
- 循环访问所有输入,为每个输入执行以下步骤。
- 通过调用 IWMWriter::GetInputProps 检索输入的 IWMInputMediaProps 接口。
- 通过调用 IWMInputMediaProps::GetConnectionName 检索与输入编号对应的连接名称。 获得连接名称后,您就知道与编写器分配的输入编号关联的流。
以下示例代码显示每个输入的连接名称。 有关使用此代码的详细信息,请参阅 使用代码示例。
HRESULT GetNamesForInputs(IWMWriter* pWriter)
{
DWORD cInputs = 0;
HRESULT hr = S_OK;
WCHAR* pwszName = NULL;
WORD cchName = 0;
IWMInputMediaProps* pProps = NULL;
// Get the total number of inputs for the file.
hr = pWriter->GetInputCount(&cInputs);
GOTO_EXIT_IF_FAILED(hr);
// Loop through all supported inputs.
for (DWORD inputIndex = 0; inputIndex < cInputs; inputIndex++)
{
// Get the input properties for the input.
hr = pWriter->GetInputProps(inputIndex, &pProps);
GOTO_EXIT_IF_FAILED(hr);
// Get the size of the connection name.
hr = pProps->GetConnectionName(0, &cchName);
GOTO_EXIT_IF_FAILED(hr);
if (cchName > 0)
{
// Allocate memory for the connection name.
pwszName = new WCHAR[cchName];
if (wszName == NULL)
{
hr = E_OUTOFMEMORY;
goto Exit;
}
// Get the connection name.
hr = pProps->GetConnectionName(pwszName, &cchName);
GOTO_EXIT_IF_FAILED(hr);
// Display the name.
printf("Input # %d = %S\n", pwszName);
} // end if
// Clean up for next iteration.
SAFE_ARRAY_DELETE(pwszName);
SAFE_RELEASE(pProps);
} // end for inputIndex
Exit:
SAFE_ARRAY_DELETE(pwszName);
SAFE_RELEASE(pProps);
return hr;
}
相关主题