Condividi tramite


Creazione e configurazione di asf Flussi

Ogni file ASF contiene uno o più flussi. L'oggetto Profilo ASF rappresenta una raccolta di flussi ASF. Per la codifica ASF, è necessario creare e configurare i flussi da codificare.

Un'applicazione può eseguire le attività seguenti con l'oggetto profilo ASF:

  • Aggiungere o rimuovere un flusso.
  • Ottenere le impostazioni di configurazione di un flusso.
  • Configurare le estensioni del payload.
  • Aggiungere, rimuovere o modificare un oggetto di esclusione reciproca ASF.

Questo argomento include le sezioni seguenti.

Creazione di un nuovo flusso

Un oggetto profilo ASF deve contenere impostazioni di configurazione per almeno un flusso ASF. Ogni flusso è rappresentato da un oggetto di configurazione del flusso, che espone l'interfaccia IMFASFStreamConfig . Le informazioni nell'oggetto di configurazione del flusso corrispondono all'oggetto Proprietà flusso e agli oggetti Proprietà flusso esteso nell'intestazione del file ASF. (Vedere Struttura del file ASF.

Per aggiungere un flusso a un profilo ASF, seguire questa procedura:

  1. Creare un oggetto di configurazione del flusso vuoto.
  2. Configurare il flusso in base ai requisiti dell'applicazione.
  3. Aggiungere il flusso al profilo.

Per creare un flusso per il profilo, chiamare IMFASFProfile::CreateStream per creare un oggetto di configurazione del flusso vuoto e ricevere il puntatore nel parametro ppIStream . CreateStream deve conoscere il tipo del flusso da creare. I tipi più comuni di flussi usati nei file ASF sono flussi audio e video. In Media Foundation i tipi di flusso sono indicati dall'oggetto tipo di supporto che espone l'interfaccia IMFMediaType . Il tipo principale del tipo di supporto definisce la categoria del flusso multimediale digitale, ad esempio audio o video. Il sottotipo definisce il formato del tipo principale. Il tipo di supporto iniziale impostato da CreateStream può essere modificato usando l'oggetto di configurazione steam. Per recuperare il tipo di supporto per il flusso, chiamare IMFASFStreamConfig::GetMediaType o recuperare la chiamata di tipo principale IMFASFStreamConfig::GetStreamType. Il tipo di supporto iniziale per un flusso può essere sostituito con un nuovo tipo di supporto configurato chiamando IMFASFStreamConfig::SetMediaType.

Se un'applicazione crea un profilo da un descrittore di presentazione valido chiamando MFCreateASFProfileFromPresentationDescriptor. La funzione imposta automaticamente gli oggetti di configurazione del flusso per ognuno dei flussi e li imposta nel profilo. I tipi di supporti di flusso vengono impostati in base ai descrittori di flusso associati al descrittore di presentazione.

Assegnazione di numeri di flusso

Flussi di tutti i tipi deve essere assegnato un numero di flusso. I numeri di flusso non devono essere sequenziali, ma devono essere compresi nell'intervallo compreso tra 1 e 127. Per assegnare numeri di flusso, chiamare IMFASFStreamConfig::SetStreamNumber. Per ottenere la chiamata al numero di flusso, IMFASFStreamConfig::GetStreamNumber.

Nota

Un numero di flusso è diverso da un indice di flusso, che viene usato per il recupero di flussi in un profilo tramite IMFASFProfile::GetStream. L'indice del flusso è un numero assegnato al flusso dall'oggetto profilo. Gli indici di flusso sono compresi tra 0 e uno minore del numero di flussi recuperati da IMFASFProfile::GetStreamCount. È anche possibile ottenere un flusso dal profilo in base al numero di flusso chiamando IMFASFProfile::GetStreamByNumber.

 

Impostazione dei valori bucket persi

Ogni oggetto di configurazione del flusso che rappresenta un flusso deve avere parametri bucket persi associati, velocità di bit e valori della finestra del buffer.

Questi valori sono disponibili per l'applicazione tramite l'attributo MF_ASFSTREAMCONFIG_LEAKYBUCKET1 e l'attributo MF_ASFSTREAMCONFIG_LEAKYBUCKET2. Per la codifica dei file, i valori effettivi dipendono dal tipo di codifica e vengono decisi dal codificatore. Se è già stato configurato un codificatore e il tipo di output è impostato nel codificatore, l'applicazione deve eseguire una query sul codificatore per individuare i parametri bucket persi e impostare i valori in questi attributi.

Se si usano i componenti del livello pipeline e si configurano i flussi per il sink multimediale ASF, molto probabilmente non si dispone di un codificatore configurato. In questo caso, è necessario eseguire una query sui negoziati del tipo di post-supporto del codificatore e impostare il valore aggiornato nella proprietà MFPKEY_ASFSTREAMSINK_CORRECTED_LEAKYBUCKET dell'archivio delle proprietà del sink multimediale ASF. L'archivio delle proprietà di codifica viene recuperato tramite l'oggetto ContentInfo associato al profilo. I valori aggiornati si riflettono automaticamente nei valori degli attributi bucket persi del flusso. Per informazioni generali sui bucket persi e su come ottenere il valore del bucket persa dal codificatore, vedere Il modello di buffer bucket trapelato.

Estensioni del payload

I dati multimediali per i flussi vengono aggiunti all'oggetto dati ASF come esempi multimediali da ASF Multiplexer. Questi esempi multimediali possono contenere dati di estensione del payload: dati del codice ora SMPTE, proporzioni di pixel non quadrati, durata del campione e se l'esempio lo contiene, un fotogramma chiave video. Per un elenco dei tipi di estensione del payload supportati, vedere GUID dell'estensione del payload ASF.

Un flusso deve essere configurato per accettare l'estensione del payload in modo che durante la generazione di esempio il multiplexer possa aggiungere i dati supplementari a ogni esempio per tale flusso.

Per ottenere il numero totale di estensioni del payload impostate nel flusso, chiamare IMFASFStreamConfig::GetPayloadExtensionCount e quindi enumerare l'elenco chiamando IMFASFStreamConfig::GetPayloadExtension. Per aggiungere l'estensione del payload per il flusso, chiamare IMFASFStreamConfig::AddPayloadExtension. Verranno aggiunti dati supplementari a singoli campioni di supporti generati per il flusso.

Per rimuovere le estensioni del payload esistenti associate al flusso, chiamare IMFASFStreamConfig::RemoveAllPayloadExtensions.

Aggiunta di un flusso al profilo

Dopo aver configurato un flusso, chiamare IMFASFProfile::SetStream per aggiungere il flusso al profilo.

Per rimuovere un flusso esistente nel profilo, chiamare IMFASFProfile::RemoveStream.

Il profilo configurato deve essere impostato sull'oggetto ContentInfo chiamando IMFASFContentInfo::SetProfile. Se si apportano modifiche a un flusso esistente, è necessario aggiungerlo di nuovo al profilo e impostare il profilo sull'oggetto ContentInfo.

Profilo ASF

Supporto asf in Media Foundation

Componenti ASF WMContainer