Uso dell'API Transcode
In questo argomento è stato descritto come usare l'API transcodifica per codificare un file multimediale.
- Overview
- Creazione di un'origine multimediale
- Creazione di un profilo transcodifica
- Creazione di una topologia transcodifica
- Esecuzione della sessione di codifica
- Argomenti correlati
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.
- Creare un'origine multimediale per leggere il file di origine.
- Creare un profilo transcodifica. Aggiungere attributi che descrivono il flusso audio, il flusso video e il contenitore di file.
- Usare il profilo transcodifica per creare una topologia di codifica. Per altre informazioni sulle topologie, vedere Informazioni sulle topologie.
- Impostare la topologia nella sessione multimediale.
- 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.
- Chiama MFCreateMediaSession per creare la sessione multimediale.
- Chiamare IMFMediaSession::SetTopology per impostare la topologia nella sessione multimediale.
- Chiama IMFMediaSession::Start per avviare la sessione di codifica.
- Attendere l'evento MESessionEnded .
- Chiama IMFMediaSession::Close per chiudere la sessione multimediale.
- Attendere l'evento MESessionClosed .
- Chiamare IMFMediaSource::Shutdown.
- Chiamare IMFMediaSession::Shutdown.
La maggior parte del tempo impiegato per la codifica avviene tra i passaggi 3 e 4.
Argomenti correlati