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 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 Advanced Streaming Format (ASF).
  • 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 descrevam 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. Configure 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 Source Resolver. Você pode encontrar código de exemplo no tópico Usando o resolvedor de código-fonte.

Criação de um Perfil de Transcodificação

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

  • Atributos de áudio: Descreva o formato de áudio de destino e as configurações do codificador de áudio.
  • Atributos de vídeo: descreva o formato de vídeo de destino e as configurações do 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. Esta função devolve um ponteiro para a IMFTranscodeProfile interface. O objeto de perfil inicial está vazio; ele não contém atributos. O próximo passo é 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 dividem-se 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 suportados no Media Foundation.) Aqui está uma lista de atributos típicos de formato de áudio:

Atributo de Formato 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 seguintes parâmetros de codificação 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 apenas a ficheiros 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. Para obter um exemplo de código que usa essa abordagem, consulte Tutorial: Codificando um arquivo WMA.

Atributos do 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.

Tal 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.

Os 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 de Formato Descrição
MF_MT_SUBTYPE O subtipo. Consulte os 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 de bits média.
MF_MT_PIXEL_ASPECT_RATIO A proporção do pixel.

 

Os seguintes parâmetros de codificação 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 apenas a ficheiros ASF.)
MF_TRANSCODE_QUALIDADEVSVELICIDADE 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 do contêiner

Os atributos de contêiner definem as 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 de transcodificação. 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 com restrições de campo de uso. Para obter mais informações, consulte Restrições de campo de uso.

 

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

Criando uma topologia de transcodificação

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

  • Um ponteiro para o IMFMediaSource interface da fonte de mídia.
  • O nome do arquivo de saída.
  • Um ponteiro para a interface IMFTranscodeProfile do perfil de transcodificação.

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

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 momento.

  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. Ligue IMFMediaSession::Feche para fechar a Sessão de Mídia.
  6. Aguarde pelo evento MESessionClosed.
  7. Chamada IMFMediaSource::Shutdown.
  8. Chamada IMFMediaSession::Shutdown.

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

API de Transcodificação

Sobre a sessão de mídia