Partilhar via


Usando a API transcode

Este tópico descreveu como usar a API de transcodificação para codificar um arquivo de mídia.

Visão geral

Antes de usar a API de transcodificação, o aplicativo deve ter as seguintes informações:

  • O caminho ou a URL para um arquivo de mídia existente que será recodificado.
  • O nome do arquivo de saída.
  • O tipo de contêiner para o arquivo de saída, como MP4 ou ASF (Formato Avançado de Streaming).
  • O formato de codificação. Essas informações incluem os tipos de mídia que descrevem os fluxos de áudio e vídeo codificados.

Para usar a API de transcodificação, um aplicativo executa as etapas a seguir.

  1. Crie uma fonte de mídia para ler o arquivo de origem.
  2. Crie um perfil de transcodificação. Adicione atributos que descrevem o fluxo de áudio, o fluxo de vídeo e o contêiner de arquivos.
  3. Use o perfil de transcodificação para criar uma topologia de codificação. (Para obter mais informações sobre topologias, consulte Sobre topologias.)
  4. Defina a topologia na Sessão de Mídia.
  5. Inicie a Sessão de Mídia e aguarde o evento MESessionEnded .

O restante deste tópico descreve essas etapas com mais detalhes.

Criando uma fonte de mídia

Uma fonte de mídia é um objeto que lê e analisa o arquivo de origem. Para criar uma fonte de mídia, use o Resolvedor de Origem. Você pode encontrar o código de exemplo no tópico Usando o Resolvedor de Origem.

Criando um perfil de transcódigo

Um perfil de transcodificação descreve o formato e as configurações usadas para codificar o arquivo de saída. O perfil de transcodificação contém três conjuntos de atributos:

  • Atributos de áudio: descreva as configurações de formato de áudio de destino e codificador de áudio.
  • Atributos de vídeo: descreva as configurações de formato de vídeo de destino e codificador de vídeo.
  • Atributos de contêiner: defina o tipo de contêiner de arquivo, bem como algumas configurações de codificação global.

Para criar um perfil de transcodificação, chame a função MFCreateTranscodeProfile . Essa função retorna um ponteiro para a interface IMFTranscodeProfile . O objeto de perfil inicial está vazio; ele não contém atributos. A próxima etapa é adicionar os atributos que definem o perfil.

Atributos de áudio

Para adicionar atributos para o fluxo de áudio, chame IMFTranscodeProfile::SetAudioAttributes. Esses atributos especificam como o fluxo de áudio é codificado. Se o arquivo de saída não contiver um fluxo de áudio, omita esses atributos.

Os atributos de áudio se enquadram em duas categorias:

  • Atributos que especificam o formato do fluxo codificado
  • Atributos que especificam outros parâmetros de codificação.

Os atributos de formato são simplesmente atributos de tipo de mídia, conforme descrito na seção Tipos de Mídia de Áudio. O conjunto exato de atributos de formato depende do codificador. (Consulte Formatos de mídia com suporte no Media Foundation.) Aqui está uma lista de atributos típicos de formato de áudio:

Atributo Format Descrição
MF_MT_SUBTYPE O subtipo. Consulte GUIDs de subtipo de áudio.
MF_MT_AUDIO_NUM_CHANNELS O número de canais de áudio.
MF_MT_AUDIO_SAMPLES_PER_SECOND O número de amostras de áudio por segundo.
MF_MT_AUDIO_BLOCK_ALIGNMENT O alinhamento do bloco.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND O número médio de bytes por segundo (a taxa de bits codificada).

 

Os parâmetros de codificação a seguir são definidos.

Parâmetro de codificação Descrição
MF_TRANSCODE_DONOT_INSERT_ENCODER Impede que a API de transcodificação insira um codificador para o fluxo de áudio.
MF_TRANSCODE_ENCODINGPROFILE Especifica o modelo de conformidade do dispositivo. (Aplica-se somente a arquivos ASF.)
MF_TRANSCODE_QUALITYVSSPEED Especifica a compensação entre a qualidade e a velocidade da codificação.

 

Você deve definir os atributos de formato. Os parâmetros de codificação são opcionais.

Uma maneira de encontrar um formato compatível com o codificador é chamar a função MFTranscodeGetAudioOutputAvailableTypes . O codificador desejado é especificado por subtipo. A função retorna uma coleção de tipos de mídia para esse codificador. Você pode selecionar um tipo na lista e copiar os atributos para o perfil. Por exemplo, código que usa essa abordagem, consulte Tutorial: Codificando um arquivo WMA.

