Freigeben über


Schritt 1: Deklarieren der DShowPlayer-Klasse

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Dieses Thema ist Schritt 1 des Tutorials Audio/Videowiedergabe in DirectShow. Der vollständige Code wird im Thema DirectShow-Wiedergabebeispiel angezeigt.

In diesem Tutorial verwaltet die DShowPlayer -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 des DShowPlayer Objekts.
  • Die Konstante WM_GRAPH_EVENT definiert eine private Fensternachricht. Diese Meldung wird verwendet, um die Anwendung über Filterdiagrammereignisse zu benachrichtigen. Weitere Informationen finden Sie unter Schritt 6: Behandeln von Graphereignissen.
  • GraphEventFN ist 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 bereit. Siehe Schritt 2: Deklarieren von CVideoRenderer und abgeleiteten Klassen.
  • In diesem Tutorial wird die SafeRelease-Funktion verwendet, um COM-Schnittstellenzeiger freizugeben.

Weiter: Schritt 2: Deklarieren von CVideoRenderer und abgeleiteten Klassen.

Audio-/Videowiedergabe in DirectShow