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

IMFPMediaPlayer

COM
IIDa714590a-58af-430a-85bf-44f5ec838d85継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

メディアファイルを再生するためのメソッドを提供します。(非推奨。)

メソッド 36

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

vtbl 3 HRESULT Play()

再生を開始します。(IMFPMediaPlayer.Play)

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_PLAY です。

vtbl 4 HRESULT Pause()

再生を一時停止します。(IMFPMediaPlayer.Pause)

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_PAUSE です。

vtbl 5 HRESULT Stop()

再生を停止します。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_STOP です。

現在のメディア項目は引き続き有効です。再生が停止すると、再生位置は現在のメディア項目の先頭にリセットされます。

vtbl 6 HRESULT FrameStep()

ビデオを 1 フレーム進めます。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
フレームステップできません。このエラーコードの原因には次のものがあります。
  • 再生用にキューに登録されたメディア項目がありません。
  • 現在のメディア項目にビデオが含まれていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。
MF_E_UNSUPPORTED_RATE
メディアソースがフレームステップをサポートしていないか、現在の再生レートが負の値です。

解説(Remarks)

このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_FRAME_STEP です。

プレーヤーオブジェクトは、逆方向再生中(つまり再生レートが負の値のとき)のフレームステップをサポートしていません。

vtbl 7 HRESULT SetPosition(GUID* guidPositionType, PROPVARIANT* pvPositionValue)

再生位置を設定します。

guidPositionTypeGUID*in

再生位置の時間単位。次の値が定義されています。

意味
MFP_POSITIONTYPE_100NS
100 ナノ秒単位。

pvPositionValue の値は LARGE_INTEGER でなければなりません。

  • バリアント型 (vt): VT_I8
  • バリアントメンバー: hVal
pvPositionValuePROPVARIANT*in新しい再生位置。このパラメーターの意味とデータ型は guidPositionType パラメーターによって示されます。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
無効な引数です。
HRESULT_FROM_WIN32( ERROR_SEEK )
pvPositionValue の値が無効です。
MF_E_INVALIDREQUEST
メディア項目がキューに登録されていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

再生が停止しているときにこのメソッドを呼び出すと、新しい位置は再生が再開された後に有効になります。

このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_POSITION_SET です。

SetPosition を呼び出す前に再生が開始されていた場合、再生は新しい位置から再開されます。再生が一時停止していた場合、ビデオは更新され、新しい位置の現在のフレームが表示されます。

guidPositionTypeMFP_POSITIONTYPE_100NS にして SetPosition を連続で 2 回呼び出し、最初の呼び出しが完了する前に 2 回目の呼び出しを行った場合、2 回目の呼び出しが 1 回目に優先します。優先されなかった呼び出しのステータスコードは、その呼び出しのイベントデータで S_FALSE に設定されます。この動作により、SetPosition の繰り返し呼び出しによる過度のレイテンシーを防ぎます。各呼び出しがメディアソースに比較的時間のかかるシーク操作を強制する可能性があるためです。

vtbl 8 HRESULT GetPosition(GUID* guidPositionType, PROPVARIANT* pvPositionValue)

現在の再生位置を取得します。(IMFPMediaPlayer.GetPosition)

guidPositionTypeGUID*in

再生位置の時間単位を指定します。次の値が定義されています。

意味
MFP_POSITIONTYPE_100NS
100 ナノ秒単位。

pvPositionValue で返される値は LARGE_INTEGER です。

  • バリアント型 (vt): VT_I8
  • バリアントメンバー: hVal
pvPositionValuePROPVARIANT*out再生位置を受け取る PROPVARIANT へのポインター。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
無効な引数です。
MF_E_INVALIDREQUEST
メディア項目がキューに登録されていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

再生位置は、メディア項目の開始時刻を基準として計算されます。開始時刻は IMFPMediaItem::SetStartStopPosition を呼び出して指定できます。たとえば、開始時刻を 20 秒に設定し、ソースの長さが 60 秒の場合、GetPosition が返す値の範囲は 0~40 秒です。

次のコードは、現在の位置を 100 ナノ秒単位の LONGLONG 値として取得します。

HRESULT GetPositionHNS(
    IMFPMediaPlayer *pPlayer, 
    LONGLONG *phnsPosition    // Receives the position in hns.
)
{
    HRESULT hr = S_OK;

    PROPVARIANT var;
    PropVariantInit(&var);

    *phnsPosition = 0;

    hr = pPlayer->GetPosition(MFP_POSITIONTYPE_100NS, &var);

    if (SUCCEEDED(hr))
    {
        *phnsPosition = var.hVal.QuadPart;
    }

    PropVariantClear(&var);
    return hr;
}
vtbl 9 HRESULT GetDuration(GUID* guidPositionType, PROPVARIANT* pvDurationValue)

