Compartir a través de


Uso de la API de transcodificación

En este tema se describe cómo usar la API de transcodificación para codificar un archivo multimedia.

Información general

Antes de usar la API de transcodificación, la aplicación debe tener los siguientes fragmentos de información:

  • Ruta de acceso o dirección URL a un archivo multimedia existente que se volverá a codificar.
  • Nombre del archivo de salida.
  • Tipo de contenedor para el archivo de salida, como MP4 o Formato de streaming avanzado (ASF).
  • Formato de codificación. Esta información incluye los tipos multimedia que describen las secuencias de audio y vídeo codificadas.

Para usar la API de transcodificación, una aplicación realiza los pasos siguientes.

  1. Cree un origen multimedia para leer el archivo de origen.
  2. Cree un perfil de transcodificación. Agregue atributos que describen la secuencia de audio, la secuencia de vídeo y el contenedor de archivos.
  3. Use el perfil de transcodificación para crear una topología de codificación. (Para obtener más información sobre las topologías, vea Acerca de las topologías).
  4. Establezca la topología en la sesión multimedia.
  5. Inicie la sesión multimedia y espere al evento MESessionEnded .

En el resto de este tema se describen estos pasos con más detalle.

Creación de un origen multimedia

Un origen multimedia es un objeto que lee y analiza el archivo de origen. Para crear un origen multimedia, use el Solucionador de origen. Puede encontrar código de ejemplo en el tema Uso de la resolución de origen.

Creación de un perfil de transcodificación

Un perfil de transcodificación describe el formato y la configuración que se usan para codificar el archivo de salida. El perfil de transcodificación contiene tres conjuntos de atributos:

  • Atributos de audio: describa el formato de audio de destino y la configuración del codificador de audio.
  • Atributos de vídeo: describa el formato de vídeo de destino y la configuración del codificador de vídeo.
  • Atributos de contenedor: defina el tipo de contenedor de archivos, así como algunos valores de codificación globales.

Para crear un perfil de transcodificación, llame a la función MFCreateTranscodeProfile . Esta función devuelve un puntero a la interfaz IMFTranscodeProfile . El objeto de perfil inicial está vacío; no contiene atributos. El siguiente paso consiste en agregar los atributos que definen el perfil.

Atributos de audio

Para agregar atributos para la secuencia de audio, llame a IMFTranscodeProfile::SetAudioAttributes. Estos atributos especifican cómo se codifica la secuencia de audio. Si el archivo de salida no contendrá una secuencia de audio, omita estos atributos.

Los atributos de audio se dividen en dos categorías:

  • Atributos que especifican el formato de la secuencia codificada
  • Atributos que especifican otros parámetros de codificación.

Los atributos de formato son simplemente atributos de tipo multimedia, como se describe en la sección Tipos de medios de audio. El conjunto exacto de atributos de formato depende del codificador. (Consulte Formatos de medios admitidos en Media Foundation). Esta es una lista de atributos típicos de formato de audio:

Atributo Format Descripción
MF_MT_SUBTYPE Subtipo. Consulte GUID de subtipo de audio.
MF_MT_AUDIO_NUM_CHANNELS Número de canales de audio.
MF_MT_AUDIO_SAMPLES_PER_SECOND Número de muestras de audio por segundo.
MF_MT_AUDIO_BLOCK_ALIGNMENT Alineación del bloque.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND Número medio de bytes por segundo (velocidad de bits codificada).

 

Se definen los siguientes parámetros de codificación.

Parámetro de codificación Descripción
MF_TRANSCODE_DONOT_INSERT_ENCODER Impide que la API de transcodificación inserte un codificador para la secuencia de audio.
MF_TRANSCODE_ENCODINGPROFILE Especifica la plantilla de conformidad del dispositivo. (Solo se aplica a los archivos ASF).
MF_TRANSCODE_QUALITYVSSPEED Especifica el equilibrio entre la calidad de codificación y la velocidad.

 

Debe establecer los atributos de formato. Los parámetros de codificación son opcionales.

Una manera de encontrar un formato compatible con el codificador es llamar a la función MFTranscodeGetAudioOutputAvailableTypes . El codificador deseado se especifica por subtipo. La función devuelve una colección de tipos de medios para ese codificador. Puede seleccionar un tipo de la lista y copiar los atributos en el perfil. Para obtener código de ejemplo que usa este enfoque, consulte Tutorial: Codificación de un archivo WMA.

