Condividi tramite


Uso dell'API Transcode

In questo argomento è stato descritto come usare l'API transcodifica per codificare un file multimediale.

Panoramica

Prima di usare l'API transcodifica, l'applicazione deve avere le informazioni seguenti:

  • Percorso o URL di un file multimediale esistente che verrà codificato di nuovo.
  • Nome del file di output.
  • Tipo di contenitore per il file di output, ad esempio MP4 o Advanced Streaming Format (ASF).
  • Formato di codifica. Queste informazioni includono i tipi di supporti che descrivono i flussi audio e video codificati.

Per usare l'API transcodifica, un'applicazione esegue la procedura seguente.

  1. Creare un'origine multimediale per leggere il file di origine.
  2. Creare un profilo di transcodifica. Aggiungere attributi che descrivono il flusso audio, il flusso video e il contenitore di file.
  3. Usare il profilo di transcodifica per creare una topologia di transcodifica. Per altre informazioni sulle topologie, vedere Informazioni sulle topologie.)
  4. Impostare la topologia nella sessione multimediale .
  5. Avvia la sessione multimediale e attendi l'evento MESessionEnded.

Nella parte restante di questo argomento vengono descritti in modo più dettagliato questi passaggi.

Creazione di un'origine multimediale

Un'origine multimediale è un oggetto che legge e analizza il file di origine. Per creare una sorgente multimediale, usare il risolutore di sorgente . È possibile trovare codice di esempio nell'argomento Uso del resolver di origine.

Creazione di un profilo di transcodifica

Un profilo transcodifica descrive il formato e le impostazioni usati per codificare il file di output. Il profilo di transcodifica contiene tre set di attributi:

  • Attributi audio: descrivere il formato audio di destinazione e le impostazioni del codificatore audio.
  • Attributi video: descrivere il formato video di destinazione e le impostazioni del codificatore video.
  • Attributi del contenitore: definire il tipo di contenitore di file, nonché alcune impostazioni di codifica globali.

Per creare un profilo transcodifica, chiamare la funzione MFCreateTranscodeProfile. Questa funzione restituisce un puntatore all'interfacciaIMFTranscodeProfile. L'oggetto profilo iniziale è vuoto; non contiene attributi. Il passaggio successivo consiste nell'aggiungere gli attributi che definiscono il profilo.

Attributi audio

Per aggiungere attributi per il flusso audio, chiamare IMFTranscodeProfile::SetAudioAttributes. Questi attributi specificano la modalità di codifica del flusso audio. Se il file di output non conterrà un flusso audio, omettere questi attributi.

Gli attributi audio rientrano in due categorie:

  • Attributi che specificano il formato del flusso codificato
  • Attributi che specificano altri parametri di codifica.

Gli attributi di formato sono semplicemente attributi di tipo multimediale, come descritto nella sezione tipi di supporti audio. Il set esatto di attributi di formato dipende dal codificatore. Vedere formati multimediali supportati in Media Foundation. Di seguito è riportato un elenco di attributi di formato audio tipici:

Formatta attributo Descrizione
MF_MT_SUBTYPE Sottotipo. Vedere GUID dei sottotipi audio.
MF_MT_AUDIO_NUM_CHANNELS Numero di canali audio.
MF_MT_AUDIO_SAMPLES_PER_SECOND Numero di campioni audio al secondo.
MF_MT_AUDIO_BLOCK_ALIGNMENT Allineamento del blocco.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND Numero medio di byte al secondo (velocità in bit codificata).

 

Sono definiti i parametri di codifica seguenti.

Parametro di codifica Descrizione
MF_TRANSCODE_DONOT_INSERT_ENCODER Impedisce all'API transcodifica di inserire un codificatore per il flusso audio.
MF_TRANSCODE_ENCODINGPROFILE Specifica il modello di conformità del dispositivo. Si applica solo ai file ASF.
MF_TRANSCODE_QUALITYVSSPEED Specifica il compromesso tra la qualità della codifica e la velocità.

 

È necessario impostare gli attributi di formato. I parametri di codifica sono facoltativi.

Un modo per trovare un formato compatibile con il codificatore consiste nel chiamare la funzione MFTranscodeGetAudioOutputAvailableTypes. Il codificatore desiderato viene specificato dal sottotipo. La funzione restituisce una raccolta di tipi di supporti per tale codificatore. È possibile selezionare un tipo dall'elenco e copiare gli attributi nel profilo. Per un esempio di codice che usa questo approccio, vedere Tutorial: Encoding a WMA File.

Attributi video

Per aggiungere attributi per il flusso video, chiamare IMFTranscodeProfile::SetVideoAttributes. Questi attributi specificano la modalità di codifica del flusso video. Se il file di output non conterrà un flusso video, omettere questi attributi.

Come per gli attributi audio, gli attributi video rientrano in due categorie:

  • Attributi che specificano il formato del flusso codificato
  • Attributi che specificano altri parametri di codifica.

Gli attributi di formato sono attributi di tipo multimediale, come descritto nella sezione Tipi di supporti video. Di seguito è riportato un elenco di attributi di formato video tipici:

Formatta attributo Descrizione
MF_MT_SUBTYPE Sottotipo. Consulta GUID dei sottotipi video.
MF_MT_FRAME_RATE Frequenza dei fotogrammi.
MF_MT_FRAME_SIZE Dimensioni del frame.
MF_MT_AVG_BITRATE Velocità media dei bit.
MF_MT_PIXEL_ASPECT_RATIO Rapporto di aspetto dei pixel.

 

Sono definiti i parametri di codifica seguenti.

Parametro di codifica Descrizione
MF_TRANSCODE_DONOT_INSERT_ENCODER Impedisce all'API transcodifica di inserire un codificatore per il flusso video.
MF_TRANSCODE_ENCODINGPROFILE Specifica il modello di conformità del dispositivo. Si applica solo ai file ASF.
MF_TRANSCODE_QUALITYVSSPEED Specifica il compromesso tra la qualità della codifica e la velocità.

 

È necessario impostare gli attributi di formato. I parametri di codifica sono facoltativi.

Attributi del contenitore

Gli attributi del contenitore definiscono le caratteristiche a livello di file del file di output. Per impostare gli attributi del contenitore, chiamare IMFTranscodeProfile::SetContainerAttributes. Vengono definiti gli attributi seguenti.

Attributo Descrizione
MF_TRANSCODE_ADJUST_PROFILE Definisce le impostazioni del flusso da usare per la topologia transcodifica. È possibile impostare i flag per usare le impostazioni dell'origine di input o usare attributi di flusso personalizzati.
MF_TRANSCODE_CONTAINERTYPE Specifica il formato di file del file di output, ad esempio MP4 o ASF. In base a questo valore, il sink multimediale appropriato viene aggiunto alla topologia.
MF_TRANSCODE_SKIP_METADATA_TRANSFER Specifica se i metadati dell'origine vengono copiati nel file di output.
MF_TRANSCODE_TOPOLOGYMODE Specifica se i codec basati su hardware possono essere usati durante la transcodifica.
MFT_FIELDOFUSE_UNLOCK_Attribute Sblocca un codec con restrizioni relative al campo di utilizzo. Per altre informazioni, vedere campo delle restrizioni di utilizzo.

 

È necessario l'attributo MF_TRANSCODE_CONTAINERTYPE. Gli altri attributi del contenitore sono facoltativi.

Creazione di una topologia transcodifica

La topologia transcodifica è una topologia parziale che contiene l'origine multimediale, i codec appropriati e il sink multimediale. Per creare la topologia transcodifica, chiamare la funzione MFCreateTranscodeTopology. Questa funzione accetta i parametri seguenti come input:

  • Puntatore all'interfaccia IMFMediaSource della sorgente multimediale.
  • Nome del file di output.
  • Puntatore all'interfaccia IMFTranscodeProfile del profilo di transcodifica.

La funzione restituisce un puntatore all'interfaccia IMFTopology.

Esecuzione della sessione di codifica

Dopo aver creato la topologia, è possibile codificare il file. A questo punto è possibile eliminare il profilo.

  1. Chiama MFCreateMediaSession per creare la sessione multimediale.
  2. Chiamare IMFMediaSession::SetTopology per impostare la topologia nella sessione multimediale.
  3. Chiamare IMFMediaSession::Start per avviare la sessione di codifica.
  4. Attendere l'evento MESessionEnded.
  5. Chiamare IMFMediaSession::Close per chiudere la sessione multimediale.
  6. Attendere l'evento MESessionClosed.
  7. Eseguire la chiamata a IMFMediaSource::Shutdown.
  8. Chiamare IMFMediaSession::Shutdown.

La maggior parte del tempo impiegato per la codifica si verifica tra i passaggi 3 e 4.

API transcodifica

Informazioni sulla sessione multimediale