Partager via


Étape 1 : Déclarer la classe DShowPlayer

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Cette rubrique est l’étape 1 du tutoriel Lecture audio/vidéo dans DirectShow. Le code complet est illustré dans la rubrique Exemple de lecture DirectShow.

Dans ce tutoriel, la DShowPlayer classe gère toutes les fonctionnalités DirectShow. Cette classe est déclarée en tant que folows.

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

Remarques :

  • L’énumération PlaybackState décrit l’état actuel de l’objet DShowPlayer .
  • La constante WM_GRAPH_EVENT définit un message de fenêtre privée. Ce message est utilisé pour informer l’application des événements de graphe de filtre. Consultez Étape 6 : Gérer les événements graph.
  • GraphEventFN est un pointeur vers une fonction de rappel pour la gestion des événements de graphe de filtre. L’application implémente cette fonction de rappel.
  • La variable membre m_pVideo fournit un wrapper pour les différents convertisseurs vidéo DirectShow. Consultez Étape 2 : Déclarer les classes CVideoRenderer et dérivées.
  • Tout au long de ce didacticiel, la fonction SafeRelease est utilisée pour libérer les pointeurs d’interface COM.

Suivant : Étape 2 : Déclarer les classes CVideoRenderer et dérivées.

Lecture audio/vidéo dans DirectShow