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

IMFMediaSession

COM
IID90377834-21d0-4dee-8214-ba2e3e6c1127継承元IMFMediaEventGenerator自前メソッド開始 vtbl7

公式ドキュメント

保護されたコンテンツおよび保護されていないコンテンツの再生コントロールを提供します。

メソッド 10

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

vtbl 7 HRESULT SetTopology(DWORD dwSetTopologyFlags, IMFTopology* pTopology)

Media Session にトポロジを設定します。

dwSetTopologyFlagsDWORDinMFSESSION_SETTOPOLOGY_FLAGS 列挙体の 0 個以上のフラグをビットごとの OR で組み合わせた値。
pTopologyIMFTopology*inトポロジ オブジェクトの IMFTopology インターフェイスへのポインター。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
Media Session の現在の状態ではこの操作を実行できません。
MF_E_SHUTDOWN
Media Session はシャットダウンされています。
MF_E_TOPO_INVALID_TIME_ATTRIBUTES
トポロジに、次の属性のうち 1 つ以上について無効な値が含まれています。
NS_E_DRM_DEBUGGING_NOT_ALLOWED
デバッグ中は保護されたコンテンツを再生できません。

解説(Remarks)

pTopology が完全なトポロジである場合は、dwSetTopologyFlags パラメーターに MFSESSION_SETTOPOLOGY_NORESOLUTION フラグを設定してください。それ以外の場合、トポロジは部分トポロジであると見なされます。Media Session はトポロジ ローダーを使用して、部分トポロジを完全なトポロジに解決します。

Media Session が現在一時停止または停止している場合、SetTopology メソッドは次に IMFMediaSession::Start が呼び出されるまで有効になりません。

Media Session が現在実行中の場合、または次に Start を呼び出した時点で、SetTopology メソッドは次の処理を行います。

このメソッドは非同期です。メソッドが S_OK を返した場合、操作が完了すると Media Session は MESessionTopologySet イベントを送信します。 Media Session が現在一時停止または停止している場合、Media Session は次に IMFMediaSession::Start が呼び出されるまで MESessionTopologySet イベントを送信しません。
vtbl 8 HRESULT ClearTopologies()

Media Session で再生用にキューに入れられているすべてのプレゼンテーションをクリアします。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
Media Session の現在の状態ではこの操作を実行できません。
MF_E_SHUTDOWN
Media Session はシャットダウンされています。

解説(Remarks)

このメソッドは非同期です。操作が完了すると、Media Session は MESessionTopologiesCleared イベントを送信します。

このメソッドは現在のトポロジをクリアしません。再生を待機してキューに入れられているトポロジのみを削除します。現在のトポロジを削除するには、MFSESSION_SETTOPOLOGY_CLEAR_CURRENT フラグを指定して IMFMediaSession::SetTopology を呼び出してください。

vtbl 9 HRESULT Start(GUID* pguidTimeFormat, PROPVARIANT* pvarStartPosition)

Media Session を開始します。

pguidTimeFormatGUID*in

pvarStartPosition パラメーターの時間形式を指定する GUID へのポインター。このパラメーターには NULL を指定できます。NULL を指定することは GUID_NULL を渡すことと同じです。

次の時間形式 GUID が定義されています。

意味
GUID_NULL
プレゼンテーション時間。pvarStartPosition パラメーターは、次のいずれかの PROPVARIANT 型でなければなりません。
  • VT_I8: pvarStartPosition パラメーターには、プレゼンテーションの先頭を基準とした開始位置が 100 ナノ秒単位で格納されます。
  • VT_EMPTY: 現在の位置から再生を開始します。
すべてのメディア ソースがこの時間形式をサポートします。
MF_TIME_FORMAT_SEGMENT_OFFSET
セグメント オフセット。この時間形式は Sequencer Source によってサポートされます。開始時間はセグメント内のオフセットです。

MFCreateSequencerSegmentOffset 関数を呼び出して、 pvarStartPosition パラメーター用の PROPVARIANT 値を作成します。

MF_TIME_FORMAT_ENTRY_RELATIVE
注意 Windows 7 以降が必要です。
プレイリスト エントリへスキップします。pvarStartPosition パラメーターは、現在のエントリを基準としたプレイリスト エントリのインデックスを指定します。たとえば、値 2 は 2 エントリ分前方にスキップします。後方にスキップするには、負の値を渡します。PROPVARIANT 型は VT_I4 です。

メディア ソースがこの時間形式をサポートしている場合、IMFMediaSource::GetCharacteristics メソッドは次のフラグの一方または両方を返します。

pvarStartPositionPROPVARIANT*in再生の開始位置を指定する PROPVARIANT へのポインター。このパラメーターの意味とデータ型は pguidTimeFormat パラメーターによって示されます。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
Media Session の現在の状態ではこの操作を実行できません。
MF_E_SHUTDOWN
Media Session はシャットダウンされています。

解説(Remarks)

このメソッドが呼び出されると、Media Session はプレゼンテーション クロックを開始し、メディア サンプルの処理を開始します。

このメソッドは非同期です。メソッドが完了すると、Media Session は MESessionStarted イベントを送信します。

vtbl 10 HRESULT Pause()

Media Session を一時停止します。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
Media Session の現在の状態ではこの操作を実行できません。
MF_E_SHUTDOWN
Media Session はシャットダウンされています。
MF_E_SESSION_PAUSEWHILESTOPPED
停止中は Media Session を一時停止できません。

解説(Remarks)

