Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para converter arquivos de mídia em formato ASF, você pode usar codificadores do Windows Media. Para usar esses codificadores, eles devem estar registrados no sistema. Os codificadores são implementados à medida que Media Foundation transforma (MFTs) e devem expor a interface IMFTransform. Este tópico descreve como um aplicativo pode obter um ponteiro para a interface IMFTransform do codificador MFT necessário e instanciá-lo para utilização.
Para obter informações sobre o registro do codificador, consulte Instanciando uma MFT do codificador.
Usando a interface IMFTransform de um codificador
Após o registro bem-sucedido de codificadores do Windows Media com o sistema, um aplicativo pode enumerar os codificadores chamando MFTEnum. Para procurar o codificador correto, você deve especificar o seguinte:
O GUID que representa a categoria, sendo MFT_CATEGORY_AUDIO_ENCODER ou MFT_CATEGORY_VIDEO_ENCODER.
O formato a corresponder. Isso é definido na estrutura MFT_REGISTER_TYPE_INFO que especifica o tipo e o subtipo principais do tipo de mídia no qual o codificador gerará amostras. Esta estrutura é passada no parâmetro pOutputType. Para obter informações sobre os tipos suportados, consulte GUIDs de Tipos de Multimédia.
Observação
As informações de tipo de entrada no parâmetro pInputType não são necessárias. Isso ocorre porque o tipo de entrada é conhecido pelo aplicativo e o codificador espera que o fluxo de entrada esteja em um formato não compactado.
MFTEnum retorna uma matriz de ponteiros IMFTransform para as MFTs do codificador que correspondem aos critérios de pesquisa. Você pode instanciar um codificador chamando a função COM CoCreateInstance e passando o CLSID do codificador que deseja usar. Esta função devolve um ponteiro para a interface IMFTransform que representa o codificador. Para obter mais informações sobre essa chamada de função, consulte a documentação do SDK do Windows para o COM (Component Object Model).
Exemplo de criação de codificador
O exemplo de código a seguir mostra como criar um codificador de áudio ou vídeo.
HRESULT FindEncoder(
const GUID& subtype,
BOOL bAudio,
IMFTransform **ppEncoder
)
{
HRESULT hr = S_OK;
UINT32 count = 0;
CLSID *ppCLSIDs = NULL;
MFT_REGISTER_TYPE_INFO info = { 0 };
info.guidMajorType = bAudio ? MFMediaType_Audio : MFMediaType_Video;
info.guidSubtype = subtype;
hr = MFTEnum(
bAudio ? MFT_CATEGORY_AUDIO_ENCODER : MFT_CATEGORY_VIDEO_ENCODER,
0, // Reserved
NULL, // Input type
&info, // Output type
NULL, // Reserved
&ppCLSIDs,
&count
);
if (SUCCEEDED(hr) && count == 0)
{
hr = MF_E_TOPO_CODEC_NOT_FOUND;
}
// Create the first encoder in the list.
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(ppCLSIDs[0], NULL,
CLSCTX_INPROC_SERVER, IID_PPV_ARGS(ppEncoder));
}
CoTaskMemFree(ppCLSIDs);
return hr;
}
Tópicos relacionados