現在のメディア項目の再生時間を取得します。

guidPositionTypeGUID*in

時間の単位を指定します。次の値が定義されています。

意味
MFP_POSITIONTYPE_100NS
100 ナノ秒単位。

pvDurationValue で返される値は ULARGE_INTEGER です。

  • バリアント型 (vt): VT_UI8
  • バリアントメンバー: uhVal
pvDurationValuePROPVARIANT*out再生時間を受け取る PROPVARIANT へのポインター。

戻り値

このメソッドは次のいずれかの値を返すことができます。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_ATTRIBUTENOTFOUND
メディアソースに再生時間がありません。このエラーは、ビデオカメラなどのライブソースで発生することがあります。
MF_E_INVALIDREQUEST
現在のメディア項目がありません。

解説(Remarks)

このメソッドは、メディア項目の開始時刻と停止時刻を考慮して再生時間を計算します。開始時刻と停止時刻を設定するには、メディア項目に対して IMFPMediaItem::SetStartStopPosition を呼び出します。開始時刻と停止時刻に関係なく、基となるメディアファイルの実際の再生時間を取得するには、IMFPMediaItem::GetDuration を呼び出します。

たとえば、30 秒の音声ファイルを読み込み、開始時刻を 2 秒、停止時刻を 10 秒に設定したとします。IMFPMediaItem::GetDuration メソッドは 30 秒を返しますが、IMFPMediaPlayer::GetDuration メソッドは 8 秒を返します。

vtbl 10 HRESULT SetRate(FLOAT flRate)

再生レートを設定します。(IMFPMediaPlayer.SetRate)

flRateFLOATin再生レート。再生レートは、通常のレートに対する現在のレートの比率として表されます。たとえば、1.0 は通常の再生速度、0.5 は半分の速度、2.0 は 2 倍の速度を示します。正の値は順方向再生を、負の値は逆方向再生を示します。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_OUT_OF_RANGE
flRate パラメーターが 0 です。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_RATE_SET です。

このメソッドは、サポートされている最も近いレートを設定します。これは基となるメディアソースに依存します。たとえば、flRate が 50 で、ソースの最大レートが通常の 8 倍の場合、メソッドはレートを 8.0 に設定します。実際のレートは MFP_EVENT_TYPE_RATE_SET イベントのイベントデータに示されます。

サポートされているレートの範囲を調べるには、IMFPMediaPlayer::GetSupportedRates を呼び出します。

このメソッドはレート 0 の再生をサポートしていませんが、Media Foundation は他のコンテキストでレート 0 に意味を定義しています。

新しいレートは現在のメディア項目にのみ適用されます。新しいメディア項目を設定すると、再生レートは 1.0 にリセットされます。

vtbl 11 HRESULT GetRate(FLOAT* pflRate)

現在の再生レートを取得します。(IMFPMediaPlayer.GetRate)

pflRateFLOAT*out再生レートを受け取ります。再生レートは、通常のレートに対する現在のレートの比率として表されます。たとえば、1.0 は通常の再生、0.5 は半分の速度、2.0 は 2 倍の速度を示します。正の値は順方向再生を、負の値は逆方向再生を示します。

戻り値

このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 12 HRESULT GetSupportedRates(BOOL fForwardDirection, FLOAT* pflSlowestRate, FLOAT* pflFastestRate)

サポートされている再生レートの範囲を取得します。

fForwardDirectionBOOLin順方向再生のレートを取得するには TRUE を指定します。逆方向再生のレートを取得するには FALSE を指定します。
pflSlowestRateFLOAT*outサポートされている最も遅いレートを受け取ります。
pflFastestRateFLOAT*outサポートされている最も速いレートを受け取ります。

戻り値

このメソッドは次のいずれかの値を返すことができます。

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_UNSUPPORTED_RATE
現在のメディア項目は、要求された方向(順方向または逆方向)での再生をサポートしていません。

解説(Remarks)

再生レートは、通常のレートに対する現在のレートの比率として表されます。たとえば、1.0 は通常の再生速度、0.5 は半分の速度、2.0 は 2 倍の速度を示します。正の値は順方向再生を、負の値は逆方向再生を示します。

vtbl 13 HRESULT GetState(MFP_MEDIAPLAYER_STATE* peState)

