Win32 API 日本語リファレンス
ホームMedia.MediaFoundation › IMFMediaStream

IMFMediaStream

COM
IIDd182108f-4ec6-443f-aa42-a71106ec825f継承元IMFMediaEventGenerator自前メソッド開始 vtbl7

公式ドキュメント

メディアソース内の 1 つのストリームを表します。

解説(Remarks)

ストリームは、メディアソースが開始されたときに作成されます。各ストリームについて、メディアソースはストリームの IMFMediaStream インターフェイスへのポインターを伴う MENewStream イベントを送信します。

メソッド 3

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 7 HRESULT GetMediaSource(IMFMediaSource** ppMediaSource)

このメディアストリームを作成したメディアソースへのポインターを取得します。

ppMediaSourceIMFMediaSource**outメディアソースの IMFMediaSource インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。
MF_E_SHUTDOWN
メディアソースの Shutdown メソッドが呼び出されています。
vtbl 8 HRESULT GetStreamDescriptor(IMFStreamDescriptor** ppStreamDescriptor)

このメディアストリームのストリーム記述子を取得します。

ppStreamDescriptorIMFStreamDescriptor**outIMFStreamDescriptor インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。
MF_E_SHUTDOWN
メディアソースの Shutdown メソッドが呼び出されています。

解説(Remarks)

ストリーム記述子を変更しないでください。プレゼンテーションを変更するには、IMFMediaSource::CreatePresentationDescriptor を呼び出し、プレゼンテーション記述子を変更してください。

vtbl 9 HRESULT RequestSample(IUnknown* pToken)

メディアソースにサンプルを要求します。

pTokenIUnknown*in要求のトークンとして使用されるオブジェクトの IUnknown インターフェイスへのポインター。呼び出し元はこのオブジェクトを実装する必要があります。このパラメーターは NULL にすることができます。「解説」を参照してください。

戻り値

このメソッドは HRESULT を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドが成功しました。
MF_E_END_OF_STREAM
ストリームの終端に達しました。
MF_E_MEDIA_SOURCE_WRONGSTATE
メディアソースが停止しています。
MF_E_SHUTDOWN
ソースの Shutdown メソッドが呼び出されています。

解説(Remarks)

pTokenNULL でない場合、メディアストリームは pToken に対して AddRef を呼び出し、そのトークンを先入れ先出し (FIFO) キューに配置します。

次のサンプルが利用可能になると、メディアストリームは次の処理を行います。

  1. キューから最初のトークンを取り出します。
  2. メディアサンプルに MFSampleExtension_Token 属性を設定します。属性データはトークンオブジェクトへのポインターです。
  3. MEMediaSample イベントを送信します。イベントデータはメディアサンプルの IMFSample インターフェイスへのポインターです。
  4. トークンに対して Release を呼び出します。
メディアストリームが呼び出し元のサンプル要求を満たせない場合は、単にトークンオブジェクトを解放し、手順 2 と 3 をスキップします。

呼び出し元は要求トークンの参照カウントを監視する必要があります。メディアストリームが MEMediaSample イベントを送信した場合は、サンプルから MFSampleExtension_Token 属性を取得し、その属性値をトークンと照合します。トークンの参照カウントがゼロになったにもかかわらず MEMediaSample イベントを受信していない場合は、その要求が破棄されたことを意味します。

Media Foundation パイプラインはマルチスレッドであるため、ソースの RequestSample メソッドはソースが停止した後に呼び出される可能性があります。メディアソースが停止している場合、このメソッドは MF_E_MEDIA_SOURCE_WRONGSTATE を返す必要があります。パイプラインはこの戻り値をエラー状態として扱いません。ソースがこれ以外のエラーコードを返した場合、パイプラインはそれを致命的なエラーとして扱い、セッションを停止します。

以前のバージョンのドキュメントでは、このケースについて誤ったエラーコードが記載されていました。

メディアソースが一時停止している場合、このメソッドは成功しますが、ソースが再び開始されるまでストリームはサンプルを配信しません。

メディアソースがデータの処理中に非同期でエラーに遭遇した場合は、次のいずれかの方法(両方ではなく)でエラーを通知する必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

#define global IID_IMFMediaStream "{D182108F-4EC6-443F-AA42-A71106EC825F}"
#usecom global IMFMediaStream IID_IMFMediaStream "{}"
#comfunc global IMFMediaStream_GetMediaSource       7 sptr
#comfunc global IMFMediaStream_GetStreamDescriptor  8 sptr
#comfunc global IMFMediaStream_RequestSample        9 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。