MEBufferingStarted イベント

メディア ソースがデータのバッファー処理を開始したことを通知します。

メディア セッションの実行中にソースがデータをバッファーする場合、メディア ソースはこのイベントを送信できます。 メディア セッションは、このイベントを受信すると、メディア ソースが MEBufferingStopped イベントを送信するまでプレゼンテーション クロックを一時停止します。 メディア セッションでは、MEBufferingStarted イベントもアプリケーションに転送されます。

IMFByteStreamBuffering インターフェイスを実装するバイト ストリームも、このイベントを送信します。

イベント値

IMFMediaEvent::GetValue から取得できる値は次のとおりです。

VARTYPE 説明
VT_EMPTY
イベント データはありません。

解説

メディア ソースが MEBufferingStarted イベントを送信する場合は、データのバッファリングを停止したときに MEBufferingStopped イベントを送信する必要があります。 メディア ソースは、MEBufferingStarted イベントごとに一致する MEBufferingStopped イベントを送信する必要があります。 メディア ソースは、ソースの IMFMediaSource::Start メソッドが呼び出される前、またはソースの IMFMediaSource::Stop メソッドが呼び出された後に、これらのイベントを転送しないでください。

Media Foundation ネットワーク ソースからストリーミングする場合は、 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 を含む)

関連項目

Media Foundation イベント

Media Foundation でのネットワーク