Passaggio 1: Dichiarare la classe DShowPlayer
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEnginee Acquisizione audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente di usare un nuovo codice MediaPlayer, IMFMediaEngine e Acquisizione audio/video in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
Questo argomento è il passaggio 1 della lezione Riproduzione audio/video in DirectShow. Il codice completo è illustrato nell'argomento "Esempio di Riproduzione DirectShow".
In questa esercitazione, la classe DShowPlayer
gestisce tutte le funzionalità DirectShow. Questa classe viene dichiarata come segue.
#include <new>
#include <windows.h>
#include <dshow.h>
enum PlaybackState
{
STATE_NO_GRAPH,
STATE_RUNNING,
STATE_PAUSED,
STATE_STOPPED,
};
const UINT WM_GRAPH_EVENT = WM_APP + 1;
typedef void (CALLBACK *GraphEventFN)(HWND hwnd, long eventCode, LONG_PTR param1, LONG_PTR param2);
class DShowPlayer
{
public:
DShowPlayer(HWND hwnd);
~DShowPlayer();
PlaybackState State() const { return m_state; }
HRESULT OpenFile(PCWSTR pszFileName);
HRESULT Play();
HRESULT Pause();
HRESULT Stop();
BOOL HasVideo() const;
HRESULT UpdateVideoWindow(const LPRECT prc);
HRESULT Repaint(HDC hdc);
HRESULT DisplayModeChanged();
HRESULT HandleGraphEvent(GraphEventFN pfnOnGraphEvent);
private:
HRESULT InitializeGraph();
void TearDownGraph();
HRESULT CreateVideoRenderer();
HRESULT RenderStreams(IBaseFilter *pSource);
PlaybackState m_state;
HWND m_hwnd; // Video window. This window also receives graph events.
IGraphBuilder *m_pGraph;
IMediaControl *m_pControl;
IMediaEventEx *m_pEvent;
CVideoRenderer *m_pVideo;
};
Note:
- L'enumerazione
PlaybackState
descrive lo stato corrente dell'oggettoDShowPlayer
. - La costante WM_GRAPH_EVENT definisce un messaggio di finestra privata. Questo messaggio viene usato per notificare all'applicazione gli eventi del grafico di filtro. Consulta Passaggio 6: Gestire gli eventi del grafico.
-
GraphEventFN
è un puntatore a una funzione di callback per la gestione degli eventi del grafo del filtro. L'applicazione implementa questa funzione di callback. - La variabile membro m_pVideo fornisce un wrapper per i vari renderer video DirectShow. Consultare Passaggio 2: Dichiarare le classi CVideoRenderer e quelle derivate.
- In questa esercitazione viene usata la funzione SafeRelease per rilasciare puntatori all'interfaccia COM.
Avanti: Passaggio 2: Dichiara CVideoRenderer e le sue classi derivate.
Argomenti correlati