Compartilhar via


Etapa 1: Declarar a classe DShowPlayer

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Este tópico é a etapa 1 do tutorial Reprodução de áudio/vídeo no DirectShow. O código completo é mostrado no tópico Exemplo de Reprodução do DirectShow.

Neste tutorial, a DShowPlayer classe gerencia todas as funcionalidades do DirectShow. Essa classe é declarada como 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;
};

Observações:

  • A PlaybackState enumeração descreve o estado atual do DShowPlayer objeto .
  • A constante WM_GRAPH_EVENT define uma mensagem de janela privada. Essa mensagem é usada para notificar o aplicativo sobre eventos de grafo de filtro. Consulte Etapa 6: Manipular eventos de grafo.
  • GraphEventFN é um ponteiro para uma função de retorno de chamada para manipular eventos de grafo de filtro. O aplicativo implementa essa função de retorno de chamada.
  • A variável de membro m_pVideo fornece um wrapper para os vários renderizadores de vídeo directShow. Consulte Etapa 2: Declarar classes derivadas e CVideoRenderer.
  • Ao longo deste tutorial, a função SafeRelease é usada para liberar ponteiros de interface COM.

Próximo: Etapa 2: declarar classes derivadas e CVideoRenderer.

Reprodução de áudio/vídeo no DirectShow