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


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

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

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

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

  1. Создайте объект записи данных и задайте для него профиль для использования. Дополнительные сведения о настройке профилей в Writer см. в разделе «Использование профилей с Writer». Вам следует знать названия подключений, используемые для потоков в профиле. Имя подключения можно получить из профиля, получив объект конфигурации потока для каждого потока и вызвав 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 файлов