Partilhar via


Usando fluxos multimídia em aplicativos

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, 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.]

Observação

Essas APIs foram preteridas. Os aplicativos devem usar o filtro Grabber de Exemplo ou implementar um filtro personalizado para obter dados de um grafo de filtro do DirectShow.

 

As interfaces de streaming multimídia simplificam muito o processo de manipulação de dados multimídia removendo a dependência de características específicas da fonte de hardware ou software e fornecendo suporte para todos os formatos de mídia do Microsoft DirectX®. Os fluxos abstraem os dados para um nível muito alto; os aplicativos podem até mesmo mover dados de um fluxo para outro sem saber nada sobre o formato dos dados.

Execute as etapas a seguir para criar um fluxo multimídia.

  1. Crie o fluxo multimídia. O método de criação e inicialização do fluxo é específico da arquitetura. O DirectShow dá suporte à interface IAMMultiMediaStream , que é usada para inicializar o fluxo. Outras implementações de servidor em processo do IMultiMediaStream serão criadas e inicializadas usando mecanismos diferentes.
  2. Depois que o objeto de fluxo multimídia for inicializado, o aplicativo usará QueryInterface para recuperar a interface IMultiMediaStream do objeto. Use essa interface para determinar as propriedades do fluxo e enumerar os próprios fluxos. Você pode recuperar um fluxo específico chamando o método IMultiMediaStream::GetMediaStream com uma ID de finalidade específica. MSPID_PrimaryVideo e MSPID_PrimaryAudio, que representam os fluxos de áudio e vídeo primários, são as IDs de finalidade mais usadas.
  3. Chame IUnknown::QueryInterface para uma interface específica para o tipo de mídia do fluxo. Se você quiser renderizar um fluxo de vídeo, por exemplo, recupere sua interface IDirectDrawMediaStream . Interfaces específicas de mídia definem métodos adicionais necessários para aproveitar ao máximo os recursos de um formato.
  4. Crie um ou mais exemplos dos dados de fluxo. Cada fluxo de mídia dá suporte ao método IMediaStream::CreateSharedSample para criação de exemplo. O exemplo resultante dá suporte à interface IStreamSample , que fornece controle sobre o exemplo e suas características. Normalmente, o fluxo de mídia dá suporte a um método específico de formato de criação de exemplo que é mais poderoso do que os métodos IStreamSample mencionados anteriormente. IDirectDrawMediaStream, por exemplo, pode criar exemplos anexados a uma superfície directDraw desejada e retângulo de recorte. Em algumas situações, no entanto, você deve lidar com dados sem saber sobre seu formato de dados. Se você quiser transmitir dados independentemente de seu formato, use o método IMediaStream::CreateSharedSample para criar os exemplos de dados.
  5. Depois de criar todos os exemplos de fluxo desejados, inicie o fluxo chamando o método IMultiMediaStream::SetState e passe o sinalizador STREAMSTATE_RUN como seu parâmetro.
  6. Chame IStreamSample::Update para atualizar o exemplo de fluxo. Quando o método IStreamSample::Update for encerrado, você poderá acessar os dados do exemplo. Se você quiser disparar um evento específico ou uma chamada de função quando a atualização retornar, passe os ponteiros apropriados para o método IStreamSample::Update .

Para obter mais informações sobre as interfaces de streaming multimídia, consulte Streaming multimídia.