Шаг 1. Объявление класса DShowPlayer

[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи захватом аудио и видео в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует для нового кода использовать MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, по возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

В этом разделе приведен шаг 1 руководства воспроизведение звука и видео в DirectShow. Полный код показан в разделе примере воспроизведения DirectShow.

В этом руководстве класс DShowPlayer управляет всеми функциями DirectShow. Этот класс объявлен следующим образом.

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

Примечания:

  • Перечисление PlaybackState описывает текущее состояние объекта DShowPlayer.
  • Константная WM_GRAPH_EVENT определяет частное сообщение окна. Это сообщение используется для уведомления приложения о событиях графа фильтра. См. шаг 6: обработка событий графа.
  • GraphEventFN — это указатель на функцию обратного вызова для обработки событий графа фильтра. Приложение реализует эту функцию обратного вызова.
  • Переменная члена m_pVideo предоставляет оболочку для различных отрисовщиков видео DirectShow. См. Шаг 2: Объявление CVideoRenderer и производных классов.
  • В этом руководстве функция SafeRelease используется для освобождения указателей интерфейса COM.

Далее: Шаг 2: Объявление CVideoRenderer и производных классов.

воспроизведение звука и видео в DirectShow