Introducing MFPlay
MFPlay is a new high-level playback API for Media Foundation.
Previously, to play a file in Media Foundation, the application had to:
- Use the source resolver to create a media source.
- Enumerate the streams and find the media types (audio or video).
- Construct a partial topology, connecting the streams to the right renderers.
- Set the topology on the media session.
With MFPlay, the equivalent steps are just one line of code:
const WCHAR *sURL = L"C:\\Users\\Public\\Videos\\example.wmv";
hr = MFPCreateMediaPlayer(
sURL,
TRUE, // Start playback automatically?
0, // Flags.
NULL, // Callback pointer.
hwnd,
&g_pPlayer
);
MFPlay also uses a much simpler event mechanism than the media session. The media session requires asynchronous calls to BeginGetEvent/EndGetEvent, and the event callback is invoked from a separate workqueue thread. MFPlay uses a single callback method that passes an event structure:
STDMETHODIMP MediaPlayerCallback::OnMediaPlayerEvent(
MFP_EVENT_HEADER *pEventHeader
)
{
switch (pEventHeader->eEventType)
{
case MFP_EVENT_TYPE_PLAY:
OnPlay(MFP_GET_PLAY_EVENT(pEventHeader));
break;
// Other event types (not shown).
}
}
By default, the event callback is invoked on your application's WndProc thread, so you can treat MFPlay events much like window messages.
You can read more about MFPlay here:
There is also an MFPlay sample in the Windows 7 BETA SDK, located under Samples\Multimedia\MediaFoundation\SimplePlay.
Please remember that everything new in the SDK is beta and subject to change.
- Mike