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 nuovamente.
  • 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 transcodifica. Aggiungere attributi che descrivono il flusso audio, il flusso video e il contenitore di file.
  3. Usare il profilo transcodifica per creare una topologia di codifica. Per altre informazioni sulle topologie, vedere Informazioni sulle topologie.
  4. Impostare la topologia nella sessione multimediale.
  5. Avviare la sessione multimediale e attendere 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 un'origine multimediale, usare il resolver di origine. È possibile trovare codice di esempio nell'argomento Uso del sistema di risoluzione di origine.

Creazione di un profilo transcodifica

Un profilo transcodifica descrive il formato e le impostazioni utilizzati per codificare il file di output. Il profilo 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'interfaccia IMFTranscodeProfile . 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. Vedi GUID sottotipo 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).

 

Vengono 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 qualità e velocità di codifica.

 

È 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 Esercitazione: Codifica di un file WMA.

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 tipici del formato video:

Formatta attributo Descrizione
MF_MT_SUBTYPE Sottotipo. Vedere GUID sottotipo 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 Proporzioni pixel.

 

Vengono 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 qualità e velocità di codifica.

 

È 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 sul campo d'uso. Per altre informazioni, vedere Campo delle restrizioni per l'uso.

 

L'attributo MF_TRANSCODE_CONTAINERTYPE è obbligatorio. 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 dell'origine multimediale.
  • Nome del file di output.
  • Puntatore all'interfaccia IMFTranscodeProfile del profilo 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. Chiama IMFMediaSession::Start per avviare la sessione di codifica.
  4. Attendere l'evento MESessionEnded .
  5. Chiama IMFMediaSession::Close per chiudere la sessione multimediale.
  6. Attendere l'evento MESessionClosed .
  7. Chiamare IMFMediaSource::Shutdown.
  8. Chiamare IMFMediaSession::Shutdown.

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

API transcodifica

Informazioni sulla sessione multimediale