Atributos de vídeo

Para agregar atributos para la secuencia de vídeo, llame a IMFTranscodeProfile::SetVideoAttributes. Estos atributos especifican cómo se codifica la secuencia de vídeo. Si el archivo de salida no contendrá una secuencia de vídeo, omita estos atributos.

Al igual que con los atributos de audio, los atributos de vídeo se dividen en dos categorías:

  • Atributos que especifican el formato de la secuencia codificada
  • Atributos que especifican otros parámetros de codificación.

Los atributos de formato son atributos de tipo multimedia, como se describe en la sección Tipos de medios de vídeo. Esta es una lista de atributos típicos de formato de vídeo:

Atributo Format Descripción
MF_MT_SUBTYPE Subtipo. Consulte Guid de subtipo de vídeo.
MF_MT_FRAME_RATE Velocidad de fotogramas.
MF_MT_FRAME_SIZE Tamaño del marco.
MF_MT_AVG_BITRATE Velocidad media de bits.
MF_MT_PIXEL_ASPECT_RATIO Relación de aspecto de píxeles.

 

Se definen los siguientes parámetros de codificación.

Parámetro de codificación Descripción
MF_TRANSCODE_DONOT_INSERT_ENCODER Impide que la API de transcodificación inserte un codificador para la secuencia de vídeo.
MF_TRANSCODE_ENCODINGPROFILE Especifica la plantilla de conformidad del dispositivo. (Solo se aplica a los archivos ASF).
MF_TRANSCODE_QUALITYVSSPEED Especifica el equilibrio entre la calidad de codificación y la velocidad.

 

Debe establecer los atributos de formato. Los parámetros de codificación son opcionales.

Atributos de contenedor

Los atributos de contenedor definen las características de nivel de archivo del archivo de salida. Para establecer atributos de contenedor, llame a IMFTranscodeProfile::SetContainerAttributes. Se definen los siguientes atributos.

Atributo Descripción
MF_TRANSCODE_ADJUST_PROFILE Define la configuración de secuencia que se va a usar para la topología transcodificar. Puede establecer las marcas para usar la configuración de origen de entrada o usar atributos de secuencia personalizados.
MF_TRANSCODE_CONTAINERTYPE Especifica el formato de archivo del archivo de salida, como MP4 o ASF. En función de este valor, el receptor de medios adecuado se agrega a la topología.
MF_TRANSCODE_SKIP_METADATA_TRANSFER Especifica si los metadatos del origen se copian en el archivo de salida.
MF_TRANSCODE_TOPOLOGYMODE Especifica si se pueden usar códecs basados en hardware durante la transcodificación.
MFT_FIELDOFUSE_UNLOCK_Attribute Desbloquea un códec que tiene restricciones de campo de uso. Para obtener más información, vea Campo de restricciones de uso.

 

Se requiere el atributo MF_TRANSCODE_CONTAINERTYPE . Los demás atributos de contenedor son opcionales.

Creación de una topología de transcodificación

La topología transcodificar es una topología parcial que contiene el origen multimedia, los códecs adecuados y el receptor de medios. Para crear la topología transcodificar, llame a la función MFCreateTranscodeTopology . Esta función toma los parámetros siguientes como entrada:

  • Puntero a la interfaz IMFMediaSource de la fuente de medios.
  • Nombre del archivo de salida.
  • Puntero a la interfaz IMFTranscodeProfile del perfil de transcodificación.

La función devuelve un puntero a la interfaz IMFTopology .

Ejecución de la sesión de codificación

Después de crear la topología, está listo para codificar el archivo. Puede descartar el perfil en este momento.

  1. Llame a MFCreateMediaSession para crear la sesión multimedia.
  2. Llame a IMFMediaSession::SetTopology para establecer la topología en la sesión multimedia.
  3. Llame a IMFMediaSession::Start para iniciar la sesión de codificación.
  4. Espere al evento MESessionEnded .
  5. Llame a IMFMediaSession::Close para cerrar la sesión multimedia.
  6. Espere al evento MESessionClosed .
  7. Llame a IMFMediaSource::Shutdown.
  8. Llame a IMFMediaSession::Shutdown.

La mayor parte del tiempo dedicado a la codificación se produce entre los pasos 3 y 4.

API de transcodificación

Acerca de la sesión multimedia