Megosztás a következőn keresztül:


1. lépés: A DShowPlayer osztály deklarálása

[A laphoz társított funkció, DirectShowegy régi funkció. Ezt felváltotta a MediaPlayer, a IMFMediaEngineés a Audio/Video Capture in Media Foundation. Ezek a funkciók Windows 10-hez és Windows 11-hez lettek optimalizálva. A Microsoft határozottan javasolja, hogy az új kód lehetőség szerint a MediaPlayer-t, a IMFMediaEngine-t és a Audio/Video Capture-t a Media Foundation keretein belül használja a DirectShowhelyett. A Microsoft javasolja, hogy az örökölt API-kat használó meglévő kódot át kell írni az új API-k használatára, ha lehetséges.]

Ez a témakör a DirectShow hang- és videolejátszási oktatóanyagának 1. lépése. A teljes kód DirectShow lejátszási példacímű témakörben látható.

Ebben az oktatóanyagban az osztály kezeli az DShowPlayer összes DirectShow-funkciót. Ez az osztály a következőképpen deklarálva van.

#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;
};

Megjegyzések:

  • A(z) PlaybackState felsorolás a(z) DShowPlayer objektum aktuális állapotát írja le.
  • Az állandó WM_GRAPH_EVENT egy privát ablaküzenetet határoz meg. Ez az üzenet arra szolgál, hogy értesítse az alkalmazást a szűrőgráf eseményeiről. Lásd : 6. lépés: Gráfesemények kezelése.
  • GraphEventFN a szűrőgráfesemények kezelésére szolgáló visszahívási függvényre mutató mutató. Az alkalmazás implementálja ezt a visszahívási függvényt.
  • A m_pVideo tagváltozó burkolót biztosít a különböző DirectShow videómegjelenítőkhöz. Lásd : 2. lépés: CVideoRenderer és származtatott osztályok deklarálása.
  • Az oktatóanyag során a SafeRelease függvény a COM-felület mutatóinak kiadására szolgál.

Következő: 2. lépés: CVideoRenderer és származtatott osztályok deklarálása.

Hang- és videolejátszás a DirectShow