An under 100 lines of C++ code sample that plays an MP3 file with Microsoft Media Foundation.
https://github.com/roman380/MediaFoundationMinimalAudioPlayback
Comes from this StackOverflow question, however unlike Microsoft’s sample it does not spread simple code among multiple source code files, gives a quick way to build & run, shows modern C++ practices (including Microsoft Windows Implementation Library in wil
branch – the library I recommend to use).
The sample quickly goes over main concepts: topology, nodes, session, events, asynchronous processing. Media Foundation’s “Intelligent Connect” automatically & transparently supplying two Media Foundation Transforms to decode MP3 audio and to fit audio format to acceptable by audio playback device.
Event: MESessionTopologySet
Node Count: 4
Node 0: MF_TOPOLOGY_SOURCESTREAM_NODE
MF_TOPONODE_MEDIASTART
MF_TOPONODE_SOURCE
MF_TOPONODE_PRESENTATION_DESCRIPTOR
MF_TOPONODE_STREAM_DESCRIPTOR
Node 1: MF_TOPOLOGY_OUTPUT_NODE
MF_TOPONODE_STREAMID
MF_TOPONODE_TRANSFORM_OBJECTID {D23E6476-B104-4707-81CB-E1CA19A07016}
Node 2: MF_TOPOLOGY_TRANSFORM_NODE
MF_TOPONODE_MARKIN_HERE
MF_TOPONODE_MARKOUT_HERE
MF_TOPONODE_DECODER
MF_TOPONODE_TRANSFORM_OBJECTID {BBEEA841-0A63-4F52-A7AB-A9B3A84ED38A}
Node 3: MF_TOPOLOGY_TRANSFORM_NODE
MF_TOPONODE_TRANSFORM_OBJECTID {F447B69E-1884-4A7E-8055-346F74D6EDB3}
Event: MESessionNotifyPresentationTime
Event: MESessionCapabilitiesChanged
Capabilities: MFSESSIONCAP_START MFSESSIONCAP_SEEK MFSESSIONCAP_RATE_FORWARD MFSESSIONCAP_DOES_NOT_USE_NETWORK
Change: MFSESSIONCAP_START MFSESSIONCAP_SEEK MFSESSIONCAP_RATE_FORWARD MFSESSIONCAP_DOES_NOT_USE_NETWORK
Event: MESessionTopologyStatus MF_TOPOSTATUS_READY
Event: MESessionTopologyStatus MF_TOPOSTATUS_STARTED_SOURCE
Event: MEExtendedType
Event: MESessionCapabilitiesChanged
Capabilities: MFSESSIONCAP_START MFSESSIONCAP_SEEK MFSESSIONCAP_PAUSE MFSESSIONCAP_RATE_FORWARD MFSESSIONCAP_DOES_NOT_USE_NETWORK
Change: MFSESSIONCAP_PAUSE
Event: MESessionStarted
...
Event: MEEndOfPresentation
Event: MESessionTopologyStatus MF_TOPOSTATUS_ENDED
Event: MESessionCapabilitiesChanged
Capabilities: MFSESSIONCAP_START MFSESSIONCAP_SEEK MFSESSIONCAP_RATE_FORWARD MFSESSIONCAP_DOES_NOT_USE_NETWORK
Change: MFSESSIONCAP_PAUSE
Event: MESessionEnded
Have fun!