このメソッドはプレゼンテーション クロックを一時停止します。

このメソッドは非同期です。操作が完了すると、Media Session は MESessionPaused イベントを送信します。

Media Session が停止している場合、このメソッドは失敗します。

vtbl 11 HRESULT Stop()

Media Session を停止します。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
Media Session の現在の状態ではこの操作を実行できません。
MF_E_SHUTDOWN
Media Session はシャットダウンされています。

解説(Remarks)

このメソッドは非同期です。操作が完了すると、Media Session は MESessionStopped イベントを送信します。

vtbl 12 HRESULT Close()

Media Session を閉じ、使用しているすべてのリソースを解放します。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_SHUTDOWN
Media Session はシャットダウンされています。

解説(Remarks)

このメソッドは非同期です。操作が完了すると、Media Session は MESessionClosed イベントを送信します。

Close メソッドを呼び出した後、Media Session で有効なメソッドは次のものだけです。

その他のすべてのメソッドは MF_E_INVALIDREQUEST を返すか、そのエラー コードを持つイベントをキューに入れます。
vtbl 13 HRESULT Shutdown()

Media Session をシャットダウンし、Media Session が使用しているすべてのリソースを解放します。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。

解説(Remarks)

Media Session の使用が終わったら、IUnknown::Release の最後の呼び出しの前にこのメソッドを呼び出してください。そうしないと、アプリケーションでメモリ リークが発生します。

このメソッドを呼び出した後、他の IMFMediaSession メソッドは MF_E_SHUTDOWN を返します。

vtbl 14 HRESULT GetClock(IMFClock** ppClock)

Media Session のプレゼンテーション クロックを取得します。

ppClockIMFClock**outプレゼンテーション クロックの IMFClock インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_UNEXPECTED
Media Session にはプレゼンテーション クロックがありません。
MF_E_SHUTDOWN
Media Session はシャットダウンされています。

解説(Remarks)

アプリケーションは、返された IMFClock ポインターに対して IMFPresentationClock インターフェイスをクエリできます。ただし、アプリケーションはこのインターフェイスを使用してプレゼンテーション クロックの状態を制御すべきではありません。代わりに、アプリケーションは常に Media Session の IMFMediaSession インターフェイスのトランスポート制御メソッド (StartStopPause など) を呼び出す必要があります。

vtbl 15 HRESULT GetSessionCapabilities(DWORD* pdwCaps)

現在のプレゼンテーションに基づいて、Media Session の機能を取得します。

pdwCapsDWORD*out

次のフラグの 0 個以上をビットごとの OR で組み合わせた値を受け取ります。

意味
MFSESSIONCAP_PAUSE
Media Session を一時停止できます。
MFSESSIONCAP_RATE_FORWARD
Media Session は 1.0 より速いレートでの順方向再生をサポートします。
MFSESSIONCAP_RATE_REVERSE
Media Session は逆方向再生をサポートします。
MFSESSIONCAP_SEEK
Media Session をシークできます。
MFSESSIONCAP_START
Media Session を開始できます。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_POINTER
NULL ポインター引数です。
MF_E_SHUTDOWN
Media Session はシャットダウンされています。
vtbl 16 HRESULT GetFullTopology(DWORD dwGetFullTopologyFlags, ULONGLONG TopoId, IMFTopology** ppFullTopology)

Media Session からトポロジを取得します。

dwGetFullTopologyFlagsDWORDinMFSESSION_GETFULLTOPOLOGY_FLAGS 列挙体の 0 個以上のフラグをビットごとの OR で組み合わせた値。
TopoIdULONGLONGinトポロジの識別子。dwGetFullTopologyFlags パラメーターに MFSESSION_GETFULLTOPOLOGY_CURRENT フラグが含まれている場合、このパラメーターは無視されます。トポロジの識別子を取得するには、IMFTopology::GetTopologyID を呼び出します。
ppFullTopologyIMFTopology**outトポロジの IMFTopology インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_SHUTDOWN
Media Session はシャットダウンされています。

解説(Remarks)

dwGetFullTopologyFlags パラメーターに MFSESSION_GETFULLTOPOLOGY_CURRENT フラグが指定されている場合、このメソッドは現在のプレゼンテーションのトポロジを返します。それ以外の場合、このメソッドはキューに入れられているすべてのトポロジの中から、TopoId パラメーターで指定された識別子に一致するものを検索します。

このメソッドは、現在のプレゼンテーションまたは保留中のプレゼンテーションのトポロジを取得するために使用できます。すでに終了したプレゼンテーションのトポロジを取得するためには使用できません。

ppFullTopo で返されるトポロジは、部分トポロジではなく完全なトポロジです。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMFMediaSession "{90377834-21D0-4DEE-8214-BA2E3E6C1127}"
#usecom global IMFMediaSession IID_IMFMediaSession "{}"
#comfunc global IMFMediaSession_SetTopology             7 int,sptr
#comfunc global IMFMediaSession_ClearTopologies         8
#comfunc global IMFMediaSession_Start                   9 var,var
#comfunc global IMFMediaSession_Pause                   10
#comfunc global IMFMediaSession_Stop                    11
#comfunc global IMFMediaSession_Close                   12
#comfunc global IMFMediaSession_Shutdown                13
#comfunc global IMFMediaSession_GetClock                14 sptr
#comfunc global IMFMediaSession_GetSessionCapabilities  15 var
#comfunc global IMFMediaSession_GetFullTopology         16 int,int64,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。