Método IMFMediaEngineExtension::BeginCreateObject (mfmediaengine.h)

Inicia uma solicitação assíncrona para criar um fluxo de bytes ou uma fonte de mídia.

Sintaxe

HRESULT BeginCreateObject(
  [in]           BSTR             bstrURL,
  [in]           IMFByteStream    *pByteStream,
  [in]           MF_OBJECT_TYPE   type,
  [out]          IUnknown         **ppIUnknownCancelCookie,
  [in]           IMFAsyncCallback *pCallback,
  [in, optional] IUnknown         *punkState
);

Parâmetros

[in] bstrURL

A URL do recurso de mídia.

[in] pByteStream

Um ponteiro para a interface IMFByteStream .

Se o parâmetro de tipo for igual a MF_OBJECT_BYTESTREAM, esse parâmetro será NULL.

Se o tipo for igual a MF_OBJECT_MEDIASOURCE, esse parâmetro conterá um ponteiro para um fluxo de bytes ou será NULL. Confira Comentários para obter mais informações.

[in] type

Um membro da enumeração MF_OBJECT_TYPE que especifica qual tipo de objeto criar.

Valor Significado
MF_OBJECT_BYTESTREAM
Criar um fluxo de bytes. O fluxo de bytes deve dar suporte à interface IMFByteStream .
MF_OBJECT_MEDIASOURCE
Crie uma fonte de mídia. A fonte de mídia deve dar suporte à interface IMFMediaSource .

[out] ppIUnknownCancelCookie

Recebe um ponteiro para a interface IUnknown . Esse ponteiro pode ser usado para cancelar a operação assíncrona, passando o ponteiro para o método IMFMediaEngineExtension::CancelObjectCreation .

O chamador deve liberar a interface . Este parâmetro pode ser NULL.

[in] pCallback

Um ponteiro para a interface IMFAsyncCallback . Essa interface é usada para sinalizar a conclusão da operação assíncrona.

[in, optional] punkState

Um ponteiro para a interface IUnknown de um objeto implementado pelo chamador. Você pode usar esse objeto para armazenar informações de estado para o retorno de chamada. O objeto é retornado ao chamador quando o retorno de chamada é invocado. Este parâmetro pode ser NULL.

Retornar valor

Se o método for bem-sucedido, ele retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT.

Comentários

Esse método solicita que o objeto crie um fluxo de bytes ou uma fonte de mídia, dependendo do valor do parâmetro de tipo :

  • Se o tipo for MF_OBJECT_BYTESTREAM, o método criará um fluxo de bytes para a URL especificada em bstrURL. Nesse caso, o parâmetro pByteStream é NULL.
  • Se o tipo for MF_OBJECT_MEDIASOURCE, o método criará uma fonte de mídia, usando o fluxo de bytes especificado no parâmetro pByteStream . Observe que pByteStream também pode ser NULL nesse caso.
O método é executado de forma assíncrona. O Mecanismo de Mídia chama o método IMFMediaEngineExtension::EndCreateObject para concluir a operação.

Notas de implementação

Uma extensão do Mecanismo de Mídia pode ser usada para dar suporte a um objeto de fluxo de bytes personalizado, uma fonte de mídia personalizada ou ambos. Para um fluxo de bytes, crie o objeto de fluxo de bytes quando o tipo for igual a MF_OBJECT_BYTESTREAM. Para uma fonte de mídia, crie a origem quando o tipo for igual a MF_OBJECT_MEDIASOURCE.

Para carregar uma URL, o Mecanismo de Mídia executa as seguintes etapas:

  1. Tente criar um fluxo de bytes da URL.
  2. Se um fluxo de bytes for criado com êxito, tente criar uma fonte de mídia do fluxo de bytes.
  3. Se um fluxo de bytes não puder ser criado, tente criar uma fonte de mídia diretamente da URL.

Em cada etapa, o Mecanismo de Mídia chama IMFMediaEngineExtension::BeginCreateObject no objeto de extensão. Se o método BeginCreateObject falhar, o Mecanismo de Mídia tentará o Resolvedor de Origem.

No método BeginCreateObject , você pode optar por manipular qualquer um dos seguintes casos:

  • O parâmetro de tipo é MF_OBJECT_BYTESTREAM. Crie um fluxo de bytes da URL.
  • O parâmetro de tipo é MF_OBJECT_MEDIASOURCE e pByteStream aponta para um fluxo de bytes. Use o fluxo de bytes para criar uma fonte de mídia.
  • O parâmetro de tipo é MF_OBJECT_MEDIASOURCE e pByteStream é NULL. Crie uma fonte de mídia com base na URL.

Retornar um código de falha para todos os casos que você não manipular.

Exemplos:

  • Para dar suporte a um formato de mídia personalizado, implemente uma fonte de mídia. Se a fonte de mídia não exigir nenhuma implementação especial de fluxo de bytes, crie a fonte de mídia quando o tipo for MF_OBJECT_MEDIASOURCE e pByteStream não for NULL. A implementação padrão do fluxo de bytes do Microsoft Media Foundation será usada nesse caso.
  • Para dar suporte a um esquema de URL personalizado, manipule o caso em que o tipo é MF_OBJECT_BYTESTREAM e retorne um objeto de fluxo de bytes capaz de ler a URL.

Se o método BeginCreateObject for bem-sucedido, a operação deverá ser executada de forma assíncrona. Quando a operação for concluída, chame o método IMFAsyncCallback::Invoke na interface de retorno de chamada especificada em pCallback. O Mecanismo de Mídia conclui a operação chamando IMFMediaEngineExtension::EndCreateObject.

Requisitos

   
Cliente mínimo com suporte Windows 8 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2012 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho mfmediaengine.h

Confira também

IMFMediaEngineExtension