Поделиться через


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

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

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

В этом руководстве DShowPlayer класс управляет всеми функциями DirectShow. Этот класс объявлен как 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;
};

Примечания.

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

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

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