Condividi tramite


Configurazione dell'oggetto Splitter ASF

L'oggetto splitter ASF è un oggetto livello WMContainer che analizza l'oggetto dati ASF di un file ASF Format (ASF). Dopo aver creato e inizializzato il splitter per analizzare l'oggetto dati ASF di un file multimediale, il splitter deve essere configurato per generare esempi per flussi specifici. Chiamare FMASFSplitter::SelectStreams per selezionare i flussi necessari.

Facoltativamente, un'applicazione può anche configurarla per generare esempi in ordine inverso o generare esempi per il contenuto protetto. Per impostare queste opzioni, chiamare FMASFSplitter::SetFlags e passare la combinazione bit per bit necessaria dei flag supportati. Prima di chiamare questo metodo, il client deve completare la chiamata IMFASFSplitter::Initialize correttamente; in caso contrario, SetFlags ha esito negativo con MF_E_NOT_INITIALIZED codice di errore. Per informazioni sull'inizializzazione del splitter, vedere Creazione dell'oggetto Splitter ASF.

Per verificare se questo flag è attualmente impostato sul splitter, chiamare FMASFSplitter::GetFlags.

Selezione di flussi per l'analisi

Durante il processo di inizializzazione tramite FMASFSplitter::Initialize call, il splitter rileva il numero di flussi e gli identificatori di flusso nel file ASF. Per impostazione predefinita, nessun flusso viene selezionato dal splitter. L'applicazione deve selezionare i flussi chiamando FMASFSplitter::SelectStreams. Questo metodo accetta una matrice di numeri di flusso. Per ottenere il numero di flusso per un flusso, chiamare FMASFProfile::GetStream nel profilo ASF o chiamare FMStreamDescriptor::GetStreamIdentifier nel descrittore di flusso. È possibile ottenere sia il profilo ASF che il descrittore di flusso dall'oggetto ContentInfo. Se il client passa un numero di flusso non riconosciuto dal splitter, ha esito negativo con un errore di MF_E_INVALIDSTREAMNUMBER .

La chiamata a SelectStreams cancella le selezioni precedenti. Qualsiasi flusso non specificato nella matrice non è selezionato. Per ottenere un elenco di flussi attualmente selezionati, chiamare FMASFSplitter::GetSelectedStreams. Questo metodo accetta un puntatore a una matrice, che il metodo riempie con i numeri di flusso. Se la dimensione della matrice è minore del numero di flussi selezionati, il metodo ha esito negativo con l'errore di MF_E_BUFFERTOOSMALL . In questo caso, il metodo restituisce il numero di flussi selezionati nel parametro pwNumStreams . È quindi possibile usare questo numero per allocare una matrice delle dimensioni corrette e chiamare di nuovo il metodo.

Ad esempio, vedere "Selezionare un flusso per l'analisi" in Esercitazione: Lettura di un file ASF.

Impostazione di riproduzione inversa

Durante il processo di inizializzazione del splitter, determina se il contenuto ASF supporta la riproduzione inversa. In caso contrario, il splitter può essere configurato per generare esempi in ordine inverso impostando il flag di MFASF_SPLITTER_REVERSE . Se il contenuto non supporta la riproduzione inversa, l'FMASFSplitter ::SetFlags restituisce MF_E_INVALIDREQUEST, ma il flag viene impostato sullo splitter.

Se il splitter è configurato per l'analisi nella direzione inversa, il splitter avvia sempre l'analisi alla fine del buffer contenente l'oggetto dati ASF. Pertanto, per analizzare inverso l'offset dei dati e la lunghezza dei dati da analizzare deve essere impostata in modo appropriato. Per informazioni sull'impostazione dei valori corretti, vedere Generazione di esempi di flusso da un oggetto dati ASF esistente.

Impostazione del contenuto protetto

Il splitter può essere configurato per usare il contenuto di crittografia a livello di pacchetto impostando la MFASF_SPLITTER_WMDRM tramite FMASFSplitter::SetFlags. In questo modo viene indicato il splitter per distribuire esempi per il contenuto protetto da Windows Media Digital Rights Management (DRM). Quando questo flag viene impostato, gli esempi generati dal splitter contengono informazioni necessarie per decrittografare i dati multimediali e ricostruire i frame, ad esempio l'attributo MFSampleExtension_PacketCrossOffsets . Questo attributo è un BLOB che contiene una matrice di DWORDs. Ogni DWORD fornisce i limiti del payload per il frame rispetto all'inizio del frame. Se questo attributo non è presente, il frame è contenuto in un singolo payload. In genere, gli esempi generati dal splitter contengono più buffer multimediali, l'applicazione può copiare tutti i buffer in un buffer contiguo chiamando FMSample::ConvertToContiguousBuffer. Il buffer risultante contiene il frame e il valore dell'attributo contiene offset in questo buffer.

ASF Splitter