1단계: DShowPlayer 클래스 선언
[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngine 및 Audio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 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에서 오디오/비디오 재생