MFPlay プレーヤーオブジェクトの現在の再生状態を取得します。

peStateMFP_MEDIAPLAYER_STATE*out再生状態を MFP_MEDIAPLAYER_STATE 列挙体のメンバーとして受け取ります。

戻り値

このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、プレーヤーオブジェクトがシャットダウンされた後でも呼び出すことができます。

IMFPMediaPlayer の多くのメソッドは非同期に完了します。非同期操作が保留中の間、現在の状態は操作が完了するまで更新されません。操作が完了すると、アプリケーションはイベントコールバックを受け取り、新しい状態はコールバックに渡される MFP_EVENT_HEADER 構造体に格納されます。

vtbl 14 HRESULT CreateMediaItemFromURL(LPWSTR pwszURL, BOOL fSync, UINT_PTR dwUserData, IMFPMediaItem** ppMediaItem)

URL からメディア項目を作成します。

pwszURLLPWSTRinメディアファイルの URL を含む NULL 終端文字列。
fSyncBOOLinTRUE の場合、メソッドは完了するまでブロックします。FALSE の場合、メソッドはブロックせず、非同期に完了します。
dwUserDataUINT_PTRinメディア項目に格納するアプリケーション定義の値。この値をメディア項目から取得するには、IMFPMediaItem::GetUserData を呼び出します。
ppMediaItemIMFPMediaItem**outoptionalIMFPMediaItem インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。fSyncTRUE の場合、このパラメーターは有効なポインターでなければなりません。bSyncFALSE の場合、このパラメーターは NULL でなければなりません。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
無効な引数です。
MF_E_INVALIDREQUEST
無効な要求です。このエラーは、fSyncFALSE で、アプリケーションがコールバックインターフェイスを提供していない場合に発生することがあります。「解説」を参照してください。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。
MF_E_UNSUPPORTED_SCHEME
サポートされていないプロトコルです。

解説(Remarks)

このメソッドはメディア項目を再生用にキューに登録しません。項目を再生用にキューに登録するには、IMFPMediaPlayer::SetMediaItem を呼び出します。

CreateMediaItemFromURL メソッドは、同期または非同期のいずれかで呼び出すことができます。

コールバックインターフェイスは、MFPlay プレーヤーオブジェクトを作成するために最初に MFPCreateMediaPlayer を呼び出したときに設定されます。コールバックインターフェイスを提供しない場合、fSync パラメーターは TRUE でなければなりません。それ以外の場合、CreateMediaItemFromURLMF_E_INVALIDREQUEST を返します。

CreateMediaItemFromURL を複数回非同期に呼び出した場合、同じ順序で完了する保証はありません。dwUserData パラメーターを使用して、作成されたメディア項目を保留中の要求と対応付けてください。

現在、このメソッドは、URL が次のいずれかのプロトコルを指定している場合に MF_E_UNSUPPORTED_SCHEME を返します: rtsp*、mms*、または mcast。MFPlay で Media Foundation ネットワークソースを使用する場合は、まず ソースリゾルバー を使用してソースを作成し、次に IMFPMediaPlayer::CreateMediaItemFromObject を呼び出します。

ソースの構成

内部的に、このメソッドはメディアソースを作成します。メディアソースを構成するには、次の手順を実行します。
  1. IMFPMediaPlayer ポインターに対して QueryInterface を呼び出し、IPropertyStore インターフェイスを取得します。
  2. IPropertyStore::SetValue を呼び出して、メディアソースのプロパティを設定します。構成プロパティの一覧については、メディアソースの構成を参照してください。サードパーティのメディアソースはカスタムプロパティを定義する場合があります。
  3. CreateMediaItemFromURL メソッドを呼び出して、メディア項目を作成します。
vtbl 15 HRESULT CreateMediaItemFromObject(IUnknown* pIUnknownObj, BOOL fSync, UINT_PTR dwUserData, IMFPMediaItem** ppMediaItem)

オブジェクトからメディア項目を作成します。

pIUnknownObjIUnknown*inオブジェクトの IUnknown インターフェイスへのポインター。「解説」を参照してください。
fSyncBOOLinTRUE の場合、メソッドは完了するまでブロックします。FALSE の場合、メソッドはブロックせず、非同期に完了します。
dwUserDataUINT_PTRinメディア項目に格納するアプリケーション定義の値。この値をメディア項目から取得するには、IMFPMediaItem::GetUserData を呼び出します。
ppMediaItemIMFPMediaItem**outoptionalIMFPMediaItem インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。fSyncTRUE の場合、このパラメーターは有効なポインターでなければなりません。bSyncFALSE の場合、このパラメーターは NULL でなければなりません。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
無効な引数です。
MF_E_INVALIDREQUEST
無効な要求です。このエラーは、fSyncFALSE で、アプリケーションがコールバックインターフェイスを提供していない場合に発生することがあります。「解説」を参照してください。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

