Transportes

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

Para mover dados de mídia por meio do grafo de filtro, um filtro DirectShow deve dar suporte a um dos vários protocolos possíveis. Esses protocolos são chamados de transportes. Quando dois filtros se conectam, eles devem dar suporte ao mesmo transporte; caso contrário, eles não podem trocar dados de mídia. Normalmente, um transporte requer que um dos pinos dê suporte a uma interface específica. Quando os filtros se conectam, um pino consulta o outro para a interface.

A maioria dos filtros do DirectShow contém dados de mídia na memória main e os entrega a outros filtros entre conexões de pino. Esse tipo de transporte é chamado de transporte de memória local. Embora o transporte de memória local seja o transporte mais comum no DirectShow, nem todos os filtros o usam. Por exemplo, alguns filtros enviam dados de mídia ao longo de um caminho de hardware e usam pinos apenas para fornecer informações de controle. Por exemplo, consulte a interface IOverlay .

O DirectShow define dois mecanismos para o transporte de memória local, o modelo de push e o modelo de pull. No modelo de push, um filtro de origem gera dados e os entrega para o próximo filtro downstream. Esse filtro recebe passivamente os dados, processa-os e os envia mais downstream. No modelo de pull, o filtro de origem está conectado a um filtro de analisador. O filtro do analisador solicita dados do filtro de origem. O filtro de origem responde às solicitações fornecendo dados. O modelo de push usa a interface IMemInputPin e o modelo de pull usa a interface IAsyncReader .

O modelo de push é mais comum do que o modelo de pull. Portanto, os artigos a seguir pressupõem um modelo de push. O último artigo desta seção, Modelo de Pull, descreve como a interface IAsyncReader difere de IMemInputPin.

Fluxo de Dados no Grafo de Filtro