Para identificar entradas por número
[O recurso associado a esta página, Windows Media Format 11 SDK, é um recurso herdado. Ele foi substituído por Leitor de Origem e Gravador de Coletor. O Leitor de Origem e o Gravador de Coletor foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o Leitor de Origem e o Gravador de Coletor em vez do SDK do Windows Media Format 11, quando 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 exemplo que você passar para o gravador deve estar associado a um número de entrada. Cada número de entrada corresponde a um ou mais fluxos no perfil que o gravador está usando para gravar o arquivo. Em um perfil, as fontes de mídia são identificadas por um nome de conexão. O gravador associa um número de entrada a cada nome de conexão quando você define o perfil para o gravador. Antes de passar amostras para o gravador, você deve determinar quais dados cada entrada está esperando. Você não pode assumir que as entradas estarão na mesma ordem que os fluxos em um perfil, mesmo que isso seja geralmente o caso. Portanto, a única maneira confiável de corresponder 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 de um perfil carregado, execute as seguintes etapas:
- Crie um objeto gravador e defina um perfil a ser usado. Para obter mais informações sobre como definir perfis no gravador, consulte Para usar perfis com o gravador. 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.
- Recupere o número total de entradas chamando IWMWriter::GetInputCount.
- Faça um loop em todas as entradas, executando as etapas a seguir para cada uma.
- Recupere a interface IWMInputMediaProps para a entrada chamando IWMWriter::GetInputProps.
- Recupere o nome da conexão que corresponde ao número de entrada chamando IWMInputMediaProps::GetConnectionName. Depois de ter o nome da conexão, você conhecerá os fluxos associados aos números de entrada atribuídos pelo gravador.
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;
}
Tópicos relacionados