Langkah 2: Buat Objek CPlayer
Topik ini adalah langkah 2 dari tutorial Cara Memutar File Media dengan Media Foundation. Kode lengkap ditampilkan dalam topik Contoh Pemutaran Sesi Media.
Untuk membuat instans CPlayer
kelas , aplikasi memanggil metode statis CPlayer::CreateInstance
. Metode ini mengambil parameter berikut:
- hVideo menentukan jendela untuk menampilkan video.
- hEvent menentukan jendela untuk menerima peristiwa. Valid untuk meneruskan handel yang sama untuk kedua handel jendela.
- ppPlayer menerima pointer ke instans baru
CPlayer
.
Kode berikut menunjukkan CreateInstance
metode :
// 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;
}
Kode berikut menunjukkan 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)
{
}
Konstruktor melakukan hal berikut:
- Memanggil MFStartup untuk menginisialisasi platform Media Foundation.
- Membuat peristiwa reset otomatis. Kejadian ini digunakan saat menutup Sesi Media; lihat Langkah 7: Matikan Sesi Media.
Destruktor mematikan Sesi Media, seperti yang dijelaskan di Langkah 7: Matikan Sesi Media.
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();
}
Perhatikan bahwa konstruktor dan destruktor keduanya adalah metode kelas yang dilindungi. Aplikasi membuat objek menggunakan metode statis CreateInstance
. Ini menghancurkan objek dengan memanggil IUnknown::Release, daripada secara eksplisit menggunakan hapus.
Berikutnya: Langkah 3: Buka File Media
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk