Schritt 2: Erstellen des CPlayer-Objekts
Dieses Thema ist Schritt 2 des Tutorials Zum Wiedergeben von Mediendateien mit Media Foundation. Den vollständigen Code finden Sie im Thema Mediensitzungswiedergabebeispiel.
Um eine instance der CPlayer
-Klasse zu erstellen, ruft die Anwendung die statische CPlayer::CreateInstance
Methode auf. Diese Methode verwendet die folgenden Parameter:
- hVideo gibt das Fenster an, in dem Video angezeigt werden soll.
- hEvent gibt ein Fenster zum Empfangen von Ereignissen an. Es ist gültig, dasselbe Handle für beide Fensterhandles zu übergeben.
-
ppPlayer empfängt einen Zeiger auf eine neue
CPlayer
instance.
Der folgende Code veranschaulicht die CreateInstance
-Methode:
// Static class method to create the CPlayer object.
HRESULT CPlayer::CreateInstance(
HWND hVideo, // Video window.
HWND hEvent, // Window to receive notifications.
CPlayer **ppPlayer) // Receives a pointer to the CPlayer object.
{
if (ppPlayer == NULL)
{
return E_POINTER;
}
CPlayer *pPlayer = new (std::nothrow) CPlayer(hVideo, hEvent);
if (pPlayer == NULL)
{
return E_OUTOFMEMORY;
}
HRESULT hr = pPlayer->Initialize();
if (SUCCEEDED(hr))
{
*ppPlayer = pPlayer;
}
else
{
pPlayer->Release();
}
return hr;
}
HRESULT CPlayer::Initialize()
{
// Start up Media Foundation platform.
HRESULT hr = MFStartup(MF_VERSION);
if (SUCCEEDED(hr))
{
m_hCloseEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (m_hCloseEvent == NULL)
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
}
return hr;
}
Der folgende Code zeigt den CPlayer
Konstruktor:
CPlayer::CPlayer(HWND hVideo, HWND hEvent) :
m_pSession(NULL),
m_pSource(NULL),
m_pVideoDisplay(NULL),
m_hwndVideo(hVideo),
m_hwndEvent(hEvent),
m_state(Closed),
m_hCloseEvent(NULL),
m_nRefCount(1)
{
}
Der Konstruktor führt folgendes aus:
- Ruft MFStartup auf , um die Media Foundation-Plattform zu initialisieren.
- Erstellt ein Ereignis zum automatischen Zurücksetzen. Dieses Ereignis wird beim Schließen der Mediensitzung verwendet. Siehe Schritt 7: Herunterfahren der Mediensitzung.
Der Destruktor beendet die Mediensitzung, wie in Schritt 7: Herunterfahren der Mediensitzung beschrieben.
CPlayer::~CPlayer()
{
assert(m_pSession == NULL);
// If FALSE, the app did not call Shutdown().
// When CPlayer calls IMediaEventGenerator::BeginGetEvent on the
// media session, it causes the media session to hold a reference
// count on the CPlayer.
// This creates a circular reference count between CPlayer and the
// media session. Calling Shutdown breaks the circular reference
// count.
// If CreateInstance fails, the application will not call
// Shutdown. To handle that case, call Shutdown in the destructor.
Shutdown();
}
Beachten Sie, dass der Konstruktor und der Destruktor beide Methoden der geschützten Klasse sind. Die Anwendung erstellt das Objekt mithilfe der statischen CreateInstance
Methode. Das Objekt wird zerstört, indem IUnknown::Release aufgerufen wird, anstatt explizit delete zu verwenden.
Weiter: Schritt 3: Öffnen einer Mediendatei
Zugehörige Themen