Criando um perfil ASF
Este tópico descreve como criar como perfil ASF no Microsoft Media Foundation.
- Criar um novo perfil
- Obter o perfil do objeto ASF ContentInfo
- Obter o perfil de um descritor de apresentação
- Tópicos relacionados
Criar um novo perfil
Para criar um perfil ASF vazio, chame a função MFCreateASFProfile. Esta função retorna um ponteiro para o IMFASFProfile interface. O aplicativo pode usar essa interface para adicionar fluxos ao perfil e configurar cada um dos fluxos. Para obter mais informações, consulte Criando e configurando fluxos ASF.
Opcionalmente, o aplicativo pode adicionar objetos de exclusão mútua a dois ou mais fluxos. Consulte Usando a exclusão mútua para fluxos ASF.
Obter o perfil do objeto ASF ContentInfo
Um aplicativo pode obter o perfil ASF de um arquivo ASF existente do ASF ContentInfo Object. O perfil já está configurado e contém configurações para todos os fluxos no arquivo.
Inicialize o objeto ContentInfo analisando o objeto Header ASF do arquivo. Isso é feito através do método IMFASFContentInfo::ParseHeader. Depois que todos os objetos de cabeçalho são lidos e a biblioteca ASF é preenchida, o perfil para esse arquivo é gerado. A aplicação pode obter um ponteiro para este perfil inicializado chamando IMFASFContentInfo::GetProfile.
Obter o perfil de um descritor de apresentação
Você pode obter o objeto de perfil de um arquivo ASF existente do descritor de apresentação para o arquivo, ou do objeto ASF ContentInfo . Nesse caso, o perfil já está configurado e contém configurações para todos os fluxos no arquivo. Isso pode ser útil se você quiser modificar um perfil ASF existente. Por exemplo, poderá pretender recodificar um ficheiro de vídeo do Windows Media a uma taxa de bits mais baixa.
Para obter o perfil do descritor de apresentação, chame MFCreateASFProfileFromPresentationDescriptor. Esta função analisa o descritor de apresentação e preenche um perfil ASF com informações sobre o arquivo de mídia. A função retorna um ponteiro para a interface IMFASFProfile. Em seguida, você pode usar essa interface para modificar o perfil.
Para obter o descritor de apresentação, chame um dos seguintes métodos:
- Na fonte de mídia ASF, chame IMFMediaSource::CreatePresentationDescriptor.
- No objeto ASF ContentInfo, chame IMFASFContentInfo::GeneratePresentationDescriptor. Antes de chamar esse método, verifique se o objeto ContentInfo foi inicializado para leitura. Para obter mais informações, consulte "Inicializando o objeto ContentInfo de um arquivo ASF existente" em Lendo o objeto de cabeçalho ASF de um arquivo existente. No entanto, se você já tiver um objeto ContentInfo inicializado, poderá obter o perfil diretamente dele. Isso é descrito em "Obtendo o perfil do objeto ContentInfo", mais adiante neste tópico.
O exemplo a seguir mostra como criar um perfil a partir de um descritor de apresentação. A função cria uma fonte de mídia para o arquivo, obtém o descritor de apresentação da fonte de mídia e cria um perfil. Este exemplo pressupõe que pszFileName especifica a URL de um arquivo ASF.
HRESULT GetASFProfile(PCWSTR pszFileName, IMFASFProfile** ppProfile)
{
*ppProfile = NULL;
IMFSourceResolver* pResolver = NULL;
IUnknown* pSourceUnk = NULL;
IMFMediaSource* pSource = NULL;
IMFPresentationDescriptor* pPD = NULL;
// Create the source resolver.
HRESULT hr = MFCreateSourceResolver(&pResolver);
// Use the source resolver to create the media source.
if (SUCCEEDED(hr))
{
MF_OBJECT_TYPE ObjectType;
hr = pResolver->CreateObjectFromURL(
pszFileName,
MF_RESOLUTION_MEDIASOURCE,
NULL,
&ObjectType,
&pSourceUnk
);
}
// Get the IMFMediaSource interface from the media source.
if (SUCCEEDED(hr))
{
hr = pSourceUnk->QueryInterface(IID_PPV_ARGS(&pSource));
}
// Get the presentation descriptor.
if (SUCCEEDED(hr))
{
hr = pSource->CreatePresentationDescriptor(&pPD);
}
// Get the profile from the presentation descriptor.
if (SUCCEEDED(hr))
{
hr = MFCreateASFProfileFromPresentationDescriptor(pPD, ppProfile);
}
SafeRelease(&pResolver);
SafeRelease(&pSourceUnk);
SafeRelease(&pSource);
SafeRelease(&pPD);
return hr;
}
Este exemplo usa SafeRelease para liberar ponteiros de interface.
Tópicos relacionados