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 doDShowPlayer
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.
Tópicos relacionados