Определение входных данных по числу
[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Она была заменена средствами чтения источника и модуля записи приемников. Средство чтения источника и модуль записи приемников оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде средство чтения исходного кода и модуль записи приемников вместо пакета SDK для Windows Media Format 11, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Каждый пример, который передается в модуль записи, должен быть связан с входным номером. Каждый входной номер соответствует одному или нескольким потокам в профиле, который модуль записи использует для записи файла. В профиле источники мультимедиа идентифицируются по имени подключения. Модуль записи связывает входной номер с каждым именем подключения при настройке профиля записи. Прежде чем передавать примеры в модуль записи, необходимо определить, какие данные ожидаются каждым входным данным. Нельзя предположить, что входные данные будут в том же порядке, что и потоки в профиле, даже если это часто происходит. Поэтому единственным надежным способом сопоставления входных данных с потоками является сравнение имени подключения входных данных с именем подключения потока.
Чтобы определить имена подключений и соответствующие входные номера для загруженного профиля, выполните следующие действия.
- Создайте объект записи и задайте профиль для использования. Дополнительные сведения о настройке профилей в записи см. в разделе Использование профилей с модулем записи. Вы должны знать имена подключений, используемые для потоков в профиле. Имя подключения можно получить из профиля, получив объект конфигурации потока для каждого потока и вызвав IWMStreamConfig::GetConnectionName. Дополнительные сведения о профилях и объектах конфигурации потоков см. в разделе Работа с профилями.
- Получите общее количество входных данных, вызвав IWMWriter::GetInputCount.
- Циклически просматривайте все входные данные, выполняя следующие действия для каждого из них.
- Получите интерфейс IWMInputMediaProps для входных данных, вызвав IWMWriter::GetInputProps.
- Получите имя подключения, соответствующее входной номеру, вызвав 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;
}
Связанные темы