Atributos de vídeo

Para adicionar atributos para o fluxo de vídeo, chame IMFTranscodeProfile::SetVideoAttributes. Esses atributos especificam como o fluxo de vídeo é codificado. Se o arquivo de saída não contiver um fluxo de vídeo, omita esses atributos.

Assim como acontece com os atributos de áudio, os atributos de vídeo se enquadram em duas categorias:

  • Atributos que especificam o formato do fluxo codificado
  • Atributos que especificam outros parâmetros de codificação.

Atributos de formato são atributos de tipo de mídia, conforme descrito na seção Tipos de Mídia de Vídeo. Aqui está uma lista de atributos típicos de formato de vídeo:

Atributo Format Descrição
MF_MT_SUBTYPE O subtipo. Consulte GUIDs de subtipo de vídeo.
MF_MT_FRAME_RATE A taxa de quadros.
MF_MT_FRAME_SIZE O tamanho do quadro.
MF_MT_AVG_BITRATE A taxa média de bits.
MF_MT_PIXEL_ASPECT_RATIO A taxa de proporção de pixel.

 

Os parâmetros de codificação a seguir são definidos.

Parâmetro de codificação Descrição
MF_TRANSCODE_DONOT_INSERT_ENCODER Impede que a API de transcodificação insira um codificador para o fluxo de vídeo.
MF_TRANSCODE_ENCODINGPROFILE Especifica o modelo de conformidade do dispositivo. (Aplica-se somente a arquivos ASF.)
MF_TRANSCODE_QUALITYVSSPEED Especifica a compensação entre a qualidade e a velocidade da codificação.

 

Você deve definir os atributos de formato. Os parâmetros de codificação são opcionais.

Atributos de contêiner

Os atributos de contêiner definem características de nível de arquivo do arquivo de saída. Para definir atributos de contêiner, chame IMFTranscodeProfile::SetContainerAttributes. Os atributos a seguir são definidos.

Atributo Descrição
MF_TRANSCODE_ADJUST_PROFILE Define as configurações de fluxo a serem usadas para a topologia transcode. Você pode definir os sinalizadores para usar as configurações de origem de entrada ou usar atributos de fluxo personalizados.
MF_TRANSCODE_CONTAINERTYPE Especifica o formato de arquivo do arquivo de saída, como MP4 ou ASF. Com base nesse valor, o coletor de mídia apropriado é adicionado à topologia.
MF_TRANSCODE_SKIP_METADATA_TRANSFER Especifica se os metadados da origem são copiados para o arquivo de saída.
MF_TRANSCODE_TOPOLOGYMODE Especifica se codecs baseados em hardware podem ser usados durante a transcodificação.
MFT_FIELDOFUSE_UNLOCK_Attribute Desbloqueia um codec que tem restrições de campo de uso. Para obter mais informações, consulte Restrições de campo de uso.

 

O atributo MF_TRANSCODE_CONTAINERTYPE é necessário. Os outros atributos de contêiner são opcionais.

Criando uma topologia do Transcode

A topologia de transcódigo é uma topologia parcial que contém a fonte de mídia, os codecs apropriados e o coletor de mídia. Para criar a topologia transcode, chame para a função MFCreateTranscodeTopology . Essa função usa os seguintes parâmetros como entrada:

A função retorna um ponteiro para a interface IMFTopology .

Executando a sessão de codificação

Depois de criar a topologia, você estará pronto para codificar o arquivo. Você pode descartar o perfil neste ponto.

  1. Chame MFCreateMediaSession para criar a Sessão de Mídia.
  2. Chame IMFMediaSession::SetTopology para definir a topologia na Sessão de Mídia.
  3. Chame IMFMediaSession::Start para iniciar a sessão de codificação.
  4. Aguarde o evento MESessionEnded .
  5. Chame IMFMediaSession::Close para fechar a Sessão de Mídia.
  6. Aguarde o evento MESessionClosed .
  7. Chame IMFMediaSource::Shutdown.
  8. Chame IMFMediaSession::Shutdown.

A maior parte do tempo gasto na codificação ocorre entre as etapas 3 e 4.

Transcode API

Sobre a sessão de mídia