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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.