MEBufferingStarted 事件

指示媒体源已开始缓冲数据。

如果源在媒体会话运行时缓冲数据,则媒体源可以发送此事件。 当媒体会话收到此事件时,它会暂停演示时钟,直到媒体源发送 MEBufferingStopped 事件。 媒体会话还会将 MEBufferingStarted 事件转发到应用程序。

实现 IMFByteStreamBuffering 接口的字节流也会发送此事件。

事件值

IMFMediaEvent::GetValue 检索到的可能值包括以下内容。

VARTYPE 说明
VT_EMPTY
无事件数据。

备注

如果媒体源发送 MEBufferingStarted 事件,则必须在停止缓冲数据时发送 MEBufferingStopped 事件。 媒体源必须为每个 MEBufferingStarted 事件发送匹配的 MEBufferingStopped 事件。 在调用源的 IMFMediaSource::Start 方法之前,或在调用源的 IMFMediaSource::Stop 方法之后,媒体源不应转发这些事件。

如果要从媒体基础网络源进行流式传输,可以通过查询 MFNETSOURCE_BUFFERPROGRESS_ID 统计信息来获取缓冲进度。 有关详细信息,请参阅 MFNETSOURCE_STATISTICS_IDS

示例

HRESULT GetBufferProgress(IMFMediaSession *pSession, DWORD *pProgress)
{
    IPropertyStore *pProp = NULL;
    PROPVARIANT var;

    // Get the property store from the media session.
    HRESULT hr = MFGetService(
        pSession, 
        MFNETSOURCE_STATISTICS_SERVICE, 
        IID_PPV_ARGS(&pProp)
        );

    if (SUCCEEDED(hr))
    {
        PROPERTYKEY key;
        key.fmtid = MFNETSOURCE_STATISTICS;
        key.pid = MFNETSOURCE_BUFFERPROGRESS_ID;

        hr = pProp->GetValue(key, &var);
    }

    if (SUCCEEDED(hr))
    {
        *pProgress = var.lVal;
    }

    PropVariantClear(&var);
    SafeRelease(&pProp);
    return hr;
}

要求

要求
最低受支持的客户端
Windows Vista [仅限桌面应用]
最低受支持的服务器
Windows Server 2008 [仅限桌面应用]
标头
Mfobjects.h (包括 Mfidl.h)

请参阅

媒体基础活动

媒体基础中的网络