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:
- 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.
- Recupere o número total de entradas chamando IWMWriter::GetInputCount.
- Percorra todas as entradas, executando as seguintes etapas 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, sabes os fluxos de dados associados aos números de entrada atribuídos pelo escritor.
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