IMFMediaStream::RequestSample 方法 (mfidl.h)

從媒體來源要求範例。

語法

HRESULT RequestSample(
  [in] IUnknown *pToken
);

參數

[in] pToken

IUnknown 介面的指標,指向做為要求令牌的物件。 呼叫端必須實作這個物件。 此參數可以是 Null。 請參閱<備註>。

傳回值

方法會傳回 HRESULT。 可能的值包括 (但不限於) 下表中的這些值。

傳回碼 描述
S_OK
此方法已成功。
MF_E_END_OF_STREAM
已到達數據流結尾。
MF_E_MEDIA_SOURCE_WRONGSTATE
媒體來源已停止。
MF_E_SHUTDOWN
已呼叫來源的 Shutdown 方法。

備註

如果 pToken 不是 NULL,媒體數據流會在 pToken 上呼叫 AddRef,並將令牌放在先進先出佇列中。

當下一個範例可供使用時,媒體串流會執行下列動作:

  1. 從佇列提取第一個令牌。
  2. 設定媒體範例上的 MFSampleExtension_Token 屬性。 屬性數據是 Token 物件的指標。
  3. 傳送 MEMediaSample 事件。 事件數據是媒體範例 之 IMFSample 介面的指標。
  4. 在令牌上呼叫 Release
如果媒體數據流無法滿足呼叫端對範例的要求,它只會釋放令牌物件,並略過步驟 2 和 3。

呼叫端應該監視要求令牌上的參考計數。 如果媒體串流傳送 MEMediaSample 事件,請從範例取得 MFSampleExtension_Token 屬性,並將屬性值與令牌相符。 如果令牌的參考計數落為零,而且您未收到MEMediaSample事件,表示要求已卸除。

因為 Media Foundation 管線是多線程的,所以來源的 RequestSample 方法可能會在來源停止之後呼叫。 如果媒體來源已停止,方法應該會 傳回MF_E_MEDIA_SOURCE_WRONGSTATE。 管線不會將此傳回碼視為錯誤狀況。 如果來源傳回任何其他錯誤碼,管線會將它視為嚴重錯誤並停止會話。

注意 舊版的檔列出此案例的錯誤碼。

 

如果媒體來源已暫停,方法會成功,但數據流不會傳遞範例,直到再次啟動來源為止。

如果媒體來源在處理數據時以異步方式發生錯誤,它應該以下列其中一種方式發出錯誤訊號, (但兩者都) :

  • 從下一個 RequestSample 呼叫傳回錯誤碼。
  • 傳送 MEError 事件。

規格需求

需求
最低支援的用戶端 Windows Vista [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2008 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 mfidl.h
程式庫 Mfuuid.lib

另請參閱

IMFMediaStream

媒體來源