Uso di flussi multimediali nelle applicazioni
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
Nota
Queste API sono deprecate. Le applicazioni devono usare il filtro Sample Grabber o implementare un filtro personalizzato per ottenere dati da un grafico di filtro DirectShow.
Le interfacce di streaming multimediale semplificano notevolmente il processo di manipolazione dei dati multimediali rimuovendo la dipendenza da caratteristiche specifiche dell'hardware o dell'origine software e fornendo supporto per tutti i formati multimediali Microsoft DirectX®. Flussi astraggono i dati a un livello molto elevato; le applicazioni possono anche spostare i dati da un flusso a un altro senza conoscere nulla sul formato dei dati.
Per creare un flusso multimediale, seguire questa procedura.
- Creare il flusso multimediale. Il metodo di creazione e inizializzazione del flusso è specifico dell'architettura. DirectShow supporta l'interfaccia IAMMultiMediaStream , usata per inizializzare il flusso. Altre implementazioni del server in-process di IMultiMediaStream verranno create e inizializzate usando meccanismi diversi.
- Dopo l'inizializzazione dell'oggetto flusso multimediale, l'applicazione userà QueryInterface per recuperare l'interfaccia IMultiMediaStream per l'oggetto . Usare questa interfaccia per determinare le proprietà del flusso ed enumerare i flussi stessi. È possibile recuperare un flusso specifico chiamando il metodo IMultiMediaStream::GetMediaStream con un ID scopo specifico. MSPID_PrimaryVideo e MSPID_PrimaryAudio, che rappresentano i flussi video e audio principali, sono gli ID di utilizzo più comune.
- Chiamare IUnknown::QueryInterface per un'interfaccia specifica del tipo di supporto del flusso. Se si vuole eseguire il rendering di un flusso video, ad esempio, recuperarne l'interfaccia IDirectDrawMediaStream . Le interfacce specifiche dei supporti definiscono metodi aggiuntivi necessari per sfruttare appieno le funzionalità di un formato.
- Creare uno o più esempi dai dati del flusso. Ogni flusso multimediale supporta il metodo IMediaStream::CreateSharedSample per la creazione di esempi. L'esempio risultante supporta l'interfaccia IStreamSample , che fornisce il controllo sull'esempio e sulle relative caratteristiche. In genere, il flusso multimediale supporta un metodo specifico del formato per la creazione di campioni che è più potente dei metodi IStreamSample menzionati in precedenza. IDirectDrawMediaStream, ad esempio, può creare campioni collegati a una superficie DirectDraw desiderata e a un rettangolo di ritaglio. In alcune situazioni, tuttavia, è necessario gestire i dati senza conoscere il formato dei dati. Se si desidera trasmettere dati indipendentemente dal relativo formato, usare il metodo IMediaStream::CreateSharedSample per creare gli esempi di dati.
- Dopo aver creato tutti gli esempi di flusso desiderati, avviare il flusso chiamando il metodo IMultiMediaStream::SetState e passando il flag STREAMSTATE_RUN come parametro.
- Chiamare IStreamSample::Update per aggiornare l'esempio di flusso. Quando il metodo IStreamSample::Update viene chiuso, è possibile accedere ai dati dell'esempio. Se si desidera che un trigger venga chiamato da un evento o una chiamata di funzione specifica quando l'aggiornamento viene restituito, passare i puntatori appropriati al metodo IStreamSample::Update .
Per altre informazioni sulle interfacce di streaming multimediale, vedere Multimedia Streaming.