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