Condividi tramite


Configurazione di profili e altre proprietà di file (QASF)

[La funzionalità associata a questa pagina, Windows Media Format 11 SDK, è una funzionalità legacy. È stata sostituita dal Lettore di origine e dallo Scrittore di sink . Lettore di origine e Scrittore di destinazione sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente di utilizzare nel nuovo codice il Lettore di origine e il Writer sink invece del Windows Media Format 11 SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Gli elementi seguenti descrivono come eseguire varie attività correlate alla creazione di file ASF.

Creazione di un profilo (QASF)

Per creare un profilo personalizzato, usare Windows Media Format SDK direttamente per creare un oggetto di gestione profili usando la funzioneWMCreateProfileManager. Successivamente, creare il profilo e passarlo al WM ASF Writer usando il metodo IConfigASFWriter::ConfigureFilterUsingProfile. Questo è l'unico modo per configurare il filtro con un profilo che usa i codec windows Media Audio e Video serie 9. I profili di sistema per le versioni precedenti di questi codec possono essere aggiunti usando il metodo IConfigASFWriter::ConfigureFilterUsingProfileGuid.

Aggiunta di metadati (QASF)

Per aggiungere metadati a un file, chiamare QueryInterface dall'interfaccia IBaseFilter sul WM ASF Writer per recuperare l'interfaccia IWMHeaderInfo. Dopo aver assegnato un profilo al filtro, usare i metodi dell'interfaccia IWMHeaderInfo per scrivere i metadati.

Indicizzazione di un file (QASF)

Il writer ASF WM crea file indicizzati in modo temporale per impostazione predefinita. Per creare un file con indicizzazione frame, usare il metodo IConfigAsfWriter::SetIndexMode per disabilitare tutti gli indici, quindi creare il file. Al termine, usare Windows Media Format SDK direttamente per creare un indice basato su frame per il file.

Esecuzione della codifica Two-Pass (QASF)

La codifica a due passaggi è supportata solo nei codec Windows Media versione 8 e successive. Impostare WM ASF Writer in modalità pre-elaborazione chiamando IConfigAsfWriter2::SetParam e specificando AM_CONFIGASFWRITER_PARAM_MULTIPASS nel parametro dwParam e TRUE nel parametro dwParam1.

Eseguire quindi il grafico del filtro. Quando vengono eseguiti tutti i passaggi di pre-elaborazione (in genere verrà eseguito un solo passaggio di pre-elaborazione), l'applicazione riceverà un evento EC_PREPROCESS_COMPLETE dal filtro. Quando questo evento viene ricevuto, usare IMediaSeeking::SetPositions per reimpostare il puntatore del flusso all'inizio ed eseguire di nuovo il grafico del filtro. Dopo l'ultimo passaggio (in genere il secondo passaggio), l'applicazione riceverà un evento EC_COMPLETE per indicare che il processo di codifica è stato completato. Se un passaggio di pre-elaborazione viene annullato prima della ricezione dell'evento EC_PREPROCESS_COMPLETE, chiamare IConfigAsfWriter2::ResetMultiPassState per reimpostare il filtro prima di tentare un'altra esecuzione di pre-elaborazione.

È necessario chiamare solo IConfigAsfWriter::SetParam(AM_CONFIGASFWRITER_PARAM_MULTIPASS, FALSE) se si desidera eliminare completamente il filtro dalla modalità di pre-elaborazione.

Importante

È responsabilità dell'applicazione abilitare la modalità di pre-elaborazione in base al profilo che verrà usato per la codifica. Alcuni profili richiedono la codifica a due passaggi; se si tenta di codificare un file con tale profilo e non si imposta AM_CONFIGASFWRITER_PARAM_MULTIPASS su TRUE, verrà generato un errore di EC_USERABORT. Per ulteriori informazioni su come determinare se un determinato profilo richiede la codifica a due passaggi, vedere Uso di Two-Pass Encoding o Scrittura di flussi a bit rate variabile.

 

Ottenere e impostare le proprietà del buffer in fase di esecuzione (QASF)

In alcuni scenari, ad esempio se si desidera forzare l'inserimento di fotogrammi chiave durante la scrittura di un file, un'applicazione potrebbe dover ottenere o impostare informazioni su un buffer di Windows Media in fase di esecuzione. Il filtro Lettore ASF WM e il filtro Writer ASF WM supportano entrambi un meccanismo di callback che consente a un'applicazione di accedere all'interfaccia di INSSBuffer3 in ogni singolo buffer multimediale durante la lettura o la scrittura di file. Le applicazioni possono usare questa interfaccia per designare specifici campioni come fotogrammi chiave o cleanpoints, per impostare i codici di ora SMPTE, per specificare le impostazioni di interlacciamento o aggiungere qualsiasi tipo di dati riservati a un flusso.

Utilizzare l'interfaccia IAMWMBufferPass per registrarsi per i callback dal pin che gestisce il flusso video. Quando il pin chiama il metodo metodo IAMWMBufferPassCallback::Notify, esaminare i timestamp nel buffer e, se appropriato, chiamare INSSBuffer3::SetProperty per impostare la proprietà WM_SampleExtensionGUID_OutputCleanPoint nel buffer su TRUE.

Supporto di pixel non quadrati (QASF)

WM ASF Writer si connette a un filtro upstream, ad esempio il decodificatore DV, che restituisce informazioni sulle proporzioni dei pixel. Wm ASF Writer scriverà queste informazioni come estensioni di unità dati per ogni esempio nel file.

Quando il WM ASF Reader incontra informazioni sul rapporto d'aspetto dei pixel nell'intestazione del file o nelle estensioni di unità dati per i campioni, offrirà un tipo di media VIDEOINFOHEADER2 come prima scelta sul suo pin di output. Il dwPictAspectRatioX e dwPictAspectRatioY membri della struttura, che descrivono la proporzione del rettangolo video, verranno correttamente regolati in base alle proporzioni dei pixel.

Gestione del formato interlacciato

Se si acquisisce video interlacciato da un televisore o da una videocamera DV, è possibile conservare il video originale come campi indipendenti se si prevede che il file codificato venga riprodotto in un televisore o in un altro dispositivo di visualizzazione interlacciato. I monitor dei computer sono dispositivi di scansione progressiva. Se deinterlacci un video e poi lo riinterlacci per la riproduzione su un televisore, si incorre in una perdita di dati. In un file ASF, le informazioni di interlacciamento vengono archiviate come estensioni di unità dati che l'applicazione applica a ogni esempio usando il metodo IAMWMBufferPassCallback descritto in precedenza. Per codificare un file che mantiene le impostazioni interlacciate originali, seguire questa procedura:

  • Implementare una classe che supporta IAMWMBufferPassCallback e scrivere una funzione Notify che imposta i flag interlacciati per ogni esempio. Questa funzione verrà chiamata dal writer ASF WM prima di elaborare ogni esempio.
// Set to WM_CT_TOP_FIELD_FIRST if that is your format.
BYTE flag = WM_CT_INTERLACED | WM_CT_BOTTOM_FIELD_FIRST;
            HRESULT hr = pNSSBuffer3->SetProperty(WM_SampleExtensionGUID_ContentType, (void*) &flag, WM_SampleExtension_ContentType_Size);
           
  • Impostare le estensioni delle unità dati nel profilo prima di passare il profilo al filtro.
hr = pWMStreamConfig2->AddDataUnitExtension( WM_SampleExtensionGUID_ContentType, WM_SampleExtension_ContentType_Size, NULL, 0 );
  • Dopo aver configurato il filtro con il profilo, ottieni l'interfaccia IWMWriterAdvanced2 dal WM ASF Writer e chiama il metodo SetInputSettings.

// Must do this first.

hr = pConfigAsfWriter2->ConfigureFilterUsingProfile(pProfile);

  
CComPtr<IServiceProvider> pProvider;
  CComPtr<IWMWriterAdvanced2> pWMWA2;
  hr = pConfigAsfWriter2->QueryInterface( __uuidof(IServiceProvider),
                                         (void**)&pProvider);
  if (SUCCEEDED(hr))
  {
      hr = pProvider->QueryService(IID_IWMWriterAdvanced2,
                    IID_IWMWriterAdvanced2,
                    (void**)&pWMWA2);
  }
  BOOL pValue = TRUE;
 // Set the first parameter to your actual input number.
 hr = pWMWA2->SetInputSetting(0, g_wszInterlacedCoding,
              WMT_TYPE_BOOL, (BYTE*) &pValue, sizeof(WMT_TYPE_BOOL));