Partilhar via


Para identificar entradas por número

[A funcionalidade associada a esta página, Windows Media Format 11 SDK, é uma funcionalidade herdada. Foi substituído por Source Reader e Sink Writer. Source Reader e Sink Writer foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize do Leitor de Origem e do Gravador de Separadores em vez de SDK do Windows Media Format 11, sempre que possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Cada amostra que passas ao escritor deve ser associada a um número de entrada. Cada número de entrada corresponde a um ou mais fluxos no perfil que o escritor está a utilizar para escrever o arquivo. Em um perfil, as fontes de mídia são identificadas por um nome de conexão. O escritor associa a cada nome de conexão um número de entrada quando se define o perfil para o escritor. Antes de passares amostras para o escritor, deves determinar quais dados cada entrada está a esperar. Você não pode supor que as entradas estarão na mesma ordem que os fluxos em um perfil, mesmo que esse seja frequentemente o caso. Portanto, a única maneira confiável de combinar entradas com fluxos é comparar o nome da conexão da entrada com o nome da conexão do fluxo.

Para identificar os nomes de conexão e os números de entrada correspondentes para um perfil carregado, execute as seguintes etapas:

  1. Crie um objeto escritor e defina um perfil para usar. Para obter mais informações sobre como definir perfis no escritor, consulte Usar perfis com o escritor. Você deve saber os nomes de conexão usados para os fluxos no perfil. Você pode obter o nome da conexão de dentro do perfil obtendo o objeto de configuração de fluxo para cada fluxo e chamando IWMStreamConfig::GetConnectionName. Para obter mais informações sobre perfis e objetos de configuração de fluxo, consulte Trabalhando com perfis.
  2. Recupere o número total de entradas chamando IWMWriter::GetInputCount.
  3. Percorra todas as entradas, executando as seguintes etapas para cada uma.

O código de exemplo a seguir exibe o nome da conexão para cada entrada. Para obter mais informações sobre como usar esse código, consulte Usando os exemplos de código.

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;
}

Interface IWMWriter

Escrevendo arquivos ASF