Partilhar via


Construindo gráficos de filtro para gravar arquivos ASF

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

Ao criar conteúdo baseado no Windows Media, os aplicativos geralmente usam um dos seguintes cenários:

  • Converter ou transcodificar conteúdo de algum outro formato para o Windows Media Format.
  • Inserção de conteúdo que não seja baseado no Windows Media (formatos de fluxo nativos) em arquivos ASF.
  • Capturar dados ao vivo e codificá-los imediatamente no Windows Media Format.

Transcodificação de arquivos ASF

Você pode criar um gráfico de filtro de transcodificação de arquivos usando o WM ASF Writer de várias maneiras. A maneira mais fácil é adicionar o WM ASF Writer ao gráfico de filtro e, em seguida, usar o método IGraphBuilder::RenderFile para construir o gráfico automaticamente.

Uma maneira alternativa é adicionar cada filtro manualmente ao gráfico e conectar os pinos. Depois de adicionar o WM ASF Writer, configure-o usando os métodos IConfigAsfWriter se o perfil padrão não for adequado e conecte os pinos de entrada do WM ASF Writer aos pinos de saída correspondentes nos filtros upstream.

A ilustração a seguir mostra as configurações típicas do gráfico de filtro de transcodificação do WM ASF Writer.

gráfico de filtro de transcodificação

Inserindo formatos de fluxo nativos em arquivos ASF

Por padrão, o filtro WM ASF Writer espera fluxos de áudio e vídeo não compactados em seus pinos de entrada e usa os codecs Windows Media Audio e Windows Media Video para compactar os fluxos. No entanto, o contêiner de arquivo ASF pode ser usado para qualquer tipo de dados. Ao colocar dados de mídia digital em um contêiner de arquivo ASF, você pode adicionar recursos fornecidos pela ASF, como metadados e gerenciamento de direitos digitais (DRM), sem ter que transcodificar seu conteúdo.

Para criar um arquivo ASF que contenha conteúdo que não seja baseado no Windows Media, o aplicativo deve compactar o fluxo no gráfico de filtro a montante do gravador WM ASF e ignorar o mecanismo de compactação do gravador WM ASF chamando IConfigAsfWriter2::SetParam da seguinte maneira:

pConfigAsfWriter2->SetParam(AM_CONFIGASFWRITER_PARAM_DONTCOMPRESS,TRUE,0)

Em seguida, configure o filtro com o perfil desejado. É essencial que o tipo de mídia do fluxo de entrada corresponda exatamente ao formato no perfil. Em alguns casos, pode ser necessário examinar o formato do fluxo de entrada e criar um perfil personalizado para correspondê-lo.

Quando você conecta o WM ASF Writer ao filtro upstream, use o método IGraphBuilder::ConnectDirect. Não use nenhum método de "conexão inteligente", como IGraphBuilder::Connect ou IGraphBuilder::RenderFile para conectar o filtro, pois isso desativará o modo de "compressão de bypass" do filtro.

Capturando diretamente de um dispositivo para um arquivo ASF

Ao capturar áudio ou vídeo diretamente para um arquivo ASF, o gráfico de filtro será semelhante ao seguinte, dependendo do tipo de dispositivo de captura que está sendo usado.

gráfico de captura de vídeo do Windows Media

Para obter mais informações sobre como criar gráficos de captura de vídeo e áudio, consulte os seguintes tópicos:

O WM ASF Writer não será executado a menos que todos os seus pinos estejam conectados. Se você configurar o WM ASF Writer com o perfil de sistema padrão (não recomendado), ou qualquer perfil com fluxos de áudio e vídeo, ele criará um pino de entrada para cada fluxo e cada um desses pinos deverá ser conectado. Se você não pretende capturar áudio, por exemplo, certifique-se de configurar o filtro com um perfil somente de vídeo para que nenhum pino de áudio seja criado.

Criando arquivos ASF no DirectShow