Partilhar via


API do codificador

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

A API do codificador fornece uma interface uniforme para configurar codificadores de software e hardware. Os aplicativos podem usar a API do codificador para configurar um codificador e armazenar as definições de configuração. Os fornecedores de codificadores podem usar a API do codificador para expor os recursos de um codificador. Embora a API do codificador seja projetada principalmente para codificadores, ela é geral o suficiente para que os decodificadores também possam suportá-la.

A API do codificador é exposta aos aplicativos por meio da interfaceICodecAPI, que é exposta pelo filtro do codificador. O filtro do codificador pode ser um filtro DirectShow nativo, um codificador de hardware ou um DirectX Media Object (DMO).

  • Filtros de software: um codificador que é implementado como um filtro DirectShow nativo deve expor o ICodecAPI diretamente.
  • Codificadores de hardware: O dispositivo de codificação é exposto através de um ou mais minidrivers AVStream, que são representados no modo de usuário pelo KSProxy. KSProxy traduz chamadas do método ICodecAPI em conjuntos de propriedades KS. Para obter mais informações, consulte a documentação do DDK.
  • DMOs: O DMO deve expor o ICodecAPI interface. Os aplicativos DirectShow podem consultar o filtro DMO Wrapper, que expõe a interface agregando o DMO. Aplicativos não baseados no DirectShow podem consultar o DMO diretamente.

Capacidades do codificador

Um codificador pode registrar uma lista de recursos de alto nível armazenando-os no registro do sistema. Cada recurso é identificado por um GUID. Para enumerar os recursos de um codificador específico, faça o seguinte:

  1. Crie o moniker que representa o filtro do codificador. (Consulte Usando o System Device Enumerator.)
  2. Consulte o moniker de filtro para a interfaceIGetCapabilitiesKey.
  3. Ligue IGetCapabilitiesKey::GetCapabilitiesKey. O método retorna um identificador para a chave do Registro que contém a lista de recursos do filtro.
  4. Chame a função RegEnumValue para enumerar os valores da chave retornada.

Se você estiver desenvolvendo um codificador, crie as entradas do Registro para os recursos quando o filtro for registrado. Para filtros de software, crie uma chave chamada Capabilities adjacente ao FilterData e chaves FriendlyName. Normalmente, você adicionaria essas informações depois de chamar AMovieDllRegisterServer2 para registrar os dados de filtro padrão. Para obter mais informações, consulte Como registrar filtros DirectShow. Como alternativa, você pode criar uma chave de CapabilitiesLocation que contém uma cadeia de caracteres que fornece o local da chave Capabilities no Registro. A cadeia de caracteres deve começar com "HKLM\", "HKCR\" ou "HKCU\" para indicar a subárvore do registro. Para dispositivos Plug and Play, os arquivos de configuração do driver devem criar uma chave Capabilities adjacente à chave FriendlyName do filtro ou podem usar uma chave CapabilitiesLocation conforme descrito para filtros de software.

Depois de criar a chave Capacidades, crie um valor para cada GUID de capacidade. O nome do valor deve ser a forma de cadeia de caracteres do GUID, no formato {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Cada tipo de valor deve ser um dos seguintes:

  • Valor numérico único. Use um valor de DWORD.
  • GUID. Use a forma de cadeia de caracteres do GUID.
  • Pares numéricos. Use uma cadeia de caracteres com a forma "a,b" para representar pares de valores, como largura e altura, ou numerador e denominador para frações.
  • Matrizes de valores. Use várias cadeias de caracteres (REG_SZ_MULTI) para representar mais de um valor.

O exemplo a seguir mostra o layout do Registro para um filtro de software:

\HKCR\CLSID\Filter Category\Instance\Filter CLSID\Capabilities\
    
Values: 
    
    guid1: 1234 (REG_DWORD)   
    
    guid2: "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" (REG_SZ)
    
    guid3: "2","4","6" (REG_SZ_MULTI)
    
    guid4: "720,480" (REG_SZ) 

Perfis do codificador

Um de perfil de codificador é uma lista fixa de definições de configuração que podem ser aplicadas a um codificador em tempo de execução. Os perfis são independentes do codificador; Um aplicativo pode selecionar um codificador e, em seguida, selecionar um perfil e aplicar as configurações de perfil ao codificador. Os perfis são identificados pelo GUID e devem ser armazenados no seguinte local no registro:

\HKLM\Software\Microsoft\EncoderProfiles\Profile GUID\

onde GUID de perfil

é a forma de cadeia de caracteres do GUID que identifica o perfil. Crie valores para cada configuração. Crie também um valor de cadeia de caracteres chamado "FriendlyName" cujos dados identificam o perfil (como "LowBandwidthVideo").

de Desenvolvimento de Codificadores e Descodificadores