Compartilhar via


Criando grafos de filtro para gravar arquivos ASF

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na 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 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 em Windows Media, os aplicativos normalmente usam um dos seguintes cenários:

  • Convertendo ou transcodificação de conteúdo de algum outro formato em Formato de Mídia do Windows.
  • Inserindo conteúdo que não seja baseado em Mídia do Windows (formatos de fluxo nativo) em arquivos ASF.
  • Capturando dados dinâmicos e codificando-os imediatamente no Formato de Mídia do Windows.

Transcodificação de arquivos ASF

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

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

A ilustração a seguir mostra as configurações típicas de grafo de filtro de transcodificação do Gravador asF do WM.

grafo de filtro de transcodificação

Inserindo formatos de fluxo nativo em arquivos ASF

Por padrão, o filtro Gravador do ASF do WM espera fluxos de áudio e vídeo não compactados em seus pinos de entrada e usa os codecs de Áudio do Windows Media e Vídeo do Windows Media 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 arquivos ASF, você pode adicionar recursos fornecidos pelo ASF, como metadados e DRM (gerenciamento de direitos digitais), sem precisar 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 grafo de filtro upstream do Gravador do ASF WM e ignorar o mecanismo de compactação do gravador do 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 corresponder a ele.

Ao conectar o Gravador ASF do WM 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 desabilitará o modo de "compactação de bypass" do filtro.

Capturando diretamente de um dispositivo para um arquivo ASF

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

grafo de captura de vídeo do Windows Media

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

O Gravador ASF do WM não será executado a menos que todos os seus pinos estejam conectados. Se você configurar o Gravador ASF do WM com o perfil do sistema padrão (não recomendado) ou qualquer perfil com fluxos de áudio e vídeo, ele criará um pin de entrada para cada fluxo e cada um desses pinos deverá estar 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