pIUnknownObj パラメーターには、次のいずれかを指定する必要があります。

このメソッドはメディア項目を再生用にキューに登録しません。項目を再生用にキューに登録するには、IMFPMediaPlayer::SetMediaItem を呼び出します。

CreateMediaItemFromObject メソッドは、同期または非同期のいずれかで呼び出すことができます。

コールバックインターフェイスは、MFPlay プレーヤーオブジェクトを作成するために最初に MFPCreateMediaPlayer を呼び出したときに設定されます。コールバックインターフェイスを提供しない場合、fSync パラメーターは TRUE でなければなりません。それ以外の場合、CreateMediaItemFromObjectMF_E_INVALIDREQUEST を返します。

CreateMediaItemFromObject を複数回非同期に呼び出した場合、同じ順序で完了する保証はありません。dwUserData パラメーターを使用して、作成されたメディア項目を保留中の要求と対応付けてください。

ソースの構成

pIUnknownObj がバイトストリームを指している場合、次の手順を実行してメディアソースを構成できます。
  1. IMFPMediaPlayer ポインターに対して QueryInterface を呼び出し、IPropertyStore インターフェイスを取得します。
  2. IPropertyStore::SetValue を呼び出して、メディアソースのプロパティを設定します。構成プロパティの一覧については、メディアソースの構成を参照してください。サードパーティのメディアソースはカスタムプロパティを定義する場合があります。
  3. CreateMediaItemFromObject メソッドを呼び出して、メディア項目を作成します。
pIUnknownObj がメディアソースを指している場合は、ソースを作成する時点でソースを構成できます。
vtbl 16 HRESULT SetMediaItem(IMFPMediaItem* pIMFPMediaItem)

メディア項目を再生用にキューに登録します。

pIMFPMediaItemIMFPMediaItem*inメディア項目の IMFPMediaItem インターフェイスへのポインター。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
無効な引数です。
MF_E_DRM_UNSUPPORTED
メディア項目に保護されたコンテンツが含まれています。MFPlay は現在、保護されたコンテンツをサポートしていません。
MF_E_NO_AUDIO_PLAYBACK_DEVICE
音声再生デバイスが見つかりませんでした。このエラーは、メディアソースに音声が含まれているが、システムに音声再生デバイスがない場合に発生することがあります。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_MEDIAITEM_SET です。

メディア項目を作成するには、IMFPMediaPlayer::CreateMediaItemFromObject または IMFPMediaPlayer::CreateMediaItemFromURL を呼び出します。メディア項目は、その項目を作成したのと同じ MFPlay プレーヤーオブジェクトで使用する必要があります。メディア項目が別のプレーヤーオブジェクトのインスタンスで作成された場合、SetMediaItemE_INVALIDARG を返します。

vtbl 17 HRESULT ClearMediaItem()

現在のメディア項目をクリアします。

戻り値

このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは再生を停止し、現在のメディア項目に対するプレーヤーオブジェクトの参照を解放します。

このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_MEDIAITEM_CLEARED です。

vtbl 18 HRESULT GetMediaItem(IMFPMediaItem** ppIMFPMediaItem)

現在のメディア項目へのポインターを取得します。

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

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
E_FAIL
現在のメディア項目がありません。
MF_E_NOT_FOUND
現在のメディア項目がありません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

IMFPMediaPlayer::SetMediaItem メソッドは非同期です。そのため、SetMediaItem が保留中の間、GetMediaItem は設定したばかりのメディア項目を返しません。代わりに、アプリケーションは IMFPMediaPlayerCallback インターフェイスを実装し、MFP_EVENT_TYPE_MEDIAITEM_SET イベントを処理する必要があります。詳細については、プレーヤーからのイベントの受信を参照してください。

前述の注意点は、MFPCreateMediaPlayer 関数でメディア項目を設定する場合にも当てはまります。

vtbl 19 HRESULT GetVolume(FLOAT* pflVolume)

現在の音声ボリュームを取得します。

pflVolumeFLOAT*out音声ボリュームを受け取ります。ボリュームは減衰レベルとして表され、0.0 は無音、1.0 はフルボリューム(減衰なし)を示します。

