IMFPMediaPlayer
COM公式ドキュメント
メディアファイルを再生するためのメソッドを提供します。(非推奨。)
メソッド 36
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
再生を開始します。(IMFPMediaPlayer.Play)
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_PLAY です。
再生を一時停止します。(IMFPMediaPlayer.Pause)
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_PAUSE です。
再生を停止します。
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_STOP です。
現在のメディア項目は引き続き有効です。再生が停止すると、再生位置は現在のメディア項目の先頭にリセットされます。
ビデオを 1 フレーム進めます。
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
フレームステップできません。このエラーコードの原因には次のものがあります。
|
|
| オブジェクトの Shutdown メソッドが呼び出されました。 | |
| メディアソースがフレームステップをサポートしていないか、現在の再生レートが負の値です。 |
解説(Remarks)
このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_FRAME_STEP です。
プレーヤーオブジェクトは、逆方向再生中(つまり再生レートが負の値のとき)のフレームステップをサポートしていません。
再生位置を設定します。
| guidPositionType | GUID* | in | 再生位置の時間単位。次の値が定義されています。
| ||||
| pvPositionValue | PROPVARIANT* | in | 新しい再生位置。このパラメーターの意味とデータ型は guidPositionType パラメーターによって示されます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 無効な引数です。 | |
|
pvPositionValue の値が無効です。 |
| メディア項目がキューに登録されていません。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
再生が停止しているときにこのメソッドを呼び出すと、新しい位置は再生が再開された後に有効になります。
このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_POSITION_SET です。
SetPosition を呼び出す前に再生が開始されていた場合、再生は新しい位置から再開されます。再生が一時停止していた場合、ビデオは更新され、新しい位置の現在のフレームが表示されます。
guidPositionType を MFP_POSITIONTYPE_100NS にして SetPosition を連続で 2 回呼び出し、最初の呼び出しが完了する前に 2 回目の呼び出しを行った場合、2 回目の呼び出しが 1 回目に優先します。優先されなかった呼び出しのステータスコードは、その呼び出しのイベントデータで S_FALSE に設定されます。この動作により、SetPosition の繰り返し呼び出しによる過度のレイテンシーを防ぎます。各呼び出しがメディアソースに比較的時間のかかるシーク操作を強制する可能性があるためです。
現在の再生位置を取得します。(IMFPMediaPlayer.GetPosition)
| guidPositionType | GUID* | in | 再生位置の時間単位を指定します。次の値が定義されています。
| ||||
| pvPositionValue | PROPVARIANT* | out | 再生位置を受け取る PROPVARIANT へのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 無効な引数です。 | |
| メディア項目がキューに登録されていません。 | |
| オブジェクトの 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;
}
現在のメディア項目の再生時間を取得します。
| guidPositionType | GUID* | in | 時間の単位を指定します。次の値が定義されています。
| ||||
| pvDurationValue | PROPVARIANT* | out | 再生時間を受け取る PROPVARIANT へのポインター。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| メディアソースに再生時間がありません。このエラーは、ビデオカメラなどのライブソースで発生することがあります。 | |
| 現在のメディア項目がありません。 |
解説(Remarks)
このメソッドは、メディア項目の開始時刻と停止時刻を考慮して再生時間を計算します。開始時刻と停止時刻を設定するには、メディア項目に対して IMFPMediaItem::SetStartStopPosition を呼び出します。開始時刻と停止時刻に関係なく、基となるメディアファイルの実際の再生時間を取得するには、IMFPMediaItem::GetDuration を呼び出します。
たとえば、30 秒の音声ファイルを読み込み、開始時刻を 2 秒、停止時刻を 10 秒に設定したとします。IMFPMediaItem::GetDuration メソッドは 30 秒を返しますが、IMFPMediaPlayer::GetDuration メソッドは 8 秒を返します。
再生レートを設定します。(IMFPMediaPlayer.SetRate)
| flRate | FLOAT | in | 再生レート。再生レートは、通常のレートに対する現在のレートの比率として表されます。たとえば、1.0 は通常の再生速度、0.5 は半分の速度、2.0 は 2 倍の速度を示します。正の値は順方向再生を、負の値は逆方向再生を示します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| flRate パラメーターが 0 です。 | |
| オブジェクトの 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 にリセットされます。
現在の再生レートを取得します。(IMFPMediaPlayer.GetRate)
| pflRate | FLOAT* | out | 再生レートを受け取ります。再生レートは、通常のレートに対する現在のレートの比率として表されます。たとえば、1.0 は通常の再生、0.5 は半分の速度、2.0 は 2 倍の速度を示します。正の値は順方向再生を、負の値は逆方向再生を示します。 |
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
サポートされている再生レートの範囲を取得します。
| fForwardDirection | BOOL | in | 順方向再生のレートを取得するには TRUE を指定します。逆方向再生のレートを取得するには FALSE を指定します。 |
| pflSlowestRate | FLOAT* | out | サポートされている最も遅いレートを受け取ります。 |
| pflFastestRate | FLOAT* | out | サポートされている最も速いレートを受け取ります。 |
戻り値
このメソッドは次のいずれかの値を返すことができます。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 現在のメディア項目は、要求された方向(順方向または逆方向)での再生をサポートしていません。 |
解説(Remarks)
再生レートは、通常のレートに対する現在のレートの比率として表されます。たとえば、1.0 は通常の再生速度、0.5 は半分の速度、2.0 は 2 倍の速度を示します。正の値は順方向再生を、負の値は逆方向再生を示します。
MFPlay プレーヤーオブジェクトの現在の再生状態を取得します。
| peState | MFP_MEDIAPLAYER_STATE* | out | 再生状態を MFP_MEDIAPLAYER_STATE 列挙体のメンバーとして受け取ります。 |
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは、プレーヤーオブジェクトがシャットダウンされた後でも呼び出すことができます。
IMFPMediaPlayer の多くのメソッドは非同期に完了します。非同期操作が保留中の間、現在の状態は操作が完了するまで更新されません。操作が完了すると、アプリケーションはイベントコールバックを受け取り、新しい状態はコールバックに渡される MFP_EVENT_HEADER 構造体に格納されます。
URL からメディア項目を作成します。
| pwszURL | LPWSTR | in | メディアファイルの URL を含む NULL 終端文字列。 |
| fSync | BOOL | in | TRUE の場合、メソッドは完了するまでブロックします。FALSE の場合、メソッドはブロックせず、非同期に完了します。 |
| dwUserData | UINT_PTR | in | メディア項目に格納するアプリケーション定義の値。この値をメディア項目から取得するには、IMFPMediaItem::GetUserData を呼び出します。 |
| ppMediaItem | IMFPMediaItem** | outoptional | IMFPMediaItem インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。fSync が TRUE の場合、このパラメーターは有効なポインターでなければなりません。bSync が FALSE の場合、このパラメーターは NULL でなければなりません。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 無効な引数です。 | |
| 無効な要求です。このエラーは、fSync が FALSE で、アプリケーションがコールバックインターフェイスを提供していない場合に発生することがあります。「解説」を参照してください。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 | |
| サポートされていないプロトコルです。 |
解説(Remarks)
このメソッドはメディア項目を再生用にキューに登録しません。項目を再生用にキューに登録するには、IMFPMediaPlayer::SetMediaItem を呼び出します。
CreateMediaItemFromURL メソッドは、同期または非同期のいずれかで呼び出すことができます。
- fSync が TRUE の場合、メソッドは同期的に完了します。IMFPMediaItem ポインターは ppMediaItem パラメーターで返されます。
- fSync が FALSE の場合、メソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_MEDIAITEM_CREATED です。イベントデータには、新しいメディア項目の IMFPMediaItem ポインターが含まれます。
CreateMediaItemFromURL を複数回非同期に呼び出した場合、同じ順序で完了する保証はありません。dwUserData パラメーターを使用して、作成されたメディア項目を保留中の要求と対応付けてください。
現在、このメソッドは、URL が次のいずれかのプロトコルを指定している場合に MF_E_UNSUPPORTED_SCHEME を返します: rtsp*、mms*、または mcast。MFPlay で Media Foundation ネットワークソースを使用する場合は、まず ソースリゾルバー を使用してソースを作成し、次に IMFPMediaPlayer::CreateMediaItemFromObject を呼び出します。
ソースの構成
内部的に、このメソッドはメディアソースを作成します。メディアソースを構成するには、次の手順を実行します。- IMFPMediaPlayer ポインターに対して QueryInterface を呼び出し、IPropertyStore インターフェイスを取得します。
- IPropertyStore::SetValue を呼び出して、メディアソースのプロパティを設定します。構成プロパティの一覧については、メディアソースの構成を参照してください。サードパーティのメディアソースはカスタムプロパティを定義する場合があります。
- CreateMediaItemFromURL メソッドを呼び出して、メディア項目を作成します。
オブジェクトからメディア項目を作成します。
| pIUnknownObj | IUnknown* | in | オブジェクトの IUnknown インターフェイスへのポインター。「解説」を参照してください。 |
| fSync | BOOL | in | TRUE の場合、メソッドは完了するまでブロックします。FALSE の場合、メソッドはブロックせず、非同期に完了します。 |
| dwUserData | UINT_PTR | in | メディア項目に格納するアプリケーション定義の値。この値をメディア項目から取得するには、IMFPMediaItem::GetUserData を呼び出します。 |
| ppMediaItem | IMFPMediaItem** | outoptional | IMFPMediaItem インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。fSync が TRUE の場合、このパラメーターは有効なポインターでなければなりません。bSync が FALSE の場合、このパラメーターは NULL でなければなりません。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 無効な引数です。 | |
| 無効な要求です。このエラーは、fSync が FALSE で、アプリケーションがコールバックインターフェイスを提供していない場合に発生することがあります。「解説」を参照してください。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
pIUnknownObj パラメーターには、次のいずれかを指定する必要があります。
- メディアソースへのポインター。メディアソースは IMFMediaSource インターフェイスを公開します。メディアソースに対して IMFMediaSource::Shutdown を呼び出すのは呼び出し元の責任です。
- バイトストリームへのポインター。バイトストリームは IMFByteStream インターフェイスを公開します。内部的に、メソッドは IMFSourceResolver::CreateObjectFromByteStream メソッドを呼び出して、バイトストリームからメディアソースを作成します。そのため、バイトストリームにはバイトストリームハンドラーが登録されている必要があります。バイトストリームハンドラーの詳細については、スキームハンドラーとバイトストリームハンドラーを参照してください。
CreateMediaItemFromObject メソッドは、同期または非同期のいずれかで呼び出すことができます。
- fSync が TRUE の場合、メソッドは同期的に完了します。IMFPMediaItem ポインターは ppMediaItem パラメーターで返されます。
- fSync が FALSE の場合、メソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_MEDIAITEM_CREATED です。イベントデータには、新しいメディア項目の IMFPMediaItem ポインターが含まれます。
CreateMediaItemFromObject を複数回非同期に呼び出した場合、同じ順序で完了する保証はありません。dwUserData パラメーターを使用して、作成されたメディア項目を保留中の要求と対応付けてください。
ソースの構成
pIUnknownObj がバイトストリームを指している場合、次の手順を実行してメディアソースを構成できます。- IMFPMediaPlayer ポインターに対して QueryInterface を呼び出し、IPropertyStore インターフェイスを取得します。
- IPropertyStore::SetValue を呼び出して、メディアソースのプロパティを設定します。構成プロパティの一覧については、メディアソースの構成を参照してください。サードパーティのメディアソースはカスタムプロパティを定義する場合があります。
- CreateMediaItemFromObject メソッドを呼び出して、メディア項目を作成します。
メディア項目を再生用にキューに登録します。
| pIMFPMediaItem | IMFPMediaItem* | in | メディア項目の IMFPMediaItem インターフェイスへのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 無効な引数です。 | |
| メディア項目に保護されたコンテンツが含まれています。MFPlay は現在、保護されたコンテンツをサポートしていません。 | |
| 音声再生デバイスが見つかりませんでした。このエラーは、メディアソースに音声が含まれているが、システムに音声再生デバイスがない場合に発生することがあります。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_MEDIAITEM_SET です。
メディア項目を作成するには、IMFPMediaPlayer::CreateMediaItemFromObject または IMFPMediaPlayer::CreateMediaItemFromURL を呼び出します。メディア項目は、その項目を作成したのと同じ MFPlay プレーヤーオブジェクトで使用する必要があります。メディア項目が別のプレーヤーオブジェクトのインスタンスで作成された場合、SetMediaItem は E_INVALIDARG を返します。
現在のメディア項目をクリアします。
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは再生を停止し、現在のメディア項目に対するプレーヤーオブジェクトの参照を解放します。
このメソッドは非同期に完了します。操作が完了すると、アプリケーションの IMFPMediaPlayerCallback::OnMediaPlayerEvent コールバックメソッドが呼び出されます。イベントの種類は MFP_EVENT_TYPE_MEDIAITEM_CLEARED です。
現在のメディア項目へのポインターを取得します。
| ppIMFPMediaItem | IMFPMediaItem** | out | メディア項目の IMFPMediaItem インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 現在のメディア項目がありません。 | |
| 現在のメディア項目がありません。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
IMFPMediaPlayer::SetMediaItem メソッドは非同期です。そのため、SetMediaItem が保留中の間、GetMediaItem は設定したばかりのメディア項目を返しません。代わりに、アプリケーションは IMFPMediaPlayerCallback インターフェイスを実装し、MFP_EVENT_TYPE_MEDIAITEM_SET イベントを処理する必要があります。詳細については、プレーヤーからのイベントの受信を参照してください。
前述の注意点は、MFPCreateMediaPlayer 関数でメディア項目を設定する場合にも当てはまります。
現在の音声ボリュームを取得します。
| pflVolume | FLOAT* | out | 音声ボリュームを受け取ります。ボリュームは減衰レベルとして表され、0.0 は無音、1.0 はフルボリューム(減衰なし)を示します。 |
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
音声ボリュームを設定します。
| flVolume | FLOAT | in | ボリュームレベル。ボリュームは減衰レベルとして表され、0.0 は無音、1.0 はフルボリューム(減衰なし)を示します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| flVolume パラメーターが無効です。 |
解説(Remarks)
再生開始前にこのメソッドを呼び出した場合、設定は再生開始後に適用されます。
このメソッドは、プレーヤーの音声セッションのマスターボリュームレベルを変更しません。代わりに、現在のメディア項目に属する音声ストリームのチャンネルごとのボリュームレベルを調整します。音声セッション内の他のストリームは影響を受けません。詳細については、音声セッションの管理を参照してください。
現在の音声バランスを取得します。
| pflBalance | FLOAT* | out | バランスを受け取ります。値は次の範囲(両端を含む)内の任意の数値を指定できます。
値が 0 の場合、左右のチャンネルは等しいボリュームになります。既定値は 0 です。 |
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
音声バランスを設定します。(IMFPMediaPlayer.SetBalance)
| flBalance | FLOAT | in | 音声バランス。値は次の範囲(両端を含む)内の任意の数値を指定できます。
値が 0 の場合、左右のチャンネルは等しいボリュームになります。既定値は 0 です。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| flBalance パラメーターが無効です。 |
解説(Remarks)
再生開始前にこのメソッドを呼び出した場合、設定は再生開始時に適用されます。
音声がミュートされているかどうかを照会します。(IMFPMediaPlayer.GetMute)
| pfMute | BOOL* | out | 音声がミュートされている場合は TRUE、そうでない場合は FALSE を受け取ります。 |
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
音声のミュートまたはミュート解除を行います。(IMFPMediaPlayer.SetMute)
| fMute | BOOL | in | 音声をミュートするには TRUE、ミュートを解除するには FALSE を指定します。 |
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
再生開始前にこのメソッドを呼び出した場合、設定は再生開始後に適用されます。
このメソッドは、プレーヤーが属する音声セッション全体をミュートしません。現在のメディア項目のストリームのみをミュートします。音声セッション内の他のストリームは影響を受けません。詳細については、音声セッションの管理を参照してください。
ビデオのサイズとアスペクト比を取得します。
| pszVideo | SIZE* | outoptional | ビデオのサイズをピクセル単位で受け取ります。このパラメーターは NULL にできます。 |
| pszARVideo | SIZE* | outoptional | ビデオのピクチャアスペクト比を受け取ります。このパラメーターは NULL にできます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 現在のメディア項目にビデオが含まれていません。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
少なくとも 1 つのパラメーターは NULL 以外でなければなりません。
パフォーマンスや画質を著しく低下させることなく表示できるビデオサイズの範囲を取得します。
| pszMin | SIZE* | outoptional | 望ましい最小サイズを受け取ります。このパラメーターは NULL にできます。 |
| pszMax | SIZE* | outoptional | 望ましい最大サイズを受け取ります。このパラメーターは NULL にできます。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 現在のメディア項目にビデオが含まれていません。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
少なくとも 1 つのパラメーターは NULL 以外でなければなりません。サイズはピクセル単位で指定されます。
ビデオのソース矩形を設定します。
| pnrcSource | MFVideoNormalizedRect* | in | ソース矩形を指定する MFVideoNormalizedRect 構造体へのポインター。この矩形は、ビデオのどの部分を表示するかを定義します。次のように定義される正規化座標で指定されます。
|
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 現在のメディア項目にビデオが含まれていません。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
MFPlay はソース矩形を引き伸ばしてビデオウィンドウ全体を埋めます。既定では、MFPlay はソースの正しいアスペクト比を維持し、必要に応じてレターボックス表示を行います。レターボックスの色は IMFPMediaPlayer::SetBorderColor メソッドで制御されます。
このメソッドは、現在メディア項目が設定されていない場合、または現在のメディア項目にビデオが含まれていない場合に失敗します。
再生開始前にビデオの位置を設定するには、MFP_EVENT_TYPE_MEDIAITEM_SET イベントのイベントハンドラー内でこのメソッドを呼び出します。詳細については、IMFPMediaPlayerCallback::OnMediaPlayerEvent を参照してください。
ビデオのソース矩形を取得します。
| pnrcSource | MFVideoNormalizedRect* | out | ソース矩形を指定する MFVideoNormalizedRect 構造体へのポインター。この矩形は、ビデオのどの部分を表示するかを定義します。次のように定義される正規化座標で指定されます。
|
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 現在のメディア項目にビデオが含まれていません。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
再生中にビデオのアスペクト比を維持するかどうかを指定します。
| dwAspectRatioMode | DWORD | in | MFVideoAspectRatioMode 列挙体の 1 つ以上のフラグのビットごとの OR。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 現在のメディア項目にビデオが含まれていません。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
このメソッドは、現在メディア項目が設定されていない場合、または現在のメディア項目にビデオが含まれていない場合に失敗します。
再生開始前にアスペクト比モードを設定するには、MFP_EVENT_TYPE_MEDIAITEM_SET イベントのイベントハンドラー内でこのメソッドを呼び出します。詳細については、IMFPMediaPlayerCallback::OnMediaPlayerEvent を参照してください。
現在のアスペクト比補正モードを取得します。このモードは、再生中にビデオのアスペクト比を維持するかどうかを制御します。
| pdwAspectRatioMode | DWORD* | out | MFVideoAspectRatioMode 列挙体の 1 つ以上のフラグのビットごとの OR を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 現在のメディア項目にビデオが含まれていません。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
ビデオが表示されるウィンドウを取得します。
| phwndVideo | HWND* | out | ビデオが表示されるアプリケーションウィンドウへのハンドルを受け取ります。 |
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ビデオウィンドウは、MFPlay プレーヤーオブジェクトを作成するために最初に MFPCreateMediaPlayer を呼び出したときに指定されます。
ビデオフレームを更新します。(IMFPMediaPlayer.UpdateVideo)
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 現在のメディア項目にビデオが含まれていません。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
アプリケーションのビデオ再生ウィンドウが WM_PAINT または WM_SIZE メッセージを受け取ったときに、このメソッドを呼び出します。このメソッドは 2 つの機能を実行します。
- 再生が一時停止または停止している間、ビデオフレームが確実に再描画されるようにします。
- 表示されるビデオをビデオウィンドウの現在のサイズに合わせて調整します。
例
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;
}
ビデオの境界線の色を設定します。
| Clr | COLORREF | in | 境界線の色を COLORREF 値として指定します。この値を作成するには RGB マクロを使用します。既定値は黒です。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 現在のメディア項目にビデオが含まれていません。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
解説(Remarks)
このメソッドは、現在メディア項目が設定されていない場合、または現在のメディア項目にビデオが含まれていない場合に失敗します。
再生開始前に境界線の色を設定するには、MFP_EVENT_TYPE_MEDIAITEM_SET イベントのイベントハンドラー内でこのメソッドを呼び出します。詳細については、IMFPMediaPlayerCallback::OnMediaPlayerEvent を参照してください。
ビデオの境界線の現在の色を取得します。
| pClr | COLORREF* | out | 境界線の色を COLORREF 値として受け取ります。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| 現在のメディア項目にビデオが含まれていません。 | |
| オブジェクトの Shutdown メソッドが呼び出されました。 |
音声またはビデオのエフェクトを再生に適用します。
| pEffect | IUnknown* | in | 次のいずれかの IUnknown インターフェイスへのポインター。
| ||||||
| fOptional | BOOL | in | エフェクトが省略可能かどうかを指定します。
|
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| このエフェクトは既に追加されています。 |
解説(Remarks)
pEffect パラメーターで指定するオブジェクトは、ビデオエフェクトまたは音声エフェクトのいずれかを実装できます。エフェクトは、メソッドの呼び出し後に設定されるメディア項目に適用されます。現在のメディア項目には適用されません。
各メディア項目について、エフェクトは一致する種類(音声またはビデオ)の最初に選択されたストリームに適用されます。メディア項目に同じ種類の選択されたストリームが 2 つある場合、2 番目のストリームにはエフェクトが適用されません。メディア項目にエフェクトの種類に一致するストリームが含まれていない場合、エフェクトは無視されます。たとえば、ビデオエフェクトを設定して音声のみのファイルを再生した場合、ビデオエフェクトは無視されますが、エラーは発生しません。
エフェクトは、アプリケーションがエフェクトを削除するまで、後続のすべてのメディア項目に適用されます。エフェクトを削除するには、IMFPMediaPlayer::RemoveEffect または IMFPMediaPlayer::RemoveAllEffects を呼び出します。
同じ種類(音声またはビデオ)のエフェクトを複数設定した場合、InsertEffect を呼び出した順序と同じ順序で適用されます。
リモート再生の最適化
音声およびビデオエフェクトは、リモート再生に使用される最適化と互換性がない場合があります。次の注意点は、再生中に実際に使用される音声またはビデオエフェクトにのみ当てはまります。- fOptional を FALSE に設定して音声またはビデオエフェクトを必須としてマークした場合、MFPlay はリモート再生の最適化を無効にします。
- それ以外の場合、すべての音声/ビデオエフェクトが省略可能としてマークされていると、MFPlay はリモート再生の最適化を有効にするためにエフェクトを破棄することがあります。
リモート最適化は、他の理由で無効になることもあります。たとえば、プレーヤーオブジェクトの作成時に 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;
}
IMFPMediaPlayer::InsertEffect メソッドで追加されたエフェクトを削除します。
| pEffect | IUnknown* | in | エフェクトオブジェクトの IUnknown インターフェイスへのポインター。InsertEffect メソッドに渡したのと同じポインターを使用します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次の表の値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
| エフェクトが見つかりませんでした。 |
解説(Remarks)
変更は、プレーヤーに次に設定されるメディア項目に適用されます。エフェクトは現在のメディア項目からは削除されません。
IMFPMediaPlayer::InsertEffect メソッドで追加されたすべてのエフェクトを削除します。
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
変更は、プレーヤーに次に設定されるメディア項目に適用されます。エフェクトは現在のメディア項目からは削除されません。
MFPlay プレーヤーオブジェクトをシャットダウンし、オブジェクトが使用しているリソースを解放します。
戻り値
このメソッドが成功すると、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドを呼び出した後、ほとんどの IMFPMediaPlayer メソッドは MF_E_SHUTDOWN を返します。また、このプレーヤーオブジェクトのインスタンスから作成されたメディア項目はすべて無効化され、ほとんどの IMFPMediaItem メソッドも MF_E_SHUTDOWN を返します。
プレーヤーオブジェクトは、参照カウントが 0 に達すると自動的にシャットダウンします。すべての参照が解放される前にプレーヤーをシャットダウンするには、Shutdown メソッドを使用できます。
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 指定が可能。#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 sptr,sptr #comfunc global IMFPMediaPlayer_GetPosition 8 sptr,sptr #comfunc global IMFPMediaPlayer_GetDuration 9 sptr,sptr #comfunc global IMFPMediaPlayer_SetRate 10 float #comfunc global IMFPMediaPlayer_GetRate 11 sptr #comfunc global IMFPMediaPlayer_GetSupportedRates 12 int,sptr,sptr #comfunc global IMFPMediaPlayer_GetState 13 sptr #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 sptr #comfunc global IMFPMediaPlayer_SetVolume 20 float #comfunc global IMFPMediaPlayer_GetBalance 21 sptr #comfunc global IMFPMediaPlayer_SetBalance 22 float #comfunc global IMFPMediaPlayer_GetMute 23 sptr #comfunc global IMFPMediaPlayer_SetMute 24 int #comfunc global IMFPMediaPlayer_GetNativeVideoSize 25 sptr,sptr #comfunc global IMFPMediaPlayer_GetIdealVideoSize 26 sptr,sptr #comfunc global IMFPMediaPlayer_SetVideoSourceRect 27 sptr #comfunc global IMFPMediaPlayer_GetVideoSourceRect 28 sptr #comfunc global IMFPMediaPlayer_SetAspectRatioMode 29 int #comfunc global IMFPMediaPlayer_GetAspectRatioMode 30 sptr #comfunc global IMFPMediaPlayer_GetVideoWindow 31 sptr #comfunc global IMFPMediaPlayer_UpdateVideo 32 #comfunc global IMFPMediaPlayer_SetBorderColor 33 int #comfunc global IMFPMediaPlayer_GetBorderColor 34 sptr #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が無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。