Compartir a través de


Paso 1: Declarar la clase DShowPlayer

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Este tema es el paso 1 del tutorial Reproducción de audio y vídeo en DirectShow. El código completo se muestra en el tema Ejemplo de reproducción de DirectShow.

En este tutorial, la DShowPlayer clase administra todas las funciones de DirectShow. Esta clase se declara 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;
};

Notas:

  • La PlaybackState enumeración describe el estado actual del DShowPlayer objeto.
  • La constante WM_GRAPH_EVENT define un mensaje de ventana privada. Este mensaje se usa para notificar a la aplicación sobre los eventos de grafo de filtro. Consulte Paso 6: Controlar eventos de Graph.
  • GraphEventFN es un puntero a una función de devolución de llamada para controlar eventos de grafo de filtro. La aplicación implementa esta función de devolución de llamada.
  • La variable miembro m_pVideo proporciona un contenedor para los distintos representadores de vídeo directShow. Vea Paso 2: Declarar CVideoRenderer y clases derivadas.
  • A lo largo de este tutorial, la función SafeRelease se usa para liberar punteros de interfaz COM.

Siguiente: Paso 2: Declarar CVideoRenderer y clases derivadas.

Reproducción de audio y vídeo en DirectShow