戻り値

このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 20 HRESULT SetVolume(FLOAT flVolume)

音声ボリュームを設定します。

flVolumeFLOATinボリュームレベル。ボリュームは減衰レベルとして表され、0.0 は無音、1.0 はフルボリューム(減衰なし)を示します。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_OUT_OF_RANGE
flVolume パラメーターが無効です。

解説(Remarks)

再生開始前にこのメソッドを呼び出した場合、設定は再生開始後に適用されます。

このメソッドは、プレーヤーの音声セッションのマスターボリュームレベルを変更しません。代わりに、現在のメディア項目に属する音声ストリームのチャンネルごとのボリュームレベルを調整します。音声セッション内の他のストリームは影響を受けません。詳細については、音声セッションの管理を参照してください。

vtbl 21 HRESULT GetBalance(FLOAT* pflBalance)

現在の音声バランスを取得します。

pflBalanceFLOAT*out

バランスを受け取ります。値は次の範囲(両端を含む)内の任意の数値を指定できます。

意味
-1.0
左チャンネルがフルボリュームで、右チャンネルは無音です。
+1.0
右チャンネルがフルボリュームで、左チャンネルは無音です。

値が 0 の場合、左右のチャンネルは等しいボリュームになります。既定値は 0 です。

戻り値

このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 22 HRESULT SetBalance(FLOAT flBalance)

音声バランスを設定します。(IMFPMediaPlayer.SetBalance)

flBalanceFLOATin

音声バランス。値は次の範囲(両端を含む)内の任意の数値を指定できます。

意味
-1.0
左チャンネルがフルボリュームで、右チャンネルは無音です。
+1.0
右チャンネルがフルボリュームで、左チャンネルは無音です。

値が 0 の場合、左右のチャンネルは等しいボリュームになります。既定値は 0 です。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_OUT_OF_RANGE
flBalance パラメーターが無効です。

解説(Remarks)

再生開始前にこのメソッドを呼び出した場合、設定は再生開始時に適用されます。

vtbl 23 HRESULT GetMute(BOOL* pfMute)

音声がミュートされているかどうかを照会します。(IMFPMediaPlayer.GetMute)

pfMuteBOOL*out音声がミュートされている場合は TRUE、そうでない場合は FALSE を受け取ります。

戻り値

このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 24 HRESULT SetMute(BOOL fMute)

音声のミュートまたはミュート解除を行います。(IMFPMediaPlayer.SetMute)

fMuteBOOLin音声をミュートするには TRUE、ミュートを解除するには FALSE を指定します。

戻り値

このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

再生開始前にこのメソッドを呼び出した場合、設定は再生開始後に適用されます。

このメソッドは、プレーヤーが属する音声セッション全体をミュートしません。現在のメディア項目のストリームのみをミュートします。音声セッション内の他のストリームは影響を受けません。詳細については、音声セッションの管理を参照してください。

vtbl 25 HRESULT GetNativeVideoSize(SIZE* pszVideo, SIZE* pszARVideo)

ビデオのサイズとアスペクト比を取得します。

pszVideoSIZE*outoptionalビデオのサイズをピクセル単位で受け取ります。このパラメーターは NULL にできます。
pszARVideoSIZE*outoptionalビデオのピクチャアスペクト比を受け取ります。このパラメーターは NULL にできます。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
現在のメディア項目にビデオが含まれていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

少なくとも 1 つのパラメーターは NULL 以外でなければなりません。

vtbl 26 HRESULT GetIdealVideoSize(SIZE* pszMin, SIZE* pszMax)

パフォーマンスや画質を著しく低下させることなく表示できるビデオサイズの範囲を取得します。

pszMinSIZE*outoptional望ましい最小サイズを受け取ります。このパラメーターは NULL にできます。
pszMaxSIZE*outoptional望ましい最大サイズを受け取ります。このパラメーターは NULL にできます。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
現在のメディア項目にビデオが含まれていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

少なくとも 1 つのパラメーターは NULL 以外でなければなりません。サイズはピクセル単位で指定されます。

vtbl 27 HRESULT SetVideoSourceRect(MFVideoNormalizedRect* pnrcSource)

ビデオのソース矩形を設定します。

pnrcSourceMFVideoNormalizedRect*in

ソース矩形を指定する MFVideoNormalizedRect 構造体へのポインター。この矩形は、ビデオのどの部分を表示するかを定義します。次のように定義される正規化座標で指定されます。

  • ビデオ画像の左上隅は (0, 0) です。
  • ビデオ画像の右下隅は (1, 1) です。
