Schritt 1: Deklarieren der DShowPlayer-Klasse
Dieses Thema ist Schritt 1 des Tutorials Audio/Video Playback in DirectShow. Der vollständige Code wird im Thema DirectShow Playback Example (DirectShow-Wiedergabebeispiel) gezeigt.
In diesem Tutorial verwaltet DShowPlayer die -Klasse alle DirectShow-Funktionen. Diese Klasse wird als folows deklariert.
#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;
};
Hinweise:
- Die
PlaybackState-Enumeration beschreibt den aktuellen Zustand desDShowPlayer-Objekts. - Die Konstante WM _ GRAPH EVENT definiert eine private _ Fenstermeldung. Diese Meldung wird verwendet, um die Anwendung über Filterdiagrammereignisse zu benachrichtigen. Weitere Informationen finden Sie unter Schritt 6: Behandeln Graph Ereignissen.
GraphEventFNist ein Zeiger auf eine Rückruffunktion zum Behandeln von Filterdiagrammereignissen. Die Anwendung implementiert diese Rückruffunktion.- Die m _ pVideo-Membervariable stellt einen Wrapper für die verschiedenen DirectShow-Videorenderer zur Seite. Siehe Schritt 2: Deklarieren von CVideoRenderer und abgeleiteten Klassen.
- In diesem Tutorial wird die SafeRelease-Funktion verwendet, um COM-Schnittstellenzeigen zu veröffentlichen.
Weiter: Schritt 2: Deklarieren von CVideoRenderer und abgeleiteten Klassen.