IMFMediaSession
COM公式ドキュメント
保護されたコンテンツおよび保護されていないコンテンツの再生コントロールを提供します。
メソッド 10
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Media Session にトポロジを設定します。
| dwSetTopologyFlags | DWORD | in | MFSESSION_SETTOPOLOGY_FLAGS 列挙体の 0 個以上のフラグをビットごとの OR で組み合わせた値。 |
| pTopology | IMFTopology* | in | トポロジ オブジェクトの IMFTopology インターフェイスへのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| Media Session の現在の状態ではこの操作を実行できません。 | |
| Media Session はシャットダウンされています。 | |
| トポロジに、次の属性のうち 1 つ以上について無効な値が含まれています。 | |
| デバッグ中は保護されたコンテンツを再生できません。 |
解説(Remarks)
pTopology が完全なトポロジである場合は、dwSetTopologyFlags パラメーターに MFSESSION_SETTOPOLOGY_NORESOLUTION フラグを設定してください。それ以外の場合、トポロジは部分トポロジであると見なされます。Media Session はトポロジ ローダーを使用して、部分トポロジを完全なトポロジに解決します。
Media Session が現在一時停止または停止している場合、SetTopology メソッドは次に IMFMediaSession::Start が呼び出されるまで有効になりません。
Media Session が現在実行中の場合、または次に Start を呼び出した時点で、SetTopology メソッドは次の処理を行います。
- dwSetTopologyFlags に MFSESSION_SETTOPOLOGY_IMMEDIATE フラグが設定されている場合、Media Session は現在のプレゼンテーションをただちに終了し、保留中のすべてのトポロジをクリアして、pTopology を使用して新しいプレゼンテーションを開始します。
- それ以外の場合、Media Session は pTopology をキューに入れ、現在のプレゼンテーションが完了した時点で新しいプレゼンテーションを開始します。現在のプレゼンテーションがない場合は、新しいプレゼンテーションがただちに開始されます。
- Windows 7 以降では、MFSESSION_SETTOPOLOGY_CLEAR_CURRENT フラグを指定して、現在のトポロジをクリアしつつ、キューにある他の保留中のトポロジは残しておくこともできます。
Media Session で再生用にキューに入れられているすべてのプレゼンテーションをクリアします。
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| Media Session の現在の状態ではこの操作を実行できません。 | |
| Media Session はシャットダウンされています。 |
解説(Remarks)
このメソッドは非同期です。操作が完了すると、Media Session は MESessionTopologiesCleared イベントを送信します。
このメソッドは現在のトポロジをクリアしません。再生を待機してキューに入れられているトポロジのみを削除します。現在のトポロジを削除するには、MFSESSION_SETTOPOLOGY_CLEAR_CURRENT フラグを指定して IMFMediaSession::SetTopology を呼び出してください。
Media Session を開始します。
| pguidTimeFormat | GUID* | in | pvarStartPosition パラメーターの時間形式を指定する GUID へのポインター。このパラメーターには NULL を指定できます。NULL を指定することは GUID_NULL を渡すことと同じです。 次の時間形式 GUID が定義されています。
| ||||||||
| pvarStartPosition | PROPVARIANT* | in | 再生の開始位置を指定する PROPVARIANT へのポインター。このパラメーターの意味とデータ型は pguidTimeFormat パラメーターによって示されます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| Media Session の現在の状態ではこの操作を実行できません。 | |
| Media Session はシャットダウンされています。 |
解説(Remarks)
このメソッドが呼び出されると、Media Session はプレゼンテーション クロックを開始し、メディア サンプルの処理を開始します。
このメソッドは非同期です。メソッドが完了すると、Media Session は MESessionStarted イベントを送信します。
Media Session を一時停止します。
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| Media Session の現在の状態ではこの操作を実行できません。 | |
| Media Session はシャットダウンされています。 | |
| 停止中は Media Session を一時停止できません。 |
解説(Remarks)
このメソッドはプレゼンテーション クロックを一時停止します。
このメソッドは非同期です。操作が完了すると、Media Session は MESessionPaused イベントを送信します。
Media Session が停止している場合、このメソッドは失敗します。
Media Session を停止します。
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| Media Session の現在の状態ではこの操作を実行できません。 | |
| Media Session はシャットダウンされています。 |
解説(Remarks)
このメソッドは非同期です。操作が完了すると、Media Session は MESessionStopped イベントを送信します。
Media Session を閉じ、使用しているすべてのリソースを解放します。
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| Media Session はシャットダウンされています。 |
解説(Remarks)
このメソッドは非同期です。操作が完了すると、Media Session は MESessionClosed イベントを送信します。
Close メソッドを呼び出した後、Media Session で有効なメソッドは次のものだけです。
Media Session をシャットダウンし、Media Session が使用しているすべてのリソースを解放します。
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
Media Session の使用が終わったら、IUnknown::Release の最後の呼び出しの前にこのメソッドを呼び出してください。そうしないと、アプリケーションでメモリ リークが発生します。
このメソッドを呼び出した後、他の IMFMediaSession メソッドは MF_E_SHUTDOWN を返します。
Media Session のプレゼンテーション クロックを取得します。
| ppClock | IMFClock** | out | プレゼンテーション クロックの IMFClock インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| Media Session にはプレゼンテーション クロックがありません。 | |
| Media Session はシャットダウンされています。 |
解説(Remarks)
アプリケーションは、返された IMFClock ポインターに対して IMFPresentationClock インターフェイスをクエリできます。ただし、アプリケーションはこのインターフェイスを使用してプレゼンテーション クロックの状態を制御すべきではありません。代わりに、アプリケーションは常に Media Session の IMFMediaSession インターフェイスのトランスポート制御メソッド (Start、Stop、Pause など) を呼び出す必要があります。
現在のプレゼンテーションに基づいて、Media Session の機能を取得します。
| pdwCaps | DWORD* | out | 次のフラグの 0 個以上をビットごとの OR で組み合わせた値を受け取ります。
|
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| NULL ポインター引数です。 | |
| Media Session はシャットダウンされています。 |
Media Session からトポロジを取得します。
| dwGetFullTopologyFlags | DWORD | in | MFSESSION_GETFULLTOPOLOGY_FLAGS 列挙体の 0 個以上のフラグをビットごとの OR で組み合わせた値。 |
| TopoId | ULONGLONG | in | トポロジの識別子。dwGetFullTopologyFlags パラメーターに MFSESSION_GETFULLTOPOLOGY_CURRENT フラグが含まれている場合、このパラメーターは無視されます。トポロジの識別子を取得するには、IMFTopology::GetTopologyID を呼び出します。 |
| ppFullTopology | IMFTopology** | out | トポロジの IMFTopology インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表に示すものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| Media Session はシャットダウンされています。 |
解説(Remarks)
dwGetFullTopologyFlags パラメーターに MFSESSION_GETFULLTOPOLOGY_CURRENT フラグが指定されている場合、このメソッドは現在のプレゼンテーションのトポロジを返します。それ以外の場合、このメソッドはキューに入れられているすべてのトポロジの中から、TopoId パラメーターで指定された識別子に一致するものを検索します。
このメソッドは、現在のプレゼンテーションまたは保留中のプレゼンテーションのトポロジを取得するために使用できます。すでに終了したプレゼンテーションのトポロジを取得するためには使用できません。
ppFullTopo で返されるトポロジは、部分トポロジではなく完全なトポロジです。
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 指定が可能。#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 sptr,sptr #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 sptr #comfunc global IMFMediaSession_GetFullTopology 16 int,int64,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。