画像全体を表示するには、ソース矩形を {0, 0, 1, 1} に設定します。これが既定値です。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
現在のメディア項目にビデオが含まれていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

MFPlay はソース矩形を引き伸ばしてビデオウィンドウ全体を埋めます。既定では、MFPlay はソースの正しいアスペクト比を維持し、必要に応じてレターボックス表示を行います。レターボックスの色は IMFPMediaPlayer::SetBorderColor メソッドで制御されます。

このメソッドは、現在メディア項目が設定されていない場合、または現在のメディア項目にビデオが含まれていない場合に失敗します。

再生開始前にビデオの位置を設定するには、MFP_EVENT_TYPE_MEDIAITEM_SET イベントのイベントハンドラー内でこのメソッドを呼び出します。詳細については、IMFPMediaPlayerCallback::OnMediaPlayerEvent を参照してください。

vtbl 28 HRESULT GetVideoSourceRect(MFVideoNormalizedRect* pnrcSource)

ビデオのソース矩形を取得します。

pnrcSourceMFVideoNormalizedRect*out

ソース矩形を指定する MFVideoNormalizedRect 構造体へのポインター。この矩形は、ビデオのどの部分を表示するかを定義します。次のように定義される正規化座標で指定されます。

  • ビデオ画像の左上隅は (0, 0) です。
  • ビデオ画像の右下隅は (1, 1) です。
ソース矩形が {0, 0, 1, 1} の場合、画像全体が表示されます。これが既定値です。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
現在のメディア項目にビデオが含まれていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。
vtbl 29 HRESULT SetAspectRatioMode(DWORD dwAspectRatioMode)

再生中にビデオのアスペクト比を維持するかどうかを指定します。

dwAspectRatioModeDWORDinMFVideoAspectRatioMode 列挙体の 1 つ以上のフラグのビットごとの OR

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
現在のメディア項目にビデオが含まれていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

このメソッドは、現在メディア項目が設定されていない場合、または現在のメディア項目にビデオが含まれていない場合に失敗します。

再生開始前にアスペクト比モードを設定するには、MFP_EVENT_TYPE_MEDIAITEM_SET イベントのイベントハンドラー内でこのメソッドを呼び出します。詳細については、IMFPMediaPlayerCallback::OnMediaPlayerEvent を参照してください。

vtbl 30 HRESULT GetAspectRatioMode(DWORD* pdwAspectRatioMode)

現在のアスペクト比補正モードを取得します。このモードは、再生中にビデオのアスペクト比を維持するかどうかを制御します。

pdwAspectRatioModeDWORD*outMFVideoAspectRatioMode 列挙体の 1 つ以上のフラグのビットごとの OR を受け取ります。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
現在のメディア項目にビデオが含まれていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。
vtbl 31 HRESULT GetVideoWindow(HWND* phwndVideo)

ビデオが表示されるウィンドウを取得します。

phwndVideoHWND*outビデオが表示されるアプリケーションウィンドウへのハンドルを受け取ります。

戻り値

このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

ビデオウィンドウは、MFPlay プレーヤーオブジェクトを作成するために最初に MFPCreateMediaPlayer を呼び出したときに指定されます。

vtbl 32 HRESULT UpdateVideo()

ビデオフレームを更新します。(IMFPMediaPlayer.UpdateVideo)

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
現在のメディア項目にビデオが含まれていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

アプリケーションのビデオ再生ウィンドウが WM_PAINT または WM_SIZE メッセージを受け取ったときに、このメソッドを呼び出します。このメソッドは 2 つの機能を実行します。

重要 UpdateVideo を呼び出す前に GDI の BeginPaint 関数を呼び出してください。

IMFPMediaPlayer *g_pPlayer;

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;

    switch (uMsg)
    {
    case WM_PAINT:
        hdc = BeginPaint(hwnd, &ps);
        if (g_pPlayer)
        {
            g_pPlayer->UpdateVideo();
        }
           EndPaint(hwnd, &ps);
        break;

    case WM_SIZE:        
        hdc = BeginPaint(hwnd, &ps);
        if (g_pPlayer)
        {
            g_pPlayer->UpdateVideo();
        }
           EndPaint(hwnd, &ps);
        break;

    // other messages

    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam); 
    }
    return 0;
}
vtbl 33 HRESULT SetBorderColor(COLORREF Clr)

ビデオの境界線の色を設定します。

