Поделиться через


Определение входных данных по числу

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Она была заменена средствами чтения источника и модуля записи приемников. Средство чтения источника и модуль записи приемников оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде средство чтения исходного кода и модуль записи приемников вместо пакета SDK для Windows Media Format 11, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Каждый пример, который передается в модуль записи, должен быть связан с входным номером. Каждый входной номер соответствует одному или нескольким потокам в профиле, который модуль записи использует для записи файла. В профиле источники мультимедиа идентифицируются по имени подключения. Модуль записи связывает входной номер с каждым именем подключения при настройке профиля записи. Прежде чем передавать примеры в модуль записи, необходимо определить, какие данные ожидаются каждым входным данным. Нельзя предположить, что входные данные будут в том же порядке, что и потоки в профиле, даже если это часто происходит. Поэтому единственным надежным способом сопоставления входных данных с потоками является сравнение имени подключения входных данных с именем подключения потока.

Чтобы определить имена подключений и соответствующие входные номера для загруженного профиля, выполните следующие действия.

  1. Создайте объект записи и задайте профиль для использования. Дополнительные сведения о настройке профилей в записи см. в разделе Использование профилей с модулем записи. Вы должны знать имена подключений, используемые для потоков в профиле. Имя подключения можно получить из профиля, получив объект конфигурации потока для каждого потока и вызвав IWMStreamConfig::GetConnectionName. Дополнительные сведения о профилях и объектах конфигурации потоков см. в разделе Работа с профилями.
  2. Получите общее количество входных данных, вызвав IWMWriter::GetInputCount.
  3. Циклически просматривайте все входные данные, выполняя следующие действия для каждого из них.
    • Получите интерфейс 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;
}

Интерфейс IWMWriter

Запись ASF-файлов