API de codificador

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

La API encoder proporciona una interfaz uniforme para configurar codificadores de software y hardware. Las aplicaciones pueden usar Encoder API para configurar un codificador y almacenar las opciones de configuración. Los proveedores de codificadores pueden usar la API de codificador para exponer las funcionalidades de un codificador. Aunque la API encoder está diseñada principalmente para codificadores, es lo suficientemente general como para que los descodificadores también lo admitan.

La API del codificador se expone a las aplicaciones a través de la interfaz ICodecAPI , que expone el filtro del codificador. El filtro del codificador puede ser un filtro directShow nativo, un codificador de hardware o un objeto multimedia de DirectX (DMO).

  • Filtros de software: un codificador que se implementa como un filtro DirectShow nativo debe exponer ICodecAPI directamente.
  • Codificadores de hardware: el dispositivo de codificación se expone a través de uno o varios minidrivers AVStream, representados en modo de usuario por KSProxy. KSProxy traduce las llamadas al método ICodecAPI en conjuntos de propiedades KS. Para obtener más información, consulte la documentación de DDK.
  • DMO debe exponer la interfaz ICodecAPI . DirectShow las aplicaciones pueden consultar el filtro contenedor DMO, que expone la interfaz agregando el DMO. Las aplicaciones que no se basan en DirectShow pueden consultar directamente el DMO.

Capabilties del codificador

Un codificador puede registrar una lista de funcionalidades de alto nivel almacenándolas en el registro del sistema. Cada funcionalidad se identifica mediante un GUID. Para enumerar las funcionalidades de un codificador determinado, haga lo siguiente:

  1. Cree el moniker que representa el filtro del codificador. (Consulte Uso del enumerador de dispositivos del sistema).
  2. Consulte el moniker de filtro para la interfaz IGetCapabilitiesKey .
  3. Llame a IGetCapabilitiesKey::GetCapabilitiesKey. El método devuelve un identificador a la clave del Registro que contiene la lista de funcionalidades del filtro.
  4. Llame a la función RegEnumValue para enumerar los valores de la clave devuelta.

Si va a inclinar un codificador, cree las entradas del Registro para las funcionalidades cuando se registre el filtro. En el caso de los filtros de software, cree una clave denominada Capabilities que sea adyacente a las claves FilterData y FriendlyName . Normalmente, agregaría esta información después de llamar a AMovieDllRegisterServer2 para registrar los datos de filtro estándar. Para obtener más información, vea Cómo registrar filtros directShow. Como alternativa, puede crear una clave CapabilitiesLocation que contenga una cadena que proporciona la ubicación de la clave Capabilities en el Registro. La cadena debe comenzar con "HKLM\", "HKCR\" o "HKCU\" para indicar el subárbol del Registro. En el caso de los dispositivos Plug and Play, los archivos de instalación del controlador deben crear una clave capabilities adyacente a la clave FriendlyName del filtro, o puede usar una clave CapabilitiesLocation como se describe para los filtros de software.

Una vez creada la clave De funcionalidades, cree un valor para cada GUID de funcionalidad. El nombre del valor debe ser la forma de cadena del GUID, con el formato {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Cada tipo de valor debe ser uno de los siguientes:

  • Valor numérico único. Use un valor DWORD .
  • GUID. Use la forma de cadena del GUID.
  • Pares numéricos. Use una cadena con el formato "a,b" para representar pares de valores, como ancho y alto, o numerador y denominador para fracciones.
  • Matrices de valores. Use cadenas múltiples (REG_SZ_MULTI) para representar más de un valor.

En el ejemplo siguiente se muestra el diseño del Registro para un 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) 

Perfiles de codificador

Un perfil de codificador es una lista fija de opciones de configuración que se pueden aplicar a un codificador en tiempo de ejecución. Los perfiles son independientes del codificador; una aplicación puede seleccionar un codificador y, a continuación, seleccionar un perfil y aplicar la configuración del perfil al codificador. Los perfiles se identifican mediante GUID y se deben almacenar en la siguiente ubicación del registro:

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

where Profile GUID

es la forma de cadena del GUID que identifica el perfil. Cree valores para cada configuración. Cree también un valor de cadena denominado "FriendlyName" cuyos datos identifican el perfil (como "LowBandwidthVideo").

Desarrollo de codificador y descodificador