ClrCOLORREFin境界線の色を COLORREF 値として指定します。この値を作成するには RGB マクロを使用します。既定値は黒です。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
現在のメディア項目にビデオが含まれていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。

解説(Remarks)

このメソッドは、現在メディア項目が設定されていない場合、または現在のメディア項目にビデオが含まれていない場合に失敗します。

再生開始前に境界線の色を設定するには、MFP_EVENT_TYPE_MEDIAITEM_SET イベントのイベントハンドラー内でこのメソッドを呼び出します。詳細については、IMFPMediaPlayerCallback::OnMediaPlayerEvent を参照してください。

vtbl 34 HRESULT GetBorderColor(COLORREF* pClr)

ビデオの境界線の現在の色を取得します。

pClrCOLORREF*out境界線の色を COLORREF 値として受け取ります。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
現在のメディア項目にビデオが含まれていません。
MF_E_SHUTDOWN
オブジェクトの Shutdown メソッドが呼び出されました。
vtbl 35 HRESULT InsertEffect(IUnknown* pEffect, BOOL fOptional)

音声またはビデオのエフェクトを再生に適用します。

pEffectIUnknown*in

次のいずれかの IUnknown インターフェイスへのポインター。

  • エフェクトを実装する Media Foundation トランスフォーム (MFT)。MFT は IMFTransform インターフェイスを公開します。
  • MFT を作成するアクティベーションオブジェクト。アクティベーションオブジェクトは IMFActivate インターフェイスを公開します。
fOptionalBOOLin

エフェクトが省略可能かどうかを指定します。

意味
TRUE
エフェクトは省略可能です。MFPlay プレーヤーオブジェクトがエフェクトを追加できない場合、エフェクトを無視して再生を続行します。
FALSE
MFPlay プレーヤーオブジェクトがエフェクトを追加できない場合、再生エラーが発生します。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_INVALIDINDEX
このエフェクトは既に追加されています。

解説(Remarks)

pEffect パラメーターで指定するオブジェクトは、ビデオエフェクトまたは音声エフェクトのいずれかを実装できます。エフェクトは、メソッドの呼び出し後に設定されるメディア項目に適用されます。現在のメディア項目には適用されません。

各メディア項目について、エフェクトは一致する種類(音声またはビデオ)の最初に選択されたストリームに適用されます。メディア項目に同じ種類の選択されたストリームが 2 つある場合、2 番目のストリームにはエフェクトが適用されません。メディア項目にエフェクトの種類に一致するストリームが含まれていない場合、エフェクトは無視されます。たとえば、ビデオエフェクトを設定して音声のみのファイルを再生した場合、ビデオエフェクトは無視されますが、エラーは発生しません。

エフェクトは、アプリケーションがエフェクトを削除するまで、後続のすべてのメディア項目に適用されます。エフェクトを削除するには、IMFPMediaPlayer::RemoveEffect または IMFPMediaPlayer::RemoveAllEffects を呼び出します。

同じ種類(音声またはビデオ)のエフェクトを複数設定した場合、InsertEffect を呼び出した順序と同じ順序で適用されます。

リモート再生の最適化

音声およびビデオエフェクトは、リモート再生に使用される最適化と互換性がない場合があります。次の注意点は、再生中に実際に使用される音声またはビデオエフェクトにのみ当てはまります。 つまり、必須エフェクトはリモート最適化より優先されますが、省略可能なエフェクトは優先されません。

リモート最適化は、他の理由で無効になることもあります。たとえば、プレーヤーオブジェクトの作成時に MFP_OPTION_NO_REMOTE_DESKTOP_OPTIMIZATION オプションを設定した場合は無効になります。その場合、MFPlay はすべての省略可能なエフェクトの挿入を試みます。

音声・ビデオ以外のエフェクトは、リモート最適化に影響しません。また、必須エフェクトを挿入しても、ソースにその種類のストリームが含まれていない場合、リモート最適化は無効になりません。

HRESULT AddPlaybackEffect(REFGUID clsid, IMFPMediaPlayer *pPlayer)
{
    IMFTransform *pMFT = NULL;

    HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, 
        IID_PPV_ARGS(&pMFT));

    if (SUCCEEDED(hr))
    {
        hr = pPlayer->InsertEffect(pMFT, TRUE); // Set as optional.
    }

    SafeRelease(&pMFT);
    return hr;
}
vtbl 36 HRESULT RemoveEffect(IUnknown* pEffect)

IMFPMediaPlayer::InsertEffect メソッドで追加されたエフェクトを削除します。

