How to Control Presentation States
The Media Session provides transport control such as changing presentation states (Play, Pause, and Stop in a playlist-style playback scenario). This topic describes Media Session methods that an application should call to change the playback state.
The following table shows the valid presentation state transitions.
State transition | Description |
---|---|
Play -> Pause | The presentation clock freezes. |
Play -> Stop | The presentation clock is reset. |
Pause -> Play | The presentation clock resumes from the time it froze during the Play to Pause transition. |
Pause -> Stop | The presentation clock is reset. |
Stop -> Play | The presentation clock starts from the beginning of the presentation. |
Stop -> Pause | Not allowed. |
To change presentation states
Call the IMFMediaSession::Pause method to pause playback.
hr = pMediaSession->Pause();
Before calling this method, the application must call the IMFMediaSession::GetSessionCapabilities method to discover whether the media source supports the Pause state. If it does, this method returns MFSESSIONCAP_PAUSE in the pdwCaps parameter.
Pause temporarily stops the Media Session, the presentation clock, and the stream sink for the current presentation. After the call completes successfully, the application receives a MESessionPaused event.
Call the IMFMediaSession::Stop method to stop playback.
hr = pMediaSession->Stop();
This method stops the Media Session by stopping the media source, the corresponding clocks, and stream sinks. If the Media Session is controlling the Sequencer Source, the underlying native sources are stopped by the sequencer source. After the Media Session is stopped, the application receives a MESessionStopped event.
Call the IMFMediaSession::Start method to start playback or seek to a new position.
hr = pMediaSession->Start(NULL, &var);
This method starts the Media Session from Pause and Stop states. The Media Session is responsible for setting up the data flow in the pipeline. This method instructs the Media Session to start the presentation clock. After this call, Media Session sends a MESessionStarted event to the application.
Related topics