pEffectIUnknown*inエフェクトオブジェクトの IUnknown インターフェイスへのポインター。InsertEffect メソッドに渡したのと同じポインターを使用します。

戻り値

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

戻り値 説明
S_OK
メソッドは成功しました。
MF_E_NOT_FOUND
エフェクトが見つかりませんでした。

解説(Remarks)

変更は、プレーヤーに次に設定されるメディア項目に適用されます。エフェクトは現在のメディア項目からは削除されません。

vtbl 37 HRESULT RemoveAllEffects()

IMFPMediaPlayer::InsertEffect メソッドで追加されたすべてのエフェクトを削除します。

戻り値

このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

変更は、プレーヤーに次に設定されるメディア項目に適用されます。エフェクトは現在のメディア項目からは削除されません。

vtbl 38 HRESULT Shutdown()

MFPlay プレーヤーオブジェクトをシャットダウンし、オブジェクトが使用しているリソースを解放します。

戻り値

このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドを呼び出した後、ほとんどの IMFPMediaPlayer メソッドは MF_E_SHUTDOWN を返します。また、このプレーヤーオブジェクトのインスタンスから作成されたメディア項目はすべて無効化され、ほとんどの IMFPMediaItem メソッドも MF_E_SHUTDOWN を返します。

プレーヤーオブジェクトは、参照カウントが 0 に達すると自動的にシャットダウンします。すべての参照が解放される前にプレーヤーをシャットダウンするには、Shutdown メソッドを使用できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IMFPMediaPlayer "{A714590A-58AF-430A-85BF-44F5EC838D85}"
#usecom global IMFPMediaPlayer IID_IMFPMediaPlayer "{}"
#comfunc global IMFPMediaPlayer_Play                       3
#comfunc global IMFPMediaPlayer_Pause                      4
#comfunc global IMFPMediaPlayer_Stop                       5
#comfunc global IMFPMediaPlayer_FrameStep                  6
#comfunc global IMFPMediaPlayer_SetPosition                7 var,var
#comfunc global IMFPMediaPlayer_GetPosition                8 var,var
#comfunc global IMFPMediaPlayer_GetDuration                9 var,var
#comfunc global IMFPMediaPlayer_SetRate                    10 float
#comfunc global IMFPMediaPlayer_GetRate                    11 var
#comfunc global IMFPMediaPlayer_GetSupportedRates          12 int,var,var
#comfunc global IMFPMediaPlayer_GetState                   13 var
#comfunc global IMFPMediaPlayer_CreateMediaItemFromURL     14 wstr,int,sptr,sptr
#comfunc global IMFPMediaPlayer_CreateMediaItemFromObject  15 sptr,int,sptr,sptr
#comfunc global IMFPMediaPlayer_SetMediaItem               16 sptr
#comfunc global IMFPMediaPlayer_ClearMediaItem             17
#comfunc global IMFPMediaPlayer_GetMediaItem               18 sptr
#comfunc global IMFPMediaPlayer_GetVolume                  19 var
#comfunc global IMFPMediaPlayer_SetVolume                  20 float
#comfunc global IMFPMediaPlayer_GetBalance                 21 var
#comfunc global IMFPMediaPlayer_SetBalance                 22 float
#comfunc global IMFPMediaPlayer_GetMute                    23 var
#comfunc global IMFPMediaPlayer_SetMute                    24 int
#comfunc global IMFPMediaPlayer_GetNativeVideoSize         25 var,var
#comfunc global IMFPMediaPlayer_GetIdealVideoSize          26 var,var
#comfunc global IMFPMediaPlayer_SetVideoSourceRect         27 var
#comfunc global IMFPMediaPlayer_GetVideoSourceRect         28 var
#comfunc global IMFPMediaPlayer_SetAspectRatioMode         29 int
#comfunc global IMFPMediaPlayer_GetAspectRatioMode         30 var
#comfunc global IMFPMediaPlayer_GetVideoWindow             31 sptr
#comfunc global IMFPMediaPlayer_UpdateVideo                32
#comfunc global IMFPMediaPlayer_SetBorderColor             33 int
#comfunc global IMFPMediaPlayer_GetBorderColor             34 var
#comfunc global IMFPMediaPlayer_InsertEffect               35 sptr,int
#comfunc global IMFPMediaPlayer_RemoveEffect               36 sptr
#comfunc global IMFPMediaPlayer_RemoveAllEffects           37
#comfunc global IMFPMediaPlayer_Shutdown                   38
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。